循环结构程序设计习题答案.docx
《循环结构程序设计习题答案.docx》由会员分享,可在线阅读,更多相关《循环结构程序设计习题答案.docx(18页珍藏版)》请在冰豆网上搜索。
循环结构程序设计习题答案
循环结构程序设计习题答案
一"、单选题。
1.下面有关for循环的正确描述是()
A.for循环只能用于循环次数已经确定的情况
B.for循环是先执行循环体语句,后判定表达式
C.在for循环中,不能用break语句跳出循环体
D.for循环体语句中,可以包含多条语句,但要用花括号括起来
[解答]:
Do
2.对于for(表达式1;;表达式3)可理解为()
A.for(表达式1;1;表达式3)
B.for(表达式1:
1;表达式3)
C.for(表达式1;表达式1;表达式3)
D.for(表达式1;表达式3;表达式3)
[解答]:
Bo
3.以下正确的描述是()。
A.continue语句的作用是结束整个循环的执行
B.只能在循环体内和switch语句体内使用break语句
C.在循环体内使用break语句或continue语句的作用相同
D.从多层循环嵌套中退出时,只能使用goto语句
[解答]:
Bo
4.C语言中()。
A.不能使用do-while语句构成的循环
B.do-while语句构成的循环必须用break语句才能退出
C.do-whiLe语句构成的循环,当while语句中的表达式值为非零时结束循环
D.do-while语句构成的循环,当while语句中的表达式值为零时结束循环[解答]:
Do
5.C语言中while和do-while循环的主要区别是()
A.do-while的循环体至少无条件执行一次
B.while的循环控制条件比do—while的循环控制条件严格
C.do-while允许从外部转到循环体内
D.do-while的循环体不能是复合语句
[解答]:
A。
6.下面程序段不是死循环的是()。
A.intI=100;B.for(;;);
while
(1)
{I=I%100+1;
if(I>100)break;
D.ints=36;
while(s);
--s;
*10的程序是()。
B.do{i=1;s=0;
s=s*i;
i++;}while(i<=10);
D.i=1;s=0;
do{s=s*i;
i++;
}while(i<=10);
)
C.intk=0;
do{++k;}
while(k>=0);
[解答]:
Co
7.以下能正确计算1*2*3*
A.do{i=1;s=1;
s=s*i;i++;
}while(i<=10);
C.i=1;s=1;
do{s=s*i;
i++;
}while(i<=10);
[解答]:
Co
8.下面程序的运行结果是()。
#include
voidmain()
{inty=10;
do{y--;}
while(--y);
printf("%d\n",y--);}
A.-1B.1C
[解答]:
Bo
9.下面程序的运行结果是()。
#include
voidmain()
{intnum=0;
while(num<=2)
{num++;
printf("%d\n",num);
}
}
123D.1234
A.1B.12C
[解答]:
Co
10.若运行以下程序时,从键盘输入3.62.4(结果是()。
#include
#include
voidmain()
{floatx,y,z;
scanf("%f%f',&x,&y);
z=x/y;
while
(1)
{if(fabs(z)>1.0)
{x=y;y=z;z=x/y;}else
break;
}
printf("%f\n",y);
}
A.1.500000B.1.600000C.2.000000D.2.400000[解答]:
Bo
二、看程序,写运行结果。
1.若运行以下程序时,从键盘输入2473/,则下面程序的运行结果是()。
#include
voidmain()
{intc;
while((c=getchar())!
='n')
switch(c-'2')
{case0:
case1:
putchar(c+4);case2putchar(c+4);break
case3:
putchar(c+3);
default:
putchar(c+2);break;
}
printf("\n”);
}
[解答]:
668977。
2.若运行以下程序时,从键盘输入ADescriptor/,则下面程序的运行结果是()。
#include
voidmain()
{charc;
Intv0=0,v1=0,v2=0;
do{
switch(c=getchar())
{case
'a'
case'
A:
case'
e':
case'
E
case'
■,i
case'
I':
case'
o':
case'
O:
case’
u':
case’
U':
v+=1;
default
:
v0+=1;v2+=1;}
}while(c!
=n);
printf("v0=%d,v1=%d,v2=%d\n”,v0,v1,v2);
}
[解答]:
v0=12,v1=4,v2=12。
3.下面程序的运行结果是()。
#include
voidmain()
{inti,b,k=0;
for(i=1;i<=5;i++)
{b=i%2;
while(b-->=0)k++;
}
printf("%d,%d,k,b);
}
[解答]:
8,-2。
4.下面程序的运行结果是()。
#include
voidmain()
{inta,b;
for(a=1,b=1;a<=100;a++)
{if(b>=20)break;
if(b%3==1){b+=3;continue;}
b-=5;
}
printf("%d\n",a);
}
[解答]:
8。
5.下面程序的运行结果是()。
#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);
[解答]:
x=8o
6.下面程序的运行结果是()。
#include
voidmain()
{inti;
for(i=1;i<=5;i++)
{if(i%2)printf("*");
elsecontinue;
printf("#");
}
printf("$\n");
}
[解答]:
*#*#*#$。
7.下面程序的运行结果是()。
#include
voidmain()
{inti,j,a=0;
for(i=0;i<2;i++)
{for(j=0;j<4;j++)
{if(j%2)break;
a++;
}
a++;
}
printf("%d\n",a);
}
[解答]:
4。
8.下列程序运行后的输出结果是()
#include
voidmain()
{
inti,j,k;
for(i=1;i<=4;i++)
{
for(j=1;j<=20-3*i;j++)printf("");
for(k=1;k<=2*i-1;k++)
printf("%3s","*");
printf("\n");
}
for(i=3;i>0;i--)
for(j=1;j<=20-3*i;j++)
printf("");
for(K=1;k<=2*i-1;k++)
printf("%3s","*");
printf("\n");
}
}
[解答]:
*
***
*****
*******
*****
***
*
9.下列程序运行后的输出结果是()
#include
voidmain()
(
inti,j,k;
for(i=1,i<=6;i++)
(
for(j=1;j<=20-3*j;j++)
printf("%3d",k);
for(k=i-1;k>0;k--)
printf("%3d",k);
printf("\n"0);
}
}
[解答]:
1
121
12321
1234321
123454321
12345654321)
三、程序填空。
1.下面程序的功能是将小写字母变成对应的大写字母后的第二个字母,其中y变成A,z
变成B,请在内填入正确内容。
#include
voidmain()
(
charc;
while((c=getchar())!
='n')
{if(c>='a'&&c<=z')
{_
for(c>'Z"&&c<=Z"+2);
}printf("%c,c);
}
}
[解答]:
c-=30,c-=26。
2.下面程序的功能是将从键盘输入的一组字符中统计出大写字母的个数m和小写字母的
个数n,并输入m,n中的较大数,请在内填入正确内容。
#includevoidmain(){
intm=0,n=0;
charc;
while(()!
='n')
{if(c>='A&&c<=Z')m++;
if(c>='a,&&c<=z,)n++;
}
printf("%d\n",m);
}
[解答]:
c=getchar(),n:
m
3.下面程序的功能是把316表示为两个加数分别能被13和11整除。
请在内填入正
确内容。
#includevoidmain()
{
inti=0,j,k;
do{i++;k=316-13*i;}
while();
j=k/11;
printf("316=13*%d+11*%d,i,j);
}
[解答]:
k%11。
4.从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束。
请在内填入正确内容。
#include
voidmain()
{
floatx,amax,amin;
scanf(%f",&x);
amax=x;
amin=x;
while()(
if(x>amax)
amax=x;
if()amin=x;
scanf(%f",&x);
)
printf("amax=%f\namin=%f\n",amax,amin);
)
[解答]:
x>=0,x5.求算式xyz+yzz=532中x,y,z的值(其中xyz和yzz分别表示一个三位数)。
请在
内填入正确内容。
#include
voidmain()
(
intx,y,z,i,result=532;
for(x=1;;x++)
for(y=1;;y++)
for(z=0;;z++)(
i=100*x+10*y+z+100*y+10*z+z;
if()
printf("x=%d,y=%d,z=%d\n",x,y,z);
)
)
[解答]:
x<10,y<10,z<10,i==result。
6.根据公式e=1+1/1!
+1/2!
+1/3!
+,求e的近似值,精度要求为10-6。
请在内填入正
确内容。
#include
voidmain()
(
inti;doublee,new;
e=1.0;new=1.0;
for(i=1;;i++)
(
;
)printf("e=%f\n",e)
)
[解答]:
new>=1e-6,new/=(double)i,e+=new
7.完成用一元人民币换成一分、两分、五分的所有兑换方案。
请在内填入正确内容。
#include
voidmain(){
inti,j,k,l=1;
for(i=0;i<=20;i++)
for(j=0;;j++)
{;
if(k>=0)
{printf("%2d,%2d,%2d",i,j,k);
;
if(l%5==0)printf("\n");)
))
[解答]:
j<=50,k=100-i*5-j*2,l=l+1。
8.统计正整数的各位数字中零的个数,并求各位数字中的最大者。
请在内填入正确内容。
#include
voidmain(){
intn,count,max,t;
count=max=0;
scanf("%d,&n);do
{
;
if()
++count;
elseif()
max=t;
}while(n);
printf("count=%d,max=%d',count,max);
}
[解答]:
t=n%10,t==0,max四、编程题。
1.根据公式口2/6~1/12+1/22+1/32+,+1/n2,求口的近似值,直到最后一项的值小于10
的负六次方为止。
[解答]:
#include
#include
main()
{longi=1;
doublepi=0;
while(I*I<=10e+6)
{pi=pi+1.0/(i*i);
i++;
}
pi-sqrt(6.0*pi);
printf("pi=%10.6f\n",pi);
}
2.有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天后可以卖完,请编程计算。
[解答]:
#include
main()
{intday,x1,x2;
day=0;x1=1020;
while(x1){x2=(x1/2-2);x1=x2;day++;}printf("day=%d\n",day);
}
3.编程实现用“辗转相除法”求两个正整数的最大公约数。
[解答]:
#include
main()
{intr,m,n;
scanf("%d%d,&m,&n);
if(mr=m%n;
while(r){m=n;n=r;r=m%n;}printf("%d\n",n);
}
4.等差数列的第一项a=2,公差d=3,编程实现在前n项和中,输出能被4整除的所有的和。
[解答]:
#include
main()
{inta,d,sum;
a=2;d=3;sum=0;
do
{sum+=a;
a+=d;
if(sum%4==0printf("%d\n",sum);
}while(sum<200);
)
5.求出用数字0至9可以组成多少个没有重复的三位偶数。
[解答]:
#include
main()
{intn,i,j,k;
n=0;
for(i=1;i<9;i++)
if(k=0;k<=8;k+=2)if(k!
=i)
for(j=1;j<9;j++)if(j!
=i&&j!
=k)
n++;printf("n=%d\n”,n);
}
6.输出1至100之间每位数的乘积大于每位数的和的数。
[解答]:
#includemain()
{intn,k=1,s=0,m;
for(n=1;n<=100;n++)
{k=1;s=0;
m=n;
while(m)
{k*=m%10;
s+=m%10;
m/=10;
}
if(k>s)printf("%d,n);
}
}
7.下面程序的功能是求1000以内的所有完全数。
(说明:
一个数如果恰好等于它的因子之
和(除自身外),则称该数为完全数,例如:
6=1+2+3,6为完全数)
[解答]:
#include
main()
{inta,i,m;
for(a=1;a<=100;a++)
{for(m=0,i=1;i<=a/2;i++)if(!
(a%i))m+=i;
if(m==a)printf("%4d',a);
))
8.有一堆零件(100到200之间),如果分成4个零件一组的若干组,则多2个零件;若分成7个零件一组,则多3个零件;若分成9个零件一组,则多5个零件。
求这堆零件总数。
[解答]:
#includemain(){inti;
for(i=100;i<200;i++)
if((i-2)%4==0)
if(!
((i-3)%7))
if((i-5)%9!
=0)
printf("%d',i);
)