第五章 循环结构 习题与答案.docx
- 文档编号:7272486
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:17
- 大小:20.53KB
第五章 循环结构 习题与答案.docx
《第五章 循环结构 习题与答案.docx》由会员分享,可在线阅读,更多相关《第五章 循环结构 习题与答案.docx(17页珍藏版)》请在冰豆网上搜索。
第五章循环结构习题与答案
第五章循环结构
一、选择题
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;
if(i>100)break;
}
C)intk=10000;D)ints=36;
do{k++;}while(k>10000);while(s)--s;
8)以下程序中循环体总的执行次数是()
inti,j;
for(i=6;i>1;i--)
for(j=0;j
{……}
A)20B)261
C)15D)25
9)已知
intt=0;
while(t=1)
{...}
则以下叙述正确的是()
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)下面程序的功能是将从键盘输入的一对数,由小到大排序输出,当输入一对相等数时结束循环,在划线处应填入的语句是()
#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)该程序的功能是:
统计所有小于等于x(x>2)的素数的个数,例如,输入x=20,结果:
2,3,5,7,11,13,17,19。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
不得增行或删行,也不得更改程序的结构!
#include
voidmain()
{intx,i,j,count=0;
scanf(“%d”,&x);
for(i=2;i<=x;i++)
{
for(___1___;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整除的四位数及其个数。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
不得增行或删行,也不得更改程序的结构!
#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块,在红马、黑马和白马不可缺少的情况下,共有几种拉法?
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
不得增行或删行,也不得更改程序的结构!
#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列输出。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
不得增行或删行,也不得更改程序的结构!
**
******
**********
**************
******************
图形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是完全数。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
不得增行或删行,也不得更改程序的结构!
#include
voidmain()
{inti,j,t;
for(i=1;i<=1000;i++)
{t=__1__;
for(j=1;j
if(__2__==0)t=t+j;
if(__3__==i)printf("%6d",i);
}
}
三、改错题
1)下列给定程序的功能是:
求三个数的最小公倍数。
例如,给变量a、b、c分别输入15、11、2,则输出结果应当是330。
请改正程序中的错误,使其能得到正确的结果。
注意:
不要改动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的倍数的数值之和。
请改正程序中的错误,使其能得出正确的结果。
注意:
不得增行或删行,也不得更改程序的结构!
#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,此时的被除数即为最大公约数。
#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)下列给定程序的功能是:
统计从键盘上输入的字符中大写字母、小写字母、数字字符、其它字符的个数,用换行符结束循环。
请改正程序中的错误,使其能得出正确的结果。
#include
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。
2)编写程序,其功能是:
输出1到1000之间所有的同构数,所谓同构数指
一个数出现在它的平方数的右边,如5的平方是25,5出现在25的右边,25的平方是625,25出现有625的右边,因此5和25都是同构数。
3)编写程序,其功能是:
求100~999之间的水仙花数。
所谓“水仙花数”是指一个数,其各位数字立方和等于该数本身。
例如153就是一水仙花数。
4)编写程序,其功能是:
编写程序,其功能是:
求fibonacci数列的前20项。
第一项和第二项都是1,从第三项开始往后每一项都是相邻的前两项之和,如:
1,1,2,3,5,8,13……
5)编写程序,其功能是:
猴子吃桃问题。
猴子第一天摘下若干个桃子,立即吃了一半,还不过瘾又多吃了一个,第二天将第一天剩下的桃子吃了一半又多吃了一个,以后每天以这个规律吃下去,到第十天再去吃时发现只剩下一个桃子,问猴子第一天摘了多少个桃子。
第五章循环结构答案
一、选择题
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)
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++;
②将(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);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第五章 循环结构 习题与答案 第五 循环 结构 习题 答案