C语言test4.docx
《C语言test4.docx》由会员分享,可在线阅读,更多相关《C语言test4.docx(17页珍藏版)》请在冰豆网上搜索。
C语言test4
实验四循环结构程序设计
(2)
一、实验目的
1.加深对循环语句的认识。
2.掌握在程序设计中用循环的方法实现各种算法(如枚举法、迭代法、递推法)
二、实验内容
1.阅读、调试、运行程序,比较阅读的结果和运行的结果。
(1)
#include
voidmain()
{inti=0,a=0;
while(i<20)
{for(;;)
{if((i%10)==0)break;
elsei--;
}
i+=11;a+=i;
}
printf("%d\n",a);
}
(2)
#include
voidmain()
{inta,y;
a=10;y=0;
do{a+=2;y+=a;
printf("a=%dy=%d\n",a,y);
if(y>20)break;
}while(a=14);
}
(3)输入为“321”时,输出是什么?
#include
voidmain()
{charc;
while((c=getchar())!
='\n')
switch(c-'1')
{case0:
case1:
putchar(c+2);
case2:
putchar(c+3);break;
case3:
putchar(c+4);
default:
putchar(c+1);break;
}
printf("\n");
}
(4)
#include
voidmain()
{inti,x,y;
i=x=y=0;
do
{++i;
if(i%2!
=0){x=x+i;i++;}
y=y+i++;
}while(i<=7);
printf("x=%d,y=%d\n",x,y);
}
2.完善程序,并调试运行
(1)输入字符串,计算并输出其长度。
#include
voidmain()
{
intlen,i=0;
charch;
printf("pleaseinputastring:
\n");
ch=getchar();
while(ch!
='\n'){
i++;
(1);
}
(2);
printf("thestringhas%dcharacters.",len);
}
(2)下面程序的功能是根据以下公式求π值(直到最后一项小于10-5为止)
#include
voidmain()
{doubles=0.0,t=1.0;
intn;
for(
(1);t>=1e-5;n++)
{s+=t;t=
(2);}
printf("%f",2.0*(3));
}
(3)以下程序的功能:
计算并输出m以内最大的n个素数及它们的和。
#include
#include
voidmain()
{intsum=0,n,j,yes,m;
scanf("%d%d",&m,&n);
while(m>=2&&
(1))
{yes=1;
for(j=2;j<=m/2;j++)
if(m%j==0)
{yes=0;
(2);}
if(yes)
{sum+=m;
(3);
printf("%d\n",m);}
m--;
}
printf("%d\n",sum);
}
(4)输出100到10000之间的各位数字之和能被15整除的所有数,输出时每10个一行,请填空完成。
#include
voidmain()
{intm,n,k,i=0;
for(m=100;m<=1000;m++)
{___
(1)__;n=m;
do
{k=k+
(2);
n=n/10;
}(3);
if(k%15==0)
{printf("%5d",m);
i++;
if(i%10==0)(4);
}
}
}
3.修正程序,并调试运行
(1)以下程序的功能是求
请改正程序中的错误,使程序能得到正确的运行结果。
注意:
程序中有4处错误,不得增行和删行,也不得更改程序的结构!
程序如下:
#include
voidmain()
{intn,i,j,t;
/************found************/
ints;
printf("Pleaseinputanumber:
");
/************found************/
scanf("%d",n);
s=0;
/************found************/
for(i=1;i<=n;i++);
{t=0;
for(j=1;j<=i;j++)
t=t+j;
/************found************/
s=s+1/t;
}
printf("%10.6f\n",s);
}
(2)
已知一个数列的前三项分别为0、0、1,以后的各项都是其相邻的前三项的和。
下列给定程序的功能是:
计算并输出该数列的前n项的平方根之和。
例如,当n=10时,程序的输出结果应为23.197745。
#include
#include
voidmain()
{doublesum,s0,s1,s2,s;
intn,k;
scanf("%d",&n);
/************found************/
sum=0.0;
if(n<=2)sum=0.0;
/************found************/
s0=0.0;s1=0.0;s2=0.0;
/************found************/
for(k=4;k>n;k++)
{s=s0+s1+s2;
sum+=sqrt(s);
s0=s1;s1=s2;s2=s;
}
printf("%lf\n",sum);
}
(3)下列给定程序的功能是:
给定n个成绩,统计并输出平均成绩和及格率。
#include
#include
voidmain()
{intx,j,c=0,n=6;
/************found************/
floatj;
/************found************/
for(j=0;j<=n;j++)
{scanf("%d",&x);
if(x>=60)c++;
xa+=x;
}
xa=xa/n;
printf("ave=%f\n",xa);
/************found************/
printf("percent=%.1f%%\n",c/n*100);
}
(4)给定程序的功能是:
求三个正整数的最小公倍数。
例如,给变量x、y、z分别输入15112,则输出结果应当是:
330。
#include
voidmain()
{intx,y,z,j,t,n,m;
scanf("%d%d%d",&x,&y,&z);
/************found************/
j=0;
t=j%x;
m=j%y;
n=j%z;
/************found************/
while(t!
=0&&m!
=0&&n!
=0)
{j=j+x;
t=j%x;
m=j%y;
n=j%z;
}
printf("Theminimalcommonmultipleis:
%d\n",j);
}
4.编写程序,并调试运行
(1)输入一个自然数,判断它是否为“对称”数。
如整数“12321”是一个对称数。
(2)打印输出所有除以11后所得商正好是它的各位数字平方和的三位数。
(3)爱因斯坦阶梯问题。
设有一个阶梯,不知其它阶数,但知:
每步跨2阶,最后剩下1阶;每步跨3阶;最后剩下2阶;每步跨5阶;最后剩下4阶;每步跨7阶,正好到楼顶。
求最少有多少阶。
(4)输入20个1~90的整数,分类统计1~30、31~60、61~90的数各有多少个?
2、填空
1、#include
voidmain()
{
intlen,i=0;
charch;
printf("pleaseinputastring:
\n");
ch=getchar();
while(ch!
='\n'){
i++;
ch=getchar();
}
Len=i;
printf("thestringhas%dcharacters.",len);
}
2、#include
voidmain()
{doubles=0.0,t=1.0;
intn;
for(n=1;t>=1e-5;n++)
{s+=t;t=n*t/(2*n+1);}
printf("%f",2.0*s);
}
3、#include
#include
voidmain()
{intsum=0,n,j,yes,m;
scanf("%d%d",&m,&n);
while(m>=2&&n>0)
{yes=1;
for(j=2;j<=m/2;j++)
if(m%j==0)
{yes=0;
break;}
if(yes)
{sum+=m;
n--;
printf("%d\n",m);}
m--;
}
printf("%d\n",sum);
}
4、#include
voidmain()
{intm,n,k,i=0;
for(m=100;m<=1000;m++)
{k=0;n=m;
do
{k=k+n%10;
n=n/10;
}while(n!
=0);
if(k%15==0)
{printf("%5d",m);
i++;
if(i%10==0)printf(“\n”);
}
}
}
3、改错预习
1、
#include
voidmain()
{intn,i,j,t;
/************found************/
floats;
printf("Pleaseinputanumber:
");
/************found************/
scanf("%d",&n);
s=0;
/************found************/
for(i=1;i<=n;i++)
{t=0;
for(j=1;j<=i;j++)
t=t+j;
/************found************/
s=s+1.0/t;
}
printf("%10.6f\n",s);
}
2、
#include
#include
voidmain()
{doublesum,s0,s1,s2,s;
intn,k;
scanf("%d",&n);
/************found************/
sum=1.0;
if(n<=2)sum=0.0;
/************found************/
s0=0.0;s1=0.0;s2=1.0;
/************found************/
for(k=4;k<=n;k++)
{s=s0+s1+s2;
sum+=sqrt(s);
s0=s1;s1=s2;s2=s;
}
printf("%lf\n",sum);
}
3、
#include
#include
voidmain()
{intx,j,c=0,n=6;
/************found************/
floatxa;
/************found************/
for(j=1;j<=n;j++)
{scanf("%d",&x);
if(x>=60)c++;
xa+=x;
}
xa=xa/n;
printf("ave=%f\n",xa);
/************found************/
printf("percent=%.1f%\n",c/n*100);
}
4、
#include
voidmain()
{intx,y,z,j,t,n,m;
scanf("%d%d%d",&x,&y,&z);
/************found************/
j=x;
t=j%x;
m=j%y;
n=j%z;
/************found************/
while(t!
=0||m!
=0||n!
=0)
{j=j+x;
t=j%x;
m=j%y;
n=j%z;
}
printf("Theminimalcommonmultipleis:
%d\n",j);
}
4、编程预习:
1、#include
voidmain()
{inta,b=0,c;
printf("请输入您想判断的正整数:
");
scanf("%d",&a);
c=a;
while(a!
=0)
{b=a%10+b*10;
a=a/10;}
if(b==c)
printf("您输入的数是对称数。
\n");
else
printf("您输入的数不是对称数。
\n");
}
思路:
倒序数与原数相等。
2、
#include
voidmain()
{inta=100,b,c,d,e,x;
while(a<=999)
{b=a/11;
c=a%10;
d=a/10%10;
e=a/100%10;
x=c*c+d*d+e*e;
if(x==b)
{printf("%d\n",a);
a=a+1;}
else
a=a+1;
}
}
3、
#include
voidmain()
{inta=7,i=0;
while(i<1)
{if(a%2==1&&a%3==2&&a%5==4&&a%7==0)
{printf("%d\n",a);
i=i+1;}
else
a=a+1;}
}
4、
#include
voidmain()
{intx,a=0,b=0,c=0,i=1;
printf("请依次输入范围在1-90的20个正整数:
");
while(i<=20)
{scanf("%d",&x);
if(1<=x&&x<=30)
{a=a+1;
i=i+1;}
elseif(30{b=b+1;
i=i+1;}
elseif(61{c=c+1;
i=i+1;}
else
printf("Error!
");
}
printf("%d%d%d\n",a,b,c);
}