C语言练习题资料.docx

上传人:b****9 文档编号:25921623 上传时间:2023-06-16 格式:DOCX 页数:50 大小:41.40KB
下载 相关 举报
C语言练习题资料.docx_第1页
第1页 / 共50页
C语言练习题资料.docx_第2页
第2页 / 共50页
C语言练习题资料.docx_第3页
第3页 / 共50页
C语言练习题资料.docx_第4页
第4页 / 共50页
C语言练习题资料.docx_第5页
第5页 / 共50页
点击查看更多>>
下载资源
资源描述

C语言练习题资料.docx

《C语言练习题资料.docx》由会员分享,可在线阅读,更多相关《C语言练习题资料.docx(50页珍藏版)》请在冰豆网上搜索。

C语言练习题资料.docx

C语言练习题资料

第二部分程序控制结构

一、单项选择题。

1.以下叙述中错误的是______。

A、C语句必须以分号结束B、复合语句在语法上被看作一条语句

C、空语句出现在任何位置都不会影响程序运行

D、赋值表达式末尾加分号就构成赋值语句

解析:

本题考查的是C语句。

"空语句出现在任何位置都不会影响程序运行"这句话是错误的,例如在for循环中,循环条件语句为空时,则不判断循环条件,循环将无终止地进行下去,导致了此循环为死循环。

故本题答案为C。

2.设变量x和y均已正确定义并赋值。

以下if语句中,在编译时将产生错误信息的是______。

A、if(x++);B、if(x>y&&y!

=0);C、if(x>0)x--D、if(y<0){;}

elsey++;elsex++;

解析:

本题考查的是if语句。

if后表达式两侧的圆括号不可少,最后是一条语句或是用花括号括起来的一组语句。

选项A和B是在表达式后跟了一条空语句,选项D是在表达式后跟了一组空语句,选项C中x--是表达式而不是语句,所以在编译时会出现错误信息。

故本题答案选C。

3.有以下程序

main()

{inti;

for(i=1;i<=40;i++)

{if(i++%5==0)

if(++i%8==0)printf("%d",i);}

printf("\n");}

执行后的输出结果是______。

A、5B、24C、32D、40

解析:

本题考查的是if语句的应用。

在满足for语句条件下,第一个if语句的条件是指i先对5取余后,再自行加1;第二个if语句的条件是指:

i=i+1后,再对8取余。

故本题答案选C。

4.在嵌套使用if语句时,C语言规定else总是______。

A、和之前与其具有相同缩进位置的if配对B、和之前与其最近的if配对

C、和之前与其最近的且不带else的if配对D、和之前的第一个if配对

解析:

本题考查的是if语句的使用规则。

在嵌套使用if语句时,C语言规定else总是和之前与其最近的且不带else的if配对。

故本题答案为C。

5.有以下程序

main()

{inti=1,j=2,k=3;

if(i++==1&&(++j==3||k++==3))

printf("%d%d%d\n",i,j,k);}

程序运行后的输出结果是______。

A、123B、234C、223D、233

解析:

本题考查的是条件判断语句。

本题中执行"i++==1&&(++j==3||k++==3)"时,先执行i++==1,由于i++是先运算,后自加,所以表达式"i++==1"的值为真,其值为1,然后执行括号中的表达式,由于++j是先自加,后运算,所以表达式"++j==3"的值为真,根据短路原理,右边的表达式"k++==3"不再进行运算,直接得出括中表达的值为1,相与后整个表达式的值也为1,输出i,j,k时,由于未执行过k,所以它们的值分别为2,3,3。

故本题的答案为D。

6.有以下程序:

main()

{inti;

for(i=0;i<3;i++)

switch(i)

{case0:

printf("%d",i);

case2:

printf("%d",i);

default:

printf("%d",i);}}

程序运行后的输出结果是______。

A、022111B、021021C、000122D、012

解析:

此题考点是switch语句。

switch语句执行完一个case后面的语句后,流程控制转移到下一个case继续执行。

“case常量表达式”只是起语句标号作用,并不是在该处进行条件判断。

在执行switch语句时,根据switch后面表达式的值找到匹配的入口标号,就从此标号开始执行下去,不再进行判断。

如果想在执行一个case分支后,使流程跳出switch结构,即终止switch语句的执行。

可以用一个break语句来达到此目的。

本题中没有使用break终止switch语句的执行。

在此题中当i=0时,执行第一个case语句,因为它后面没有break,所以一直到执行完default语句结束,再执行下一循环。

故本题答案为C。

7.下列条件语句中,功能与其他语句不同的是______。

A、if(a)printf("%d\n",x);elseprintf("%d\n",y);

B、if(a==0)printf("%d\n",y);elseprintf("%d\n",x);

C、if(a!

=0)printf("%d\n",x);elseprintf("%d\n",y);

D、if(a==0)printf("%d\n",x);elseprintf("%d\n",y);

解析:

此题考的是if语句中逻辑表达式值的判断。

if(a)表示a值为真(即不等于0都为真)的话,就输出x的值,否则输出y的值;if(a==0)表示如果a与0等值,即a不为真,就输出y的值,否则输出x的值,此与选项A等价;再看选项C,a不等于0,即为真,输出x,否则输出y,与前两个都同意;而选项D恰好与前几项的意思相反,它是a为0时,输出x,为真时输出y。

故本题答案为D。

8.有以下程序

main()

{chark;inti;

for(i=1;i<3;i++)

{scanf("%c",&k);

switch(k)

{case'0':

printf("another\n");

case'1':

printf("number\n");}

}}

程序运行时,从键盘输入:

01↙,程序执行后的输出结果是______。

A、anotherB、anotherC、anotherD、number

numbernumbernumbernumber

anothernumber

解析:

此题考点是switch语句。

本题中没有使用break终止switch语句的执行,本题当k为0时,执行完case'0'后将继续执行case'1'。

故本题答案为C。

9.以下4个选项,不能看作一条语句的是______。

A、{;}B、a=0,b=0,c=0;C、if(a>0);D、if(b==0)m=1;n=2;

解析:

if语句是用来判定所给的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。

在if和else后面可以只含一个内嵌的操作语句,也可以有多个操作语句,此时用花括号“{}”将几个语句括起来成为一个复合语句。

选项D中没有将两个操作语句括起来,不能看作一条语句。

故本题答案为D。

10.以下程序的输出结果是______。

main()

{inta=-1,b=1,k;

if((++a<0)&&!

(b--<=0))

printf("%d%d\n",a,b);

else

printf("%d%d\n",b,a);

}

A、-11B、01C、10D、00

解析:

本题的考查点是if条件的判断。

++a是先运算后使用,b--是先使用后运算。

执行++a后,a值为0,不满足条件,所以a为0,b仍为1,接下去执行else语句,输出10。

故本题答案为C。

11.有以下程序

main()

{intc;

while((c=getchar())!

='\n'){

switch(c-'2'){

case0:

case1:

putchar(c+4);

case2:

putchar(c+4);break;

case3:

putchar(c+3);

default:

putchar(c+2);break;}}

}

A、668977B、668966C、66778777D、6688766

解析:

本题的考查点是switch()语句。

getchar()函数是从键盘接受一个字符输入;当用户键入的字符不是回车符时,会进入一个多分支选择语句,根据表达式c-'2'的值进行分支选择;putchar()是在屏幕上打印一个字符,最后的结果应当为668977。

故本题答案为A。

12.有定义语句:

inta=1,b=2,c=3,x;,则以下选项中各程序段执行后,x的值不为3的是______。

A、if(c

elseif(b

elsex=3;elsex=1;

C、if(a<3)x=3;D、if(a

if(a<2)x=2;if(b

if(a<1)x=1;if(c

解析:

本题的考查点是if语句。

选项A,因为前面两个条件都不满足,所以执行最后一种操作,x=3;选项B,a<3成立,执行第一种操作,x=3;选项C,a<3成立,执行第一种操作,x=3;a<2成立,执行第二种操作,此时x=2;a<1不成立,最后的不执行,所以执行此段程序后x=2;选项ф,a

故本题答案为C。

13.以下关于逻辑运算符两侧运算对象的叙述中正确的是______

A、只能是整数0或1B、只能是整数0或非0整数

C、可以是结构体类型的数据D、可以是任意合法的表达式

解析:

本题考查的是C语言运算符的基本应用。

逻辑运算符两侧的运算对象不但可以是0和1,也可以是任意基本类型或指针类型的数据,还可以是任意合法表达式。

故本题答案为D。

14.若x是int型变量,且有下面的程序片段

for(x=3;x<6;x++)printf((x%2)?

("**%d"):

("##%d\n"),x);

上面程序片段的输出结果是______。

①**3②##3③##3④**3##4

##4**4**4##5**5

**5##5

A、①B、②C、③D、④

解析:

本题的考查点是条件运算符。

本题答案为D。

15.有以下计算公式

若程序前面已在命令行中包含math.h文件,不能够正确计算上述公式的程序段是______。

A、if(x>=0)y=sqrt(x);B、y=sqrt(x);

elsey=sqrt(-x);if(x<0)y=sqrt(-x);

C、if(x>=0)y=sqrt(x);D、y=sqrt(x>=0?

x:

-x);

if(x<0)y=sqrt(-x);

解析:

题面公式的意思是当x大于或等于0,则y的值就取x的平方根,如果x的值小于0,则y的值就取x的相反数的平方根。

sqrt(number)用于返回函数参数的平方根,如果number的值为负数,则返回零。

选项B的功能是取x(无论x的值为正、负还是零)的平方根赋值给y,然后再判断x是否小于0,如果小于0,则取x的相反数的平方根赋值给y。

这显然不符合题面公式的意思,所以选项B的程序不能正确计算题面公式。

故本题答案为B。

16.以下叙述中正确的是______。

A、break语句只能用于switch语句体中

B、continue语句的作用是:

使程序的执行流程跳出包含它的所有循环

C、break语句只能用在循环体内和switch语句体中

D、在循环内使用break语句和continue语句的作用相同

解析:

本题考查的是break与continue的特性。

break语句的使用说明:

(1)只能用在循环体内和switch语句体内使用break语句。

(2)当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体。

当break出现在循环体中,但并不在switch语句体内时,则在执行break后,跳出本层循环体。

故本题答案选C。

17.有以下程序

main()

{intk=5;

while(--k)printf("%d",k-=3);

printf("\n");}

执行后的输出结果是______。

A、1B、2C、4D、死循环

解析:

本题考查的是while语句的应用。

此题中首先给k赋初值5,执行while语句:

中的表达式"--k",k先自行减1结果为4,满足while执行条件输出:

k=k-3=4-3=1;此时输出结果为1。

返回执行while语句,重复上面的操作,while后的表达式为0,退出循环,所以最后的输出结果为1。

故本题答案为A。

18.在以下给出的表达式中,与while(E)中的(E)不等价的表达式是______。

A、(!

E==0)B、(E>0||E<0)C、(E==0)D、(E!

=0)

解析:

本题考查的是while条件表达式的判断。

while(表达式)语句用来实现"当型"循环结构,当表达式为非0值时,执行while语句中的内嵌语句。

选项A非零即为1,选项B与选项D的结果也为1,只有选项C为0。

故本题答案为C。

19.有以下程序段

intn,t=1,s=0;

scanf("%d",&n);

do{s=s+t;t=t-2;}while(t!

=n);

为使此程序段不陷入死循环,从键盘输入的数据应该是______。

A、任意正奇数B、任意负偶数C、任意正偶数D、任意负奇数

解析:

本题考查的是while循环语句。

要使得程序段不陷入死循环,则必须存在终止循环的条件"t=n",由于t的初始值为1,且每执行一次循环都会使得t的值减2,故执行本程序后t有可能的最大值为-1,然后,依次减2,所以键盘输入的n的值必须是t的值之一,即为任意负奇数。

故本题答案为D。

20.设变量已正确定义,则以下能正确计算f=n!

的程序段是______。

A、f=0;for(i=1;i<=n;i++)f*=i;B、f=1;for(i=1;i

C、f=1;for(i=n;i>1;i++)f*=i;D、f=1;for(i=n;i>=2;i--)f*=i;

解析:

本题考查的是for语句。

n!

=n*(n-1)*……*2*1,由于选项A中f的初值为0,所以循环n次后,f值依然为0,故选项A错误;选项B中循环的终止条件是"i1时,由于初值"i=n"是符合条件"i>1"的,且增量为+1,故循环中永远不会出现不满足条件"i>1"的值,所以出现死循环。

故本题答案为D。

21.下面程序的功能是输出以下形式的金字塔图案:

*

***

     *****

*******

main()

{inti,j;

for(i=1;i<=4;i++)

{for(j=1;j<=4-i;j++)printf("");

for(j=1;j<=______;j++)printf("*");

printf("\n");}}

在下划线处应填入的是______。

A、iB、2*i-1C、2*i+1D、i+2

解析:

本题是找出打印*号的条件,从图中我们可以找到规律,第一行一个*,第二行3个,第三行5个……,也就是每行中*的个数恰好是行数的2倍减一个,由此不难得出,横线处应当填入2*i-1。

故本题答案为B。

22.有以下程序:

main()

{inti,s=0;

for(i=1;i<10;i+=2)s+=i+1;

printf("%d\n",s);}

程序执行后的输出结果是______。

A、自然数1~9的累加和B、自然数1~10的累加和

C、自然数1~9中奇数之和D、自然数1~10中偶数之和

解析:

通过for(i=1;i<10;i+=2)可知,i为从1开始的小于10的奇数,即1,3,5,7,9,i+1即为2,4,6,8,10,即自然数1到10中的偶数,s+=i+1就是累加这几个偶数。

故本题答案为D。

23.有以下程序:

main()

{intx=0,y=5,z=3;

while(z-->0&&++x<5)y=y-1;

printf("%d,%d,%d\n",x,y,z);}

程序执行后的输出结果是______。

A、3,2,0B、3,2,-1C、4,3,-1D、5,-2,-5

解析:

当x=0,y=5,z=3时,z-->0&&++x<5成立,执行y=y-1;此时y=4,z=2,x=1。

执行后条件仍然成立,继续执行y=y-1,此时y=y-1=3,z=1,x=2,以此类推,直至条件不成立。

当z为0时条件不成立,执行后z为-1。

故本题答案为B。

24.有以下程序

main()

{inti,n=0;

for(i=2;i<5;i++)

{do

{if(i%3)continue;

n++;}while(!

i);

n++;}

printf("n=%d\n",n);}

程序执行后输出结果是______。

A、n=5B、n=2C、n=3D、n=4

解析:

当i=2时,i%3为真,继续执行n++;此时n=1,!

i为假,结束while循环,执行n++,此时n为2。

当i=3时,i%3=0,跳出循环。

当i=4时,i%3=1为真,继续执行n++,此时n为3,!

i为假,结束while循环,继续往下执行n++,此时n为4。

故本题答案为D。

25.执行下面程序片段的结果是______。

intx=23;

do{printf("%2d",x--);}while(!

x);

A、打印出321B、打印出23C、不打印任何内容D、陷入死循环

解析:

本题的考查点是do-while循环条件的判断。

x--是自减运算,先使用x的值,后进行自减运算,所以打印出来的结果应当为23。

故本题答案为B。

26.以下程序的输出结果是______。

main()

{intn=4;

while(n--)printf("%d",--n);}

A、20B、31C、321D、210

解析:

本题的考查点是while语句的判断。

n--是先使用后运算,--n是先运算后使用。

n=4时,执行n--后,n变为3,执行--n后,n变为2,所以,第一次输出时,n为2;同上过程,第二次输出时,n为0。

故本题答案为A。

27.C语言中,下列叙述正确的是______。

A、不能使用do-while语句构成的循环

B、do-while语句构成的循环,必须用break语句才能退出

C、do-while语句构成的循环,当while语句中的表达式值为非零时结束循环

D、do-while语句构成的循环,当while语句中的表达式值为零时结束循环

解析:

本题的考查点是do-while语句。

本题答案为D。

28.要求以下程序的功能是计算:

s=1+1/2+1/3+…+1/10。

main()

{intn;floats;

s=1.0;

for(n=10;n>1;n--)

s=s+1/n;

printf("%6.4f\n",s);}

程序运行后输出结果错误,导致错误结果的程序行是______。

A、s=1.0;B、for(n=10;n>1;n--)C、s=s+1/n;D、printf("%6.4f\n",s);

解析:

本题的考查点是查找程序运行错误的原因。

主要考察运算中字符的转换。

s=s+1/n;因为n为整型,所以1/n都为0。

这就是导致本题出错的原因。

s=s+1/n应改为s=s+1.0/n。

故本题答案为C。

29.在下面循环语句中循环体执行的次数为______。

inti=0;doi++;while(i*i<10);

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

30.当处理特定问题时的循环次数已知时,通常采用______来解决。

A、for循环B、while循环

C、do循环D、switch语句

31.循环体至少被执行一次的语句为______。

A、for循环B、while循环C、do循环D、任一种循环

32.do语句能够改写为______语句。

A、复合B、ifC、switchD、while

33.若变量已正确定义,有以下程序段

i=0;

doprintf("%d,",i);while(i++);

printf("%d\n",i);

其输出结果是______。

A、0,0B、0,1C、1,1D、程序进入无限循环

34.以下程序的输出结果是______。

main()

{intn=4;

while(n--)printf("%d",--n);}

A、20B、31C、321D、210

35.C语言中,下列叙述正确的是______。

A、不能使用do-while语句构成的循环

B、do-while语句构成的循环,必须用break语句才能退出

C、do-while语句构成的循环,当while语句中的表达式值为非零时结束循环

D、do-while语句构成的循环,当while语句中的表达式值为零时结束循环

36.要求通过while循环不断读入字符,当读入字母N时结束循环。

若变量已正确定义,以下正确的程序段是______。

A、while((ch=getchar())!

='N')printf(“%c”,ch);

B、while(ch=getchar()!

='N')printf(“%c”,ch);

C、while(ch=getchar()==N')printf(“%c”,ch);

D、while((ch=getchar())=='N')printf(“%c”,ch);

37.若有以下程序

main()

{inty=10;

while(y--);printf(“y=%d\n”y);

}

程序运行后的输出结果是______。

A、y=0B、y=-1C、y=1D、while构成无限循环

38.C语言中,while和do-while循环的主要区别是______。

A、do-while的循环体至少无条件执行一次

B、while的循环控制条件比do-while的循环控制条件更严格

C、do-while允许从外部转到循环体内

D、do-while的循环体不能是复合语句

39.以下描述中正确的是______。

A、do-while循环中循环体内不能使用复合语句

B、do-while循环由do开始,用while结束,在while(表达式)后面不能写分号

C、在do-while循环体中,一定要有能使while后面表达式的值变为零(“假”)的操作

D、do-while循环中,根据情况可以省略while

40.若有如下语句

intx=3;

do{printf(“%3d”,x-=2);}while(!

(--x));

则上面程序段______。

A、输出的是1       B、输出的是1和-2

C、输出的是3和0     D、是死循环

41.下面有关for循环的正确描述是______。

A、for循环只能用于循环次数已经确定的情况

B、for循环是先执行循环的循环体语句,后判断表达式

C、在for循环中,不能用break语句跳出循环体

D、for循环的循环体语句中,可以包

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1