C语言各章节单元测试题及答案循环结构程序设计.docx

上传人:b****6 文档编号:5151415 上传时间:2022-12-13 格式:DOCX 页数:25 大小:25.10KB
下载 相关 举报
C语言各章节单元测试题及答案循环结构程序设计.docx_第1页
第1页 / 共25页
C语言各章节单元测试题及答案循环结构程序设计.docx_第2页
第2页 / 共25页
C语言各章节单元测试题及答案循环结构程序设计.docx_第3页
第3页 / 共25页
C语言各章节单元测试题及答案循环结构程序设计.docx_第4页
第4页 / 共25页
C语言各章节单元测试题及答案循环结构程序设计.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

C语言各章节单元测试题及答案循环结构程序设计.docx

《C语言各章节单元测试题及答案循环结构程序设计.docx》由会员分享,可在线阅读,更多相关《C语言各章节单元测试题及答案循环结构程序设计.docx(25页珍藏版)》请在冰豆网上搜索。

C语言各章节单元测试题及答案循环结构程序设计.docx

C语言各章节单元测试题及答案循环结构程序设计

第3章循环结构程序设计

3.1典型考试题剖析

3.1.1选择题

【例1】若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0)

s=a;

for(b=1;b<=c;b++)s=s+1;

则与上述程序段功能等价的赋值语句是_______。

A)s=a+b;B)s=a+c;C)s=s+c;D)s=b+c;

✧       考点:

本例考查for循环。

✧       分析:

初始赋值时s=a,那么s的值一定与a有关,C、D答案中不含a所以排除掉。

只用清楚for循环的次数,不管b以前的值为多少,第一次循环时b=1,当b>c时循环结束,那么显然s要加c次1。

所以s的值为a与c的和。

✧       答案:

B

【例2】设x和y均为int型变量,则执行下面的循环后,y值为。

for(y=1,x=1;y<=50;y++)

{

if(x>=10)break;

if(x%2==1)

{

x+=5;continue;

}

x-=3;

}

A)2B)4C)6D)8

✧       考点:

本例考查for循环中break和continue的用法,以及区别。

✧       分析:

break用在循环中,只能退出一层循环。

尤其是在嵌套循环中,只能退出它所在的那一层循环。

不能期望用break从最内层循环一下子退出最外层循环(可以用goto实现)。

continue语句只能用在循环中,它的作用是跳过其后面的语句,直接将控制转移到下一轮循环条件的测试。

语句“if(x>=10)break;”中的break只有当x>=10时,才会执行,并且跳出for循环;语句“x+=5;continue;”是每次执行完一次跳过其后面的语句,直接将控制转移到下一轮循环条件的测试for(y=1,x=1;y<=50;y++)中。

✧       答案:

C

【例3】以下程序中,while循环的循环次数是_______。

main()

{inti=0;

while(i<10)

{if(i<1)continue;

if(i==5)break;

i++;

}

......

}

A)1B)10C)6D)死循环,不能确定次数

✧       考点:

本例考查while循环的用法,以及continue和break的分别。

✧       分析:

本题要求的是循环次数,首先要检查while中的判断条件,i<10是有限循环,然后再观察while内部,if(i<1)continue;第一次循环i=0,满足if条件,执行continue直接跳出循环,不再执行循环内部的其它语句,再次执行while(i<10),而此时i的值仍为0,无疑仍然重复以上步骤,那么i的值没有变化,循环继续,本题是死循环。

✧       答案:

D

【例4】假定a和b为int型变量,则执行以下语句后b的值为。

a=1;b=10;

do{

b-=a;a++;

}while(b--<0);

A)9B)–2C)-1D)8

✧       考点:

本例考查do-while循环的用法。

✧       分析:

第一次循环a=1,b减去a后b=9。

然后执行“while(b--<0);”,为假跳出循环。

所以本程序的循环仅执行1次,9-1=8。

✧       答案:

D

【例5】设j为int型变量,则下面for循环语句的执行结果是。

for(j=10;j>3;j--)

{

if(j%3)

j--;

--j;

--j;

printf("%d",j);

}

A)63B)74C)62D)73

✧       考点:

本例考查for循环的用法。

✧       分析:

本题的难点可能是几个“j--;”、“--j;”容易让人混淆第一次循环j=10,j%3后j连续减三次1,得到7,继续第二次循环;第二次循环j%3后j连续减三次1,得到4,结束循环。

✧       答案:

B

【例6】在下列选项中,没有构成死循环的程序段是。

A)inti=100B)for(;;);

inti=100;

while

(1)

{

i=i%100+1;

if(i>100)break;

}

C)intk=1000;D)ints=36;

do{++k;while(s);--s;

}while(k>=1000);

✧       考点:

本例考查死循环。

✧       分析:

A)要退出循环必须满足i>100,但是执行语句“i=i%100+1;”后,i不可能超过100;B)没有循环条件,显然为死循环;C)经过“k++”后,k的值一定是大于1000的,所以也为死循环;D)中的循环控制为s,s每循环一次则递减,s<0时,退出循环,所以D不是死循环。

✧       答案:

D

【例7】运行以下程序后,如果从键盘上输入china#<回车>,则输出结果为。

#include

main()

{

intv1=0,v2=0;

charch;

while((ch=getchar())!

='#')

switch(ch)

{

case'a':

case'h':

case'o':

v2++;

default:

v1++;

}

printf("%d,%d\n",v1,v2);

}

A)2,0B)5,0C)5,5D)5,2

✧       考点:

本例考查switch的用法。

✧       分析:

本题的程序是为了检查输入字符中a、h、o的个数。

✧       答案:

D

【例8】以下程序的输出结果是。

main()

{

inta=0,i;

for(i=1;i<5;i++)

{switch(i)

{case0:

case3:

a+=2;

case1:

case2:

a+=3;

default:

a+=5;

}

}

printf("%d\n",a);

}

A)31B)13C)10D)20

✧       考点:

本例考查for循环中switch的用法。

✧       分析:

可以看出此题和上一例题类型一样,只不过上一例题考的是while和switch,而此题考查的是for和switch。

大家在分析历年考题时会发现很多题型多次重复出现,所以我们在复习的过程中对以前试题要详加分析。

分析本题得到,for一共循环4次,每次循环内部再执行switch,但是有一个问题,本题的case没有break语句结束,所以要从casei一直执行到default,这一点一定要注意!

不难发现,i=1时,a=a+3+5=8;i=2时,a=a+3+5=16;i=3时,a=a+2+3+5=16+10=26;i=4时,a=a+5=31。

✧       答案:

A

【例9】以下程序的输出结果是。

main()

{

inti,j,x=0;

for(i=0;i<2;i++)

{

x++;

for(j=0;j<3;j++)

{

if(j%2)continue;

x++;

}

}

printf("x=%d\n",x);

}

A)x=4B)x=8C)x=6D)x=12

✧       考点:

本例考查for嵌套。

✧       分析:

本题有两层for循环,内层for循环中嵌套if判断。

首先从i=0,j=0开始,x=x+1=0+1=1;j%2=0%2,则x=x+1=1+1=2,再执行内层循环,i=0,j=1,x=3;继续i=0,j=2,j%2=2%2=0,跳出循环;再执行i=1,x=x+1=3+1=4;接着i=1,j=0,x=5;i=1,j=1,x=6,再下来j=2跳出循环,最终x=6。

这一题关键要看x能循环几次。

✧       答案:

C

【例10】运行以下程序后,如果从键盘上输入6514<回车>,则输出结果为。

main()

{

intm,n;

printf("Enterm,n:

");

scanf("%d,%d",&m,&n);

while(m!

=n)

{

while(m>n)m-=n;

while(n>m)n-=m;

}

printf("m=%d\n",m);

}

A)m=3B)m=2C)m=1D)m=0

✧       考点:

本例考查while嵌套。

✧       分析:

本题主要是为了比较m和n的大小,用了两层while循环,直到m=n了才退出循环(注意循环结束的条件)。

开始循环m=65n=14,65>14,所以执行”while(m>n)m-=n;”,m=m-n=65-14=51,又51>14,接着m=m-n=51-14=37,直到mm)n-=m;”,n=n-m=14-9=5,再执行”while(m>n)m-=n;”,m=m-n=9-5=4。

4<5,再执行”while(n>m)n-=m;”,n=n-m=5-4=1,接下来m>n,再继续m=m-n,一直到m=1,此时m=n=1不再循环。

本题还可以这样看,当m>n时,循环执行m-n,所以65除以14,商4余9,9是最终执行m-n的结果m=9;再来当n>m时,循环执行n-m,所以14除以9,商1余5,此时n=5,m=9,接着m>n,再执行m-n,同样9除以5,商1余4,m=4,n=5,再来用5除以4,余1,此时n=1,最后不难得到m=1,m=n=1,不再循环。

本题可以看作是求m和n的公因数。

✧       答案:

C

【例11】有以下程序

main()

{

inti=0,s=0;

do{

if(i%2){

i++;continue;

}

i++;

s+=i;

}while(i<7);

printf("%d\n",s);

}

执行后输出结果是。

A)16B)12C)28D)21

✧       考点:

本例考查continue。

✧       分析:

初始赋值时s=0,由题意知s的值与i有关。

if(i%2){i++;continue;}则i=1,3,5时,执行s+=i;即s=1+3+5+7=16。

while(i<7)退出循环。

✧       答案:

A

3.1.2填空题

【例1】以下程序运行后的输出结果是。

main()

{inti,m=0,n=0,k=0;

for(i=9;i<=11;i++)

switch(i/10)

{case0:

m++;n++;break;

case10:

n++;break;

default:

k++;n++;

}

printf("%d%d%d\n",m,n,k);

}

✧       考点:

本例考查for循环与switch的结合应用。

✧       分析:

for循环i从9开始到11,共循环3次,i=9时,i/10的值为0,执行case0,m=1,n=1;i=10时,i/10的值为1,执行default,k=1,n=2;i=11时,i/10的值为1,执行default,k=2,n=3。

✧       答案:

132

【例2】以下程序的功能是调用函数fun计算:

m=1-2+3-4+…+9-10,并输出结果。

请填空。

intfun(intn)

{intm=0,f=1,i;

for(i=1;i<=n;i++)

{

m+=i*f;

f=【1】;

}

returnm;

}

main()

{printf("m=%d\n",【2】);}

✧       考点:

本例考查函数调用中for的应用。

✧       分析:

此题要用到for循环,关键问题在于循环的次数和对加减数的处理,显然本题要循环10次,所以,n的值为10。

注意到奇数加,偶数减所以m+=i*f中的f用到正负数变化,f=-f或f*-1或-1*f或f*(-1)或(-1)*f,最终打印的m值是由fun函数计算的,intn的值应该由主函数传入10。

✧       答案:

【1】f=-f或f*-1或-1*f或f*(-1)或(-1)*f;【2】fun(10)

【例3】下面程序的功能是:

计算1到10之间奇数之和及偶数之和,请填空。

main()

{

inta,b,c,i;

a=c=0;

for(i=0;i<10;i+=2)

{a+=i;

;

c+=b;

}

printf("偶数之和=%d\n",a);

printf("奇数之和=%d\n",c-11);

}

✧       考点:

本例考查for的简单应用。

✧       分析:

在做填空题的时候,先要看整个程序的流程,然后再考虑如何填入语句以符合题意。

本题要得到的是1-10之间的奇、偶数之和,for(i=0;i<10;i+=2)此语句共执行5次,显然a+=i是为了得到偶数之和,那么c+=b应该是求奇数之和,而且是由前一个我们需要填入的语句决定,b是每次加入的数据,那么要填的语句应该是b的取值,i是0、2、4、6、8,那么b应该是1、3、5、7、9,可以由i得来,所以b=i+1。

✧       答案:

b=i+1

【例4】下面程序的功能是:

输出100以内能被3整除且个位数为6的所有整数,请填空。

#include

main()

{inti,j;

for(i=0;【1】;i++)

{j=i*10+6;

if(【2】)continue;

printf("%d",j);

}

}

✧       考点:

本例考查for和continue的结合使用。

✧       分析:

本题需要输出100以内能被3整除且个位数为6的所有整数。

先看程序流程。

✧       答案:

【1】

(1)i<10【2】

(2)i%3!

=0

【例5】以下程序运行后的输出结果是_。

main()

{intx=15;

while(x>10&&x<50)

{x++;

if(x/3){x++;break;}

elsecontinue;

}

printf(“%d\n”,x);

}

✧       考点:

本例考查break和continue在循环结构中的综合使用。

✧       分析:

本题输出15到50以内第一个被3整除不为0的整数且让该整数加1。

✧       答案:

17

3.2自测练习与参考答案

3.2.1选择题

1.以下程序的输出结果是。

main()

{

intx=10,y=10,i;

for(i=0;x>8;y=++i)

printf("%d%d",x--,y);

}

A)10192B)9876C)10990D)101091

2.以下程序的输出结果是_______。

main()

{intn=4;

while(n--)printf("%d",--n);

}

A)20B)31C)321D)210

3.执行下面程序片段的结果是_______。

intx=23;

do

{

printf("%2d",x--);}

while(!

x);

A)321B)23C)不输出任何内容D)陷入死循环

4.以下程序的输出结果是________。

main()

{

inti;

for(i=1;i<6;i++)

{

if(i%2){printf("#");continue;}

printf("*");

}

printf("\n");

}

A)#*#*#B)#####C)*****D)*#*#*

5.以下循环体的执行次数是________。

main()

{inti,j;

for(i=0,j=1;i<=j+1;i+=2,j--)printf("%d\n",i);

}

A)3B)2C)1D)0

6.有如下程序

main()

{inti,sum;

for(i=1;i<=3;sum++)sum+=i;

printf("%d\n",sum);

}

该程序的执行结果是_______。

A)6B)3C)死循环D)0

7.有以下程序段

intn=0,p;

do{scanf(“%d”,&p);n++;}while(p!

=12345&&n<3);

此处do-while循环的结束条件是______。

(2002年9月)

A)P的值不等于12345并且n的值小于3

B)P的值等于12345并且n的值大于等于3

C)P的值不等于12345或者n的值小于3

D)P的值等于12345或者n的值大于等于3

8.有如下程序

main()

{intn=9;

while(n>6)

{

n--;printf("%d",n);}

}

该程序段的输出结果是_______。

A)987B)876C)8765D)9876

9.以下程序的输出结果是_______。

main()

{

inti;

for(i='A';i<'I';i++,i++)

printf("%c",i+32);

printf("\n");

}

A)编译不通过,无输出B)aceg

C)acegiD)abcdefghi

10.有以下程序段

intk=0

while(k=1)k++;

while循环执行的次数是_______。

A)无限次B)有语法错,不能执行

C)一次也不执行D)执行1次

11.以下程序执行后sum的值是_______。

main()

{inti,sum;

for(i=1;i<6;i++)sum+=i;

printf(“%d\n”,sum);

}

A)15B)14C)不确定D)0

12.有以下程序

main()

{inti;

for(i=0;i<3;i++)

switch(i)

{case1:

printf("%d",i);

case2:

printf("%d",i);

default:

printf("%d",i);

}

}

执行后输出结果是。

A)011122B)012C)012020D)120

13.以下程序的输出结果是_______。

main()

{intnum=0;

while(num<=2)

{

num++;printf("%d\n",num);

}

A)1B)1C)1D)l

222

33

4

14.以下程序的输出结果是_______。

main()

{

inta,b;

for(a=1,b=1;a<=100;a++)

{if(b>=10)break;

if(b%3==1)

{

b+=3;continue;

}

}

printf("%d\n",a);

}

A)101B)6C)5D)4

15.有以下程序

main()

{intk=4,n=0;

for(;n

{n++;

if(n%3!

=0)continue;

k--;}

printf("%d,%d\n",k,n);

}

程序运行后的输出结果是_______。

A)1,1B)2,2C)3,3D)4,4

16.有以下程序

main()

{ints=0,a=1,n;

scanf("%d",&n);

do{

s+=1;a=a-2;}

while(a!

=n);

printf("%d\n",s);}

若要使程序的输出值为2,则应该从键盘给n输入的值是_______。

A)-1B)-3C)-5D)0

17.要求以下程序的功能是计算:

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);

18.执行以下程序后,输出的结果是。

main()

{

inty=10;

do{

y--;

}while(--y);

printf("%d\n",y--);

}

A)-1B)1C)8D)0

19.执行语句:

for(i=1;i++<4;)后,变量i的值是。

A)3B)4C)5D)不定

20.以下程序的输出结果是_______。

#include

voidmain()

{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=3B)k=0,m=5C)k=1,m=3D)k=1,m=5

21.当执行以下程序段时。

intx;

x=-1;

do{

x=x*x;}

while(!

x);

A)循环体将执行一次B)循环体将执行两次

C)循环体将执行无限次D)系统将提示有语法错误

22.当执行以下程序时_______。

x=-1;

do

{

x=x*x;}

while(!

x)

A)循环体将执行一次B)循环体将执行两次

C)循环体将执行无限次D)系统将提示有语法错误

23.下述循环程序_______。

for(a=0,b=0;a<3&&b!

=3;a++);

A)是无限次循环B)循环次数不定

C)循环3次D)循环4次

24.在下列程序中,没有构成死循环的程序段是_______。

A)inti=100;B)intk=1000;

while

(1)do

{i=i%100+1;{++k;}while(k>=10000);

if(i>100)break;}

C)for(;;);D)ints=36;

while(s);--s;

25.若程序执行时的输入数据是“2473”,则下述程序的输出结果是_______。

#include

voidmain()

{

intcx;

while((cx=getchar())!

='\n')

{

switch(cx-'2')

{

case0:

case1:

putchar(cx+4);

case2:

putchar(cx+4);break;

case3:

putchar(cx+3);

default:

putchar(cx+2);

}

}

}

A)668977B)668966C

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

当前位置:首页 > 高等教育 > 艺术

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

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