二级C语言循环结构数组一.docx

上传人:b****8 文档编号:29991105 上传时间:2023-08-04 格式:DOCX 页数:28 大小:24.39KB
下载 相关 举报
二级C语言循环结构数组一.docx_第1页
第1页 / 共28页
二级C语言循环结构数组一.docx_第2页
第2页 / 共28页
二级C语言循环结构数组一.docx_第3页
第3页 / 共28页
二级C语言循环结构数组一.docx_第4页
第4页 / 共28页
二级C语言循环结构数组一.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

二级C语言循环结构数组一.docx

《二级C语言循环结构数组一.docx》由会员分享,可在线阅读,更多相关《二级C语言循环结构数组一.docx(28页珍藏版)》请在冰豆网上搜索。

二级C语言循环结构数组一.docx

二级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.

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

当前位置:首页 > 解决方案 > 学习计划

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

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