实验5循环结构参考答案doc.docx
《实验5循环结构参考答案doc.docx》由会员分享,可在线阅读,更多相关《实验5循环结构参考答案doc.docx(15页珍藏版)》请在冰豆网上搜索。
![实验5循环结构参考答案doc.docx](https://file1.bdocx.com/fileroot1/2023-1/3/fce9e366-8848-4477-a08f-b6cde936865d/fce9e366-8848-4477-a08f-b6cde936865d1.gif)
实验5循环结构参考答案doc
C语言程序设计实验教学(5)
【实验目的】通过程序设计实现,掌握while结构、do-while结构和for结构各种类型的循环结构,完成各种循环程序的设计和实现。
【实验要求】同一个题目尝试使用多种循环控制结构来实现,并分析其设计和实现的差别和难易程度。
【实验课时】6.0
【实验内容】
一、以下程序使用while结构实现。
1、完成课堂实例的实现。
(1)计算s=1+2+…+100。
(累加型)
main()
{inti=1,sum=0;
while(i<=100)
{sum+=i;i++;}
printf("1+2+3+...+100=%d\n",sum);
}
main()
{inti,sum=0;
for(i=1;i<=100;i++)
sum+=i;
printf("1+2+3+...+100=%d\n",sum);
}
(2)请输入数n,计算n!
。
(连乘型)
main()
{inti=1,n;longfac=1;
scanf("%d",&n);
while(i<=n)
{fac*=i;i++;}
printf("%d!
=%ld\n",n,fac);
}
main()
{inti,n;longfac=1;
scanf("%d",&n);
for(i=1;i<=n;i++)
fac*=i;
printf("%d!
=%ld\n",n,fac);
}
(3)输出所有的水仙花数。
(范围型)
main()
{intn=100,a,b,c;
while(n<=999)
{a=n/100;
b=n/10%10;
c=n%10;
if(a*a*a+b*b*b+c*c*c==n)
printf("%6d",n);
n++;}
printf("\n");
}
main()
{intn,a,b,c;
for(n=100;n<=999;n++)
{a=n/100;
b=n/10%10;
c=n%10;
if(a*a*a+b*b*b+c*c*c==n)
printf("%6d",n);}
printf("\n");
}
(4)判断n是否为素数。
(反向思维型)
main()
{intn,i=2;
scanf("%d",&n);
while(i<=n-1)
{if(n%i==0)break;
i++;}
if(i>=n)
printf("%disaprimenumber\n",n);
else
printf("%disnotaprimenumber\n",n);
}
main()
{intn,i;
scanf("%d",&n);
for(i=2;i<=n-1;i++)
{if(n%i==0)break;}
if(i>=n)
printf("%disaprimenumber\n",n);
else
printf("%disnotaprimenumber\n",n);
}
(5)输入n个数,计算其中偶数的个数。
main()
{intn,i=1,num,count=0;
scanf("%d",&n);
while(i<=n)
{scanf("%d",&num);
if(num%2==0)count++;
i++;}
printf("countis%d\n",count);
}
main()
{intn,i,num,count=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{scanf("%d",&num);
if(num%2==0)count++;}
printf("countis%d\n",count);
}
(6)输出以下图形
(1):
(7)输出以下图形
(2):
(8)
输出以下图形(3):
图形
(1)图形
(2)图形(3)
main()
{inti,j;
for(i=1;i<=4;i++)
{for(j=1;j<=4-i;j++)
printf("");
for(j=1;j<=2*i-1;j++)
printf("*");
printf("\n");
}
for(i=3;i>=1;i--)
{for(j=1;j<=4-i;j++)
printf("");
for(j=1;j<=2*i-1;j++)
printf("*");
printf("\n");
}
}
main()
{inti,j;
for(i=1;i<=5;i++)
{for(j=1;j<=5-i;j++)
printf("");
for(j=1;j<=2*i-1;j++)
printf("%d",j);
printf("\n");
}
for(i=4;i>=1;i--)
{for(j=1;j<=5-i;j++)
printf("");
for(j=1;j<=2*i-1;j++)
printf("%d",j);
printf("\n");
}
}
main()
{inti,j;
for(i=1;i<=5;i++)
{for(j=1;j<=5-i;j++)
printf("");
for(j=1;j<=i;j++)
printf("%d",j);
for(j=i-1;j>=1;j--)
printf("%d",j);
printf("\n");
}
for(i=4;i>=1;i--)
{for(j=1;j<=5-i;j++)
printf("");
for(j=1;j<=i;j++)
printf("%d",j);
for(j=i-1;j>=1;j--)
printf("%d",j);
printf("\n");
}
}
(9)输入一批字符,计算大写字母的个数,输入‘#’结束。
(个数未知型)
#include"stdio.h"
main()
{charch;intcount=0;
ch=getche();
while(ch!
='#')
{if(ch>='A'&&ch<='Z')
count++;
ch=getche();
}
printf("\ncountis%d\n",count);
}
2、计算s1=1*3*5*…*(2*n-1)。
main()
{inti=1,n;longs=1;
scanf("%d",&n);
while(i<=n)
{s=s*(2*i-1);i++;}
printf("s1=1*3*5*...*%d=%ld\n",2*n-1,s);
}
main()
{inti,n;longs=1;
scanf("%d",&n);
for(i=1;i<=n;i++)
s=s*(2*i-1);
printf("s1=1*3*5*...*%d=%ld\n",2*n-1,s);
}
3、计算所有水仙花数的和。
main()
{inti=100,s=0;inta,b,c;
while(i<=999)
{a=i/100;
b=i/10%10;
c=i%10;
if(a*a*a+b*b*b+c*c*c==i)s+=i;
i++;
}
printf("sum=%d\n",s);
}
main()
{inti,s=0;inta,b,c;
for(i=100;i<=999;i++)
{a=i/100;
b=i/10%10;
c=i%10;
if(a*a*a+b*b*b+c*c*c==i)s+=i;
}
printf("sum=%d\n",s);
}
4、求100~200间的全部素数。
main()
{intn=101,k=0,i;
while(n<200)
{for(i=2;i<=n-1;i++)
if(n%i==0)break;
if(i>=n){printf("%6d",n);k+=1;}
if(k%10==0)printf("\n");
n=n+2;}
printf("\n");
}
main()
{intn,k=0,i;
for(n=101;n<200;n=n+2)
{for(i=2;i<=n-1;i++)
if(n%i==0)break;
if(i>=n){printf("%6d",n);k+=1;}
if(k%10==0)printf("\n");}
printf("\n");
}
5、一张纸厚度为0.3毫米,现有一张无限大的纸,并进行若干次对折,请问对折几次后,高度超过珠峰8848米?
main()
{intcount=0;
longh=3;/*long不能换int,因为数值较大*/
while(h<=88480000)
{count++;
h=h*2;};
printf("Theresultis:
%d\n",count);
}
6、输入2个正整数m,n,求其最大公约数和最小公倍数。
main()
{intm,n,t,p,r;
printf("pleaseinputtwonumbers:
\n");
scanf("%d,%d",&n,&m);
if(n{t=n;n=m;m=t;}
p=n*m;
while(m!
=0)
{r=n%m;n=m;m=r;}
printf("gysis:
%d\n",n);
printf("gbsis:
%d\n",p/n);
}
main()
{intm,n,t,p,i;
printf("pleaseinputtwonumbers:
\n");
scanf("%d,%d",&n,&m);
if(n{t=n;n=m;m=t;}
p=n*m;
for(i=m;i>1;i--)
{if(n%i==0&&m%i==0)break;}
printf("gysis:
%d\n",i);
printf("gbsis:
%d\n",p/i);
}
7、求
(即求1!
+2!
+3!
+……+20!
)
main()
{inti;doublet=1,s=0;
for(i=1;i<=20;i++)
{t=t*i;s=s+t;}
printf("1!
+2!
+...+20!
=%lf\n",s);
}
8、请编程序打印出以下数列:
1、1、2、3、5、8、13、…的前40项。
每行输出4个数。
(斐波那契数列)
方法一:
main()
{inti;
longf1=1,f2=1,f;
printf("%12ld%12ld",f1,f2);
for(i=3;i<=40;i++)
{f=f1+f2;
printf("%12ld",f);
if(i%4==0)printf("\n");
f1=f2;f2=f;
}
printf("\n");
}
方法二:
main()
{inti;
longf1=1,f2=1;
for(i=1;i<=20;i++)
{printf("%12ld%12ld",f1,f2);
f1=f1+f2;
f2=f2+f1;
if(i%2==0)printf("\n");
}
printf("\n");
}
9、求下列分数序列的前20项之和。
,
,
,
,
,
,……
main()
{inti;
floatfz=2,fm=1,s=0;
for(i=1;i<=20;i++)
{s=s+fz/fm;
fz=fz+fm;
fm=fz-fm;
}
printf("sum=%9.6f\n",s);
}
10、找出1000之内的所有完数,一个数如果恰好等于它的因子之和,这个数就称为“完数”。
例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。
输出时按下面的格式输出其因子:
6itsfactorsare1,2,3
main()
{inti,n,s;
for(n=2;n<1000;n++)
{s=0;
for(i=1;iif(n%i==0)s=s+i;
if(s==n)
{printf("%d,itsfactorsare:
",n);
for(i=1;iif(n%i==0)printf("%d,",i);
printf("\n");
}
}
}
补充作业:
(以下题目任选2题)
1、若一个球从100m高度自由落下,每次落地后反跳回原高度的一半,再落下。
求它在第10次落地时,共经过多少m?
第10次反弹多高?
main()
{inti;
floatsn=100,hn=sn/2;
for(i=2;i<=10;i++)
{sn=sn+2*hn;
hn=hn/2;
}
printf("sn=%fm.\n",sn);
printf("hn=%fm.\n",hn);
}
2、猴子吃桃问题。
猴子第一天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了一个。
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上再想吃时,就只剩一个桃子了。
求第一天猴子共摘了多少桃子。
main()
{inti,x1,x2=1;
for(i=9;i>=1;i--)
{x1=(x2+1)*2;
x2=x1;
}
printf("total=%d\n",x1);
}
3、输入m个字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
#include"stdio.h"
main()
{charch;
intletters=0,space=0,digit=0,other=0;
while((ch=getchar())!
='\n')
{if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')
letters++;
elseif(ch=='')
space++;
elseif(ch>='0'&&ch<='9')
digit++;
else
other++;
}
printf("lettersis:
%d\n",letters);
printf("spaceis:
%d\n",space);
printf("digitis:
%d\n",digit);
printf("otheris:
%d\n",other);
}
4、输入一个自然数,计算各数位上数字之和。
如:
5246对应和为5+2+4+6=17。
main()
{intn,s=0;
scanf("%d",&n);
while(n>0)
{s=s+n%10;
n=n/10;}
printf("sumis:
%d\n",s);
}
5、对输入的一正整数a(a在1到9之间),求Sn=a+aa+aaa+..+aaa..a,(10个a),例a=3,则S=3+33+333+..+333..3
voidmain()
{inta,i=1;doublesn=0,tn;
scanf("%d",&a);
printf("\na=%d\n",a);
tn=a;
while(i<=10)
{sn=sn+tn;tn=tn*10+a;++i;}
printf("sn=%lf\n",sn);}
voidmain()
{inta,i;doublesn=0,tn;
scanf("%d",&a);
printf("\na=%d\n",a);
tn=a;
for(i=1;i<=10;i++)
{sn=sn+tn;tn=tn*10+a;}
printf("sn=%lf\n",sn);}
6、求S=1+12+123+1234+12345
main()
{inti,t=1,s=1;
for(i=2;i<=5;i++)
{t=t*10+i;s=s+t;}
printf("s=%d\n",s);
}