习题册56章答案Word文档格式.docx
《习题册56章答案Word文档格式.docx》由会员分享,可在线阅读,更多相关《习题册56章答案Word文档格式.docx(32页珍藏版)》请在冰豆网上搜索。
if(i%3){i++;
continue;
}
i++;
s+=i;
}while(i<
11);
printf("
%d\n"
s);
执行后输出结果是____A________
A)22
B)16
C)34
D)21
本题考查的是do…while循环、if语句和continue(continue结束的本次循环,接着判断是否继续执行下一轮循环)。
在do…while循环中,先执行循环体,再判断i是否小于11.if(i%3)判断是否能整除3,余数为0,则进行i++;
s+=i;
不为0则为真,则进行{i++;
}由于包含contunue;
i++;
部分不执行,直接进行条件判断。
所以当i=0,3,6,9时,进行i++;
操作。
所以s=1+4+7+10=22.
4.运行以下程序后,如果从键盘上输入6514<
回车>
则输出结果为:
____C________
main()
{intm,n;
Enterm,n;
"
);
scanf("
%d%d"
&
m,&
n):
while(m!
=n)
{while(m>
n)m-=n;
while(n>
m)n-=m;
}
m=%d\n"
m);
A)m=3B)m=2C)m=1D)m=1
(1999-04-48)本题考查的是嵌套while循环,外层循环条件是m!
=n,由于从键盘输出后m=65,n=14;
因此不符合结束条件,进入循环体内。
(1)先执行循环体while(m>
即判断/m>
n,如果是循环执行m-=n,(即m=m-n);
因此此循环至少要执行4次m的值才可能不大于n(m=m-n*4=65-14*4=9),即此时m=9,n=14;
不符合本循环条件,跳出本循环。
(2)由于n>
m了,执行循环体while(n>
,执行后n=n-m=14-9=5,即此时m=9,n=5,不符合本循环条件,跳出本循环。
(3)但此时m!
=n,因此不跳出外层循环,继续执行while(m>
执行后m=4,n=5;
不符合本循环条件,跳出本循环。
(4)然后执行while(n>
执行后n=1,m=4,不符合本循环条件,跳出本循环。
(5)但此时m!
此循环需要执行3此m的值才可能不大于n(m=m-n*3=4-1*3=1),即此时m=1,n=1;
(6)由于此时m=n了,因此结束了外层循环,结果m=1,正确答案为C
5.有以下程序
{intn,s=0;
for(n=10;
30;
{if(n%3==0)
{s+=n;
continue;
if(s>
100)break;
printf("
A)117B)147
C)127
D)137
本题考查的是for循环\、if语句和continue\、break语句,其中break语句结束的。
是整个循环,continue结束的本次循环,接着判断是否继续执行下一轮循环。
本题中for循环变量n从10递增到29,在循环体中又两条嵌套的if语句,首先判断n%3==0,即判断n的值是否能被3整除,如果能整除,则加这些数累加到s,然后执行continue,跳出本次循环,执行n++,继续判断下一个数,如果不能被3整数,则判断s是否大于100,如果符合,则跳出整个循环。
因此本题的主要功能是循环累加10到29中能被3整除的数,如果累加和大于100,则退出循环。
因此当n=27时,s=12+15+18+21+24+27=117时,超过了100,退出循环,因此最后输出结果为117,正确答案为A.
6.以下程序执行后sum的值是___C______
min()
{inti,sum;
for(i=1;
6;
i++)sum+=i;
printf(“%d\n”,sum);
A)15B)14C)不确定D)0
(2001-04-26)此题考查的是for循环,实现1到6的累加并输出,但是由于sum的初始值位设定,因此其最后的值属于不确定值,正确答案为C.
7.有以下程序
main()
{inti,n=0;
for(i=2;
5;
{do
{if(i%4+1)continue;
n++;
}while(!
i);
}
printf(“n=%d\n”,n);
}
程序执行后的输出结果是____C_________
A)n=5
B)n=2
C)n=3
D)n=4
此题考查的是for循环嵌套do-while循环。
本题执行for循环的条件是变量i的范围是2-4,循环3次。
进入do-while循环体,由于i%4+1的条件永远为真,因此一直执行continue,则跳出n++;
执行while(!
由于!
i为假,跳出do-while循环,执行n++;
因此n++;
执行3次,执行后n的值为3,正确答案为3.
以上过程可简写为:
i=2,判断i%4+1,(i%4+1)!
=0,执行continue,跳出本次循环,执行n++n=1
i=3,判断i%4+1,(i%4+1)!
=0,执行continue,跳出本次循环,执行n++n=2
i=4,判断i%4+1,(i%4+1)!
=0,执行continue,跳出本次循环,执行n++n=3
8.有以下程序
{inti;
for(i=0;
3;
switch(i)
{case1:
printf("
case2:
default:
i+1);
}
程序运行后的输出结果是______A_______
A)111223
B)123
C)011023D)122
本题考查的是for循环和switch语句,本题for循环的循环变量i从0到2,循环3次。
当i=0时,switch语句中,没有case匹配,进入default,执行printf("
i+i);
输出1(注输出1后无回车也无其他分隔符);
然后跳出switch语句,执行i++=i+1=1,符合循环条件i<
3,继续执行switch语句。
当i=1时,switch语句中,进入case1分支,执行printf("
在原来的1后输出1;
但由于case1分支后无break;
语句,因此继续执行case2分支,执行printf("
在原来的11后输出1,但由于case2分支后无break;
语句,继续执行default语句,执行printf("
在原来的11后输出2,即此步骤执行后为1112。
然后跳出switch语句,执行i++=i+1=2,符合循环条件i<
当i=2时,switch语句中,进入case2分支,执行printf("
在原来的1112后输出2;
但由于case2分支后无break;
在原来的11122后输出3,即为111223。
然后跳出switch语句,执行i++=i+1=3,不符合循环条件i<
3,结束循环。
以上过程可简写为:
i=0,执行default,输出1
i=1,执行case1,输出1
执行case2,输出1
执行default,输出2
i=2,执行case2,输出2
执行default,输出3
9.在以下给出的表达式中,与while(E)中的(E)不等价的表达式是__A_____
A)(!
E=0)B)(E>
0||E<
0)C)(E==0)D)(E!
=0)
(2006-04-21)本题考查的是逻辑表达式,在C语言中,整型值可以转换为逻辑值,规则是:
当整型值为0时,它表示逻辑值假;
当整型值不为0时,它表示逻辑值真。
所以题目中的while(E)循环是当E等于0时,循环结束,E不等于0时,继续循环。
选项C中,当E等于0时,表达式“E==0”为真继续循环,而E不等于0时,表达式为假循环结束,这与题目中的条件不等价,故应该选择C。
10.要求通过while循环不断读入字符,当读入字母N时结束循环。
若变量已正确定义,以下正确的程序段是____A_______
A)while((ch=getchar())!
='
N'
)printf(“%c”,ch);
B)while(ch=getchar()!
C)while(ch=getchar()==N'
D)while((ch=getchar())=='
(2006-04-22)本题考查的是逻辑表达式与赋值表达式。
在C语言中,逻辑表达式的优先级高于赋值运算符的优先级。
所以在选项B和C中先计算getchar()!
N或getchar())=='
部分,然后将得到的一个逻辑值(“真”或“假”)赋给字符变量ch,在while循环体中输出的ch肯定不是我们输入的字符,故不为所选。
选项A和D中因为加了括号,所以先计算ch=getchar()部分,将输入的字符读入变量ch。
根据题意,要在读入字母N的时候结束循环,即while循环的循环条件是:
读入的字符不等于字母N。
故应该选择A。
11.有以下程序:
voidmain()
{
intk=10,n=0;
for(;
k;
{n++;
if(n++%3!
=0)continue;
k--;
printf(“%d,%d\n”,k,n);
程序运行后的输出结果是___D_____
A)7,7B)6,6C)3,3D)8,10
本题考查的是for循环。
其中for(;
)循环变量n的初始值没直接说明,但在定义时已经初始化,即n=0,而循环条件为n<
k,具体循环过程如下:
n=0时,n<
k(0<
10),符合循环条件,n++;
执行后n=n+1=1;
执行判断n++%3!
=0,即判断n++的值(n加1之前的值)是否不能被3整除(判断后n被加1),由于n值为1,因此n++%3!
=0返回真,执行continue退出本次循环,不执行k--;
此时n=n+1=2;
n=2时,n<
k(2<
执行后n=n+1=3;
=0,由于n值为3,因此n++%3!
=0返回假,执行k--;
此时k=k-1=10-1=9;
n=n+1=3+1=4;
n=4时,n<
k(4<
9),符合循环条件,n++;
执行后n=n+1=5;
=0,由于n值为5,因此n++%3!
此时n=n+1=6;
n=6时,n<
k(6<
执行后n=n+1=7;
=0,由于n值为7,因此n++%3!
此时n=n+1=7+1=8;
n=8时,n<
k(8<
执行后n=n+1=9;
=0,由于n值为9,因此n++%3!
此时k=k-1=9-1=8;
n=n+1=9+1=10;
n=10时,n<
k(10<
8),不符合循环条件,退出for循环。
最后输出8.10.正确答案为D
12.下列叙述中正确的是___D_____。
A)break语句只能用于switch语句
B)在switch语句中必须使用default
C)break语句必须与switch语句中的case配对使用
D)在switch语句中,不一定使用break语句
(2006-09-21)本题主要考查switch语句的概念。
break语句除了能用于switch语句外,还可以用于循环语句中,因此选项A不正确;
在switch语句中,可以使用default来执行所有case均失配时的分支,也可以不使用default,此时若所有case均失配跳出switch,因此选项B不正确;
在switch语句中,每个case的作用就是标出一个执行的起点,当符合某个case时,程序就从该case所标出的起点处开始执行,若没有break语句中执行的话,程序会一直执行到switch的最后一条语句,而不是碰到下一个case就跳出switch。
虽然break和case的配对使用会让所有case分支互不重叠条例明确,但不配对使用在C语言中是不允许的,因此选项C不正确。
正确答案为D.
13.下面程序的功能是输出以下形式的金字塔图案是:
*
***
*****
*******
*********
main()
{inti,j;
for(i=1;
=4;
{for(j=1;
j<
=4-i;
j++)printf(““);
for(j=1;
=_______;
j++)printf(“*”);
printf(“\n”);
}
在下划线处应填入的是____C_______
A)i
B)2*i-1
C)2*i+1
D)i+2
(2004-04-42)本题考查的是嵌套for循环。
第一个for循环的循环变量i从1递增到4,用来表示行数为4行;
第二个for循环的循环变量j从1递增到4-i,用来输出每行左边的空格,
当i=1(第一行),循环4-i=4-1=3次,输出3个空;
当i=2(第二行),循环4-i=4-2=2次,输出2个空;
当i=3(第三行),循环4-i=4-1=1次,输出1个空;
当i=4(第四行),循环4-i=4-2=4次,输出0个空;
第二个for循环的循环变量j从1递增到4-i,用来输出每行的*号,
当i=1(第一行),需循环3次,输出3个*;
当i=2(第二行),需循环5次,输出5个*;
当i=3(第三行),需循环7次,输出7个*;
当i=4(第四行),需循环9次,输出9个*;
根据循环次数与i值的特点,可以发现每次需循环2*i+1次。
因此本题则横却答案为C
14.若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0)
s=a;
for(b=1;
b<
=c;
b++)s=s+1;
则与上述程序段功能等价的赋值语句是___B_____
A)s=a+b;
B)s=a+c;
C)s=s+c;
D)s=b+c;
(2003-09-22)本题考查是for循环,循环变量b从1递增到c,每次循环s=s+1,加c个1,s的初始值为a,因此相当于s=a+c;
15.请读程序片段:
#include<
stdio.h>
{inta,b;
for(a=1;
b=1;
a<
=100;
a++)
{if(b>
=20)break;
if(b%3==1)
{b+=3;
b-=5;
a);
上面程序的输出结果是_____A______
A)7B)8C)9D)10
(1996-04-22)本题考查的是for循环和break、continue语句。
For循环的循环变量从1增加到100,判断如果b>
=20则退出整个循环,否则判断b%3==1,即b整除3是否余1,如果是,则b=b+3;
退出本次循环,否则b=b-5;
结束本次循环。
以下是循环过程:
第一次:
a=1,b=1,判断b>
=20不符合条件,不执行break;
判断b%3==1(1%3==1)符合条件,执行b=b+3=1+3=4;
然后执行continue退出本次循环。
然后a++,a=2,符合a<
=100继续循环。
。
。
用同样的方法可以继续执行循环,但会发现一个规律,b会一直符合b%3==1,执行b+=3;
continue语句,因此不会执行b-=5;
语句。
这样b从初始值1开始加7次后,即b=1+3*7=22后,满足b>
=20这个条件,执行break语句,跳出整个循环。
此时a也累加了7次,,所以正确答案A。
16.以下程序的功能是计算正整数234的各位数字之和。
{intn,sun=0;
n=234;
while(n)
{sun=sun+n%10;
n=______;
printf(“sun=%d”,sun);
请把适当的选项填在下划线处___B________
A)n/100B)n/10C)n%100D)n%10
本题考查的是while循环。
本题的功能是计算正整数234的各个数字之和,因此需要分离出百位、十位和个位。
可以先将234与10取余可以先得到个位数4,然后除以10,变成23,再与10取余可以得到十位数3,再除10,变成2,与10取余可以得到百位数2,将这些数加起来就可以实现题目的功能。
可以发现在循环与10取余,并且将原数除以10.而程序中:
while(n)是判断n是否为0,如果不为0,执行sun=sun+n%10,实现与10取余并将余数累加,因此在后面得语句主要可以实现将原数除以10的功能,即n=n/10.正确答案为B
17.以下程序中,while循环的循环次数是_____D______
{inti=0;
while(i<
10)
{if(i<
1)continue;
if(i==5)break;
i++;
......
A)1B)10
C)6D)死循环,不能确定次数
(2002-04-25)本题主要考查while循环和continue、break语句.i的初始值为0,当i<
10时进入循环体,先执行if(i<
1),由于i=0,满足条件,则执行continue;
退出本次循环,不执行if(i==5)break;
和i++;
因此i没有任何变化,一直执行if(i<
变成了死循环,正确答案为D.
18.以下程序的输出结果是____A________
{inta=0,i;
for(i=1;
{switch(i)
{case0:
case3:
a+=2;
case1:
case2:
a+=3;
default:
a+=5;
A)31B)13C)10D)20
(2002-04-26)本题考查的是for循环和switch语句,执行过程如下:
i=1时,进入case1分支,但其后无任何执行语句,则进入case2分支,执行a+=3(a=a+3)a=3;
但没有遇到break语句,继续执行default部分,a+=5;
a=8
i=2时,进入case2分支,执行a+=3(a=a+3)a=11;
a=16
i=3时,进入case3分支,执行a+=2(a=a+2)a=18;
但没有遇到break语句,进入case1分支,但其后无任何执行语句,则进入case2分支,执行a+=3(a=a+3)a=21;
a=26
i=4时,无case分支匹配,执行default部分,a+=5;
a=31
i=4时,不符合循环条件,退出整个循环,因此正确答案为A
19.有以下程序
{inty=10;
while(y--);
printf(“y=%d\n”,y);
程序执行后的输出结果是___B________
A)y=0B)y=-1C)y=1D)while构成无限循环
(2006-04-30)本题考查的是while循环与—运算符。
本题中有一个陷阱,很多考生会根据程序中的书写格式来判断while循环的循环体为printf(“y=%d\n”,y);
其实while的循环体是一条空语句,即y—后面的那个分号就是while的循环体。
所以本题只要弄清楚表达式