c语言备考习题及部分答案.docx
《c语言备考习题及部分答案.docx》由会员分享,可在线阅读,更多相关《c语言备考习题及部分答案.docx(25页珍藏版)》请在冰豆网上搜索。
c语言备考习题及部分答案
一、判断题
1. continue 语句可以用于switch结构中。
( × )
2. break语句只能用于循环语句中。
(× )
3. do......while循环语句至少要执行一次循环体。
4. 语句while(!
E);中的条件!
E等价于E==0。
( )
5. 语句for(; ; ) {循环体} 和 while
(1) {循环体}是等价的。
( )
6. 在C语言中,for语句既可以用于计数类型循环又可以用于条件类型循环。
(
二、单选题
1. 若N为整型变量,则for(N=10;N=0;N--);循环里的循环体被( D )。
A) 无限循环 B) 执行10次 C) 执行一次 D) 一次也不执行
2. 下列程序段运行后i的值是(C )。
int i=10
switch(i+1)
{case 10:
i++;break;
case 11:
++i;
case 12:
++i;break;
default:
i=i+1;
}
A)11 B)13 C)12 D)14
3. 下面的程序,描述正确的是(B )
main()
{ int x=3;
do
{printf("%d\n",x-=2);}
while(!
(--x));
}
(A)输出的是1 (B)输出的是1和-2 (C)输出的是3和0 (D)是死循环
4. 执行下面程序后,a的值是(B )。
#include <>
void main ()
{ int a;
printf(“%d\n”,(a=3*5,a*4,a+5));
}
(A)65 (B)20 (C)15 (D)10
5. 以下程序的输出结果为( D )。
#include <>
main()
{ int i;
for (i=0;i<10; i++) ;
printf("%d",i);
}
(A) 0 (B) 9 (C) 09 (D) 10
6. C语句for(;;){ ……}是指(B )。
(A)无意义 (B)无限循环 (C)循环执行1次 (D)循环执行0次
7. 以下程序的输出结果是:
A
main ( )
{ int n = 4
while (n--)printf ("%d",--n);
}
A)2 0 B)3 1 C)3 2 1 D)2 1 0
8. 设int a=1,则执行完循环While(a++<5);a的值是:
A
A)6 B)5 C)1 D)-264
9. 在下列for循环中,其循环次数是( B )
for(x=1,y=0;(y!
=123)&&(x<4); x++);
A)4 B)3 C)1 D)无数多次
10. 有如下程序
main( )
{ int x=1,a=0,b=0;
switch(x){
case 0:
b++;
case 1:
a++;
case 2:
a++;b++;
}
printf(“a=%d,b=%d\n”,a,b);
}
该程序的输出结果是 ( A)
A) a=2,b=1
B) a=1,b=1
C) a=1,b=0
D) a=2,b=2
11. 若有定义float x,y;int a,b;则合法的switch语句是(C )
(A)switch(a)
{case 3+x:
printf("abc");
case 4:
printf("123abc");}
(B)switch(a)
case 3 printf("abc");
case 4 printf("123abc");}
(C)switch(b)
{default:
a++;
case 1:
printf("abc");
case 1+2:
printf("1234");
}
(D)switch(a+b);
{case 1+2:
printf("1234");
case 1:
printf("abc");
default:
a++;
12. 循环语句for(x=0,y=0;(y!
=123)||(x<4);x++);的循环次数是(C )。
(A)3
(B)4
(C)无限次
(D)不确定次
13. 下述程序的输出结果是( B)
#include <>
void main()
{int x=9;
for (;x>0;x--)
{if (x%3= =0)
{printf("%d",--x);
continue;
}
}
}
(A)741
(B)852
(C)963
(D)875421
14. 假定a和b为int型变量,则执行以下语句后b的值为(D )
a=1;b=10;
do {b-=a;a++;}
while (b--<0);
(A)9
(B)-2
(C)-1
(D)8
15. 循环语句for (x=0,y=0;(y!
=123)||(x<4);x++);的循环执行(A )
(A)无限次 (B)不确定次 (C)4次 (D)3次
16. 设x和y均为int型变量,则执行下面的循环后,y的值为(C )
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)8
17. 语句while(!
e==0);什么时候将会陷入死循环(B )
A)e==0 B)e!
=0 C)e!
=1 D)e!
=-1
18. 执行下面程序段的结果是(B )。
int x=23;
do
{ printf("%2d",x--);
}while (!
x);
(A)打印出321 (B)打印出23 (C)不打出任何内容 (D)陷入死循环
19. 循环语句for(a=0,b=0;(b!
=45)||(a<5);a++);的循环次数是( D )
(A) 4 (B) 3 (C) 5 (D) 无数多次
20. 以下不是死循环的语句( D )。
(A) for ( ; ; x ++= i);
(B) while
(1) {x++;}
(C) for ( i = 10; ; i-- ) sum -= i;
(D) for ( ; (c = getchar()) !
= ‘\n’;) sum -= i;
21. 若 int x = 3; 且有下面的程序片段,则输出结果为( C )。
do
{ printf ( "%d" , x -= 2 );
}while ( !
( --x ));
(A) 1 (B) 30 (C) 1-2 (D) 死循环
22. 以下程序的输出结果是( A ) 》
main ( )
{ int n = 4 ;
while (n--)
printf ("%d",--n); }
A)20 B)31 C)321 D)210
23. 语句while (!
E);中的表达式!
E等价于( A ) 。
A)E= =0 B)E!
=1 C)E!
=0 D)E==1
24. 以下程序段(C )。
int x=-1;
do {x=x*x;}
while (!
x); A)是死循环 B)循环执行2次 C)循环执行1 次 D)有语法错0
25. 对以下程序段,描述正确的是( C) 。
int k=5;
while (k=0) k=k-1;
printf("%d\n",k);
A)循环体被执行了5次 B)循环体是无限循环
C)循环体一次也不执行 D)循环 体被执行一次
26. 以下语句执行完后i 的值为( A )。
for(x=0,y=3,i=0;(y>3)&&(x<4);x++,y++) i++;
A)0 B)1 C)2 D)3
27. 下面程序的运行结果是( C )。
main( )
{int x=0,y=0;
while
(1) y=++x;
printf("%d\n",y);
}
A)1 B)控制表达式非法 C)无限循环 D)0
28. 下面程序段的输出结果是(C ) 。
int x=3;
do {printf("%d",x-=2);}
while (!
(--x)); A) 1 B) 130 C)1-2 D) 死循环
29. 执行下列程序段之后,b的值为( D ) 。
int a=1,b=10;
do {b-=a; a++;}
while(b--<0);
A)9 B)-2 C)-4 D)8
30. 在下述程序中,判断i>j共执行了( D)次。
#include <>
void main()
{int i=0,j=10,k=2,s=0;
for (;;)
{i+=k;
if (i>j)
{printf("%d\n",s);
break;
}
s+=i;
}
}
(A)4 (B)7 (C)5 (D)6
三、多选题
1. 在下列语句所构成的程序结构中,break语句和continue语句均可使用的是(BCD )
(A)用goto语句和if语句构成的循环 (B)while循环 (C)do-while循环
(D)for循环 (E)switch语句构成的分支结构
2. 与for(表达式1;;表达式3);语句等价的选项有( ACE)。
(A)for(表达式1;1;表达式3); (B)for(表达式1;0;表达式3);
(C)表达式1;while
(1)表达式3; (D)表达式1;while(0)表达式3;
(E)表达式1;while(3)表达式3;
3. 在while(<表达式>)中,用于表达式等于0时循环,否则退出循环的表达式可以写成( BD )。
A) while(x!
=0) B) while(x==0) C) while(x) D) while(!
x) E) while(x=0)
4. 在C语言中,下列说法正确的有(BC )。
(A)"do 语句体 while(条件)"中的语句体可能一次也不会执行
(B)"do 语句体 while(条件)"中当条件为0时将结束循环
(C)for(表达式1;表达式2;表达式3);中的表达式1无论如何都会执行一次
(D)for循环只能用于循环次数已确定的情况
(E)do-while语句和while语句在任何情况下完成的功能等价
5. 在下列选项中,构成死循环的程序段是( ACE )。
A) int i=100; B) int k=100; C) int s=36;
while
(1) do while(s);
{i=i%100+1; {k++; --s;
if(i>100) break; }while(k>=1000);
}
D) int x=10; E)for(;;);
for(;1;x--) if(x==0)break;
四、填空题
1. 根据以下if语句所给的条件,写出等价的switch语句,使它完成相同的功能,
(假定score取值在所0-100之间)。
请完善程序。
if语句:
if(score<60) k=1;
else if(score<70) k=2;
else if(score<80) k=3;
else if(score<90) k=4;
else if(score<=100) k=5;
等价的switch语句:
n=__________;
if(n<6) ______________;
switch(n)
{ case 5:
k=1;break;
case 6:
k=2;break;
case 7:
k=3;break;
case 8:
k=4;break;
_______ k=5;
}
①(INT)(SCORE/10)或SCORE/10
②N=5
③ CASE 0:
CASE 10:
2. 设I,j,k均为int型变量,则执行完下面的for循环后,k的值为( 10 )。
for (I=0,j=10;I<=j;I++,j--) k=I+j;
3. 以下程序的功能是从键盘上输入一行字符,将其中的小写字母转换为大写字母。
请填空。
____#INCLUDE_______________
main( )
{char c;
while ((c=getchar( ))!
='\n')
if (c>='a'&&c<='z' )
{c=c-32; putchar( c);}
}
4. 以下程序的功能是求20以内3的倍数之和sum1及剩余数据之和sum2。
请填空。
main( )
{int sum1=0,sum2=0,i;
for(i=1;i<=20;i++)
if(_I%3= =0
_______)
sum1+=i;
else sum2+=i;
printf("%d,%d",sum1,sum2);
}
5. 下列两个程序段在什么情况下输出结果等价__当输入的数据小于或等于100时
int i,sum=0; int i,sum=0;
scanf("%d",&i); scanf("%d",&i);
while(i<=100) do { sum+=i;
{ sum+=i; i++;
i++; } } while(i<=100)
printf("\n%d",sum); printf("\n%d",sum);
6. 下面程序用于计算1+(1+2)+(1+2+3)+……+(1+2+3+……+10),请完善程序。
#include<>
main()
{int total,sum,m,n;
________________;
for(m=1;m<=10;m++)
{sum=0;
for(n=1;n<=m;n++)sum=sum+n;
___________________;
}
printf("total=%d\n",total);
}①TOTAL=0 ②TOTAL=TOTAL+SUM
7. 下面程序用于求100~200之间的所有素数。
请填空:
_______________
main()
{int m,n,k;
for(m=101;m<200;m=m+2)
{k=sqrt(m);
for(n=2;n<=k;n++)___________;
if(n>k)printf("%d\n",m)
}
}
① #INCLUDE<> ②IF(M%N==0)BREAK
8. 下面程序从键盘读入50个整数并求其中正整数之和。
请完善程序
main()
{int i,a,sum;
sum=0;
for(i=0;i<50;i++)
{scanf("%d",&a);
if(a<0)___________ ;
sum=sum+a;
}
printf("sum=%d\n",sum);
}
①CONTINUE
9. 下列程序的功能是输入一个正整数,判断是否是素数,若为素数输出1,
否则输出0,请为程序填空。
main()
{int I,x,__________;
scanf("%d",&x);
for(I=2;I<=x/2;I++)
if (___________) {y=0;break;}
printf("%d\n",y);
}①Y=1
② X%I= =0
10. 下述程序的输出结果是 13 。
#include <>
void main()
{int I=0,s=1;
do
s+=I++;
while (I++<6);
printf("\n%d",s);
}
11. 下述程序用"辗转相除法"计算两个正整数m和n的最大公约数。
请填空。
#include <>
void main()
{int m,n,w;
scanf("5d,%d",&m,&n);
while (n)
{w= __①M%N_________ ;
m= n ;
n= w ;
}
printf("%d,m);
}
12. 下面程序的功能是输出数且s中最大元素的下标,请填空。
main()
{int k,p;
int s[]=[1,-9,7,2,-10,3];
for (p=0,k=p;p<6;p++)
if (s[p]>s[k]) _K=P;_____________
printf("%d\n",k);
}
13. 下面程序段中循环体的执行次数是 ______3___ 。
a=10;
b=0;
do{b+=2;a-=2+b;}
while(a>=0);
14. 运行下列程序时,输入数据为"2473<回车>",则程序的输出结果为 ___668977_____ .
#include<>
main()
{int s;
while((s=getchar())!
=''\n'')
{switch(s-''2'')
{case 0:
case 1:
putchar(s+4);
case 2:
putchar(s+4);break;
case 3:
putchar(s+3);
default:
putchar(s+2);break;
}
}
}
15. 如下程序运行后输出的结果是( _____2____ )。
#include <>
void main()
{ int i=0;
while(++i<3)
if(i==2)
break;
printf("%d\n",i);
}
16. 以下程序完成输出3到1000之间的所有素数。
I%J==0
#include ""
main ()
{ int i,j;
for ( i=3; i<=1000; i++)
{ for ( j=2; j<=i-1; j++)
if ( __________ ) break;
if ( j==i ) printf ("%5d ",i);
}
}
17. 以下程序的功能是从键盘上输入一行字符,将其中的小写字母转换为大写字母。
请填空。
#include ""
main( )
{char c;
while ((c=_____________)!
='\n')
if (c>='a'&&c<='z' )
{ c=c-32;
printf("%c",c);
}
}
GETCHAR( )
18. 以下程序的功能是:
从键盘上输入若干个学生的成绩,统计计算出平均成绩。
请填空。
main( )
{float sum=,ave,a;
int n=0,i;
printf(“Enter mark\n”);
scanf(“%f”,&a);
while(a>=
{sum=sum+a;