循环结构程序设计习题答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
循环结构程序设计习题答案
一、单选题。
1.下面有关for循环的正确描述是( )
A.for循环只能用于循环次数已经确定的情况
B.for循环是先执行循环体语句,后判定表达式
C.在for循环中,不能用break语句跳出循环体
D.for循环体语句中,可以包含多条语句,但要用花括号括起来
[解答]:D。
2.对于for(表达式1;;表达式3)可理解为()
A.for(表达式1;1;表达式3)
B.for(表达式1:1;表达式3)
C.for(表达式1;表达式1;表达式3)
D.for(表达式1;表达式3;表达式3)
[解答]:B。
3.以下正确的描述是()。
A.continue语句的作用是结束整个循环的执行
B.只能在循环体内和switch语句体内使用break语句
C.在循环体内使用break语句或continue语句的作用相同
D.从多层循环嵌套中退出时,只能使用goto语句
[解答]:B。
4.C语言中( )。
A.不能使用do-while语句构成的循环
B.do-while语句构成的循环必须用break语句才能退出
C.do—whiLe语句构成的循环,当while语句中的表达式值为非零时结束循环D.do—while语句构成的循环,当while语句中的表达式值为零时结束循环[解答]:D。
5.C语言中while和do-while循环的主要区别是( )
A.do—while的循环体至少无条件执行一次
B.while的循环控制条件比do—while的循环控制条件严格
C.do—while允许从外部转到循环体内
D.do-while的循环体不能是复合语句
[解答]:A。
6.下面程序段不是死循环的是()。
A.int I=100; B.for ( ; ; );
while(1)
{ I=I%100+1;
if(I>100) break;
}
C.int k=0; D.int s=36;
do{++k; } while(s);
while(k>=0); --s;
[解答]:C。
7.以下能正确计算1*2*3*……*10的程序是()。
A.do{i=1;s=1; B.do{i=1;s=0;
s=s*i; s=s*i;
i++; i++;
}while(i<=10); }while(i<=10);
C.i=1;s=1; D.i=1;s=0;
do{ s=s*i; do{ s=s*i;
i++; i++;
}while(i<=10); }while(i<=10);
[解答]:C。
8.下面程序的运行结果是( )。
#include <stdio.h>
void main()
{ int y=10;
do{y--;}
while(--y);
printf("%d\n",y--);}
A.-1 B.1 C.8 D.0
[解答]:B。
9.下面程序的运行结果是()。
#include<stdio.h>
void main()
{ int num=0;
while(num<=2)
{ num++;
printf("%d\n",num);
}
}
A.1 B.1 2 C.1 2 3 D.1 2 3 4
[解答]:C。
10.若运行以下程序时,从键盘输入3.6 2.4<CR>(<CR>表示回车),则下面程序的运行结果是( )。
#include<math.h>
#include<stdio.h>
void main()
{ float x,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.500000 B.1.600000 C.2.000000 D.2.400000
[解答]:B。
二、看程序,写运行结果。
1.若运行以下程序时,从键盘输入2473↙,则下面程序的运行结果是()。
#include<stdio.h>
void main()
{int c;
while((c=getchar())!=’\n’)
switch(c-‘2’)
{case 0:
case1: putchar(c+4); case2: putchar(c+4);break
case3: putchar(c+3);
default: putchar(c+2);break;
}
printf(“\n”);
}
[解答]:668977。
2.若运行以下程序时,从键盘输入ADescriptor↙,则下面程序的运行结果是()。
#include <stdio.h>
void main()
{char c;
Int v0=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<stdio.h>
void main()
{ int i,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<stdio.h>
void main()
{ int a,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<stdio.h>
void main()
{ int i,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=8。
6.下面程序的运行结果是()。
#include<stdio.h>
void main()
{ int i;
for (i=1;i<=5;i++)
{ if(i%2) printf(“*”);
else continue;
printf(“#”);
}
printf(“$\n”);
}
[解答]:*#*#*#$。
7.下面程序的运行结果是()。
#include<stdio.h>
void main()
{ int i,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<stdio.h>
void main()
{
int i,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<stdio.h>
void main()
{
int i,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
1 2 1
1 2 3 2 1
1 2 3 4 3 2 1
1 2 3 4 5 4 3 2 1
1 2 3 4 5 6 5 4 3 2 1)
三、程序填空。
1.下面程序的功能是将小写字母变成对应的大写字母后的第二个字母,其中y变成A,z 变成B,请在内填入正确内容。
#include<stdio.h>
void main()
{
char c;
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中的较大数,请在内填入正确内容。
#include<stdio.h>
void main()
{
int m=0,n=0;
char c;
while(()!=’\n’)
{ if(c>=’A’&&c<=’Z’) m++;
if(c>=’a’&&c<=’z’) n++;
}
printf(“%d\n”,m<n? );
}
[解答]:c=getchar(),n:m。
3.下面程序的功能是把316表示为两个加数分别能被13和11整除。
请在内填入正确内容。
#include <stdio.h>
void main()
{
int i=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 <stdio.h>
void main()
{
float x, 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,x<amin。
5.求算式xyz+yzz=532中x,y,z的值(其中xyz和yzz分别表示一个三位数)。
请在内填入正确内容。
#include<stdio.h>
void main()
{
int x,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<stdio.h>
void main()
{
int i;double e,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<stdio.h>
void main()
{
int i,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<stdio.h>
void main()
{
int n,count,max,t;
count=max=0;
scanf(“%d”,&n);
do
{
;
if( )
++count;
else if( )
max=t;
;
} while(n);
printf(“count=%d,max=%d”,count,max);
}
[解答]:t=n%10,t==0,max<t,n/=10。
四、编程题。
1.根据公式Π²/6≈1/1²+1/2²+1/3²+…+1/n²,求Π的近似值,直到最后一项的值小于10的负六次方为止。
[解答]:
#include<stdio.h〉
#include<math.h>
main( )
{ long i=1;
double pi=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<stdio.h>
main( )
{int day,x1,x2;
day=0; x1=1020;
while(x1) {x2=(x1/2-2); x1=x2; day++;}
printf(“day=%d\n”,day);
}
3.编程实现用“辗转相除法”求两个正整数的最大公约数。
[解答]:#include<stdio.h>
main( )
{ int r,m,n;
scanf(“%d%d”,&m,&n);
if (m<n) {r=m,m=n,n=r};
r=m%n;
while(r) {m=n; n=r; r=m%n;}
printf(“%d\n”,n);
}
4.等差数列的第一项a=2,公差d=3,编程实现在前n项和中,输出能被4 整除的所有的和。
[解答]: #include<stdio.h>
main()
{ int a,d,sum;
a=2;d=3;sum=0;
do
{ sum+=a;
a+=d;
if(sum%4==0)
printf(“%d\n”,sum);
} while(sum<200);
}
5.求出用数字0至9可以组成多少个没有重复的三位偶数。
[解答]: #include<stdio.h>
main()
{ int n,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之间每位数的乘积大于每位数的和的数。
[解答]:#include<stdio.h>
main()
{ int n,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<stdio.h>
main()
{ int a,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个零件。
求这堆零件总数。
[解答]:#include <stdio.h>
main()
{int i;
for(i=100;i<200;i++)
if((i-2)%4==0)
if(!((i-3)%7))
if((i-5)%9!=0)
printf(“%d”,i);
}。