◆理解(*p)++、*p++、*(p++)、p++的含义。
◆执行p++后指针拨动的单元数(由元素类型决定)
7.一维数组作为函数形参,实际上就是一个指针变量,如:
func(inta[],intn);
等同于func(int*a,intn);
◆函数声明的几种变通形式。
◆所以指针a在函数中值可以改变,如*a++,不同于函数内定义的数组如:
intb[5];这里b是指针常量。
8.指针与字符串:
char*p,s[50]=“fdjfjdfj”;p=s;
◆可用p间接访问字符串,如指针法:
for(;*p!
=‘\0’;p++)或下表法:
for(i=0;p[i]!
=‘\0’;i++)
9.指针形参在函数间传递字符串:
voidcopy(char*s1,char*s2){while(*s1++=*s2++);}
◆调用时用字符数组名或指向某字符串的指针做实参,
如:
char*p=“sdgygkh”;charss[50];func(ss,p);
◆函数调用的灵活形式:
func(ss+2,p)或func(ss,p+2)
◆注意:
输入字符串常用gets函数,但参数应是字符数组名,或已指向某字符数组的指针,如:
chars[50],*p;gets(s);是正确的,而gets(p)是错误的,因为p没被赋地址值,无任何指向。
改正:
p=s;gets(p);
第8章结构
重点:
结构体和共用体的定义和使用
难点:
结构体和共用体的使用
知识点:
1.结构体:
struct,.定义的几种形式。
成员可以是任意类型。
成员引用:
结构体变量名.成员名
◆占用内存大小为:
各成员占用内存之和。
◆结构体数组:
同普通数组一样使用。
初始化时注意双重括号。
◆结构体指针:
(*p).成员名或p->成员名
注意:
只能用结构体变量地址赋值,不能赋某成员的地址,如:
p=&stu.name;是错误的。
◆通常定义变量或形参时必须加上struct,如:
voidfunc(structstudent*p)
{structstudenta[4],temp;……}
2.共用体:
union,定义形式同结构体。
成员引用:
共用体变量名.成员名
◆占用内存大小为:
共用体中较长的成员的长度。
◆某一时刻只有一个成员起作用,最后一个存放的成员值有效。
◆结构体类型与共用体类型可互相嵌套使用,即结构体成员的类型也可以是共用体类型,反之亦然。
3.枚举类型:
如:
enumweek{sun,mon,tues,wen,thur,fri,sat}day;
◆枚举元素就是枚举变量的可能取值,如:
day=mon;
◆枚举元素视为常量,其值就是序号(0~n-1)。
也可以在定义时改变其值,如:
enums{a=3,b=1,c=2};
4.类型标识符自定义:
typedef,如:
typedefintINTEGER;typedefstruct{……}STU;
typedefintARR[10];以后可直接使用INTEGER、ARR、STU类型进行变量定义,书写简略。
◆注意:
只能为类型另起新名,不能创造新类型,也不能为变量或函数重新命名(define)。
第9章文件
重点:
文件的类型,文件的操作
难点:
文件的操作
知识点:
1.流式文件:
文本文件、二进制文件。
◆文本文件:
若干字符序列,较长,可用type命令或记事本查看。
◆二进制文件:
若干字节序列,短,存取速度快,不能用type或记事本等查看。
2.文件操作:
读操作、写操作。
使用有关文件函数来完成,需包含头文件stdio.h
3.操作步骤:
①定义文件类型指针②打开文件③检测指针④读/写⑤关闭文件。
4.打开文件时的使用方式各6种。
5.读/写函数:
fgetc(fp)、fputc(ch,fp)、fread(*p,size,n,fp)、fwrite(*p,size,n,fp)、fgets(*str,n,fp)、fputs(*str,fp)
fscanf(fp,“格式控制符”,地址列表)、fprintf(fp,“格式控制符”,输出列表),以上函数是简要书写。
6.三个标准设备文件指针:
stdin、stdout、stderr
7、有关文件操作函数ferror(fp)、feof(fp)、clearerr(fp);
10.控制循环:
while((ch=fgetc(fp))!
=EOF)或while(!
feof(fp))
EOF是在头文件中定义的符号常量,值为-1代表文件结束。
复习题
一、单选题
1.C语言是在语言的基础上产生的。
A.AB.BC.DD.E
2.在C语言中,每个语句必须以结束。
A.回车符B.冒号C.逗号D.分号
3.标识符和关键字间,要用隔开。
A.回车符B.冒号C.空格D.分号
4.用C语言编写的源文件经过编译,若没有产生编译错误,则系统将。
A.生成可执行目标文件B.生成目标文件
C.输出运行结果D.自动保存源文件
5.下列说法中正确的是。
A.由于C源程序是高级语言程序,因此一定要在TC软件中输入
B.由C源程序是字符流组成,因此可以作为文本文件在任何文本编辑的软件中输入
C.由于C程序是高级语言程序,因此输入后即可执行
D.由于C程序是高级语言程序,因此它由命令组成
6.下列说法中正确的是。
A.C语言程序由主函数和0个或多个函数组成
B.C语言程序由主程序和子程序组成
C.C语言程序由子程序组成
D.C语言程序由过程组成
7.下列说法中错误的是。
A.主函数可以分为两个部分:
主函数说明部分和主函数体
B.主函数可以调用任何非主函数的其他函数
C.任何非主函数可以调用其他任何非主函数
D.程序可以从任何非主函数开始执行
8.以下选项中,正确的C语言整型常量是。
A.32LB.510000C.-1.00D.567
9.以下选项中,是不正确的C语言字符型常量。
A.'a'B.'\x41'C.'\101'D."a"
10.在C语言中,字符型数据在计算机内存中,以字符的形式存储。
A.原码B.反码C.ASCII码D.BCD码
11.字符串的结束标志是。
A.0B.'0'C.'\0'D."0"
12.算术运算符、赋值运算符和关系运算符的运算优先级按从高到低依次为。
A.算术运算、赋值运算、关系运算B.算术运算、关系运算、赋值运算
C.关系运算、赋值运算、算术运算D.关系运算、算术运算、赋值运算
13.逻辑运算符中,运算优先级按从高到低依次为。
A.&&,!
,||B.||,&&,!
C.&&,||,!
D.!
,&&,||
14.表达式!
x||a==b等效于。
A.!
((x||a)==b)B.!
(x||y)==bC.!
(x||(a==b))D.(!
x)||(a==b)
15.设整型变量m,n,a,b,c,d均为1,执行(m=a>b)&&(n=c>d)后,m,n的值是。
A.0,0B.0,1C.1,0D.1,1
16.intb=0,x=1;执行语句if(x++)b=x+1;后,x,b的值依次为。
A.2,3B.2,0C.3,0D.3,2
17.设有语句inta=3;,则执行了语句a+=a-=a*=a;后,变量a的值是。
A.3B.0C.9D.-12
18.在以下一组运算符中,优先级最低的运算符是。
A.*B.!
=C.+D.=
19.设整型变量i值为2,表达式(++i)+(++i)+(++i)的结果是。
A.6B.12C.15D.表达式出错
20.若已定义x和y为double类型,则表达式x=1,y=x+3/2的值是。
A.1B.2C.2.0D.2.5
21.sizeof(double)的结果值是。
A.8B.4C.2D.出错
22.设a=1,b=2,c=3,d=4,则表达式:
a
a:
ca:
d的结果为。
A.4B.3C.2D.1
23.设a为整型变量,不能正确表达数学关系:
10A.10C.a>10&&a<15D.!
(a<=10)&&!
(a>=15)
24.设f是实型变量,下列表达式中不是逗号表达式的是。
A.f=3.2,1.0B.f>0,f<10C.f=2.0,f>0D.f=(3.2,1.0)
25.设ch是char型变量,其值为'A',则下面表达式的值是。
ch=(ch>='A'&&ch<='Z')?
(ch+32):
ch
A.AB.aC.ZD.Z
26.以下运算符中,结合性与其他运算符不同的是。
A.++B.%C./D.+
27.以下用户标识符中,合法的是。
A.intB.nitC.123D.a+b
28.C语言中,要求运算对象只能为整数的运算符是。
A.%B./C.>D.*
29.PC机中,'\n'在内存占用的字节数是。
A.1B.2C.3D.4
30.字符串"ABC"在内存占用的字节数是。
A.3B.4C.6D.8
31.要为字符型变量a赋初值,下列语句中哪一个是正确的。
A.chara="3";B.chara=’3’;C.chara=%;D.chara=*;
32.下列不正确的转义字符是。
A.\\B.\'C.074D.\0
33.printf("f=%3.2f%%",3.478);的输出结果是。
A.f=3.48%B.f=3.5%C.f=3.48%%D.f=347.8%
34.printf("%c,%d",'a','a');的输出结果是。
A.a,97B.a97C.97,aD.97a
35.scanf("%c",&a);若要给变量输入大写字母A,则以下正确的输入是。
A.'A'B.A\C."A"D.以上都不对
36.若一个int类型的数据占2字节,则程序段:
intx=-1;printf("%u,%d",x,x);的输出结果是。
A.65535,-1B.-1,65535C.32767,32768D.32768,32767
37.在TC中,getchar、putchar、printf、scanf四个函数,均包含在头文件中。
A.math.hB.stdio.hC.stbio.hD.stdlib.h
38.复合语句是用括起来的语句组。
A.()B.[]C.{}D.<>
39.下列格式符中,哪一个可以用于以八进制形式输出整数。
A.%dB.%8dC.%oD.%ld
40.下列格式符中,哪一个可以用于以十六进制形式输出整数。
A.%16dB.%8xC.%d16D.%d
41.a是int类型变量,c是字符变量,下列输入语句中哪一个是错误的。
A.scanf("%d,%c",&a,&c);B.scanf("%d%c",a,c);
C.scanf("%d%c",&a,&c);D.scanf("d=%d,c=%c",&a,&c);
42.要使doublex;longa;的数据能正确的输出,输出语句应是。