实验八 循环结构程序设计(三)
实验八 循环结构程序设计(三)
【实验目的】
1.熟练使用for、while和do-while语句,理解它们的相同和不同之处。 2.熟练掌握break和continue语句的使用。
【实验内容】
一、试着编写下列程序
【例8-1】输出三位数中的所有水仙花数。水仙花数是指各位数字的立方和等于其自身的数。例如,153的各位数字的立方和是13+53+33=153 源程序:
#include \#include \main() {
int i,a,b,c;
for(i=100;i<=999;i++) {
a=i/100;
b=i/10; c=i;
if(pow(a,3)+pow(b,3)+pow(c,3)==i) /*或if(a*a*a+b*b*b+c*c*c==i) 第二行命令行去掉*/ printf(\} }
?举一反三
【8-1】输出三位数中能够被5整除的数。
【例8-2】求Sn=a+aa+aaa+aaaa+?其中a是一个数字,n由键盘输入。例,a为2,n为5时Sn=2+22+222+2222+22222。 源程序:
34
实验八 循环结构程序设计(三)
#include \main() {
long i,a,n,sum=0,t; scanf(\
t=a; /*用t来取每一项*/ for(i=1;i<=n;i++) { }
printf(\}
sum+=t; t=t*10+a;
?举一反三
【8-2】求1?12!?13!?.....?1n!的和。
?提示:n为任意的一个正整数。
【8-3】输入一个正整数,判断是否为素数。 源程序:
#include
int x,k;
scanf(\k=sqrt(x); for(i=2;i<=k;i++) if(x%i==0) break;
if(i>k) printf(\是素数\,x); else printf(\}
?提示:能够被1和它本身整除的数是素数。例:2、3、5、7、11······等。1不是素数。
35
实验八 循环结构程序设计(三)
判断一个数n是否为素数,可以用2~(n-1)或2~
n2或2~n范围的数一个一个去除n,n
一旦被这范围的某一个数除尽,则n就是非素数。
?举一反三
【8-3】求1+2+3+4+5+·······和值大于10为止。用break语句编写程序。
二、程序改错
不允许增加行也不允许删除行,也不得更改程序的结构。
1、求fibonacci数列的前30个数之和,已知此数列的前2项分别为1。 源程序: main() {
long f1=1,f2=1,n,s=0; /********found********/ for(n=1;n<=30;n++); { s=s+f1+f2;
f1=f1+f2; f2=f2+f1; }
printf(\
}
2、输入n个数,求这n个数中偶数的平均值 源程序: main() {
int i,n,m,a=0; float s=0; scanf(\/********found********/ for(i=1;i<=n) { scanf(\
if(m%2==0) { a=a+1;s=s+m ; } i++; }
printf(\
36
实验八 循环结构程序设计(三)
3、找出2至99之间的全部同构数。同构数是这样一组数:它出现在其平方数的右边,例如,5是25右边的数,25是625右边的数,5和25都是同构数。 源程序: main( ) { int i;
for(i=2;i<100;i++)
/********found********/
if(i= =(i*i)&&i= =(i*i)0)
printf(\}
三、程序填空
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 1、下面程序功能是:输出100~200之间不能被3整除的数。 源程序: main() {
int n;
for(n=100;n<=200;n++) { if( 【1】 )
continue; printf(\ } }
2、输入一个正整数n,输出2/1+3/2+5/3+······的前20项之和,保留2位小数(该序列从第二项起,每一项的分子是前一项的分子与分母之和,分母是前一项的分子。) 源程序:
#include \main()
{
float m=2,n=1,sum=0,t; int i=1; for(;i<=20;i++) { }
sum+=【1】; t=m; m=m+n; n=t;
printf(\
37
实验八 循环结构程序设计(三)
【思考题】
1.三种循环的区别?
2、在哪些条件下能退出循环体? 3、分析程序的运行结果 main() { int a,sum;
for(a=1;a<=10;a++) sum+=a;
printf(“%d,%d”,sum,a);
}
4、分析程序中break语句和continue语句的执行方式有何不同? main()
{ int a;
for(a=100;a<=999;a++) {
if(a%3==0) break; /*将break改为continue*/ printf(“%d ”,a); } }
38