第五章循环结构习题与答案.docx
《第五章循环结构习题与答案.docx》由会员分享,可在线阅读,更多相关《第五章循环结构习题与答案.docx(21页珍藏版)》请在冰点文库上搜索。
第五章循环结构习题与答案
第五章循环结构
一、选择题
1)下面有关for循环的正确描述是<)
A)for循环只能用于循环次数已经确定的情况
B)for循环是先执行循环体语句,后判断表达式
C)在for循环中,不能用break语句跳出循环体
D)for循环的循环体中,可以包含多条语句,但必须用花括号括起来
2)对表达式for<表达式1。
。
表达式3)可理解为
A)for<表达式1。
0。
表达式3)
B)for<表达式1。
1。
表达式3)
C)for<表达式1。
表达式1。
表达式3)
D)for<表达式1。
表达式3。
表达式3)
3)以下描述中正确的是<)
A)由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句
B)do-while循环由do开始,用while结束,在while<表达式)后面不能写分号
C)在do-while循环体中,是先执行一次循环,再进行判断
D)do-while循环中,根据情况可以省略while
4)以下程序段的描述,正确的是<)
x=-1。
do
{x=x*x。
}while(!
x>。
A)是死循环B)循环执行两次
C)循环执行一次D)有语法错误
5)设有以下程序段
intx=0,s=0。
while(!
x!
=0>s+=++x。
printf(″%d″,s>。
则<)
A)运行程序段后输出0B)运行程序段后输出1
C)程序段中的控制表达式是非法的D)程序段执行无限次
6)有如下程序
#include
voidmain(>
{intn=9。
while(n>6>{n--。
printf(″%d″,n>。
}
}
该程序的输出结果是<)
A)987B)876
C)8765D)9876
7)在下列选项中,没有构成死循环的是<)
A)inti=100。
B)for<。
。
)。
while<1)
{i=i%100+1。
if100)break。
}
C)intk=10000。
D)ints=36;
do{k++。
}while10000)。
while
8)以下程序中循环体总的执行次数是<)
inti,j。
for(i=6。
i>1。
i-->
for(j=0。
j
j++>
{……}
A)20B)261
C)15D)25
9)已知
intt=0;
while{...}
则以下叙述正确的是<)
A)循环控制表达式的值为0B)循环控制表达式的值为1
C)循环控制表达式不合法D)以上说法都不对
10)以下程序的输出结果是<)
#include
voidmain(>
{inti,j,x=0。
for(i=0。
i<2。
i++>
{x++。
for(j=0。
j<3。
j++>
{if(j%2>continue。
x++。
}
x++。
}
printf(″x=%d\n″,x>。
}
A)x=4B)x=8
C)x=6D)x=12
11)下列说法正确的是<)
inti,x。
for(i=0,x=0。
i<=9&&x!
=876。
i++>
scanf(″%d″,x>。
A)最多的执行10次B)最多执行9次
C)是无限循环D)循环体一次也不执行
12)下面程序的运行结果是<)
#include
voidmain(>
{inty=10。
do{y--。
}while(--y>。
printf(″%d\n″,y-->。
}
A)-1B)1
C)8D)0
13)以下程序的输出结果是<)
#include
voidmain(>
{inta,i。
a=0。
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)13
C)10D)20
14)下面程序的功能是将从键盘输入的一对数,由小到大排序输出,当输入一对相等数时结束循环,在划线处应填入的语句是<)b5E2RGbCAP
#include
voidmain(>
{inta,b,t。
scanf(″%d%d″,&a,&b>。
while(______>
{if(a>b>
{t=a。
a=b。
b=t。
}
printf(″%d%d\n″,a,b>。
scanf(″%d%d″,&a,&b>。
}
}
A)!
a=bB)a!
=b
C)a==bD)a=b
15)下面程序的运行结果是<)
#include
voidmain(>
{inta=1,b=10。
do
{b-=a。
a++。
}while(b--<0>。
printf(″a=%d,b=%d\n″,a,b>。
}
A)a=3,b=11B)a=2,b=8
C)a=1,b=-1D)a=4,b=9
二、填空题
1)该程序的功能是:
统计所有小于等于x2)的素数的个数,例如,输入x=20,结果:
2,3,5,7,11,13,17,19。
p1EanqFDPw
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
不得增行或删行,也不得更改程序的结构!
#include
voidmain(>
{intx,i,j,count=0。
scanf(“%d”,&x>。
for(i=2。
i<=x。
i++>
{
for(___1___。
j
j++>
if(___2___%j==0>
break。
if(___3___>=i>
{count++。
printf(count%15?
"%5d":
"\n%5d",i>。
}
}
printf("\nThenumberofprimeis:
%d\n",count>。
}
2)该程序的功能是:
计算n!
,即1*2*3*4*…*n
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
不得增行或删行,也不得更改程序的结构!
#include
voidmain(>
{
intn,i。
ints=__1__。
scanf("%d",&n>。
for(i=1。
i<=__2__。
i++>
s=s*__3__。
printf("%d",s>。
}
3)该程序的功能是:
统计个位数是5,且能被7整除的四位数及其个数。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
DXDiTa9E3d
注意:
不得增行或删行,也不得更改程序的结构!
#include
voidmain(>
{inti,n=__1__。
for(i=1000。
i<=9999。
i++>
if(i__2__==5&&i%7==0>
{n++。
printf("%d\n",i>。
}
printf("个数为%d",__3__>。
}
4)该程序的功能是:
百马拉百砖。
用100匹马拉100块砖,红马拉3块,黑马拉2块,白马两匹拉1块,在红马、黑马和白马不可缺少的情况下,共有几种拉法?
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
RTCrpUDGiT
注意:
不得增行或删行,也不得更改程序的结构!
#include
voidmain(>
{intr,b,w,sum=0。
for(r=1。
r<=34。
r++>
{for(b=1。
b<=50。
b++>
{w=__1__。
if(w__2__2==0&&w>0>
{sum++。
printf("%d%d%d\n",r,b,w>。
}
}
}
printf("\nsum=%d\n",__3__>。
}
5)该程序的功能是:
在屏幕上打印如下两个图形,要求图形2的第一行的“*”在第40列输出。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
5PCzVD7HxA
注意:
不得增行或删行,也不得更改程序的结构!
**
******
**********
**************
******************
图形1图形2
图形1程序:
#include
voidmain(>
{inti,j。
for(i=1。
i<=__1__。
i++>
{for(j=1。
j<=__2__。
j++>
printf("__3__">。
printf("\n">。
}
}
图形2程序:
#include
voidmain(>
{inti,j,k。
for(i=1。
i<=5。
i++>
{for(k=1。
k<=__1__。
k++>
printf("">。
for(j=1。
j<=__2__。
j++>
printf("*">。
printf("__3__">。
}
}
6)该程序的功能是:
求出1000以内的所有完全数。
若一个数恰好等于它的因子之和<除自身外),则称该数为完全数,例如:
6=1+2+3,故6是完全数。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
jLBHrnAILg
注意:
不得增行或删行,也不得更改程序的结构!
#include
voidmain(>
{inti,j,t。
for(i=1。
i<=1000。
i++>
{t=__1__。
for(j=1。
j
j++>
if(__2__==0>t=t+j。
if(__3__==i>printf("%6d",i>。
}
}
三、改错题
1)下列给定程序的功能是:
求三个数的最小公倍数。
例如,给变量a、b、c分别输入15、11、2,则输出结果应当是330。
xHAQX74J0X
请改正程序中的错误,使其能得到正确的结果。
注意:
不要改动main函数,不能增行或删行,也不得更改程序的结构。
#include
voidmain(>
{inta,b,c,i,temp,n,m。
printf("Inputabc:
">。
scanf("%d%d%d",&a,&b,&c>。
printf("a=%d,b=%d,c=%d\n",a,b,c>。
/*******found*********/
i=1。
temp=m=n=1。
/********found********/
while(temp!
=0&&m!
=0&&n!
=0>
{i=i+1。
temp=i%a。
m=i%b。
n=i%c。
}
printf("Theminimalcommonmultipleis:
%d\n",i>。
}
2)下列给定程序的功能是:
计算正整数num的各位上的数字之积。
例如,若输入252,则输出应该是20;若输入202,则输出应该是0。
请改正程序中的错误,使其能得出正确的结果。
注意:
不得增行或删行,也不得更改程序的结构!
#include
voidmain(>
{/**********found**********/
longn,k。
printf("\Pleaseenteranumber:
">。
scanf("%ld",&n>。
do
{k*=n%10。
/**********found**********/
n\=10。
}while(n>。
printf("\n%ld\n",k>。
}
3)下列给定程序的功能是:
计算1到100之间是8的倍数的数值之和。
请改正程序中的错误,使其能得出正确的结果。
LDAYtRyKfE
注意:
不得增行或删行,也不得更改程序的结构!
#include
voidmain(>
{inti。
/**********found***********/
intsum=1。
for(i=1。
i<=100。
i++>
/**********found***********/
if(i/8==0>sum=sum+i。
/**********found***********/
printf("%f",sum>。
}
4)下列给定程序的功能是:
利用下面公式求π的近似值:
请改正程序中的错误,使其能得出正确的结果。
π2/6=1/12+1/22+1/32+1/42+…,直到某项绝对值不大于10-12为止。
#include
#include
voidmain(>
{doublen,sum=0,pa,cj。
/**********found***********/
n=0。
while(1/(n*n>>pow(10,-12>>
/**********found***********/
{sum=1/(n*n>。
n++。
}
/**********found***********/
cj=sum。
pa=sqrt(cj>。
printf("%f",pa>。
}
5)下列给定程序的功能是:
求两个整数的最大公约数。
请改正程序中的错误,使其能得出正确的结果。
求法:
拿一个整数去除另一个整数取余,然后拿被除数去除以余数,直到余数为0,此时的被除数即为最大公约数。
Zzz6ZB2Ltk
#include
voidmain(>
{intm,n,r。
printf("请输入两个整数m,n:
">。
/**********found***********/
scanf("%d%d",m,n>。
/**********found***********/
r=m/n。
while(r!
=0>
{m=n。
/**********found***********/
n=m。
r=m%n。
}
printf("最大公约数是:
%d",n>。
}
6)下列给定程序的功能是:
统计从键盘上输入的字符中大写字母、小写字母、数字字符、其它字符的个数,用换行符结束循环。
请改正程序中的错误,使其能得出正确的结果。
#includedvzfvkwMI1
voidmain(>
{intdx=0,xx=0,sz=0,qt=0。
charch。
scanf("%c",&ch>。
while(ch!
='\n'>
{/**********found***********/
for(ch>=65&&ch<=90>dx++。
/**********found***********/
elseif(ch>='97'&&ch<='122'>xx++。
elseif(ch>=48&&ch<=57>sz++。
elseqt++。
/**********found***********/
printf("%c",&ch>。
}
printf("%d%d%d%d",dx,xx,sz,qt>。
}
四、编程题
1)根据以下公式计算S:
S=1+1/(1+2>+1/(1+2+3>+…+1/(1+2+3+…n>例如:
若n的值为11时,函数的值为:
1.833333。
rqyn14ZNXI
2)编写程序,其功能是:
输出1到1000之间所有的同构数,所谓同构数指
一个数出现在它的平方数的右边,如5的平方是25,5出现在25的右边,25的平方是625,25出现有625的右边,因此5和25都是同构数。
EmxvxOtOco
3)编写程序,其功能是:
求100~999之间的水仙花数。
所谓“水仙花数”是指一个数,其各位数字立方和等于该数本身。
例如153就是一水仙花数。
SixE2yXPq5
4)编写程序,其功能是:
编写程序,其功能是:
求fibonacci数列的前20项。
第一项和第二项都是1,从第三项开始往后每一项都是相邻的前两项之和,如:
1,1,2,3,5,8,13……6ewMyirQFL
5)编写程序,其功能是:
猴子吃桃问题。
猴子第一天摘下若干个桃子,立即吃了一半,还不过瘾又多吃了一个,第二天将第一天剩下的桃子吃了一半又多吃了一个,以后每天以这个规律吃下去,到第十天再去吃时发现只剩下一个桃子,问猴子第一天摘了多少个桃子。
kavU42VRUs
第五章循环结构答案
一、选择题
1)D2)B3)C4)C5)B6)B7)D8)A9)B10)B
11)A12)D13)A14)B15)B
二、填空题
1、①j=2②i③j
2、①1②n③i
3、①0②%10③n
4、①(100-3*r-2*b>/2。
②%③sum
5、图形1:
①5②2*i-1③*
图形2:
①41-i②2*i-1③\n
6、①0②i%j③t
三、改错题
1、①将i=1。
改为:
i=0。
②将while(temp!
=0&&m!
=0&&n!
=0>改为:
while(temp!
=0||m!
=0||n!
=0>y6v3ALoS89
2、①将longk。
改为:
longk=1。
或longk。
k=1。
②将n\=10。
改为:
n/=10。
3、①将intsum=1。
改为:
intsum=0。
②将if(i/8==0>sum=sum+i。
改为:
nif(i%8==0>sum=sum+i。
③将printf("%f",sum>。
改为:
printf("%d",sum>。
4、①将n=0。
改为:
n=1。
②将sum=1/(n*n>。
改为:
sum+=1.0/(n*n>。
③将cj=sum。
改为:
cj=6*sum。
5、①将scanf("%d%d",m,n>。
改为:
scanf("%d%d",&m,&n>。
②将r=m/n。
改为:
r=m%n。
③将n=m。
改为:
n=r。
6、①将for(ch>=65&&ch<=90>dx++。
改为:
if(ch>=65&&ch<=90>dx++。
M2ub6vSTnP
②将(ch>=’97’&&ch<=’122’>改为:
(ch>=97&&ch<=122>
③将printf("%c",&ch>。
改为:
scanf("%c",&ch>。
四、编程题
1、#include
main(>
{intn。
intt=0,k。
floats=0.0。
printf("\nPleaseenterN:
">。
scanf("%d",&n>。
for(k=1。
k<=n。
k++>
{t+=k。
s+=1.0/t。
}
printf("theresultis:
%f\n",s>。
}
2、方法一:
#include
voidmain(>
{
inti,m。
for(i=1。
i<=1000。
i++>
{m=i*i。
if(m%10==i||m%100==i||m%1000==i>
printf("%6d",i>。
}
}
方法二:
#include
voidmain(>
{inti,m,n。
for(i=1。
i<=1000。
i++>
{m=i*i。
n=i。
while(n!
=0>
{if(n%10==m%10>{n=n/10。
m=m/10。
}
elsebreak。
}
if(n==0>printf("%6d",i>。
}
}
3、方法一:
#include
voidmain(>
{inti。
inta,b,c。
for(i=100。
i<=999。
i++>
{a=i%10。
b=(i/10>%10。
c=i/100。
if(i==a*a*a+b*b*b+c*c*c>printf("%6d",i>。
}
}
方法二:
#include
voidmain(>
{inti,g,m。
intsum。
for(i=100。
i<=999。
i++>
{m=i。
sum=0。
while(m!
=0>
{g=m%10。
m=m/10。
sum=sum+g*g*g。
}
if(sum==i>printf("%6d",i>。
}
}
4、方法一:
#include
voidmain(>
{inti,f1,f2,f。
f1=1。
f2=1。
printf("%10d%10d",f1,f2>。
for(i=3。
i<=20。
i++>
{f=f1+f2。
printf("%10d",f>。
f1=f2。
f2=f。
}
}
方法二:
#include
voidmain(>
{inti,f1,f2。
f1=1。
f2=1。
printf("%10d%10d",f1,f2>。
for(i=1。
i<=9。
i++>
{f1=f1+f2。
f2=f1+f2。
printf("%10d%10d",f1,f2>。
}
}
5、
#include
voidmain(>
{inti,n。
n=1。
for(i=9。
i>=1。
i-->
n=(n+1>*2。
printf("桃子个数为:
%d",n>。
}
申明:
所有资料为本人收集整理,仅限个人学习使用,勿做商业用途。