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循环的循环体语句中,可以包