C - C++语言同步习题 - 2007(答案和分析zeng)

更新时间:2024-02-02 22:55:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《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 main( ) {

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 main( ) {

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 main( ) {

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 main( )

{ 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 main( ) {

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 main( ) {

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 x<-a或x>a x

#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 main( )

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 #define N 6 main( ) {

char c[N]; int i=0;

for(;i

输入以下3行,每行输入都是在第一列上开始,代表一个回车符:

a b

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 main( ) m n m=m-n n=n-m { 65 14 51 int m,n; 51 14 37 printf(―Enter m,n:‖); 37 14 23 scanf(―%d%d‖,&m,&n); 23 14 9 while(m!=n) 9 14 5 { 9 5 4 while(m>n) m- =n; 4 5 1 while(n>m) n- =m; 4 1 3 } 2 printf(―m=%d\\n‖,m); 1 }

程序的运行结果是 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 main( ) {

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 main( ) {

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 main( ) {

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  main( )

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 # main( ) {

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 main( ) {

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 main( ) {

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 main( ) {

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 main( ) {

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 main( ) {

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 main( )

{ 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 main( ) {

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 #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 main( )

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 main( ) {

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 How does she main( ) {

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 KL

37

#include main( )

{

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 main( ) {

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 f(int b[ ], int n) {

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 func(int a,int b) {

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=1; int fun(int p) p=3 {

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 int fun3(int x) {

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 f (int a) {

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); main( ) { k m a b m i m+1 i=i+(m+1) m=i+a+b p int k=4,m=1,p; 4 1 4 1 0 2 1 3 8 8 p=func(k, m); 4 1 4 1 8 3 9 12 17 17 printf(\ p=func(k, m); printf(\ return 0;

}

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 func(int x) {

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 func(int x) {

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 int f(int m) {

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 void f (char p[][10],int n) {

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 func(int a, int b); main( ) {

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 int large(int x, int y);

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 void main( ) {

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

本文来源:https://www.bwwdw.com/article/4avw.html

Top