1、C 语言复习提纲第一章1.程序设计语言:机器语言、汇编语言、高级语言。2.高级语言翻译成机器语言的两种方式:编译方式、解释方式。3.算法+数据结构=程序4.结构化程序设计的三种基本结构:顺序结构、分支(选择)结构、循环结构5.算法的表示方法:自然语言、传统的程序流程图、N-S 流程图。6.结构化程序设计的 32 字原则:7.C 语言的产生及发展:UNIX 操作系统8.C 语言的特点 P13 页:9.C 语言由函数组成,有且仅有一个 main 函数。10.函数:说明部分、函数体。11.一条复杂语句分行书写,用反斜杠()续行。12.注释用/*/第二章1.单字符输入/出:getchar()、putc
2、har(字符变量)。2.字符串:gets(字符数组名)、puts(数组名)。3.格式化输入: scanf(“格式控制符”,地址列表);格式控制符:%c、 %d 、 %o 、 %x、 %s、 %f 若输入 long 型、double 型应加 l,如%ld、 %lo、 %lf 格式%s 输入字符串不包含空格,且对应地址表列是字符数组名。 默认分隔符:空格、回车、Tab 键 (也可按域宽截取)(也可按域宽截取) 格式控制符间不宜加其它字符,如加入其它字符,输入时应原样输入,否则数据接收错误。如:scanf(“%d, %d”,&a,&b); 输入数据时两数据间要有逗号;scanf(“%d %d”,&a
3、,&b); %d 间有两个空格,则输入数据时至少有两个空格。 输入函数中%f 格式不能带小数,如:scanf(“%7.2f”,&a)是错误的。 %c 格式输入单字符,空格字符和转义字符都作为有效字符接收。 %*d 表示跳过它对应的输入数据。4.格式化输出:printf(“格式控制符”,输出列表); 格式控制符部分可加入其它字符,原样输出。如:提示语或使输出结果清楚显示 输出列表:可以是变量、常量、表达式、函数调用等。 转义字符:P 19 页,以斜杠()开始,作为一个字符,如求字符串长度:“jkgkbl0knlj”,长度为 7。 注意:输出 long 、double 型数据,用%ld、%lf 可
4、设定输出宽度,m 和 n,如:%5d、%6.2f、%.2f 负号表示域内向左对齐,如:%-12d第三章1.常量: 整型常量:235、0235、-0x235(前可加负号),长整型:-12l、-065l、0x55l 等。 实型常量:小数形式、指数形式。 字符常量:用单引号,如c(注意转义字符)。 字符串常量:用双引号,如“hglhg”、“a”,内存占用为实际长度加 1。 符号常量:无参宏(#define)。2.变量: 标识符命名规则:4 条(P37 页)。 各种类型变量的长度。 数据类型转换:自动、强制。 注:强制类型转换只得到所需类型的结果值,原变量或表达式的类型仍为原类型。如(float)(x
5、+y)3.各种运算符运算规则及其优先级 P51 页。4.补充-逻辑表达式的优化运算: &运算:只要算出第一个表达式为 0,第二个表达式不再运算。 |运算:只要算出第一个表达式为 1,第二个表达式不再运算。如:int i=0,j=0,a=6; if (+i0)|(+j0) a+; printf(%d%d%d”,i,j,a); 结果 i 为 1,j 为 0,a 为 7。5.其它运算符:条件运算、逗号运算、长度运算符(形式:sizeof 表达式 或 sizeof (数据类型))第四章1.if、while、for 中的表达式,一般是逻辑或关系表达式,也可以是任意类型表达式。如while(a=5).2.
6、如果有多条语句,必须用大括号括起,构成复合语句。3.switch 语句中 case 后面只能是常量值;若执行完某 case 后的语句没遇到 break,则继续执行下一个 case 语句。4.循环程序:注意循环变量的初值、修正值、循环条件等,以及循环中用到的某些变量赋初值,如求累加和变量。5.一般是先判断条件,再执行循环体;但 dowhile 语句是先执行一遍循环体,再判断条件。6.break、continue 语句。7.本章主要是算法构思。(先考虑好需要那些变量,即数据结构,再考虑怎样求解问题)第五章1.数组定义:int a10;或 int aN(N 需要事先定义为符号常量:#define N
7、 10 ); 数组长度必须是常量值,不能是变量,可以是在程序开始前定义的符号常量,进行长度定义。2.下标引用:0N-1,切记不能引用到 N。(int a5; a5=10;这种引用是错误的)3.数组初始化时可省略长度定义。4.数组定义后如没有给任何一个元素赋初值,对于 static 类型,各元素初值为 0;对于 auto类型,各元素值不定。5.数组不能整体赋值。数组中各元素值的输入/出,应使用循环程序逐个输入/出;字符数组例外(gets、puts)。6.数组中的两种排序方法: 冒泡法:外循环为 i=0;i 搜索系统标准目录#include “文件名” 先搜索当前目录, 找不到再搜索系统标准目录第
8、八章1.指针的基本概念:指针地址;2.指针常量:某已知变量的地址,或数组名等,:int a,b5;此时&a 和 b 就是指针常量(固定值)。3.指针变量:如 int a,*p=&a; char s9,*q=s; 赋值:必须赋地址值,如 int a,*p; p=&a;如 p=2001;是错误的。4.间接访问:*p=5;等同于 a=5;5.指针作为函数的参数,传递的是实参变量的地址, 如:void func(int *p) 调用时用某变量的地址常量,或指向该变量的指针作为实参,如主调函数中有定义 int a,*q;q=&a;则可用&a 或 q 作为实参进行调用,即 func(&a);或 func(
9、q); 都是将变量 a 的地址传递给形参指针 p,使指针 p 指向变量 a。函数中使用*p 就是对 a 的间接访问,就可以改变 a 的值,或者将结果放入 a 中。但形参变量本身改变,反过来不会影响实参指针值。6.指针与一维数组:int a10,*p=a;则 a 代表数组首地址,是指针常量, 元素的表示方法:ai、*(a+i)、 pi、*(p+i) 元素地址:&ai、a+i、 &pi、p+I 区别:a 实指针常量,只不能变,而 p 是指针变量,可进行增减运算;所以常通过 p 的增减运算来快速访问数组 a,如:while(p成员名成员名只能用结构体变量地址赋值,不能赋某成员的地址,如:p=&stu
10、.name;是错误的。 通常定义变量或形参时必须加上 struct,如: void func(struct student *p) struct student a4,temp;2.共用体:union,定义形式同结构体。成员引用:共用体变量名成员名 占用内存大小为:共用体中较长的成员的长度。 某一时刻只有一个成员起作用,最后一个存放的成员值有效。结构体类型与共用体类型可互相嵌套使用,即结构体成员的类型也可以是共用体类型,反之亦然。3.枚举类型:如:enum weeksun,mon,tues,wen,thur,fri,satday; 枚举元素就是枚举变量的可能取值,如:day=mon; 枚举元素
11、视为常量,其值就是序号(0 n-1)。也可以在定义时改变其值,如:enum sa=3,b=1,c=2;4.类型标识符自定义:typedef 如:typedef int INTEGER; typedef struct STU;typedef int ARR10; 以后可直接使用 INTEGER、ARR、STU 类型进行变量定义,书写简略。 注意:只能为类型另起新名,不能创造新类型,也不能为变量或函数重新命名(define)。第十章 文件(内容不作期末考试要求,但是等级考试要考)1.流式文件:文本文件、二进制文件。 文本文件:若干字符序列,较长,可用 type 命令或记事本查看。 二进制文件:若干
12、字节序列,短,存取速度快,不能用 type 或记事本等查看。2.文件操作:读操作、写操作。使用有关文件函数来完成,需包含头文件 stdio.h3.操作步骤: 定义文件类型指针 打开文件 检测指针 读/写 关闭文件。4.打开文件时的使用方式各 6 种,P 207 页。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, “格式控制符” ,输出列表),以上函数是简要书写,
13、具体参考 P238 页。6.三个标准设备文件指针:stdin、stdout、stderr7、有关文件操作函数 ferror(fp)、feof(fp)、clearerr(fp);10.控制循环:while(ch=fgetc(fp) !=EOF) 或 while(!feof(fp)EOF 是在头文件中定义的符号常量,值为-1 代表文件结束。语言程序设计第 13 章练习题一、选择题1、一个语言程序总是从A、主过程开始执行 B、主函数开始执行C、子程序开始执行 D、主程序开始执行2、若 num、a、b 和 c 都是 int 型变量,则执行表达式 num=(a=4,b=16,c=32)后 num 的值为
14、A、4 B、16 C、32 D、523、下面四个选项中,均是 C 语言关键字的选项是A、auto enum includeB、switch typedef continueC、signed union scanfD、if struct type4、下面四个选项中,均是合法整型常量的选项是A、160 -0xffff 011 B、-0xcdf 01a 0xeC、-01 986,012 0668 D、-0x48a 2e5 0x5、下面四个选项中,均是合法浮点数的选项是A、+1e+1 5e-9.4 03e2B、-.60 12e-4 -8e5C、123e 1.2e-.4 +2e-1D、-e3 .8e-4
15、 5.e-06、下面四个选项中,均是合法转义字符的选项是A、 n B、 017 “C、018 f xab D、0 101 xlf7、下面正确的字符常量是A、X17 B、80 C、 D、“n“8、下面四个选项中,均是正确的八进制数和十六进制数的选项是A、-10 0x8f -011B、0abc -017 0xcC、010 -0x11 0xf1D、0a12 -0x123 -0xa9、下面四个选项中,均是正确的数值常量或字符常量的选项是A、0.0 0f 8.9e &B、“a“ 3.9E-2.5 1e1 “C、3 011 0xFF00 0aD、+001 0xabcd 2e2 50.10、若有代数式 ,则
16、正确的 C 语言表达式是x3cosln2A、2*ln(x)*cos(x)/3*xB、2*ln(x)*cos(x)/(3*x)C、2*log(x)*cos(x)/3*xD、2*log(x)*cos(x)/(3*x)11、若有说明语句:char ch1=065;char ch2=“2“;char ch3=2;则:ch1 中,ch2 中,ch3 中A、包含 1 个字符 B、包含 2 个字符C、包含 3 个字符 D、字符个数不确定,说明不正确12、若有运算符:、*=、?:、%、sizeof,则将它们按运算的优先级排列的正确次序为(由低至高)A、*=?:%sizeof B、?: *=%sizeofC、*
17、=?: sizeof% D、*=?: %sizeof13、若有以下类型说明语句:char a; int b; float c; double d; 则表达式 a*b+d-c 的结果类型为A、float B、char C、int D、double14、若有变量说明:int a=0,b=0,c=0;,以下符合 C 语言语法的赋值表达式是A、a=9+b+c=a+9 B、a=9+b;c=a+9;C、a=(9+b,b+) D、a=9+b+=a+715、已知字母 A 的 ASCII 码为(65) 10,变量 ch1 为字符型,则执行语句 ch1=A+6-3;后,ch1 中的值为A、D B、68 C、一个不
18、确定的值 D、C16、以下运算符中优先级最高的运算符是A、& B、+ C、?: D、!=17、若有定义:int k=7;float a=2.5,b=4.7;则表达式 a+k%3*(int)(a+b)%2/4 的值是A、2.500000 B、2.7500000C、3.500000 D、0.00000018、sizeof(float)是A、双精度型表达式 B、一个整型表达式C、一个函数调用 D、一个不合法的表达式19、设变量 y 为 float 类型,x 为 int 类型,则以下能实现将 y 中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是A、y=(y*100+0.5)/100.0B、x
19、=y*100+0.5,y=x/100.0C、y=y*100+0.5/100.0D、y=(y/100+0.5)*100.020、设 int 类型的数据长度为 2 个字节,则 unsigned int 类型数据的取值范围是A、0255 B、065535C、-32768+32767 D、-256+25521、若有以下定义,则能得到值为 3 的表达式是(int m=7,n=12)A、n%=(m%=5) B、n%=(m-m%5)C、n%=m-m%5 D、(n%=m)-(m%=5)22、若有说明:int a=1,b=2,c=3,d=4;则表达式 a3.5A、scanf(“%f,%f“,&x1,&x2);B
20、、scanf(“%f%f“,&x1,&x2);C、scanf(“%3.2f %2.1f“,&x1,&x2);D、scanf(“%3.2f%2.1f“,&x1,&x2);26、若运行以下程序时,从键盘输入 25,13,10,则输出结果为main( )int a1,a2,a3;scanf(“%d%d%d“,&a1,&a2,&a3);printf(“a1+a2+a3=%dn“,a1+a2+a3);A、a1+a2+a3=48 B、a1+a2+a3=25B、a1+a2+a3=10 D、不确定值27、已知 a、b、c 为 int 类型变量,若有输入语句:scanf(“a=%db=%dc=%d“,&a,&b
21、,&c);为使 a 值为 1,b 值为 3,c 值为 2,从键盘输入数据的正确形式应当是A、132 B、a=1b=3c=2C、132 D、a=1b=3c=228、以下能正确定义整型变量 x、y 和 z 并为其赋初值 5 的语句是A、int x=y=z=5; B、int x,y,z=5;C、int x=5,y=5,z=5; D、x=5,y=5,z=5;29、执行下面程序段后,x 的值是int x;printf(“%dn“,(x=3*5,x+5);A、10 B、15 C、20 D、530、下面程序段的输出结果是int a=023;printf(“%dn“,-a);A、23 B、17 C、18 D、
22、2431、已知 ch 是字符型变量,则不正确的赋值语句是A、ch=5+9; B、ch=0;C、ch=7+9; D、ch=a+b;32、设 x,y 是 float 型变量,则不正确的赋值语句是A、+x; B、y=int(5);C、x*=y+1; D、x=y=0;33、设有说明:double b=0.5,c=1.5; int a=10;则正确使用了 C 语言库函数的赋值语句是A、c=asin(c)+fabs(a); B、b=log10(b)+pow(b);C、c=sqrt(b-c); D、a=(int)(atan2(double)a,b)+exp(b-0.2);34、以下程序段的输出结果是int
23、i=1,j=4,k=2;float x=5.5,y=9.0,z;z=(i+j)/k+sqrt(double)y)*1.2/k+x;printf(“%fn“,z);A、9.800000 B、9.300000C、8.500000 D、8.00000035、若 a 为 int 类型变量,则执行以下程序段后 a 的值为a=5;a*=a/=a+;A、2 B、1 C、40 D、336、若 a 和 b 均为 int 型变量,则执行以下程序断后 x 的输出是x=15;y=15;printf(“%dn“,x%=(y%=2);A、0 B、1 C、6 C、1237、若 x 为 unsigned int 类型变量,则
24、执行以下程序段后 x 的值是x=65535;printf(“%dn“,x);A、65535 B、1 C、无定值 D、-138、以下语句的执行结果是printf(“%dn“,NULL);A、1 B、0 C、-1 无定值39、若 x 为 int 类型变量,则执行以下程序段后的输出结果是x=0xDEF;printf(“%4d,%4o,%4xn“,x,x,x);A、3567,6757,def B、3567,6757,xdefC、3567,06757,0xdef D、3567,6757,0def40、若 a、b、c 均为 int 型变量,则执行以下程序段后的输出结果为b=(a=10,a+5,c=10);
25、printf(“a=%d,b=%d,c=%dn“,a,b,c);c=(a=10,b=5,a+b);printf(“a=%d,b=%d,c=%dn“,a,b,c);A、a=10,b=15,c=10 B、a=10,b=10,c=10a=10,b=5,c=10 a=10,b=5,c=10C、a=10,b=10,c=10 D、a=10,b=10,c=10a=10,b=5,c=15 a=10,b=5,c=541、若 a1、a2、a3、a4 均为 char 类型变量,则执行以下程序段后的输出结果为a1=1; a2=2; a3=3; a4=4;printf(“%1cn“,a1);printf(“%2cn“,
26、a2);printf(“%3cn“,a3);printf(“%4cn“,a4);A、1 B、1 C、1 D、输出格式的描述符不正确2 2 02 3 3 003 4 4 000442、执行语句 printf(“The programs name is c:toolsbook.txt“);后的输出是A、The programs name is c:tools book.txtB、The programs name is c:tools book.txtC、The programs name is c:tools book.txtD、The programs name is c:toolook.tx
27、t43、设 a、b、c、d 均是 int 类型变量,为了使以下程序段的输出为:1234+123+12+1,正确的输入形式应当是scanf(“%4d+%3d+%2d+%1d“,&a,&b,&c,&d);printf(“%4d+%3d+%2d+%1d“,a, b, c, d);A、1234123121 B、1234123412341234C、1234+1234+1234+1234 D、1234+123+12+144、设 c1、c2 均是 char 类型变量,则以下不正确的函数调用是A、scanf(“c1=%cc2=%c“,&c1,&c2); B、getchar( )C、putchar(c2); D
28、、putchar(c1,c2)45、逻辑运算符两侧运算对象的数据A、只能是 0 或 1 B、只能是 0 或非 0 正数C、只能是整型或字符型数据 D、可以是任何类型的数据46、判断 char 型变量 c1 是否为大写字母的正确表达式是A、A=A)&(c1=A)&(c1=c1)47、执行以下程序段后的 a 值是,b 的值是,c 的值是int a=5,b=6,c=1,x=2,y=3,z=4;c=(a=cx)&(b=yz);A、0 B、6 C、1 D、548、设 i、j、和 k 是 int 型变量,且 i=3,j=4,k=5,则以下值为 0 的表达式是A、i&j B、i=A&chy)+(y!=z)|
29、(x+y)&(y-z) 、x+-y+(+z) 18、设 x、y、z 均为 int 类型变量,请用 C 语言的表达式描述以下命题。、x 或 y 中有一个小于 z、x、y 和 z 中只有两个为负数、y 是奇数 19、以下程序的输出结果为main( )int x,y,z=246;x=z/100%9;y=(-1)&(-1);printf(“%d,%dn“,x,y);语言程序设计第 4 章练习题一、选择题51、以下正确的 if 语句是A、if (n0) printf(“%f“,n)printf(“%f“,-n);B、if (n0) n=n+m; printf(“%f“,n); else printf(“
30、%f“,-n);C、if (n0) n=n+m; printf(“%f“,n); ;else printf(“%f“,-n);D、if (n0) n=n+m; printf(“%f“,n) ;else printf(“%f“,-n);52、以下程序main( ) int x1=3, x2=0, x3=0;if(x1=x2+x3)printf(“* * * *“);else printf(“# # # #“); A、输出:* * * * B、输出:# # # #C、存在语法错误 D、无输出结果53、为了避免在嵌套的条件语句 if-else 中产生二义性,C 语言规定:else 子句总是与A、缩排
31、位置相同的 if 配对 B、其之前最近且不带 else 的 if 配对C、其之前最近的 if 配对 D、第一个 if 配对54、若 w、x、y、z、k 均为 int 类型变量,则执行下面语句后的 k 的值是w=1; x=2; y=3; z=4;k=(w0) x=1;else x=0;-1 (a0) 0 (a0)0 (a0) 0 (a0)56、以下关于 switch 语句和 break 语句的描述中正确的是A、在 switch 语句中必须使用 break 语句B、break 语句只能用于 switch 语句体中C、break 语句只能用于循环语句中D、在 switch 语句中使用 break 语
32、句或 continue 语句的作用相同57、设有说明:int a=1,b=0; 则执行以下语句后的输出结果是switch(a) case 1:switch(b) case 0: printf(“* 0 *n“); break;case 1: printf(“* 1 *n“);break;case 2: printf(“* 2 *n“); break;A、* 0 * B、* 0 * 2 *C、* 0 * D、switch 语句中存在语法错误* 1 * * 2 *58、设有程序段int x=10;while (x=0)x=x-1;A、while 循环执行 10 次 B、循环是无限循环C、循环体语句
33、一次也不执行 D、循环体语句只执行一次59、语句 while (!y)中的表达式 !y 等价于A、y=0 B、y!=1 C、y!=0 D、y=160、以下关于 do-while 循环不正确的描述是A、d0-while 的循环体至少执行一次B、do-while 循环由 do 开始,用 while 结束,在 while (表达式)后面不能写分号C、在 do-while 循环体中,一定要有能使 while 后面表达式的值变为零(“假“)的操作D、do-while 的循环体可以是复合语句61、设 x、y 均是 int 类型变量,且 x 值为 100,则关于以下 for 循环的正确判断是for (y=1
34、00; x!=y; +x,y+)printf(“*n“);A、循环体只执行一次 B、是无限循环C、循环体一次都不执行D、for 语句中存在语法错误62、以下程序段中的 do-while 循环m=-1;do m=m*m;while(!m);A、是死循环 B、执行二次 C、执行一次 D、有语法错误63、以下关于 for 循环的正确描述是A、for 循环只能用于循环次数已经确定的情况B、for 循环是先执行循环体语句,后判断表达式C、在 for 循环中,不能用 break 语句跳出循环体D、for 循环的循环体语句中,可以包含多条语句,但必须用花括号括起来64、语句 for (表达式 1; ; 表达
35、式 3)等价于A、for (表达式 1; 0 ; 表达式 3)B、for (表达式 1; 1 ; 表达式 3)C、for (表达式 1; 表达式 1; 表达式 3)D、for (表达式 1; 表达式 3; 表达式 3)65、若 k 为整型变量,则以下 for 循环的执行次数是for (k=2; k=0; )printf(“%d“,k-);A、无限次 B、0 次 C、1 次 D、2 次66、以下程序段的执行结果是int x=-3;do printf(“%dn“, x+);while(!x);A、-3 D、-3B、-2 -2C、陷入死循环 -167、执行以下程序段后,y 的值是,x 的值是int
36、x=1, y=10;do y-=x;x+;while(y-=10) break;if (a%2=1) a+=5;continue;a-=3; A、10 B、6 C、7 D、8 E、469、以下程序段的执行结果是int a, b;for (a=1; a5; a+=2) for (b=1; b5; b+)printf(“%2d“,a*b);if (b=5)printf(“n“);A、 1 2 3 4 B、1 2 3 43 6 9 12 6 9 12 15C、 2 3 4 6 9 12D、 2 3 46 9 1210 15 2070、以下程序段中是死循环的是A、int n=1; B、int n=1;while (!n) do n-;n+; while(n);C、int n=1; D、for (n=5; n1; ) ;do n+;while(n);71、下面程序的运行结果是main( ) int m=0;while (m=2) m+;printf(“%dn“, m);A、1 B、 12C、1 D、12 23 3472、以下能正确计算 12310 的程序段是A、do B、do k=1; n=1; k=1; n=0;n=n*k; n=n*k;k+; k+;while(k=10); while(k=10);C、k=1; n=1; D、k=1; n=0;