C - C++语言同步习题 - 2007(答案和分析zeng)
更新时间:2024-02-02 22:55:01 阅读量: 教育文库 文档下载
- c罗推荐度:
- 相关推荐
《C/C++程序设计》习题 第一章 C语言概述
一、单项选择题
1. C语言源程序的基本单位是( B )。 B
A)过程 B)函数 C)子程序 D)标识符 2. C语言规定:在一个源程序中,main函数的位置( B )。 C A)必须在最开始 B)可以任意
C)必须在最后 D)必须在系统调用的库函数之后 3. 一个C程序的执行是从( A )。 A A)本程序的main函数开始,到main函数结束
B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C)本程序文件的第一个函数开始,到本程序main函数结束
D)本程序的main函数开始,到本程序文件的最后一个函数结束 4. 一个C语言程序是由( A )。 A A)若干函数组成 B)若干过程组成 C)若干主程序组成 D)若干子程序组成 5. 以下叙述不正确的是( D )。
A)一个C源程序必须包含一个main函数 B)一个C源程序可由一个或多个函数组成 C)C程序的基本组成单位是函数
D)在C程序中,注释说明只能位于一条语句的后面 6. 以下叙述正确的是( C )。 C
A)在对一个C程序进行编译的过程中,可发现注释中的拼写错误 B)在C程序中,main函数必须位于程序的最前面 C)C语言本身没有输入输出语句 D)C程序的每行中只能写一条语句 7. C语言不具有的特点( D )。 D
A)具有结构化的控制语句 B)数据结构丰富
C)语法限制不太严格,程序设计自由度大 D)在可移植性上,C语言比其它语言差
第二章 数据类型、运算符与表达式
一、单项选择题
1. 在C语言中,char型数据在内存中的存储形式是( D )。 D A)补码 B)反码 C)原码 D)ASCII码 2. 以下叙述不正确的是( D )。 D
A)在C程序中,逗号运算符的优先级最低
B)在C程序中,APH和aph是两个不同的变量
C)若a和b类型相同,在计算赋值表达式a=b后b中的值将放入a中,而b的值不变
1
D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值
3. C语言中,要求对变量作强制定义的主要理由是( D )。 D A)便于移植 B)便于写文件
C)便于编译预处理程序处理 D)便于确定类型和分配空间 4. putchar函数可以向终端输出一个( D )。 D
A)整型变量表达式值 B)实型变量值
C)字符串 D)字符或字符型变量值 8. 下面四个选项中,均是正确的数值常量或字符常量的选项是(D )。 C
A) 0.0 B) ‖a‖ C) ‘3‘ D) +001 Of 3.9E-2.5 011 0xabcd 8.9e lel 0xFF 2e2
?&‘ ?\\‘‘‘ 0a 50. 9. 在C语言中,合法的字符常量是( B )。 B A)'\\084' B)'\\x43' C)'ab' D)\10. 假定x和y为double型,则表达式x=2,y=x+3/2的值是( D )。 D A)3.500000 B)3 C)2.000000 D)3.000000 11. 在C语言中,合法的长整型常数是( A,B )。 A A)0L B)4962710 C)0.054838743 D)2.1869e10 12. 下列不正确的转义字符是( D )。 D
A)‘\\\\’ B)‘\\0’ C)‘\\04’ D)‘\\’ 13. 设有说明语句char ch=‘\\20‘;则变量ch( A )。 A
A)包含1个字符 B)包含2个字符 C)包含5个字符 D)说明不合法
14. 设a是整型,f是实型,i是双精度型,则表达式10+‘a‘+i*f值的数据类型为( C )。
A)int B)float C)double D)不确定 C 15. 设x、y均为float型变量,下面不正确的赋值语句是( B )。 B
A)++x B)y=(x%2)/10 C)x*=y+8 D)x=y=0 16. 设 int a=12,表达式a+=a-=a*=a的值是( C ) C A)12 B)144 C)0 D)132
17. 若x=10,则表达式x+=3+x%(-3)的值为( C )。 X=x+4 C sefs df
A)11 B)12 C)14 D)15
18. 设int k=7,x=12则以下能使值为3的表达式是( D )。 D A)x%=(k%=5) B)x%=(k=k%5) C)x%=k-k%5 D)(x%=k)-(k%=5) 19. 以下合法的赋值语句是( B )。 B A)int x=y=100; B)d--; C)x+y; D)c=int(a+b); 20. 设int x=10,y=3,则printf(\语句的输出结果是( D )。 D
A)10,3 B)9,3 C)9,2 D)10,2
21. 设x为int型变量,则执行以下语句后,x的值为( B )。
2
B
x=10;x+=x-=x-x;?
A)10 B)20 C)30 D)40 22. 在下列选项中,不正确的赋值语句是( D )。 D
A)++t B)n1=(n2=(n3=0)) C)k=i= =j D)a=b+c=1 23. 在C语言中,要求运算符必须是整型的运算符是( A )。A A)% B)++ C)!= D)\\ 24. 下列可作为C语言赋值语句的是( B )。 C
A)x=3=y=5; B)a=b=6; C)i--; D)y=int(x); 25. 已知字母A的ASCII码为65,以下程序段的输出结果是( C )。 C
char c1=‘A‘,c2=‘Y‘; printf(―%d,%d‖,c1,c2);
A)65,90 B)A,Y C)65,89 D)输出格式不合法 26. 下面程序片段的输出结果是( B )。 B
int i=65536; printf(\
A)65536 B)0 C)有语法错误,无输出结果 D)1 27. 以下程序的输出结果是( B )。 B
#include
int a,b,d=241;
a=d/100%9;
b=(-1);
printf(―%d,%d\\n‖,a,b);
}
A)6,1 B)2,-1 C)6,0 D)2,0 D
28. 若有以下定义和语句,则输出结果是( B )。 B
char c1='b',c2='e'; e=101 b=98
printf(\'a'+‘A‘); A)2,M B)3,E
C)2,E D)输出项与对应的格式控制不一致,输出结果不确定 29. 下面程序的输出是( C )。 main( )
{
int x=10,y=3;
printf(\}
A)0 B)1 C)3 D)不确定值 二、阅读程序写出程序运行结果 1. 有以下程序
3
main( ) {
char='a';
printf(―\\nch:dec=%d;oct=%o,hex=%x,ASCII=%c\\n‖,ch,ch,ch,ch);
}
执行后输出结果是ch:dec=97;oct=141,hex=61,ascII=a 。 ch:dec=97;oct=141,hex=61,ASCII=a 2. 有以下程序
main( ) {
int i=5,j=5;
printf(―%d,%d\\n‖,++i,j--); }
执行后输出结果是 6,5 。 6 5 第三章 最简单的C程序设计
一、单项选择题
1. 以下叙述中正确的是( D )。 D
A)输入项可以是一个实型常量,如:scanf(―%f‖,3.1415);
B)只有格式控制,没有输入项,也能正确输入,如:scanf(\; C)输入实型数据时,可以规定小数点后的位数,例如:scanf(―%4.2f‖,&f); D)当输入数据时,必须指明变量地址,如:scanf(―%f‖,&f); 2. 以下程序的输出结果是( )。 B #include
main( ) {
printf(―%d\\n‖,NULL) ; }
A)-1 B)0 C)1 D)不确定(因变量无定义) 3. 以下程序的输出结果是( D )。 D #include
int a=2,c=5;
printf(―a=%%d,b=%%d\\n‖,a,c); }
A)a=%2,b=%5 B)a=2,b=5 C)a=%%d,%%d D)a=%d,b=%d 二、阅读程序写出程序运行结果 1. 有以下程序
main() {
char c='z';
printf(\ }
4
执行后输出结果是 a 。 a 2. 有以下程序
main( ) {
char='a';
printf(―\\nch:dec=%d;oct=%o,hex=%x,ASCII=%c\\n‖,ch,ch,ch,ch);
}
执行后输出结果是 。 ch:dec=97;oct=141,hex=61,ASCII=a 3. 有以下程序
main( ) {
int i=5,j=5;
printf(―%d,%d\\n‖,++i,j--); }
执行后输出结果是 6,5 。 6 5 4. 有以下程序 main( )
{
int a=3;
printf(\ }
执行后输出结果是 -6 。 -6 5. 有以下程序 main( ) {
int x=10,y;
y=x++;
printf(―%d %d‖,x,y++); }
执行后输出结果是 11 10 。 11 10
第四章 逻辑运算和判断选择结构
一、单项选择题
1. 设char ch='A';则ch=(ch>='A'&&ch<='Z')?(ch+32):ch的值是( B B
A)A B)a C)Z D)z 2. 设x,y,z,t均为int型变量,则执行以下语句后,t的值为( C )。 x=y=z=1;
t=++x||++y&&++z;
A)不定值 B)2 C)1 D)0
3. 为了表示关系x≥y≥z,应使用的C语言表达式是(A A
A)(x>=y)&&(y>=z) B)(x>=y)AND(y>=z)
5
)。 C 。 )
C)(x>=y>=z) D)(x>=y)&(y>=z) 4. 设int a=3,b=4,c=5,则下面表达式中,值为0的表达式是( D ) D
A)'a'&&'b' B)a<=b C)a||b+c&&b-c D)!((a
int a=-1,b=4,k;
k=(++a<0)&&!(b--<=0); printf(―%d %d %d\\n‖,k,a,b); }
A)1 0 4 B)1 0 3 C)0 0 3 D)0 0 4 6. 以下程序的运行结果是( D )。 main( )
{ int k=4,a=3,b=2,c=1; printf(―\\n%d \\n‖,k
}
A)4 B)3 C)2 D)1
7. 若a=-14,b=3,则条件表达式 a
A)-14 B)-13 C)3 D)4
6. 已知:int n,i=1,j=2;执行语句n=i A)1,3 B)1,2 C)2,2 D)2,3 // j未进行自增7. 若执行下面的程序时从键盘上输入5,则输出是( B )。 B #include int x; scanf(―%d‖,&x); if(x++>5) printf(―%d\\n‖,x); //比较后自增,后自增 else printf(―%d\\n‖,x--); } A)7 B)6 C)4 D)5 8. 若执行下面的程序时从键盘上输入3和4,则输出是( B )。 B main( ) { int a,b,s; scanf(\s=a*b; if(a) printf(\else printf(\} 6 D )。 )。 打印 A)10 B)12 C)14 D)16 9. 假设x,y,z都为整型变量,下列正确的输入语句是( B )。 B A)INPUT x,y,z; B)scanf(\ C)scanf(\ D)read(\10. 以下程序的输出结果是( D )。 D main( ) { int a=-1,b=4,k; k=(++a<0)&&!(b--<=0); printf(―%d %d %d\\n‖,k,a,b); } A)1 0 4 B)1 0 3 C)0 0 3 D)0 0 4 11. 以下不正确的if语句形式是( A )。 C A)if(x>y && x!=y) ; B)if(x= =y) x+=y ; C) if(x != y) scanf(\ else scanf(\ D)if(x 12. 为了避免在嵌套的条件语句if――else中产生二义性,C语言规定:else子句总是与( B )配对。B A)缩排位置相同的if B)其之前最近的if C)其之后最近的if D)同一行上的if 13. 有一函数关系见下表: x y x<0 x=0 x-1 x x>0 x+1 下面程序中能正确表示上面关系的是( C )。 C //此题关键是if else配对 A)y=x+1; B)y=x-1; C)if (x<=0) D)y=x if (x>=0) if(x!=0) if(x<0) if(x<=0) if(x= =0) if(x>0) y=x-1; if(x<0) y=x; y= x+1; else y=x; y=x-1; else y=x-1; else y=x; else y=x+1; else y=x+1; 14. 请阅读以下程序: main( ) { int a=5,b=0,c=0; if(a=b+c) printf(\ \ e1se printf(\ } 以上程序输出结果为( D )。 D 7 A)有语法错不能通过编译 B)可以通过编译但不能通过连接 C)输出*** D)输出$$$ 15. 当a=1,b=3,c=5,d=4执行完下面一段程序后x 的值是( B )。 B if(a if(c if(b A)1 B)2 C)3 D)6 16. 若有条件表达式(exp) ? a++:b--;则以下表达式中能完全等价于表达式(exp)的 是( B )。 B A)(exp= =0) B)(exp!=0) C)(exp= = 1) D)(exp!=1) 17. 若运行时给变量x 输入12,则以下程序的运行结果是( A )。 A main() { int x,y; scanf(\ y=x>12?x+10: x-12; printf(\ } A)0 B)22 C)12 D)10 18. 以下程序的运行结果是( D )。 D main( ) { int k= 4,a=3,b=2,c=1; printf(\ } A)4 B )3 C)2 D)1 19. 执行以下程序段后、变量a,b,c的值分别是( B )。 B int x=10,y=9; int a,b,c; a=(- -x = = y++)?- -x:++y ; b=x ++; c=y; A)a=9,b= 9,c= 9 B)a=8,b=8,c=10 C)a=9,b= 10,c=9 D)a=1,b= 11,c=10 20. 若w,x,y,z,m均为int型变量,则执行下面语句后的m值是( A )。 A w= 1;x = 2;y= 3;z=4; m=(w 8 A)1 B)2 C) 3 D) 4 21. 若w=1,x = 2,y= 3,z=4,则条件表达式w A)4 B)3 C)2 D)1 22. 下面程序的功能是从键盘输入的一组字符中统计出大写字母的个数m和小写字母的个数n,并输出m、n中的较大者,请选择填空( )。 C #indude \ main( ) { int m=0,n=0; char c; while(( )!='\\n') { if(c>='A'&&C<='Z') m++ ; if(c>='a' &&c<='z') n++; } printf(\ } A)c=getchar( ); B)getchar( ) C)c=getchar( 23. 下面程序的运行结果是( )。 B #include { int k=0; char c='A'; do { switch(c++) { case 'A':k++;break; case 'B':k--; case 'C':k+=2;break; case 'D':k=k%2;continue; case 'E':k=k*10;break; default:k=k/3; } k++; }while(c<'G'); printf(\} A)k=3 B)k=4 C)k=2 D)k=0 24. 有以下程序 main( ) { 9 ) D)scanf(\ //手工一步一步执行char k; int i; for(i=1;i<3;i++) { scanf(\ switch(k) { case '0': printf(\ case '1': printf(\ } } } 程序运行时,从键盘输入:01<回车>,程序执行后的输出结果是( C )。 C A)another B)another C)another D)number number number number number another number 25. 设ch是char型变量,其值为'A',且有下面的表达式: ch=(ch>='A'&&ch<='Z')?(ch+32):ch 上面表达式的值是( B )。 B A)A B)a C) Z D) z 26. 若执行下面的程序时从键盘上输入5,则输出是( B )。 B #include int x; scanf(―%d‖,&x); if(x++>5) printf(―%d\\n‖,x); else printf(―%d\\n‖,x--); } A)7 B)6 C)4 D)5 27. 以下程序的输出结果是( C )。 C main( ) { int a=-1,b=1,k; if((++a<0)&&!(b--<=0)) printf(\ %d\\n\ else printf(\ %d\\n\ } A)-1 1 B)0 1 C)1 0 D)0 0 28. 下面的程序片段所表达的数学函数关系是( C )。 C y=-1; 10 if(x!=0) if(x>0) y=1; else y=0; ??1(x?0)?1(x?0)?0(x?0)??1(x?0)????????A)y??0(x?0) B)y???1(x?0) C)y???1(x?0) D)y??1(x?0) ????1(x?0)0(x?0)1(x?0)0(x?0)????????29. 若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为 ( D )。 D A)a<>0 B)!0 C)a=0 D)a 30. 假定所有变量均已正确说明,下列程序段运行后x的值是( B )。 B 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)3 二、阅读程序写出程序运行结果 1. 有以下程序 main( ) { int x=0, y=0, z=0; ++x||++y||++z; printf(\} 执行后输出结果是 1 0 0 。 -1 0 0 2. 若运行时给变量x输入12,则以下程序的运行结果是 0 。 0 main( ) { int x,y; scanf(―%d‖,& x); y=x>12?x+10:x-12; printf(―%d\\n‖,y); } 3. 有以下程序 main( ) { int a=-1,b=1,k; if((++a<0)&&!(b--<=0)) printf(\ %d\\n\else 11 printf(\ %d\\n\ } 执行后输出结果是 1 0 。 1 0 4. 有以下程序 main( ) { int m=5; if (m++>5) printf(―%d \\n‖,m); else printf(―%d \\n‖,m--); } 执行后输出结果是 6 。 6 5. 有以下程序 main( ) { int x=2, y= -1, z=2; if (x if(y<0) z=0; else z+=1; printf(―%d \\n‖, z); } 执行后输出结果是 2 。 2 6. 以下程序的运行结果是 6 。 6 main( ) { int m=5; if(m++>5) printf(\ e1se printf(\ } 7. 以下程序的输出结果是 2 。 2 main( ) { int x=2, y= -1, z=2; if (x if(y<0) z=0; else z+=1; printf(―%d \\n‖, z); } 8. 当a=1、b=3、c=5、d=4时,执行下面一段程序后,x的值为 2 。 2 if(a 12 if(c 9. 以下程序的输出结果是 a=-1 。 a=-1 main( ) { int a=100,x =10,y=20,okl=5,ok2=0; if (x if(y!=10) if(!okl) a=1; else if(ok2) a=10; else a=-1; printf( \ } 10. 请读下列程序 #include int x=1,y=0,a=0,b=0; switch(x) { case 1: switch(y) { case 0: a++;break; case 1: b++;break; } case 2: a++;b++;break; } printf(―a=%d,b=%d\\n‖,a,b); } 上面程序的输出结果是 a=2,b=1 。 a=2,b=1 三、程序填空题 1. 以下程序实现输出x,y,z三个数中的最大者。 main( ) { int x=4,y=6,z=7; int u,v; if ( 错误!未找到引用源。 ) x>y u=x; else 13 u=y; if ( 错误!未找到引用源。 ) u>z v=u; else v=z; printf(―v=%d‖,v); } 2. 以下程序实现:输入三个整数,按从大到小的顺序进行输出。 main( ) { int x,y,z,c; scanf(―%d%d%d‖,&x,&y,&z); if (y { c=x; x=y;y=c; } printf(―%d,%d,%d‖,x,y,z); } 3. 有四个数a,b,c,d,要求按从大到小的顺序输出。 main( ) { int a,b,c,d,t; scanf(―%d%d%d%d‖,&a,&b,&c,&d); if(a { t=a; a=b; b=t; } if( 错误!未找到引用源。 ) c { t=c; c=d; d=t; } if(a { t=a; a=c; c=t; } if( 错误!未找到引用源。 ) b { t=b; b=c; c=t; } if(b { t=b; b=d; d=t; } if(c { t=c; c=d; d=t; } printf(―%d %d %d %d\\n‖,a,b,c,d); } 4. 以下程序实现:输入圆的半径r和运算标志m,按照运算标志进行指定计算。 请在 填入正确内容。 标志 运 算 a 面 积 c 周 长 b 二者均计算 14 #define PI 3.14159 main( ) { char m; float r,c,a; printf (―input mark a c or b and r \\n‖); scanf (―%c%f‖,&m,&r); if (m= =‘a‘) { a=PI*r*r; printf(―area is %f‖,a); } if ( 错误!未找到引用源。m==‘c‘ ) m= =‘c‘ { c=2*PI*r; printf(―circle is %f‖,c); } if( 错误!未找到引用源。 m==‘b‘ ) m= =‘b‘ { a=pi*r*r; c=2*PI*r; printf(―area and circle are %f%f‖,a,c); } } 5. 输入一个字符,如果它是一个大写字母,则把它变成小写字母;如果它是一 个小写字母,则把它变成大写字母;其它字符不变。 main( ) { char ch; scanf(―%c‖,&ch); if ( 错误!未找到引用源。 ch<=‘Z‘&&ch>=‘A‘ ) ch>=‘A‘&&ch<=‘Z‘ ch=ch+32; else if (ch>=‘a‘&&ch<=‘z‘) 错误!未找到引用源。 ch=ch-32 ; ch=ch-32 printf(―%c‖,ch); } 6. 下面程序根据以下函数关系,对输入的每个x值,计算出y值。 x 2 main( ) { int x,y; scanf(―%d‖,&x); if ( 错误!未找到引用源。 x>2&&x<=10 ) x>2&&x<=10 y=x*(x+2); else if ( 错误!未找到引用源。x>-1&&x<=2 ) x>-1&&x<=2 y=2*x; else if (x<= -1) y=x-1; else y= -1; if (y!=-1) printf(―%d‖,y); else printf(―error‖); } 7. 根据以下函数关系,对输入的每个x值,计算出相应的y值。 x y x<0 0<=x<10 10<=x<20 20<=x<40 0 x 10 -0.5x+20 main( ) { int x,c,m; float y; scanf(―%d‖,&x); if( 错误!未找到引用源。 x<0 ) x<0 c=-1; else c= 错误!未找到引用源。 x/10 ; x/10 switch(c) { case –1: y=0; break; case0 : y=x; break; case1 : y=10;break; case2 : case3 : y=-0.5*x+20;break; default : y= -2; } 16 if( 错误!未找到引用源。 y>=0或x<40 ) x<40 printf(―y=%f‖,y); else printf(―error\\n‖); } 8. 下面程序根据以下函数关系,对输入的每个x值,计算相应的y值。 x y x=a或x=-a 0 -a #include ―math.h‖ main( ) { int x,a; float y; scanf(―%d %d‖,&x,&a); if( x= =a||x= =-a 错误!未找到引用源。 ) (x= =a)||(x= =-a) y=0; else if( 错误!未找到引用源。 ) (x>-a)&&(x y=sqrt(a*a-x*x); else y=x; printf(―%f‖,y); } 9. 以下程序的功能是计算一元二次方程ax2?bx?c?0的根,完成下面程序内容。 #include ―math.h‖ main( ) { float a,b,c,t,disc,twoa,term1,term2; printf(―enter a,b,c:‖); scanf(―%f %f %f ‖,&a,&b,&c); if( 错误!未找到引用源。 a= =0 ) a= =0 if ( b= = 0) printf(―no answer due to input error \\n‖); else printf(―the single root is %f \\n‖,c/b); else { disc=b*b-4*a*c; twoa=2*a; term1= -b/twoa; t=abs(disc); 17 term2=sqrt(t)/twoa; if( 错误!未找到引用源。 disc<0或b*b-4*a*c<0 ) disc<0 printf(―complex root \\n real part=%f imag part=%f\\n‖,term1,term2); else printf(―real root\\n root1=%f root2=%f\\n‖,term1+term2,term1-term2); } } 10. 以下程序的功能是判断输入的年份是否是闰年。 main( ) { int y,f; scanf(―%d‖,&y); if(y@0= =0) f=1; else if( y%4==0&&y0!==0 错误!未找到引用源。 ) (y%4= =0)&&(y0!=0) f=1; else 错误!未找到引用源。 f=0 ; f=0 if(f) printf(―%d is‖,y); else printf(―%d is not‖,y); printf(―a leap year\\n‖) } 四、编程题 1. 编程实现以下功能:读入两个运算数(data1和data2)及一个运算符(op),计算表达式data1 op data2的值,其中op可为‘+’,‘-’,‘*’,‘/’(用switch语句实现)。 2. 试编程判断输入的正数是否既是5又是7的倍数。若是,则输出yes,否则输出no。 第五章 循环控制 一、单项选择题 1. C语言中while与do—while语句的主要区别是( A )。A A)do—while的循环体至少无条件执行一次 B)do—while允许从外部转到循环体内 C)do—while的循环体不能是复合语句 D)while的循环控制条件比do—while的循环控制条件严格 2. C语言中( D )。D A)不能使用do while语句构成的循环; 18 B)do while语句构成的循环必须用break语句才能退出; C)do while语句构成的循环,当while语句中的表达式值为非零时结束循环; D)do while语句构成的循环,当while语句中的表达式值为零时结束循环; 3. 设有程序段 int k=10; while (k=0) k=k-1; 则下面描述中正确的是( C )。C A)while循环执行10次 B)循环是无限循环 C)循环体语句一次也不执行 D)循环体语句执行一次 4. 语句while(!e);中的表达式!E等价于( A )。A A)E= =0 B)E!=1 C)E!=0 D)E= =1 5. 假定a和b为int型变量,则执行以下语句后b的值为( D )。 D a=1;b=10; a b b=b-a a++ b<0 b— do 1 10 9 2 8 { b- =a;a++; } while (b--<0); A)9 B)-2 C)-1 D)8 5. 6. 下面程序的输出结果为( C )。 C main( ) { int x=5; do x x=x-4 --x !(--x) printf(\ 5 1 0 T while(!(--x)); 0 -4 -5 F } A)1 B)1 C)1 D)死循环 0 - 4 7. 设有程序段 t=0; while (printf(―+‖)) { t++; if(t<3) break; } 下面描述正确的是( B )。B A)其中循环控制表达式与0等价 B)其中循环控制表达式与‘0’等价 C)其中循环控制表达式是不合法的 D)以上说法都不对 8. 以下程序段( C )。C 19 x x=x*x !x -1 1 0 x=-1; do { x=x*x; }while(!x); A)是死循环 B)循环执行两次 C)循环执行一次 D)有语法错误 9. 下面程序段的运行结果是( D )。D int x=0,y=0; x y y++ ++y x=x+y while(x<15) 0 0 1 2 2 { 2 2 3 4 6 y++; 6 4 5 6 12 x+=++y; 12 6 7 8 20 } printf(―%d,%d‖,y,x); A)20,7 B)6,12 C)20,8 D)8,20 10. 若有如下语句 int x=3; do { printf(―%d\\n‖,x- =2); }while(!(--x)); 则下面程序段( B )。B A)输出的是1 B)输出的是1和-2 C)输出的是3和0 D)是死循环 11. 下面程序的运行结果是( D )。D #include y y-- --y y-- { int y=10; do { y--; }while(--y); printf(―%d\\n‖,y--); } A)-1 B)1 C)8 D)0 12. 下列程序段不是死循环的是( A )。A A) k=0; B) i=100; C)s=3379; D)for (; ;); do while(1) while(s++%2+s%2) { { s++; ++k; i=i0+1; }while (k>=0); if(i>100) break; } 13. 以下有WHILE构成的循环执行的次数是( A )。A int ks=0; 20 while (ks=2) ks++; A)无限次 B)有语法错误,不能执行 C)一次也不执行 D)执行一次 x y x=x+4 x 20 40 24 T int x=20,y=40,z=60; 24 40 28 T while (x 32 printf(\ A)40,36,30 B)32,28,7 C)32,28,30 D)32,28,7.5 36 40 15. 下面有关for循环的正确描述是( D )。D A)for循环只能用于循环次数已经确定的情况 B)for循环是先执行循环体语句,后判断表达式 C)在for循环中,不能用break语句跳出循环体 D)for循环的循环体语句中,可以包含多条语句,必须用花括号括起 16. 对for(表达式1; ;表达式3)可理解为( B )。B A)for(表达式1;0;表达式3) B)for(表达式1;1;表达式3) C)for(表达式1;表达式1;表达式3) D)for(表达式1;表达式3;表达式3) 17. 若i、j均为整型变量,则以下循环( D )。D for (i=0,j=-1;j=1;i++,j++) //是赋值符号 printf(―%d,%d\\n‖,i,j); A)循环体只执行一次 B)循环体一次也不执行 C)判断循环结束的条件不合法 D)是无限循环 18. 以下的for循环( B )。B for(x=0,y=0; (y!=123)&&(x<4); x++) ; A)执行3次 B)执行4次 C)循环次数不定 D)是无限循环 19. 若x是int型变量,且有下面的程序片段: for(x=3;x<6;x++) printf(x%2)?(\\\n\上面程序片段的输出结果是( D )。D A) **3 B)##3 C) ##3 D)**3 ##4 ##4 **4 ##4 ##5 **5 **5 **5 20. 有以下程序: #include char c[N]; int i=0; for(;i 输入以下3行,每行输入都是在第一列上开始, a 21 cdef 程序的输出结果是( C )。C A)abcdef B) a C) a D) a b b b c cd cdef d e f 21. 若i、j已定义为int型,则以下程序段中,内循环总的执行次数是( A )。A for(i=5;i;i--) for(j=0;j<4;j++) {??} A)20 B)24 C)25 D)30 22. 下列循环语句会进入死循环的是( C )。C A)i=0; do { i++; }while(i = =100); B)for(i=0; i<100; i+=3.14); C)for(i=0; ; i+=2); D)k=1; do { k--;} while(k); 23. 执行下面程序: y y%3==0 --y y— main( ) { 9 0==0 8 7 int y=9; for ( ; y>1 ;y--) 7 1 6 if (y%3= =0) printf (\ 6 0 5 4 } 输出结果为( B )。B A)741 B)852 C)963 D)875421 24. 若a,b是int型变量,有以下程序段 for(a=1,b=1;b<=20;b++) a b a>10 a%2 a=a+5 a=a-3 { 1 1 F 1 6 if(a>10) break; 6 2 F 0 3 if(a%2= =1) 3 3 F 1 8 { 8 4 F 0 5 a+=5; 5 5 F 1 10 continue; 10 6 F 7 } 7 7 F 1 12 a-=3; 12 8 T break } 执行以上程序段后,a的值为( C )。C A)10 B)7 C)12 D)1 x y y++ ++y x=x+y 二、阅读程序写出程序运行结果 0 0 1 2 2 1. 下面程序段的运行结果是 8,20 。 2 8,20 3 4 6 2 x=y=0; 6 4 5 6 12 while(x<15) y++,x+ = ++y; 12 6 7 8 20 22 2. 3. 4. 5. 6. printf(―%d,%d‖,y,x); 若从键盘输入65 14↙(↙表示回车),则下面程序的运行结果是 m=1 。m=1 #include 程序的运行结果是 2 5 8 11 14 。 2 5 8 11 14 #include i ++i i%3 输出 main( ) 1 2 2 2 { 2 3 0 int i=1; 3 4 1 while(i<=15) 4 5 2 5 if(++i%3!=2) continue; 5 6 0 else printf(―%d ‖,i); 6 7 1 printf(―\\n‖); 7 8 2 8 } 下述程序的输出结果是 y=-1 。y=-1 #include int y=0; while(y--) ; printf(\} 执行下面程序后,k值是 36 。36 k=1;n=263; k n n k=k* n=n/10 do 1 263 3 3 26 { 3 26 6 18 2 k*=n; 18 2 2 36 0 n/=10; }while (n); 下面程序段的运行结果是 a=-5 i 。a=-5 a s s*i a=a+ s=-s i++ i=1;a=0;s=1; 1 0 1 1 1 -1 2 do 2 1 -1 -2 1+(-2) 1 3 23 3 -1 1 3 1+(-2)+3...... 1-2+3-4+5-6+7-8+9-10 { a=a+s*i; s= -s; i++; }while(i<=10); printf(―a=%d‖,a); 7. 假定a和b为int型变量,则执行以下语句后b 的值为 8 。 8 a=1;b=10; do a b b=b-a a++ b<0 b-- { 1 10 9 2 9 8 b-=a; a++; }while (b--<0); 8. 若运行时从键盘上输入3.6 2.4↙(↙表示回车),则输出结果是 1.600000 。1.600000 #include #include float x,y,z; scanf(\while(1) { if(fabs(z)>1.0) {x=y;y=z;z=x/y;} else break; } printf(\,y); } 9. 下面程序段的运行结果是 8 。 8 i=1;s=3; do i s s=s+i i++ s%7 ++i { 1 3 4 2 4 3 s+=i++; 3 4 7 4 0 if(s%7= =0) continue; 4 7 11 5 4 6 else ++i; 6 11 17 7 3 8 }while (s<15); printf(―%d‖,i); 10. 面程序的运行结果是 a=16 y=60 。 a=16 y=62 #include int a,y; a=10;y=0; a y a=a+2 y=y+a do 10 0 12 12 { a+=2; 14 12 16 28 24 14 28 16 44 14 44 16 60 break y+=a; if(y>50) break; }while(a=14); printf(―a=%d y=%d\\n‖,a,y); } 11. 设j为int型变量,则下面for循环语句的执行结果是 7 4 。7 4 for(j=10;j>3;j--) j j%3 j-- --j --j 输出 j-- { 10 1 9 8 7 7 6 if (j%3) j--; 6 0 5 4 4 3 --j;--j; printf(―%d ‖,j); } 12. 执行下列程序后,a的值为 8 。 8 main( ) { int a,b; for(a=1,b=1;a<=100;a++) { if (b>=20) break; if(b%3= =1) { b+=3; continue; } b-=5; } } 13. 以下程序的输出结果是 *#*#*#$ 。*#*#*#$ #include i i%2 printf { 1 1 *# int i; 2 0 for ( i=1;i<=5;i++ ) 3 1 *# { if ( i%2 ) 4 0 printf(\ 5 1 *# else $\\n continue; printf(\} printf(\ } 14. 设x和y 均为int型变量,则执行下面的循环后,y 的值为 6 。6 for (y=1,x=1;y<=50;y++) { if (x>=10) break; if (x%2= =1) 25 { x+=5; continue; } x- =3; } 15. 执行下列程序后,a的值为 8 。 8 main( ) { int a,b; for (a=1,b=1;a<=100;a++) { if (b>=20) break; if(b%3= =1) { b+=3; continue; } b-=5; } printf(―%d\\n‖,a); } 16. 以下程序的输出结果是 a=41 。 a=41 main( ) { i a a=a+2 a=a+3 a=a+5 int a=0,i; 0 0 2 5 10 for(i=0;i<5;i++) 1 10 13 18 { 2 18 21 26 switch(i) 3 26 28 31 36 { case 0: 4 36 41 case 3:a+=2; case 1: case 2:a+=3; default:a+=5; } } printf(\} 17. 仔细分析下列程序或程序段,写出执行结果 。 * #include int i; i i%2 i++ i=i+2 printf for (i=1;i<=5;i++) 1 1 3 *\\n switch(i%2) 4 0 5 #break 6 26 { case 0: i++; printf(―#‖);break; case 1: i+=2; printf(―*‖); default: printf(―\\n‖); } } 18. 下面程序的运行结果是 。 2,3 #include int i,k=0; for(i=1; ;i++) { k++; while(k if(k%3= =0) goto loop; } } loop:printf(―%d,%d‖,i,k); } 19. 下面程序的运行结果是 。 8,-2 #include int i,b,k=0; for (i=1;i<=5;i++) { b=i%2; while(b-->=0) k++; } printf(―%d,%d‖,k,b); } 20. 下面程序的运行结果是 。 4 main( ) { int i,j,a=0; for(i=0;i<2;i++) { for(j=0;j<4;j++) { if(j%2) break; a++; } 27 i k k++ i*i k++ k%3 1 0 1 1 2 1 2 4 3 0 goto i b k b=i%2 b>=0 b-- k++ 1 0 1 1>=0T 0 1 0>=0T -1 2 -1>=0F -2 2 -1 2 0 0>=0T -1 3 -1>=0F -2 3 -1 3 1 1>=0T 0 4 0>=0T -1 5 -1>=0F -2 4 -1 5 0 0>=0T -1 6 -1>=0F -2 5 -1 6 1 1>=0T 0 7 0>=0T -1 8 -1>=0F -2 i j a j%2 a++ a++ 0 0 0 0 1 1 1 1 break 2 1 0 2 0 3 1 1 1 break 4 2 a++; } printf(―%d\\n‖,a); } 21. 下面程序的输出结果是 。1 i j m n j>i m=1 n++ main( ) 0 0 0 0 0>0F { 1 0 0 1>0T 1 1 int i,j,m=0,n=0; 2 for(i=0;i<2;i++) 1 0 1 1 0>1F for(j=0;j<2;j++) 1 1 1 1>1F if(j>i) { m=1; n++; } 2 printf(\2 } 三、程序填空题 1. 下面程序段是从键盘输入的字符中统计数字字符的个数,用‘#‘结束循环。 int n=0,c; c=getchar( ); while ( c!=‘#‘ ① ) c!=‘#‘ { if( ②c>=‘0‘&&c<=‘9‘) c>=‘0‘&&c<=‘9‘ n++; c=getchar( ); } 2. 下面程序的功能是计算0-2+4-6+……..-98+100的值。 #include int i,t= -1,s=0; for(i=2;i<=100;i+=2) { t=t*i ① ; s=s+t; t=-t/i ② ;} t= -t/i printf(―%d\\n‖,s); } 3. 下面程序的功能是在输入的一批正整数中求出最大者,输入0结束循环,请 选择填空。 #include int a,max=0; scanf(―%d‖,&a); while( ① ) a!=0 or a { if(max ② ; max=a scanf(―%d‖,&a); } 28 printf(―%d‖,max); } 4. 下面程序的功能是打印100以内个位数为5且能3整除的所有数。 #include ,stdio.h> main() { int i,j; for(i=0; ① ;i++) i<10 { j= ② ; i*10+5 if(j%3!=0) continue; printf(―%d‖,j); } } 5. 下面程序的功能是求1000以内的所有完数。(说明:一个数若恰好等于它的 因子之和,则称该数为完数,例如:6=1+2+3,6为完数) #include int a,i,m; for(a=1;a<=1000;a++) { for( ① ; i<=a/2; i++) i=1,m=0 if( ② ) !(a%i) or a%i= =0 m=m+i; if(m= =a) printf(―M‖,a); } } 6. 下面程序的功能是完成用一元人民币换成一分、两分、五分的所有兑换方案。 每5种方案为一行。 #include { int i,j,k,l=1; for (i=0;i<=20;i++) for(j=0;j<=50;j++) { k= ① ; 100-5*i-j*2 if(k>=0) { printf(― ---‖,I,j,k); l=l+1; if( ② ) l%5= =0 printf(―\\n‖); 29 } } } 7. 下面程序的功能是用do—while语句求1至1000之间满足“用3除余2;用 5除余3;用7除余2”的数,且一行只打印五个数。 #include int i=1,j=0; do { if ( ① ) i%3= =2&&i%5= =3&&i%7= =2 { printf(―M‖,i); ② ; j=j+1 if(j%5= =0) printf(―\\n‖); } i=i+1; }while (i<1000); } 8. 下面程序段是找出整数的所有因子,请填空。 scanf(―%d‖,&x); i=1; for( ; ① ; ) i<=x/2 { if( ② ) x%i= =0 printf(―=‖,i); i++; } 9. 对于终端上输入的正文分别进行字符、字、行统计,并输出统计结果。请填 空。 如: I am a student. You are a teacher. Bye.# 结果显示:line=3 word=9 character=39 #include \main( ) { int n_line=0,n_word=0, n_chara=0, inword=0; char c; while (( c=getchar( ))!='#' ) { ++n_chara; 30 if (c= ='\\n') ++n_line; if (c= =' '||c= ='\\t' ||c= =‘\\n‘) ① ; inword=0 else if (inword= =0) { ② ; inword=1 ++n_word; } } printf (\ line=%dword=üharacter=%d\\n\ } 10. 打印出100~1000之间的所有“水仙花数”(“水仙花数”是指一个3位数, 各位数字的立方和等于该数本身。如:153=13+53+33,153就是“水仙花数”) main( ) { int i,j,k,n; for(n=100;n<1000;n++) { i=n/100; j= ① ; n/10-i*10 k=n; if( ② ) n= =i*i*i+j*j*j+k*k*k printf(―M‖,n); } } 第六章 数组 一、单项选择题 1. C语言中,引用数组元素时,其数组下标的数据类型允许是( )。C A)整型常量 B)整型表达式 C)整型常量或整型表达式 D)任何类型的表达式 2. 以下对一维整型数组a的正确说明是( )。D A)int a(10); B)int n=10,a[n]; C)int n; D)#define size 10 scanf(―%d‖,&n); int a[size]; int a[m]; 3. 若有以下说明: int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; char c=‘a‘,d,g; 则数值为4的表达式是( )。D A)a[g-c] B)a[4] C)a[?d‘-?c‘] D)a[?d‘-c] 4. 以下二维数组a的正确说明是( )。C A)int a[3][ ]; B)float a(3,4); 31 C)double a[1][4]; D)float a(3)(4); 5. 以下不正确的定义语句是( )。B A)double x[5]={2.0,4.0,6.0,8.0,10.0}; B)int y[5]={0,1,3,5,7,9}; C)char c1[ ]={?1‘,‘2‘,‘3‘,‘4‘,‘5‘}; D)char c2[ ]={?\\x10‘,‘\\xa‘,‘\\x8‘}; 6. 以下不能对二维数组a进行正确初始化的语句是( )。C A)int a[2][3]={0}; B)int a[ ][3]={{1,2},{0}}; C)int a[2][3]={{1,2},{3,4}, {5,6}}; D)int a[ ][3]={1,2,3,4,5,6}; 7. 以下程序的输出结果是( )。B a: 0 1 2 3 4 5 6 7 8 9 main( ) i=0 a[0*1]=a[0] { i=1 a[1*2]=a[2] int i,k,a[10],p[3]; i=2 a[2*3]=a[6] k=5; p: 0 2 6 for(i=0;i<10;i++) a[i]=i; i p[i]*2 k=k+ for(i=0;i<3;i++) p[i]=a[i*(i+1)]; 0 0*2=0 5+0=5 for(i=0;i<3;i++) k+=p[i]*2; 1 2*2=4 5+4=9 printf(\ 2 6*2=12 9+12=21 } A)20 B)21 C)22 D) 23 8. 下列程序( C )(每行前的数字表示行号)。 1 main( ) 2 { float a[10]={0.0}; int i; 3 for(i=0;i<3;i++) scanf(\ 4 for(i=1;i<10;i++) a[0]=a[0]+a[i]; 5 printf(\ } A)没有错误 B)第2行有错 C)第3行有错 D)第5行有错 9. 以下程序的输出结果是( )。C 1 2 3 main( ) 4 5 6 { 7 8 9 int i,x[3][3]={1,2,3,4,5,6,7,8,9}; i x[i][2-i] for(i=0;i<3;i++) 0 x02=3 printf(\ 1 x11=5 } A)1,5,9, B)1,4,7, C)3,5,7, D)3,6,9, 10. 阅读以下程序 main( ) { n: 0 0 0 int n[3],i,j,k; for(i=0;i<3;i++) i j n[j]=n[i]+1 n[i]=0; k=2; 0 0 n0=n0+1=1 for(i=0;i for(j=0;j 0 1 n1=n0+1=1+1=2 n[j]=n[i]+1; 32 1 0 n0=n1+1=2+1=3 1 1 n1=n1+1=2+1=3 printf(\} 上述程序运行后,输出结果是( )。D A)2 B)1 C)0 D)3 11. 以下程序运行后,输出结果是( )。B main( ) i y a[i]=y%2 i++ y=y/2 { 0 18 a0=0 1 9 int y=18,i=0,j,a[8]; 1 9 a1=1 2 4 do 2 4 a2=0 3 2 { 3 2 a3=0 4 1 a[i]=y%2; i++; y=y/2; 4 1 a4=1 5 0 }while(y>=1); for(j=i-1;j>=0;j--) printf(\ printf(\ } A)1000 B)10010 C)0110 D)10100 12. 下面是对字符数组s的初始化,其中不正确的是( )。D A)char s[5]={―abc‖}; B)char s[5]={?a‘,‘b‘,‘c‘}; C)char s[5]=‖‖; D)char s[5]=‖abcdef‖; 13. 对两个字符数组a和b进行如下初始化: char a[ ]=‖ABCDEF‖; char b[ ]={?A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘}; 则以下叙述正确的是( )。D A)a与b数组完全相同 B)a与b长度相同 C)a和b中都存放字符串 D)a数组比b数组长度长 14. 下述对C语言字符数组的描述中错误的是( )。C A)字符数组可以存放字符; B)字符数组中的字符串可以整体输入、输出; C)可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值; D)不可以用关系运算符对字符数组中的字符串进行比较。 15. 能正确进行字符串赋值的是( )。C A)char s[5]={'a','e','i','o','u'}; B)char s[5]; s=\C)char s[5]=\ D)char s[5]; s[ ]=\16. 不能正确为字符数组输入数据的是( )。A A)char s[5]; scanf(\,&s); B)char s[5]; scanf(\,s); C)char s[5]; scanf(\,&s[0]); D)char s[5]; gets(s); 17. 下面程序段的运行结果是( )。B char c[5]={?a‘,‘b‘,‘\\0‘,‘c‘,‘\\0‘}; printf(―%s‖,c); A)‘a‘‘b‘ B)ab C)ab c D)‖ab‖ 18. 若有char a[80],b[80];则正确的是( )。D A)puts(a,b); B)printf(\C)putchar(a,b); D)puts(a);puts(b); 19. 若已定义char s[10];在下面表达式中不能表示s[1]的地址的是( )。B A)s+1 B)s++ C)&s[0]+1 D)&s[1] 33 20. 有以下的程序段: char a[3],b[ ]=\ a=b; printf(\ 则( )。C A)运行后将输出China B)运行后将输出Ch C)编译出错 D)运行后将输出Chi 21. 下面程序段的运行结果是( )。B char c[ ]=‖\\t\\r\\\\\\0will\\n‖; printf(―%d‖,strlen(c )); A)14 B)3 C)9 D)字符串中有非法字符,输出值不确定 22. 有以下程序 main( ) { char s[]=\ printf(\ } 执行后输出结果是( )。 C A)赋初值的字符串有错 B) 6,7 C)5,6 D)6,6 23. 若已定义char s[2][40]={―china‖,‖English‖};则在下面表达式中能表示字符‘E’的地址的是( )。C A)&s[2][1] B)&(s[1]+1) C)s[1] D)&s[1] 24. 以下程序的输出是( )。D main( ) a: 6 9 3 7 { 8 2 5 4 char a[2][5]={\i j s s=10*s+a[i][j]-?0‘ j=j+2 for ( i = 0; i < 2; i++ ) 0 0 0 10*0+a00-48=6 2 for ( j = 0; a[i][j]>'0' && a[i][j]<='9'; j+=2 ) 0 2 6 10*6+a02-48=63 4 s=10*s+a[i][j]-'0'; 0 4 printf(\ 1 0 63 10*63+a10-48=638 2 } 1 2 638 10*638+a12-48=6385 4 A)693825 B)69825 C)63825 D)6385 25. 下面描述正确的是( )。D A)字符串所包含的字符个数相同时,才能比较字符串 B)字符个数多的字符串比字符个数少的字符串大 C)字符串\ \与\相等 D)字符串“That”小于字符串\ 26. 判断字符串a和b是否相等,应当使用( )。D A)if (a= =b) B)if (a=b) C)if(strcpy(a,b)) D)if(strcmp(a,b)) 27. 下面程序段的运行结果是( )。D main( ) { int i,j; char str[ ]=‖1234567‖,k; 34 for ( i=1,j=strlen(str)-2; i A)7654321 B)1234567 C)1543267 D)1654327 28. 下面程序段的运行结果是( )。D main( ) { a:abcdef char a[7]=‖abcdef‖; b:ABC char b[4]=‖ABC‖; a:ABC\\0ef\\0 strcpy(a,b); printf(―%c‖,a[5]); } A)_ B)\\0 C)e D)f (其中“_”表示空格) 29. 当执行下面程序且输入“ABC”时,输出的结果是( )。A #include ss:123456789\\0 main( ) ss:ABC\\056789\\0 { char ss[10]=\ gets(ss); printf(\ } A)ABC B)ABC9 C)123456ABC D)ABC456789 二、阅读程序写出程序运行结果 1. 上述程序运行后,输出结果是 。3 main( ) { n:000 int n[3],i,j,k; i j k n[j]=n[i]+1 for(i=0;i<3;i++) n[i]=0; 0 0 2 n0=n0+1=1 k=2; 1 n1=n0+1=1+1=2 for(i=0;i 1 0 n[0]=n1+1=1+2=3 for(j=0;j 1 n1=n1+1=3 n[j]=n[i]+1; printf(\} 2. 下面程序段的运行结果是 。he char x[ ]=‖the teacher‖; x:the teacher int i=0; i ++i x[i] x[i-1] prn while (x[++i]!=‘\\0‘) 0 1 x1=h x0=t h if (x[i-1]= =‘t‘) 当前元素不是\\0,前一个元素是t的就打印输出 printf(―%c‖,x[ i ]); 3. 下面程序的运行结果是 。 a a b c d #include 35 str:1234567 i j str[i] str[j]的交换 i++ j-- 1 5 str1 str5 1634527 2 4 2 4 str2 str4 1654327 3 3 { int i=5; char c[6]=‖abcd‖; do { c[i]=c[i-1]; }while(--i>0); puts(c); } 4. 以下程序的输出是 。 fi main( ) a: a b c { e f g char a[3][4]={\ h i j int k; k a[k][1] for(k=1;k<3;k++) 1 a11=f putchar(a[k][1]); 2 a21=i } 5. 以下程序的输出是 。(□表示空格,↙表示回车)AHaMA #include \main( ) { char a[80],c='h'; int j=0; scanf(\ a:AhaMA while(a[j]!='\\0') { if (a[j]==c ) 判断是否为小写的h a[j]=a[j]-32; 小写变大写 else if ( a[j]==c-32 ) 判断是否为大写的H a[j]=a[j]+32; 大写变小写 j++; } puts(a); } 输入:AhaMA□Aha↙ 6. 读下列C程序,若输入字符串Examination,请写出输出结果。 #include char str[20]; int i=0; int count[2]={ 0}; gets(str); do { switch(str[i++]) 36 c:abcd\\0 i c[i]=c[i-1] --i 5 c5=c4=\\0 abcd\\0\\0 4 4 c4=c3=d abcdd\\0 3 3 c3=c2=c abccd\\0 2 2 c2=c1=b abbcd\\0 1 1 c1=c0=1 aabcd\\0 0 { case 'a': case 'A': case 'e': case 'E': case 'i': case 'I': case 'o': case 'O': case 'u': case 'U': count[0]++; default: count[1]++; } } while(str[i]!='\\0'); printf(\ str:Examination\\0 count:0 0 i str[i] count[0]++ count[1]++ i++ 0 str0=E 1 1 1 str1=x 2 2 2 str2=a 1 3 是字母aeio的,count0+1且count1+1 不是的,count1+1 } 程序的输出结果为 。count[0]=6, count[1]=11 7. 以下程序的输出是 。GDABC #include \main( ) { char b[30]; strcpy (b,\ b:GH\\0 strcpy (&b[1],\ b:GDEF\\0 strcpy (&b[2],\ b:GDABC\\0 puts(b); } 8. 下列程序中字符串中各单词之间有一个空格,则程序的输出结果是 。 #include char str1[ ]=\ strcpy(str1+strlen(str1)/2,\ str1+6=&str[6]=‘ ? printf(\ str1:How does she } 9. 以下程序的输出是 。LBLMNP #include \main( ) { char a[80]=\ j a[j] j++ b[j]=a[j] b int j=0; 0 a0 1 b1=a1=B LBNP\\0 strcat(a,b); a:ABLMNP\\0 1 a1 2 b2=a2=L LBLP\\0 while(a[j++]!='\\0') 2 a2 3 b3=a3=M LBLM\\0 b[j]=a[j]; .........b:LBLMNP\\0 puts(b); } 10. 以下程序输出的结果是 。FGH #include 37 #include { char w[ ][10]={\ for(k=1;k<3;k++) k=1 w11:FGH printf(\ k=2 w22:KL } 11. 下面程序的运行结果是 。 7078 #include ―stdio.h‖ 9198 #define LEN 4 main( ) { int j,c; char n[2][LEN+1]={―8980‖,‖9198‖}; for(j=LEN-1;j>=0;j--) { c=n[0][j]+n[1][j]-2*‘0‘; n[0][j]=c+‘0‘; } for(j=0;j<=1;j++) puts(n[j]); } 三、程序填空题 1. 将数字变成所对应的字母,如:198变成字符串‖198‖。 main( ) { int i=0,t,x; char a[10]; scanf(―%d‖,&x); while( 错误!未找到引用源。 ) x!=0 { t=x; a[i++]= ② ; t+‘0‘ x=x/10; } for(i=i-1;i>=0;i--) printf(―%c‖,a[i]); } 2. 用选择法对数组a[10]={5,7,8,9,0,3,2,1,6,4}由小到大的排序 main( ) { int i,j,k,t,a[10]= {5,7,8,9,0,3,2,1,6,4}; for(i=0;i<9;i++) { ① ; k=i for(j=i+1;j<10;j++) if(a[k]>a[j]) 38 w: A B C D\\0 E F G H\\0 I J K L\\0 M N O P\\0 k=j; if( ② ) i!=k { t=a[k];a[k]=a[i];a[i]=t; } } for(i=0;i<10;i++) printf(―M‖,a[i]); } 3. 有10个人围成一圈,顺序排号,从第一个人开始报数,凡报到3的人退出 圈子,问留下来的是原来的第几号的那位。 main( ) { int i,k=0,m=0,a[10]; for(i=0;i<10;i++) a[i]=i+1; i=0; while( 错误!未找到引用源。 ) m<9 { if(a[i]!=0) k++; if(k= =3) { a[i]=0; k=0; m++; } i++; if(i= =10) ② ; i=0 } i=0; while(a[i]= =0) i++; printf(―M‖,a[i]); } 4. 下面程序功能是检查一个4阶矩阵是否对称(即对所有的i,j,都有 num[i][j]=num[j][i] ,请填空。 #include int num[4][4]; int i, j, flag=0; printf(\ for(i=0; i<4; i++) for(j=0; j<4; j++) 39 scanf(\ 错误!未找到引用源。 ); &num[i][j] for(i=0; i<4; i++) for(j=0; j<4; j++) if( 错误!未找到引用源。 ) num[i][j]!=num[j][i] { flag=1; break; } if(flag) printf(\ else printf(\ } 参考答案: ① &num[i][j] ②num[i][j]!= num[j][i] 第七章 函数 一、单项选择题 1. 以下函数调用语句中实参的个数是( )。B fun((exp1,exp2), (exp3,exp4,exp5)); A)1 B)2 C)4 D)5 2. 若有以下函数调用语句: fun(a+b, (x,y), fun(n+k,d,(a,b))); 在此函数调用语句中,实参的个数是( )。A A)3 B)4 C)5 D)6 3. 若有以下调用语句,不正确的fun函数的首部是( )。D main( ) { …… int a[50],n; …… fun(n, &a[9]); …… } A)void fun(int m, int x[ ]) B)void fun(int s, int h[41]) C)void fun(int p, int *s) D)void fun(int n, int a) 4. 请读下面的程序 #include int i; int r=1; for(i=0; i<=n; i++) r=r*b[i]; 将a数组中的内容累乘1*2*3*4*5*6*7*8*9 40 return r; } main( ) { int x,a[ ]={2,3,4,5,6,7,8,9}; x=f(a,3); printf(\ return 0; } 上面程序的输出结果是( )。B A)720 B)120 C)24 D)6 5. 有以下程序: #include void fun(int a,int b,int c) { a=456; b=567; c=678; } main( ) { int x=10,y=20,z=30; fun(x, y, z); printf(\ return 0; } 输出结果是( )。B A)30,20,10 B)10,20,30 C)456,567,678 D)678,567,456 6. 下面程序的输出结果是( )。C #include int c; c=a+b; return c; } main( ) { int x=6,y=7,z=8,r; r=func((x--, y++, x+y), z--);(13,8) 将逗号表达试的值作为函数的参数 printf(\ return 0; } A)11 B)20 C)21 D)31 41 7. 下列程序执行后输出的结果是( )。A #include int d=5; d+=p++; d=d+p=5+3=8 p++=4 printf(\ \ return d; } main( ) { int a=3; fun(a); fun(3) d+=a++; d=d+a=1+3=4 a++ printf(\ return 0; } A)8 4 B)9 6 C)9 4 D)8 5 8. 下面程序的输出是( )。A #include static a=3; a+=x; return a; } main( ) { int k=2,m=1,n; n=fun3(k); n=fun3(m); printf(\ return 0; } A)6 B)9 C)0 D)3 9. 以下叙述中不正确的是( )。 D A)在不同的函数中可以使用相同名字的变量 B)函数中的形式参数是局部变量 C)在一个函数内定义的变量只在本函数范围内有效 D)在一个函数内的复合语句中定义的变量在本函数范围内有效 10. 以下程序的输出结果是( )。 B #include main( ) 42 { int i=1,j=3; printf(―%d,‖,i++); i=1 i++=2 { int i=0;i+=j*2;printf(―%d,%d,‖,i,j); } j*2=6 i=i+6=0+6=6 printf(―%d,%d\\n‖,i,j); } A)1,6,3,1,3 B)1,6,3,2,3 C)1,6,3,6,3 D)1,7,3,2,3 11. 下列程序执行后输出的结果是( )。D #include int b=0; static c=3; i f(a) a++ a b c a=c c++ b++ k a=c++,b++; 0 f(2) 3 2 0 3 3 4. 1 3 return a; 1 f(3) 4 3 0 4 4 5 1 4 } int main(int argc, char argv[]) { int a=2,i,k; for(i=0; i<2; i++) k=f(a++); printf(\ return 0; } A)3 B)0 C)5 D) 4 12. 以下程序的输出结果是( )。A #include } func(int a, int b) { static int m=0,i=2; i+=m+1; m=i+a+b; return m; } 43 A)8,17 B)8,16 C)8,20 D)8,8 13. 如果一个文件要引用另一个文件中的变量,必须通过( )来实现。 B A)用extern对变量说明 B)#include预处理命令 C)#define预处理命令 D)用typedef重新定义 二、阅读程序写出程序运行结果 1. 下列程序执行后输出的结果是 4 。如果语句static z=3;改为int z=3;程序执行后输出的结果是 3 。 4 3 #include int y=0; static z=3; x=z++,y++; return(x); } main( ) { int a=2,i,b; for(i=0;i<2;i++) b=func(a++); printf(\} 2. 下面程序输出的结果 。 4 #include int y=0; static z=3; x=z++,y++; return(x); } main( ) { int a=2,i,b; for(i=0; i<2; i++) b=func(a++); printf(\ return 0; } 3. 有下列程序: #include static int x[3]={2, 3, 4}; 44 i a func() a++ x y z x=z z++ y++ b 0 2 2 3 2 0 3 3 4 1 3 1 3 3 4 3 0 4 4 5 1 4 0 2 2 3 2 0 3 3 4 1 3 1 3 3 4 2 0 3 3 4 1 3 int i; for(i=0; i<3; i++) x[i]+=x[i]-m; for(i=0; i<3; i++) printf(\ printf(\ return(x[m]); } main( ) { int y=1; f(f(y)); } 3 5 7 该程序运行的结果为 。 1 5 9 4. 读下列C程序,请写出程序运行后的输出结果。 #include char t[20]; int i,j; p1:‖abc‖ p2:‖aabdfg‖ for(i=0;i p3:‖abbd‖ p4:‖acdbe‖ for (j=i+1;j if(strcmp(p[i],p[j])<0) p5:‖cd‖ i j p[i] 0 1 p0 p1 strcpy(p[i],p[j]); 将数组用冒泡法从大到小的排序 strcpy(p[j],t); } } main( ) { char p[ ][10]={\int i; f(p,5); printf(\ } 程序的输出结果为 。 5 5. 以下程序的输出结果是 。 8,17 同选择12题 #include int k=4,m=1,p; p=func(k, m); printf(\ p=func(k, m); 45 y=1 f(y)=f(1) m=1 x:2,3,4 i m x[i]-m x[i]=x[i]+ 0 1 2-1=1 2+1=3 1 1 3-1=2 3+2=5 2 1 4-1=3 4+3=7 x:3 5 7 x[1] return(5) f(f(y))=f(5) m=5 x:3 5 7 i m x[i]-m x[i]=x[i]+ 0 5 3-5=-2 3+(-2)=1 1 5 5-5=0 5+0=5 2 5 7-5=2 7+2=9 x:1 5 9 printf(\ return 0; } int func(int a, int b) { static int m=0,i=2; i+=m+1; m=i+a+b; return(m); } 6. 有以下程序 #include \ a=24 b=16 int abc(int u, int v); u=24 v=16 main( ) u v w=u%v u=v v=w { 24 16 24=8 16 8 int a=24,b=16,c; 16 8 16%8=0 8 0 c=abc(a, b); 8 0 printf(\ return 0; } int abc(int u, int v) { int w; while(v) { w=u%v; u=v; v=w; } return u; } 输出结果是 。 8 三、程序填空题 1. 下面的函数将一个整型数组按降序排序后,结果仍存入该数组 sort(int array[ ], int num) { int i,j,temp; for( 错误!未找到引用源。 ; j>0; j--) j=num for(i=0; i if( 错误!未找到引用源。 ) array[i] { temp=array[i]; array[i]=array[i+1]; array[i+1]=temp; 46 } } } ① j=num ②Array[i] 2. 下面程序用于求S?1!?2!???n!,试将其补充完整。 long int factor(int n) { int i; long int t=1; for(i=1;i<=n;i++) t= ① ; t*i return t; } main( ) { long int s=0; int k,n; scanf(\for(k=1;k<=n;k++) s= ② ; s+factor(n) printf(\ } 3. 输入两个正整数m和n,求其最大公约数和最小公倍数 f(int a, int b) { int i,max; for(i=1;i<=b/2;i++) if( ① ) (a%i= =0)&&(b%i= =0) max=i; return(max); } main( ) { int n,m,max,min; printf(―输入两个正整数 n , m:‖); scanf(―%d,%d‖,&n,&m); if(m>n) max=f(m,n); else max=f(n,m); mix= ② ; (m*n)/max printf(―最大公约数为:%d,最小公倍数为:%d‖,max,min); } 4. 下面程序能统计主函数调用count函数的次数(用字符#作为结束输入的标 志)。 47 #include\main( ) { char ch; while(1) { scanf (\ count (ch); if ( ① ) ch = = ' # ' break; } } count (char c) { static int i=0; i++; if ( ② ) c = = ' # ' printf (\ } 5. 统计两个数组中相应元素大于、等于或小于的次数,并由此决定那个数组较 大。 #include main( ) { int i,k=0,m=0,n=0,flag; int a[10]={1,3,5,7,9,8,6,4,2,0}; int b[10]={5,3,8,9,-1,-3,5,6,0,4}; for(i=0;i<10;i++) { flag=large(a[i],b[i]); if(flag==1) 错误!未找到引用源。 ; n++ else if(flag==0) m++; else k++; } printf(\d\\n\ if(n>k) printf(\ else if(n printf(\ 48 } int large(int x,int y) { int flag; if(x>y) flag=1; else if(x } 第8章 编译预处理 一、单项选择题 1. 以下有关宏替换的叙述不正确的是( )。D A)宏替换不占用运行时间 B)宏名无类型 C)宏替换只是字符替换 D)宏名必须用大写字符表示 2. 若有宏定义:#define MOD(x,y) x%y 则执行以下语句后的输出为( )。B int z,a=15,b=100; z=MOD(b,a); printf(―%d\\n‖,z++); A)11 B)10 C)6 D)宏定义不合法 3. 请选出以下程序段的输出结果( )。A #include #define MIN(x,y) (x)<(y)?(x):(y) main( ) { int i,j,k; i=10; j=15; k=10*MIN(i,j); printf(\ } A)15 B)100 C)10 D)150 4. 请读程序: #define ADD(x) x+x main( ) { int m=1,n=2,k=3; int sum=ADD(m+n)*k; m+n+m+n*k printf(―sum=%d‖,sum); } 上面程序的运行结果是( )。B A)sum=9 B)sum=10 C)sum=12 D)sum=18 5. 执行下面的程序后,a的值是( )。B #define SQR(X) X*X 49 main( ) { int a=10,k=2,m=1; a/=SQR(k+m)/SQR(k+m); k+m*k+m/k+m*k+m printf(\ } A)10 B)1 C)9 D)0 6. 下列程序执行后的输出结果是( )。B #define MA(x) x*(x-1) main( ) { int a=1,b=2; printf(\ } A)6 B)8 C)10 D)12 7. 以下程序的输出结果是( )。 B #include ―stdio.h‖ #define FUDGE(y) 2.84+y #define PR(a) printf(\ #define PRINT1(a) PR(a); putchar(?\\n‘) main( ) { int x=2; PRINT1(FUDGE(5)*x); } A)11 B)12 C)13 D)15 8. 下面程序运行的结果是( )。 A #define f (x) 1+x+x*x #include int a=2, b=3; printf(\ } A)17 B)31 C)13 D)7 9. 以下for语句构成的循环执行了( )次。C #define N 2 #define M N+1 #define NUM (M+1)*M/2 main( ) { int i , n=0; for( i=1;i<=NUM;i + + ) (2+1+1)*2+1/2 4*2+0 n++; 50
正在阅读:
C - C++语言同步习题 - 2007(答案和分析zeng)02-02
项目部级安全教育考试卷07-04
安徽省江淮十校2018届高三4月第三次联考理综物理试题12-09
毕业论文终稿(一个简易操作系统的实现)06-27
湖南省蓝山二中2012届高三数学第三次考试试题 理03-08
浙江大学2015~2016学年接受国内访问学者目录2(1)课件03-08
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- C++
- 习题
- 同步
- 答案
- 语言
- 分析
- 2007
- zeng
- 员工工作计划完成情况考核实施细则
- 安徽省基层医疗卫生机构管理信息系统建设项目实施方案
- 茶园禁用和建议停用农药
- Manhattan GMAT语法-中文精简版
- 国统考前模拟题
- 华为QUIDWAY S3700密码清除-原创
- 制造工程实习报告
- 羧酸衍生物-楚雄师范学院 - 现代教育技术网站
- 电大国际企业管理平时作业答案
- 国际私法基本概念大全
- 2019版高考英语一轮复习浙江专版精选提分专练(含2018最新模拟题)Word版含答案
- 基础教育教学研究实验学校评估自查报告
- 制冷压力管道施工组织设计
- 中医优势病种消化系统诊疗方案
- 小学数学四年级下册各单元试卷分析报告 - 图文
- 上海海事大学物流学原理第七章
- 校园网络规划设计方案 - 图文
- 计算机导论试题及答案(总)
- 编译原理期末复习题(含答案)
- 教师代表在大学毕业典礼发言稿