《C语言习题集》word版.doc
第一部分 数据类型、运算符、表达式2第二部分 结构化程序设计的三大结构12第三部分 数组29第四部分 结构体、共用体、枚举类型45第五部分 函数52第六部分 指针68第一部分 数据类型、运算符、表达式及简单的输入输出语句一、 选择题: 1 char型常量在内存中存放的是: A)ASCII码 B)原码 C)内码值 D)十进制代码值2 C语言中整数-8在内存中存储形式是: A)1111,1111,1111,1000 B)1000,0000,0000,1000C)0000,0000,0000,1000 D)1111,1111,1111,01113 C语言提供的合法的数据类型关键字是: A) Double B) short C) integer D) Char4 在C语言中,合法的长整型常数是: A) 0L B) 4962710 C)0.054838743 D) 2.1869e105 在C语言中,合法的字符常量是: A) 084' B) x43' C) 'ab' D) “0” 6 下面标识符中,不合法的用户标识符为: A)pad B)a_13 C)CHAR D)a#b7 下列变量定义中合法的是: A)short _a=1-.le-1; B) double b=1+5e2.5; C)long do=0xfdaL; D) float 2_and=1-e-3;8 下列不正确的转义字符分别为: A) B)011 C) D)Xaa9 设m,n,a,b,c,d均为0,执行(m=a=b)|(n=c=d)后,m,n的值是: A)0,0 B)0,1 C)1,0 D)1,110 设有如下定义:int a=1,b=2,c=3,d=4,m=2,n=2;则执行表达式:(m=a>b)&&(n=c>d)后,n的值为: A)1 B)2 C)3 D)011 设 int b=2;表达式(b>>2)/(b>>1)的值是: A) 0 B) 2 C) 4 D) 812 设 int x=1, y=1; 表达式(!x|y-)的值是: A) 0 B) 1 C) 2 D) -113 设a为5 ,执行下列语句后,b的值不为2的是: A)b=a/2 B)b=6-(-a) C)b=a%2 D)b=a>3?2:214 设x、y、z和k都是int型变量,则执行表达式:x=(y=4,z=16,k=32)后,x的值为: A)4 B)16 C)32 D)5215 设有语句 int a=3;,则执行了语句a+=a-=a*a;后,变量a的值是: A)3 B)0 C)9 D)-1216 设整型变量a,b,c的值均为2,表达式a+b+c+的结果是: A)6 B)9 C)8 D)表达式出错17 设a=1,b=2,c=3,d=4,则表达式:a<b?a:c<d?a:b的结果为?: A)4 B)3 C)2 D)118 若a为整型变量,以下语句: a=-2L; printf(“%d”,a);则 A)赋值不合法 B)输出-2 C)输出不确定 D)输出219 下列程序执行后的输出结果是(小数点后只写一位) A) 6 6 6.0 6.0 B) 6 6 6.7 6.7 C) 6 6 6.0 6.7 D) 6 6 6.7 6.0main() double d; float f; long l; int i; i=f=1=d=20/3; printf("%d %ld %f %f n", i,l,f,d);20 设a为整型变量,不能正确表达数学关系:10<a<15的C语言表达式是: A)10<a<15 B)a=11|z=12|a=13|a=14C)a>10&&a<15 D)!(a<=10)&&!(a>=15)21 能正确表示a和b同时为正或同时为负的逻辑表达式是: A)(a>=0|b>=0)&&(a<0|b<0) B)(a>=0&&b>=0)&&(a<0&&b<0) C)(a+b>0)&&(a+b<=0) D)a*b>0 22 能满足x在-1010,100110的表达式为; A)(10>x>-10)|(100>x>-100)B)!(x<=-10|(x>=10)|!(x<100)|(x>=110)C)(x<10)&&(x>-10)&&(x>100)&&(x<110)D)(x>-10)&&(x<10)&&(x<110)&&(x>100)23 若有以下定义:char a, int b, float c, double d ,则表达式 a*b+d-c值的类型为: A)float B)int C)char D)double24 若有以下定义:char a;int b;float c;double d;c=*b+d-c,则c的类型为: A)float B)int C)char D)double25 表达式“10!=9”的值是: A)true B)非零值 C)0 D)126 设a,b,的c都是int 型变量,且a=3,b=4,c=5,则下面表达式中值为0的是 :A)a&&b B)a<=b C)a|b+c&&b-c D)!(a<b)&&!c|1)27 设ch是char型变量,其值为A,则下面表达式的值是: ch=(ch>=A&&ch<=Z)?(ch+32):chA)A B)a C)Z)x28 假定有以下变量定义:int k=7 ,x=12; 则能使值为3的表达式是: A)x%=(K%=5) B) x%=(k-k%5) C)x%=k-k%5 D) (x%=k)-(k%=5) 29 当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是 A)c=b=a; B)(a=c)|(b=c); C)(a=c)&&(b=c); D)a=c=b; 30 下列使i的运算结果为4的表达式为: A)int i=0,j=0 B)int i=1,j=0; (i=3,(j+)+i); j=i=(i=3)*2);C)int i=0,j=1; D)int i=1,j=1; (j=1)?i=1:i=3; i+=j+=2;31 下列不正确的表达式是: A)k=j+ B)(int)x+0.4 C)y+=x+ D)a=2*a=332 下列不正确的表达式是: A)x%(-3) B)w+=-2 C)k=(a=2,b=3,a+b) D)a+=a-=(b=4)*(a=3)33 下列不正确的说法是: A) 变量要先定义后使用;B) APH与aph是两个不同的变量;C) 同类型的a,b,执行了a=b;后,a,b的值相同;D) 输入数据时,对整型变量只能输入整数。34 以下正确的说法是: A) 语句间须用分号分隔;B) 实型变量中可存放整数;C) 整数和实数都能准确表示;D) 运算符%只能用于整数间的运算。35 以下不正确的说法是: A) 好的程序要有详尽注释;B) #include和#define均不是语句;C) 赋值运算符优先级最低;D) j+;是一条赋值语句。36 设a=3,b=4,执行“printf(“%d,%d”,(a,b),(b,a);”的输出是: A)3,4 B)4,3 C)3,3 D)4,437 下列程序执行后的输出结果是 A) G B) H C) I D) Jmain() int x='f' printf("%c n",'A'+(x-'a'+1); 38 若有以下定义和语句则输出结果是: char c1='b',c2='e'; printf(“%d,%cn”,c2-c1,c2-'a'); A)2,M B)3,E C)2,E D)3,M39 若有以下定义和语句,则输出结果是: int u=010,v=0x10,w=10;printf(“%d,%d,%dn”,u,v,w);A) 8,16,10 B)10,10,10 C) 8,8,10 D) 8,10,10 40 int a=256,执行语句 “printf(“%x” ,a);”的结果是: A)0100 B)0256 C) 0FFE D)00FF41 设有int i=010,j=10;则printf(“%d,%dn”,+i,j-);的输出是: A)11,10 B)9,10 C)010,9 D)10,942 设a,b为字符型变量,执行“scanf(“a=%c,b=%c”,&a,&b);”后使a为A,b为B,从键盘上正确输入是: A)A”B B)A,B C)A=A,B=B D)a=A,b=B43 .以下叙述中正确的是: A)输入项可以是一个实型常量; 例如:scanf(“%f”,3.5);B)只有格式控制,没有输入项,也能正确输入数据到内存; 例如:scanf(“a=%d ,b=%d”)' C)当输入一个实型数据时,格式控制部分可以规定小数点后的位数; 例如:scanf(“%4.2f”,&d); D)当输入数据时,必须指明变量地址。例如:scanf(“%f”,&f);44 设x和y均为int 型变量,则以下语句:x=x+y; y=x-y; x=x-y;的功能是: A) 把x 和y按从大到小排列 B) 把x和y按从小到大排列 C) 无确定结果 D) 交换x和y中的值45 语言中标准库函数fgets(string,m,fp)的作用是: A)从fp所指向的文件中读取长度不超过m的字符串存入由指针string指向的内存。B)从fp所指向和文件中读取长度为m的字符中存入由指针string所指向的内存。C)从fp所指向的文件中读取m个字符串存入由指针string指向的内存。D)fp所指向的文件中读取长度不超过m-1的字符串存入由指针string指向的内存。46 fgets(str,n,fp)是从文件读入一字符串,以下叙述正确的是: A)字符串读入后不会自动加入0 B)fp是file类型指针C)以上函数从文件中最多读入n-1个字符D)以上函数从文件中最多读入n个字符二、填空题:1. 结构化程序设计规定的三种基本结构是: 结构、选择结构和 结构。2. 在C语言中,表示逻辑值“真”用 ,表示逻辑值“假”用 。3. 在C语言中,任一语句必定以字符 结束。4. 在C语言,当关系表达式中的关系成立时,则该关系表达式的值为: 5. 设x为整型变量,則表达式xx的值用十六进制表式为_.6. 设x为整型变量,则表达式(x&1)=(x%2)的值为7. 数学表达式sin(25)+x*xcos(30)的C语言表达式为_.8. 代数式的合法C语言表达式为: 9. 字符串"ab034x79"的长度为_.10. 设变量定义:int a=10,c=9;则表达式 (-a=c+)?-a:+c的值为_。执行语句后变量a的值为_.变量c的值为_。11. 表达式8.0*(1/2)的值为_。12. 定义int x=10,y,z;执行y=z=x;x=y=z后,变量x的值为_.13. 写出满足下列各要求的判断表达式。1) 判断x的值是否为0,使表达式的值为“真”,否则使表达式有值为“假”。 2) 写出j小于0,或大于10时为“真”的表达式。 3) 写出a的值必须是2,3,5,6,7的判断表达式。 14. 已说明int a=256,执行语句"printf("%x",a);"的结果是_。15. 执行语句printf(“The programs name is c:tools book.txt”);后的输出是: 16. 若想通过以下输入语句给a赋于1,给b赋于2, 则输入数据的形式应该是 。 int a,b; scanf(“a=%d,b=%d”,&a,&b);17. 若想通过以下输入语句使a中存放字符串1234,b中存放字符5,则输入数据的形式应该是: char a 10,b;scanf(“a=%sb=%c”,a,&b);18. 下列程序的输出结果是: main() double d=3.2; int x,y; x=1.2; y=(x+3.8)/5.0; printf("%d n", d*y); 19. 下列程序执行后的输出结果是 main() int x='f' printf("%c n",'A'+(x-'a'+1); 20. 在C语言中,对文件的存取是以 为单位的。21. 在C语言的文件系统中,最重要的概念是“文件指针”,定义文件指针的方法为: *fp;其中fp是一个指向 类型结构体的指针变量。22. 如果调用fopen函数不成立,则函数的返回值为: ,如果调用fclose函数不成立,则函数返回值为: 三、读程题:1 读下列程序的运行结果 main()int a=-1,b=4,k; k=(+a<0)&&(b-<0); printf("%d,%d,%dn",k,a,b); 2 读下列程序的运行结果 #include <stdio.h> main() int x=5,y=0,z=6; printf("x&&y&&z=%dn",x&&y&&z); printf("x>y|z=y&&xz=%dn",x>y|z=y&&x<z); printf("!x>y&&z=y&&x<z=%dn",x>y&&z=y&&x<); 3 读下列程序的运行结果 #include <stdio.h>main()int x,y,z;x=y=5;z=+x;printf(“n %d %d %d”,z,x,y,);x=y=5;z=x+;printf(“n %d %d %d”,z,x,y,);x=y=5;z=-x;printf(“n %d %d %d”,z,x,y,);x=y=5;z=x-;printf(“n %d %d %d”,z,x,y,);4 读下列程序的运行结果 main()int w,x,z; w=3; x=z=10; printf("%d",x>10?x+100:x-10); printf("%d",w-|z+); printf("%d",x+>=z); printf("%d",!-w&&z); printf("%d%d%dn",w,x,z); 5 读下列程序的运行结果 main( )char c1,c2;c1=a+6-2;c2=a+6-3;printf(“%c,%dn”,c2,c1);6 读下列程序的运行结果 #include <stdio.h>main() int a,b,cd,x,y,z;x=634;y=19;z=28;a=3*(b=x/(y-4)-z/2;printf(“n%10d%10d”,a,b,);a=100;b=45;c=-19,d=94,x=-2;y=5;a+=6;b-=x;c*=10,d/=x+y;,z%=8;printf(“n%10d%10d%10d%10d%10d”,a,b,c,d,z);7 读下列程序的运行结果 #include <stdio.h>main() printf(“n char: %d byte”,sizeof(char);printf(“n int: %d byte”,sizeof(char);printf(“n long: %d byte”,sizeof(char);printf(“n foat: %d byte”,sizeof(char);printf(“n double: %d byte”,sizeof(char);8 从键盘上输入123<CR>45678<CR>,则读下列程序的运行结果 #include “stdio.h” main ( )char c1,c2,c3,c4,c5,c6;scanf(“%c%c%c%c”,&c1,&c2,&c3,&c4);c5=getchar( );c6=getchar( );putchar(c1); putchar(c2);printf(“%c%cn”,c5,c6);9 读下列程序的运行结果 main()int j,k,l,a=3,b=2;j=(-a=b+)?-a:+b;k=a+;l=b;printf("%d,%d,%d",j,k,l);10 读下列程序的运行结果main()int j,k,l,a=3,b=2;j=(-a=b+)?-a:+b;k=a+;l=b;printf("%d,%d,%d",j,k,l);11 读下列程序的运行结果#include <stdio.h>#include <math.h>main()int a=1,b=4,c=2;float x=5.5,y=9.0,z;z=(a+b)/c+sqrt(double)y)*1.2/c+x;printf("%fn",z);12四、完善程序题(即:给出了程序所完成的功能,根据此功能在 上填写合适的一条语句)1. 下面的程序是借肋于第三个变量将a,b中的值交换。main()int a,b,c; scanf(“%d%d”,&a,&b); printf(“a=%d b=%dn”,a,b);c=a; ; ; printf(“a=%d b=%dn”,a,b);2. 求三个数值中的较大的数:#include <stdio.h>main()int x,y,z,max;printf("input x,y,z:n");scanf("%d%d%d", );max=(x>y)?x:y;max= ;printf("max=%dn",max);3. 从键盘上输入一个小写字母字符,将它转换为大写字母。#include <stdio.h>main()char ch; ch=getchar(); ; putchar( ); 4. 从键盘上输入一个大写字母字符,将它转换为小写字母。#include <stdio.h>main()char ch; ch=getchar(); ; putchar( ); 第二部分 结构化程序设计的三大结构一、选择题:1. 下列关于switch语句和break语句的结论中,只有 是正确的。 A)break语句是switch语句中的一部分; B)在switch语句中可以根据需要使用或不使用break语句; C)在switch语句中必须使用break语句; D)以上三个结论有两个是正确的。2. if语句的圆括号内表达式是: A)只能是逻辑表达式B)只能是关系表达式C)只能是逻辑表达式或关系表达式D)可用任意表达式3. 假定所有变量均已正确定义,下列程序段运行后x的值是 a=b=c=0;x=35; if(!a) x-; else if(b); if(c) x=3; else x=4;A)34 B)4 C)35 D)34. 下面的程序片段所表示的数学函数关系是: y=-1;if(x!=0) if(x>0) y=1; else y=0;A) B)C) D) 5. 以下程序输出结果是: main ( ) int m=5; if (m>5) printf (“%dn”,m); else printf (“%dn”,m-); A) 7 B) 6 C)5 D)46. 若要求在 if 后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为: A) a<>0 B)!a C)a=0 D)a7. 两次运行下面的程序,如果从键盘上分别输入7和6,则输出结果是: A) 7 和 5 B)6和3 C)8和7 D)6和4main()int x; scanf(“%d”,&x); if(x+>5) printf(“%d”,x);else printf(“%dn”,x-);8. 下列语句中错误的是: A)while(x=y) 5; B)d0 x+; while(x=10);C)while(0); D) do 2 ; while (a=b);9. 若 i,j已定义为 int 型,则以下程序段中内循环的执行次数是: for(i=5;i;i-) for(j=0;j<4;j+) A) 20 B)24 C)25 D)3010. 假定a和b为int 型变量,则执行以下语句后b的值为: a=1;b=10; do b-=a;a+; while(b-<0);A) 9 B)-2 C)-1 D)811. 设x和y均为int 型变量,则执行下面的循环后,y的值为: for(y=1,x=1;y<=50;y+) if(x>=10) break; if(x%2=1) x+=5;continue; x-=3; A)2 B)4 C)6 D)812. 在C语言中,下列说法中正确的是: B) do-while语句构成的循环不能用其它语句构成的循环来代替。C) “do语句 while (条件)”的循环必须使用“break”造句退出循环;D) “do语句while(条件)”的循环中,当条件为非0时将结束循环;E) “do语句while(条件)”的循环中,当条件为0时将结束循环。13. 与dowhile(E)中E不等价的表达式是:A)!E= =0 B)E>0|E<0 C)E= =0 D)E!=014. 在do-while语句中,while后的括号内的表达式为 结束循环A) 0 B)1 C)true D)非015. 循环语句 for(x=0,y=0;(y!=123)|(x<4);x+);的循执行: A)无限次 B)32767 C)4次 D)3次16. 执行语句:for(i=1;i+<4;)后;变量i的值是 A)3 B)4 C)5 D)不定17. 以下 不是无限循环A)j=100;while(1)j=j%100;j+;if(j>100)break;B)for(; ;);C)k=32764;do k+;k+;while(k>0);D)s=32764;while(s+%2|s%2)s+;18. 当执行以下程序段时 A)循环体将执行一次 B)循环体将执行两次C)循环体将执行无限次 D)系统将提示有语法错误 x=-1; do x=x*x; while(!x);19. 在下列选项中,没有构成死循环的程序是 。A) int i =100; while(1) i=i%1001; if (i>100)break; B)for (;); C)int k=1000; do k;while(k>=1000); D)int s=36; while (s); -s; 20. 若k 为整型,则while循环 k=10;while(k=0) k=k-1; A)执行10次 B)无限循环 C)一次也不执行 D)执行一次21. 以下程序的输出结果是 A)-1 1 B)0 1 C)1 0 D)0 0 main( ) int a= -1,b=1,k; if(+a<0)&& ! (b- <=0) printf("%d %dn",a,b); else printf("%d %dn",b,a); 22. 执行以下程序后,输出的结果是 A)-1 B)1 ) )0 main( ) int y=10; do y-; while(-y); printf(“%dn”,y-); 23. 下列程序的输出为: A)0,3 B) 0,5 C)1,3 D)1,5main( )int j,k,l=0,m=0;for(j=0;j<2;j+)for(k=0;k<3;k+)l+; l-=k; m=j+k; printf(“%d,%d”,l,m);24. 与 y=(x>0?1:x<0?-1:0);的功能相同的if语句是 A) if (x>0) y=1; else if(x<0)y=-1;y=0;B) if(x>0)y=1;else y=0; else if(x<0)y=-1;else y=0;C) if(x>=0)else if(x=0)y=0; else y=-1;else y=-1; D) if(x<0) y=-1; else if(x>0) y=1; else y=0; 二、 填空题1. 定义int i=1; 执行语句"while(i+<5)"后,i的值为_。2. 如下三个条件语句中(其中s1和s2表示是C语言的语句),它们描述的功能是否等价_.A)if(a) s1; else s2; B)if(a=0)s2; else s1; C)if(a!=0)s1;else s2;3. 若有定义语句“int a=25,b=14,c=19;”,以下语句的执行结果是: if(a+<=25&&b-<=2&&c+) printf(“*a=%d,b=%d,c=%dn”,a,b,c);else printf(“#a=%d,b=%d,c=%dn”,a,b,c);4. 以下两条if语句可合并成一条if语句为: if(a<=b) x=1; else y=2; if(a>b) printf(“*y=%dn”,y); else printf(“#x=%dn”,x);5. 选择合法的语句(设int x,a,b,c;): A) if(a=b) x+; B) if(a=<b) x+=;C) if(a-b) x+; D) if(x=>b) x+;E) if(a<=b<=c) x+; F) if(1) x+;6. 设i,j,k均为 int 型变量,则执行完下面的 for 循环后,i,j的值为: for(i=0,j=10;i<=j;i+,j-) k=i+j;7. 下列程序段运行后x的值是: k1=1;k2=2;k3=3;x=15;if(k1)x-;else if(k2)if(k3)x=3;else x=4;8. 设a=1,b=2,c=3,执行下列语句后,a,b,c分别是: if(a>c);b=a;a=c;c=b; if(a>c)b=a;a=c;c=b;) if(a>c)b=a,a=c;c=b; if(a>b)a=b;if(b>c)b=c;else c=b;c=a;9. 下列程序段的输出结果是: s=7;while(-s);s-=2;printf(“%d”,s);10. 从键盘上输入 6,8后,该程序的运行结果为: main ( )int m,n; printf("Enter m,n:"); scanf("%d%d",&m,&n); while(m!=n) while(m>n)m-=n; while(n>m)n-=m; printf("m=%dn",m);11.执行下面程序段后,k值是 k1; n263; do k*=n10; n=10;while(n); 三、阅读下列程序,并且写出其运行结果。1. 从键盘键入this is book!后,该程序的输出结果是: #include <stdio.h> main() int i,ch,count=0; for(i=0;(ch=getchar()!='n'i+) if(ch=' ')