C语言全部章节习题集(本)

2、请将以下语句改写成switch语句。 if((s>0)&&(s<=10))

if((s>=3)&&(s<=6)) x=2; else if((s>1)||(s>8)) x=3; else x=1; else x=0;

6 循环控制

一、单项选择题

1、for(i=1;i<9;i+=1);该循环共执行了( )次。 A. 7 B. 8 C. 9 D. 10

2、int a=2;while(a=0) a--;该循环共执行了( )次。 A. 0 B. 1 C. 2 D. 3

3、执行完循环 for(i=1;i<100;i++);后,i 的值为( )。 A. 99 B. 100 C. 101 D. 102 4、以下 for语句中,书写错误的是 。

A. for(i=1;i<5;i++) B. i=1;for(;i<5;i++) C. for(i=1;i<5;i++); D. for(i=1;i<5;) i++; 5、( )语句,在循环条件初次判断为假,还会执行一次循环体。 A. for B. while C. do-while D. 以上都不是

6、有以下程序段 int i=5; do{ if(i%3==1) if(i%5==2) {printf(\break; } i++; }while(i!=0); 其运行结果是( ) A.*2*6 B. *7 C.*5 D. *3*5

7、i、j已定义为 int 类型,则以下程序段中内循环体的执行次数是( ) 。 for(i=5;i;i--) for(j=0;j<4;j++){?} A. 20 B. 24 C. 25 D. 30

8、以下不构成无限循环的语句或语句组是( )。

A.n=10; while(n);{n--;} B.n=0; while(1){n++;} C.n=0; do{++n;}while(n<=0); D.for(n=0,i=1;;i++)n+=i;

9、有以下程序段int y=9; for(y>0;y--) if(y%3==0) printf(\其运行结果是( )。

A. 875421 B.963 C.852 D. 741

10、有以下程序段:int i,j;for(i=3;i>=1;i--){for(j=1;j<=2;j++) printf(\其运行结果是( )。

A.2 3 4 B.4 3 2 C.2 3 D.4 5

- 11 -

3 4 5 5 4 3 3 4 3 4 4 5 2 3

二、判断题

( )1、do {??} while(0); 程序块至少会执行一次 ( )2、语句 for(i=0;i=10;i++) {??}; 至多循环10次 ( )3、for( ; ; )表示无限循环。

( )4、下面的循环不能正常结束: for (s=0,i=1; i<=10; ) { s=s+i; i++; } ( )5、continue语句是终止整个循环的执行。

( )6、对for(表达式1;;表达式3;)可理解为for(表达式1;1;表达式3;)。 ( )7、下列程序段执行循环二次 x=-1; do {x=x*x;}while(!x);

( )8、下列程序段能计算s=10!的值 i=1;s=1; do {s=s*i;i++;} while(i<=10); ( )9、下列程序段将输出3和0 , int x=3; do{printf(“%d\\n”,x-=2);}while(!--x));

三、程序填空题

1.有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天后卖完? main( )

{ int day,x1,x2; day=0; x1=1020; while( )

{ x2= ; x1= ; day++; } printf(\}

2.输入若干个字符,分别统计数字字符的个数、英文字母的个数,当输入换行符时输出统计结果,运行结束。 #include void main( ) { int s1=0,s2=0;

char ch; while(( )!='\\n') { if(ch>='0'&&ch<='9') s1++;

if(ch>='a'&&ch<='z' || ) s2++; } printf(“%d,%d”,s1,s2); }

- 12 -

3.下面程序的功能是计算1-3+5-7+??-99+101的值,请填空。 #include main( )

{ int i=1,t=1,s=0;

for(i=1;i<=101; i=i+2 )

{ ; ;} printf(“%d\\n”,s); }

四、阅读下列程序,写出程序运行的输出结果

1.void main( ) { int y=9;

for( ;y>0; y--)

if(y%3==0) { printf(\}

程序运行后输出结果为 2. main( ) { int n1,n2; scanf(\while(n2!=0)

{ n1=n2; n2=n2/10; printf(\}

程序运行后,如果从键盘上输入1298;则输出结果为 3. main ( ) {int s,i;

for(s=0,i=1;i<3;i++,s+=i); printf(\}

程序运行后输出结果为 4. #include void main( )

{ int s=1,t=1,a,n;

scanf(\ for(int i=1;i

s*=a; printf(\}

程序运行后,如果从键盘上输入2,4;则输出结果为

- 13 -

五、程序改错

1、以下程序是显示[200,300]所有能被7整除的数,每行显示5个数,此程序有 5处错。 main( )

{ int i,n=0; /*n用来记录每行已打印数的个数*/ while(i<300)

{ if(i%7==0) break; printf(\ n=n+1;

if(n=5)/*满5个换行*/ { printf(\ } }

2、以下程序是求 1!+2!+3!+4!+5!+6!+7!的值,其中有 3 处错误。 main()

{ int i,s,t=0; for(i=1;i<=7;i++)

{ s=0; t=t*i; s=s+t; } printf(\ }

六、选做题

1.求序列2/1,3/2,5/3,8/5,13/8,21/13,的前20项之和。

2.请完成用一元人民币换成一分、两分、五分的所有兑换方案。

- 14 -

7 数组

一、单项选择题

1、int a[4]={5,3,8,9};其中 a[3]的值为( )。

A. 5 B. 3 C. 8 D. 9

2、以下 4 个字符串函数中,( )所在的头文件与其他 3 个不同。 A. gets B. strcpy C. strlen D. strcmp 3、以下 4 个数组定义中,( )是错误的。

A. int a[7]; B. #define N 5 long b[N]; C. char c[5]; D. int n,d[n]; 4、字符数组进行初始化,( )形式是错误。

A. char c1[ ]={'1', '2', '3'}; B. char c2[ ]=123; C. char c3[ ]={ '1', '2', '3', '\\0'}; D. char c4[ ]=\5、在数组中,数组名表示( )。

A. 数组第 1 个元素的首地址 B.数组第 2 个元素的首地址 C. 数组所有元素的首地址 D.数组最后 1 个元素的首地址 6、若有以下数组说明,则数值最小的和最大的元素下标分别是( )。 int a[12] ={1,2,3,4,5,6,7,8,9,10,11,12}; A. 1,12 B. 0,11 C. 1,11 D. 0,12

7、若有以下说明,则数值为 4 的表达式是( )。

int a[12] ={1,2,3,4,5,6,7,8,9,10,11,12}; char c=’a’, d, g ; A. a[g-c] B. a[4] C. a['d'-'c'] D. a['d'-c] 8、设有定义:char s[12] = \; 则printf( \的输出是( )。 A. 6 B. 7 C. 11 D. 12 9、设有定义:char s[12] = \则printf(\\sizeof(s)); 的输出是( )。 A. 6 B. 7 C. 11 D. 12 10、合法的数组定义是( )。

A. char a[ ]= \D. char a[ ]={0,1,2,3,4,5} 11、合法的数组定义是( )。

A. int a[3][ ]={0,1,2,3,4,5}; B. int a[ ][3] ={0,1,2,3,4}; C. int a[2][3]={0,1,2,3,4,5,6}; D. int a[2][3]={0,1,2,3,4,5,}; 12、下列语句中,正确的是 ( )。

A. char a[3][ ]={'abc', '1'}; B. char a[ ][3] ={'abc', '1'}; C. char a[3][ ]={'a', \

- 15 -

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4