二级C语言循环结构数组一.docx
《二级C语言循环结构数组一.docx》由会员分享,可在线阅读,更多相关《二级C语言循环结构数组一.docx(28页珍藏版)》请在冰豆网上搜索。
二级C语言循环结构数组一
二级C语言-循环结构、数组
(一)
(总分:
100.00,做题时间:
90分钟)
一、{{B}}选择题{{/B}}(总题数:
40,分数:
100.00)
1.在下列选项中,没有构成死循环的是______。
∙A.inti=100;while
(1){i=i%100+1;if(i>100)break;}
∙B.for(;;)
∙C.intk=10000;do{k++;}while(k>10000);
∙D.ints=36;while(s)--s;
(分数:
2.50)
A.
B.
C.
D. √
解析:
[解析]选项A的循环表达式的条件永为1,并且小于100的数与100取余不超过99,所以在循环体内表达式i%100+1的值永远不会大于100,break语句永远不会被执行,所以是死循环;选项B的括号内没有能使循环停下来的变量增量,是死循环。
选项C中先执行k++,使k=10001,从而使循环陷入死循环。
2.以下程序的输出结果是______。
intn=10;
while(n>7)
{n--;
printf("%d#",n);
}
∙A.1098
∙B.987
∙C.10987
∙D.9876
(分数:
2.50)
A.
B. √
C.
D.
解析:
[解析]以上程序段只包含了一个while循环,循环的控制表达式是n>7,只要n的值大于7,循环体就不断执行。
在进入循环时,n的值为10。
循环体内只有两条语句,每循环一次,首先n的值减1,然后输出n的值;由于n的初值为10,所以执行循环中的n--;后,n的值依次为9、8、7,并进行输出,printf每执行一次就在最后输出一个空格。
当n的值为7时,while的控制表达式n>7的值已为0,因此退出循环。
3.有以下程序:
#include<stdio.h>
main()
{inti=5;
do
{if(i%3==1)
if(i%5==2)
{printf("*%d",i);break}
i++;
}while(i!
=0);
printf("/n");
}
程序的运行结果是______。
∙A.*7
∙B.*3*5
∙C.*5
∙D.*2*6
(分数:
2.50)
A. √
B.
C.
D.
解析:
[解析]整个程序中只有时i增加的语句没有对i减少的语句,所以2、3都不可能出现,选项B和D错误。
而i=5时第一个if语句的表达式为假,所以选项C也错误。
4.若变量已正确定义,有以下程序段:
i=0;
doprintf("%d,",i);while(i++);
printf("%d/n",i);
其输出结果是______。
∙A.0,0
∙B.0,1
∙C.1,1
∙D.程序进入无限循环
(分数:
2.50)
A.
B. √
C.
D.
解析:
[解析]对于do...while循环,程序先执行一次循环体,再判断循环是否继续。
本题先输出一次i的值“0”,再接着判断表达式i++的值,其值为0,所以循环结束。
此时变量i的值经过自加已经变为1,程序再次输出i的值“1”。
5.以下叙述正确的是______。
∙A.do...while语句构成的循环不能用其他语句构成的循环代替
∙B.只有do...while语句构成的循环能用break语句退出
∙C.用do...while语句构成循环时,在while后的表达式为零时不一定结束循环
∙D.用do...while语句构成循环时,在while后的表达式为零时结束循环
(分数:
2.50)
A.
B.
C.
D. √
解析:
[解析]do...while语句构成的循环可以用其他语句构成的循环来代替。
但要注意,for和while语句构成的循环,循环体是否执行取决于时循环控制条件的设置;而do...while构成的循环不管循环控制的条件如何设置,循环体总要执行一次。
无论是哪种循环,break语句都可以退出循环。
用do...while语句构成的循环和while语句构成的循环一样,都是在while后的表达式为零时结束循环,非零时循环继续。
6.有以下程序:
#include<stdio.h>
main()
{inty=9;
for(;y>0;y--)
if(y%3==0)printf("%d",--y);
}
程序的运行结果是______。
∙A.741
∙B.963
∙C.852
∙D.875421
(分数:
2.50)
A.
B.
C. √
D.
解析:
[解析]本题考查for循环和自加“++”、自减“--”的问题。
当y的值为9、6或3时,if语句的条件成立,执行输出语句,输出表达式--y的值,y的自减要先于输出语句执行,故输出结果为852。
7.以下程序的输出结果是______。
#include<stdio.h>
main()
{inti,sum;
for(i=1;i<6;i++)
sum+=sum;
printf("%d/n",sum);
}
∙A.15
∙B.14
∙C.不确定
∙D.0
(分数:
2.50)
A.
B.
C. √
D.
解析:
[解析]本题中包含一个for循环,循环变量由1变化到5,所以其循环体执行5次。
for循环体内只有一条语句“sum+=sum;”,它相当于“sum=sum+sum;”,此表达式的值只与变量sum有关,并执行5次。
观察sum的值,可以发现程序没有给它赋初值,因此在第一次执行sum+sum时,sum的值是不确定的;在运行此程序时,系统会给出警告信息,提示用户:
sum在使用前没有确定的值。
8.若x是int型变量,以下程序的输出结果是______。
for(x=3;x<6;x++)
printf((x%2)?
("**%d/n"):
("##%d/n"),x);
∙A.**3##4**5
∙B.##3**4##5
∙C.##3**4##5
∙D.**3##4**5
(分数:
2.50)
A.
B.
C.
D. √
解析:
[解析]以上for循环的循环控制变量x的值依次为3、4、5,因此循环体执行3次。
也就是说,循环体中的printf语句进行3次输出。
调用printf进行输出时,其后面的括号中的第一项应当是一个格式控制字符串。
在本题的printf()函数调用中,第一项似乎是一个条件表达式,但进一步分析可知,在?
号之前“表达式1”的值无论是1还是0,此条件表达式的值总是一个字符串,或者为“**d”,或者为“##%d/n”,因此是符合printf()函数调用的语法的。
根据以上分析,当x的值为奇数时,使(x%2)的值为1,输出所用的格式串是“**%d”;当x的值为偶数时,(x%2)的值为0,输出所用的格式串是“##%d/n”。
已知X的值是3、4、5,当x的值为3时,输出**3,且不输出换行符,接着输出##4,输出一个换行符,最后当x的值为5时,从新的一行开始输出**5,然后退出循环。
9.设i和x都是int类型,则以下for循环语句______。
for(i=0,x=0;i<=9&ax!
=876;i++)scanf("%d",x);
∙A.最多执行10次
∙B.最多执行9次
∙C.是无限循环
∙D.循环体一次也不执行
(分数:
2.50)
A. √
B.
C.
D.
解析:
[解析]此题中for循环的执行次数取决于关系表达式(i=0,x=0;i<=9&&x!
=876;i++)的结果。
只要i<=9且x!
=876,循环就将继续执行。
结束循环取决于两个条件:
或者i>9,或者x=876。
只要在执行scanf语句时,从终端输入876,循环就将结束。
如果从终端一直未输入876,则i值的增加使i>9,从而结束循环。
按照题中所给定的for语句,每执行一次循环,i自动增1,因此执行10次循环后,i的值为10,循环最终也将结束。
10.以下for循环语句______。
inti,k;
for(i=0,k=-1;k=1;i++,k++)
printf("***");
∙A.判断循环结束的条件非法
∙B.是无限循环
∙C.只循环一次
∙D.一次也不循环
(分数:
2.50)
A.
B. √
C.
D.
解析:
[解析]本例的关键是赋值表达式k=1。
由于表达式2是赋值表达式k=1,为真,因此执行循环体,使k增1,但循环再次计算表达式2时,又使k为1,如此反复循环。
11.以下是计算n!
值的程序,空格处应选______。
#include<stdio.h>
main()
{inti,s,n;
s=1;
printf("Entern:
");
scanf("%d",&n);
for(i=1;i<=n;i++)______;
printf("s=%d",s);
}
∙A.s=s*i
∙B.s*i
∙C.s=s+i
∙D.s+i
(分数:
2.50)
A. √
B.
C.
D.
解析:
[解析]以上程序是典型的连乘算法。
与累加一样,连乘也是程序设计中基本的算法之一,程序中i从1变化到n,每次增1。
在循环体内应该有一个能表达连乘的式子。
变量s的初值为1,可以用此变量存放每次i增1后连乘的结果。
在上述空格处填上s=s*i就可以满足要求。
12.以下程序的输出结果是______。
#include<stdio.h>
main()
{intx,i;
for(i=1;i<=100;i++)
{x=i;
if(++x%2==0)
if(++x%3==0)
if(++x%7==0)
printf("%d",x);
}
printf("/n");
}
∙A.3981
∙B.4284
∙C.2668
∙D.2870
(分数:
2.50)
A.
B.
C.
D. √
解析:
[解析]for循环的循环控制变量i由1变化到100,循环体将执行100次。
循环体每执行一次,首先把i的值赋给了x,即在循环的过程中,x的值由1变化到100。
接着执行了一条嵌套的if语句,在各层的条件表达式中,x的值在增1后,如果满足了指定的条件,才能执行到最内层的printf语句。
在执行最外层的if语句时,若条件表达式++x%2==0的值为1,这时的x中的值为偶数。
执行第二层if语句时,若条件表达式++x%3==0的值为1,这时的x中的值必定是上述偶数加1后能被3除尽的奇数,这些数是3,9,15,21,27,33,39,45,51,57,63,69,75,81,87,93,99。
执行最内层if语句时,若条件表达式++x%7==0的值为1,这时的x中的值必定是上述奇数加1后能被7除尽的偶数。
由以上列出的数中,可以看到能满足此条件的数只有28和70。
13.以下程序的输出结果是______。
#include<stdio.h>
main()
{intk=0,m=0;
inti,j;
for(i=0;i<2;i++)
{for(j=0;j<3;j++)
k++;
k-=j;
}
m=i+j;
printf("k=%d,m=%d",k,m);
}
∙A.k=0,m=3
∙B.k=0,m=5
∙C.k=1,m=3
∙D.k=1,m=5
(分数:
2.50)
A.
B. √
C.
D.
解析:
[解析]本例考查一个二重循环结构。
只要留意在一个循环终止时循环控制变量的变化即可。
很明显,外层循环执行两次。
这两次执行循环的情形如下:
在i=0时,内层循环执行3次(j=0,1,2),直到j=3时终止。
由于每次内层循环使k加1,故循环结束时k=3。
再执行k-=j;,在i=1时,内层循环仍执行原操作,使j=3,k=0。
现在,计算表达式i=2,表达式i<2为假,外层循环结束,执行m=i+j=2+3=5。
14.以下程序的功能是:
按顺序读入10名学生4门课程的成绩,计算出每位学生的平均分并输出,程序如下:
#include<stdio.h>
main()
{intn,k;
floatscore,sum,ave;
sum=0.0;
for(n=1;n<=10;n++)
{for(k=1;k<=4;k++)
{scanf("%f",&score);
sum+=score;
}
ave=sum/4.0;
printf("NO%d:
%f/n",n,ave);
}
}
上述程序运行后结果不正确,调试中发现有一条语句出现在程序中的位置不正确。
这条语句是______。
∙A.sum=0.0;
∙B.sum+=score;
∙C.ave=sum/4.0;
∙D.printf("NO%d:
%f/n",n,ave);
(分数:
2.50)
A. √
B.
C.
D.
解析:
[解析]本题考查的是for循环语句的嵌套结构。
15.以下程序的输出结果是______。
inti,j,m=0;
for(i=1;i<=15;i+=4)
for(j=3;j<=19;j+=4)
m++;
printf("%d/n",m);
∙A.12
∙B.15
∙C.20
∙D.25
(分数:
2.50)
A.
B.
C. √
D.
解析:
[解析]本题所示的程序段包含了一个双重循环。
外层的循环控制变量是i,其初值是1,每循环一次,i的值增4。
在执行时,i的值依次是1、5、9、13,当i的值达到17时,外层的循环就结束,去执行最后的printf语句,因此外层循环执行4次。
外层的循环体内只包含了一条语句,也是一个for循环,此内层的循环控制变量是j,其初值是3,每循环一次,j的值增4,j的值依次为3、7、11、15、19,内循环体执行5次。
内循环体也只包含一条语句m++;,即每执行一次内循环体,m的值增1。
因为m的初值为0,所以m的值就是内循环总的循环次数。
内循环总的执行次数是4(外循环执行次数)×5(内循环次数)=20,所以m的值为20。
16.在以下程序中,判断i>j共执行了______次。
#include<stdio.h>
main()
{inti=0,j=10,k=2,s=0;
for(;;)
{i+=k;
if(i>j)
{printf("%d",s);
break;
}
s+=i;
}
}
∙A.4
∙B.7
∙C.5
∙D.6
(分数:
2.50)
A.
B.
C.
D. √
解析:
[解析]本例涉及break语句,重在循环次数的判定。
本例的循环由于无外出口,只能借助break语句终止。
鉴于题目要求说明判断i>j的执行次数,只需考查经过i+=k运算如何累计i的值(每次累计i的值,都会累计判别i>j一次),i值分别是i=2、4、6、8、10、12,当i的值为12时判断i>j为真,程序输出s的值并结束,共循环6次。
17.以下程序的输出结果是______。
#include<stdio.h>
main()
{inti;
for(i=1;i<=5;i++)
{if(i%2)putchar('<');
elsecontinue;
putchar('>');
}
putchar('#');
}
∙A.<><><>#
∙B.><><><#
∙C.<><>#
∙D.><><#
(分数:
2.50)
A. √
B.
C.
D.
解析:
[解析]本例考查cuntinue语句的基本使用方法。
在程序中,当i%2为真时,执行输出语句,否则执行continue语句,即开始i++运算,进入下一次循环,即当i是偶数时(i%2为0)无任何输出。
18.以下程序的输出结果是______。
#include<stdio.h>
main()
{inty=10;
for(;y>0;y--)
if(y%3==0)
{printf("%d",--y);
continue;
}
}
∙A.741
∙B.852
∙C.963
∙D.8754321
(分数:
2.50)
A.
B. √
C.
D.
解析:
[解析]for循环的循环控制变量y的初值是10,每循环一次y减1,因此y的值由10变化到1。
for循环中只包含了一条if语句,if子句是一个复合语句。
if后的表达式y%3==0表示只有y的值能被3整除时,其后的子句才执行。
已知y由10变化到1,当y的值分别为9、6、3时才会执行if子句中的printf语句,进行输出。
输出的值应是8、5、2。
continue语句的作用是结束本次循环,即跳过本次循环体中余下尚未执行的语句。
就本题而言,在if语句之后,不再有余下尚未执行的语句,因此就接着判断是否执行下一次循环。
由此可见,在本题中,continue是虚设的,不起任何作用。
19.在while(x)语句中的x与下面条件表达式等价的是______。
∙A.x==0
∙B.x==1
∙C.x!
=1
∙D.x!
=0
(分数:
2.50)
A.
B.
C.
D. √
解析:
20.以下程序的输出结果是______。
#include<stdio.h>
main()
{intk,j,m;
for(k=5;k>=1;k--)
{m=0;
for(j=k;j<=5;j++)
m=m+k*j;
}
printf("%d/n",m);
}
∙A.124
∙B.25
∙C.36
∙D.15
(分数:
2.50)
A.
B.
C.
D. √
解析:
21.以下程序的输出结果是______。
#include<stdio.h>
main()
{intx=10,y=10,i;
for(i=0;x>8;y=++i)
printf("%d%d",x--,y);
}
∙A.10192
∙B.9876
∙C.10990
∙D.101091
(分数:
2.50)
A.
B.
C.
D. √
解析:
22.以下程序的输出结果是______。
a=1;b=2;c=2;
while(a<b<c){t=a;a=b;b=t;c--;}
printf("%d,%d,%d",a,b,c);
∙A.1,2,0
∙B.2,1,0
∙C.1,2,1
∙D.2,1,1
(分数:
2.50)
A. √
B.
C.
D.
解析:
23.以下for循环体的执行次数是______。
#include<stdio.h>
main()
{inti,j;
for(i=0,j=i;i<=j+1;i+=2,j--)printf("%d/n",i);
}
∙A.3
∙B.2
∙C.1
∙D.0
(分数:
2.50)
A.
B.
C. √
D.
解析:
24.有以下程序:
#include<stdio.h>
main()
{intn=9;
while(n>6){n--;printf("%d",n);}
}
该程序段的输出结果是______。
∙A.987
∙B.876
∙C.8765
∙D.9876
(分数:
2.50)
A.
B. √
C.
D.
解析:
25.有以下程序段:
intk=0;
while(k=)k++;
while循环执行的次数是______。
∙A.无限次
∙B.有语法错,不能执行
∙C.一次也不执行
∙D.执行一次
(分数:
2.50)
A. √
B.
C.
D.
解析:
26.以下程序中,while循环的循环次数是______。
#include<stdio.h>
main()
{inti=0;
while(i<10)
{if(i<1)continue;
if(i==5)break;
i++;
}
...
}
∙A.1
∙B.10
∙C.6
∙D.死循环,不能确定次数
(分数:
2.50)
A.
B.
C.
D. √
解析:
27.以下程序的输出结果是______。
#include<stdio.h>
main()
{inti=0,a=0;
while(i<20)
{for(;;)
{if((i%10)==0)break;
elsei--;
}
i+=11;a+=i;
}
printf("%d/n",a);
}
∙A.21
∙B.32
∙C.33
∙D.11
(分数:
2.50)
A.
B. √
C.
D.
解析:
28.语句while(!
E);中的条件!
E等价于______。
∙A.E==0
∙B.E!
=1
∙C.E!
=0
∙D.~E
(分数:
2.50)
A. √
B.
C.
D.
解析:
29.以下的for循环______。
for(x=0,y=0;(y!
=123)&&(x<4);x++);
∙A.是无限循环
∙B.循环次数不定
∙C.循环执行4次
∙D.循环执行3次
(分数:
2.50)
A.
B.
C. √
D.
解析:
30.执行以下程序段的结果是______。
intx=23;
do
{printf("%d",x--);
}while(!
x);
∙A.打印出321
∙B.打印出23
∙C.不打印任何内容
∙D.陷入死循环
(分数:
2.50)
A.
B. √
C.
D.
解析:
31.下面程序有错误的行是______。
main()
{inta[3]={i};
inti;
scanf("%d",&a);
for(i=1;i<3;i++)a[0]=a[0]+a[i];
printf("a[0]=%d/n",a[0]);
}
∙A.3
∙B.6
∙C.7
∙D.4
(分数:
2.50)
A.
B.
C.
D.