1、C语言考试题循环控制 试题一、选择题(在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项填涂在答题卡相应位置上。) 6.1 对表达式for(表达式1; ;表达式3)可理解为 A)for(表达式1;0;表达式3) B)for(表达式1;1;表达式3) C)for(表达式1;表达式1;表达式3) D)for(表达式1;表达式3;表达式3) 6.2 在下列选项中,没有构成死循环的是 A)int i=100; while(1) i=i+1; if(i100)break; B)for(;); C)int k=10000; dok+;while(k10000); D)int
2、s=36; while(s)-s; 6.3 下面有关for循环的正确描述是 A)for循环只能用于循环次数已经确定的情况 B)for循环是先执行循环体语句,后判断表达式 C)在for循环中,不能用break语句跳出循环体 D)for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来 6.4 若int i,j;,则for(i=j=0;i10&j8;b=+k) printf(%d,%d,a- -,- -b); printf(n); A)10,10,10,0, B)10,9,9,0, C)10,10,9,1, D)9,9,9,1, 6.6 有一堆零件(100到200之间),如果分成4个零件一
3、组的若干组,则多2个零件;若分成7个零件一组,则多3个零件;若分成9个零件一组,则多5个零件。下面程序是求这堆零件总数,请选择填空。 #include main() int i; for(i=100;i200;i+) if(i-2)%4=0) if(!(i-3)%7) if(_) printf(%d,i); A)i%9=5 B)i%9!=5 C)(i-5)%9!=0 D)(i-5)%9=0 6.7 下列程序的输出结果是 #include stdio.h main() int i,a=0,b=0; for(i=1;i10;i+) if(i%2= =0) a+; continue; b+; pri
4、ntf(a=%d,b=%d,a,b); A)a=4,b=4 B)a=4,b=5 C)a=5,b=4 D)a=5,b=5 6.8 阅读下列程序,则执行结果是 #include stdio.h main() int a=0,b=0,c=0,i; for(i=0;i2;m- -) k=0; for(n=m;n1;n- -) k=k+m*n; printf(%fn,k); A)5.000000 B)15.000000 C)25.000000 D)35.000000 6.10 下面程序的运行结果是(代码有错误) #include stdio.h main() int j,i,k=0; for(j=50;
5、j=j-1) printf(%d,j); k+; A)5359 B)5953 C)3595 D)9535 6.11 已知 int t=0; while(t=1) . 则以下叙述正确的是 A)循环控制表达式的值为0 B)循环控制表达式的值为1 C)循环控制表达式不合法 D)以上说法都不对 6.12 设有以下程序段 int x=0,s=0; while(!x!=0)s+=+x; printf(%d,s); 则 A)运行程序段后输出0 B)运行程序段后输出1 C)程序段中的控制表达式是非法的 D)程序段执行无限次 6.13 下列程序的输出结果是 #include stdio.h main() int
6、 i=6; while(i- -) printf(%d,- -i); printf(n); A)531 B)420 C)654321 D)死循环 6.14 对下,两个语句描述正确的是 .while(1).for(;) A)都是无限循环 B)是无限循环,错误 C)循环一次,错误 D)以上答案都错 6.15 以下程序段的描述,正确的是 x=-1; do x=x*x; while(!x); A)是死循环 B)循环执行两次 C)循环执行一次 D)有语法错误 6.16 若有如下语句 int x=3; do printf(%dn,x-=2);while(!(- -x); 则上面程序段 A)输出的是1 B)
7、输出的是1和-2 C)输出的是3和0 D)是死循环 6.17 下面程序的运行结果是 #include main() int a=1,b=10; do b-=a; a+; while(b- -0); printf(a=%d,b=%dn,a,b); A)a=3,b=11 B)a=2,b=8 C)a=1,b=-1 D)a=4,b=9 6.18 若运行以下程序时,从键盘输入 ADescriptor(表示回车),则下面程序的运行结果是#include main() char c; int v0=1,v1=0,v2=0; doswitch(c=getchar() case a:case A: case e
8、:case E: case i:case I: case o:case O: case u:case U:v1+=1; default:v0+=1;v2+=1; while(c!=n); printf(v0=%d,v1=%d,v2=%dn,v0,v1,v2); A)v0=7,v1=4,v2=7 B)v0=8,v1=4,v2=8 C)v0=11,v1=4,v2=11 D)v0=13,v1=4,v2=12 6.20 C语言中 while 和do-while循环的主要区别是 A)do-while的循环体至少无条件执行一次 B)while的循环控制条件比do-while的循环控制条件更严格 C)do-
9、while允许从外部转到循环体内 D)do-while 的循环体不能是复合语句 6.21 下列说法中错误的是 A)只能在循环体内使用break语句 B)在循环体内使用break语句可以使流程跳出本层循环体,从而提前结束本层循环 C)在while和dowhile循环中,continue语句并没有使整个循环终止 D)continue的作用是结束本次循环,即跳过本次循环体中余下尚未执行的语句,接着再一次进行循环判断 二、填空题(请将每一个空的正确答案写在答题卡相应序号后。) 6.22 设i,j,k均为int型变量,则执行完下面的for语句后,k的值为【1】。10for(i=0, j=10; i=j;
10、 i+, j- -) k=i+j; 6.23 下列程序的功能是输入一个整数,判断是否是素数,若为素数输出1,否则输出0,请填空。 (x%2!=0)main() int i, x, y=1; scanf(%d, &x); for(i=2; i0; y- -) if (y%3= =0) printf(%d, - -y); continue; 6.25 阅读下面程序段,则执行后的输出结果为 【4】 。2 , 7,12#include stdio.h main() int a=1; for(;a=15;) if(+a%5!=2) continue; else printf(%d,a); printf(
11、n); 6.26 阅读下面语句,则执行后的输出结果为 【5】 (代码有错误)#include stdio.h main() char a,b; for(a=0,b=9;aprintf(%c%c,a,b); printf(n); 6.27 阅读下面程序,则执行后程序的结果为 【6】 15 ,16#include stdio.h main() int a=0,b=0; while(a15)a+; while(b+15); printf(%d,%dn,a,b); 三、编程题(来自于经典C语言编程100例 )【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?程
12、序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。#include stdio.hmain() int i , j , k; for(i=1;i5;i+) /三层循环嵌套, for(j=1;j5;j+) for(k=1;k5;k+) if(i!=j & i!=k & j!=k) /三个位上的数都不重复则输出 printf(%d%d%dt,i,j,k); return 0;【程序4】题目:输入某年某月某日,判断这一天是这一年的第几天?程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考
13、虑多加一天。#include stdio.h main() int day,month,year,sum; do /判断用户的输入是否有误 printf(请输入年月日); scanf(%d%d%d,&year,&month,&day); if(month12) printf(输入的月份有误,请重新输入!n); if(year=0) printf(输入的年份有误,请重新输入!n); if(day31) printf(输入的日期有误,请重新输入!n); while(year=0 | month12 | day31); switch(month) /计算各月份的天数 case 1: sum=0 ;
14、break; case 2:sum=31;break; case 3:sum=59;break; case 4:sum=90;break; case 5:sum=120;break; case 6:sum=151;break; case 7:sum=181;break; case 8:sum=212;break; case 9:sum=243;break; case 10:sum=273;break; case 11:sum=304;break; case 12:sum=334;break; default:printf(data error);break; sum=sum+day; /加上某
15、天 if(year%400=0|(year%4=0 & year%100!=0) /判断是不是闰年 if( month2) /如果是闰年则判断月份是否大于2 sum+; printf(%d年%d月%d日是那一年的第%d天!n,year,month,day,sum);【程序5】题目:输入三个整数x,y,z,请把这三个数由小到大输出。程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果xy则将x与y的值进行交换,然后再用x与z进行比较,如果xz则将x与z的值进行交换,这样能使x最小。#include int main() int x,y,z,temp; printf(请输入三个数:);
16、 scanf(%d%d%d,&x,&y,&z); if(xy) /如果xy,把x和y对调 temp = x; x = y; y = temp; if(xz) /如果xz,把x和z对调,始终保持x最小 temp = x; x = z; z = temp; if(yz) /如果yz,把y和z对调, temp = x; x = z; z = temp; printf(%d %d %dn,x,y,z);【程序8】题目:输出9*9口诀。程序分析:分行与列考虑,共9行9列,i控制行,j控制列。#include int main() for(int i = 1 ; i = 9 ; i+) for(int j
17、 = 1 ; j = i ; j+) printf(%dx%d=%dt,j,i,i*j); printf(n); 【程序12】题目:判断101-200之间有多少个素数,并输出所有素数。程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。 #include #include int main() printf(101-200之间的素数有:); for(int i = 101 ; i = 200 ; i+) int s = (int)sqrt(i); for(int j = 2 ;j = s ; j+) if(i%2 = 0) break; if(j=s) printf(%dt,i); printf(n); return 0;【程序20】题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?#include main() float s=100.0,h=s/2; int n; for(n=2;n=10;n+) s=s+2*h; /共进过的米数 h=h/2; /反弹的高度 printf(第十次落地时经过的米数 %fn,s); printf(第十次反弹的高度为:%fn,h);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1