实验四 循环结构程序设计
【实验目的】
1.掌握while、do~while、for语句的语法规则、执行过程和使用方法。 2.理解循环结构的嵌套,循环的中途退出的表示方法。 3.掌握循环结构程序设计方法及典型算法。
【实验内容】 一、程序调试方法实验
xx2xn1、下面是利用公式:e?1??求ex的近似值程序,找出并改正程序中的错误。 ???1!2!n!源程序如下: #include
{ int i;
float a,e,x;
printf(\请输入x的值:\scanf(\e=0; i=0; a=1;
while(a>1e-6); { }
a=a*x/i; e=e+a; i++;
printf(\循环次数为:%d次,e的%d次方为:%f\\n\
}
程序正确的运行结果为:
请输入x的值:1.0
循环次数为:11次,e的1.00次方为:2.718282 Press any key to continue
二、编写程序
1、利用while循环语句编程,求1+2+3+...+50之和,计算结果的输出采用以下形式:
1+2+3+...+50=计算值
#include
{ sum+=i; i++; } printf(\}
2、利用do while循环语句编程,求1+2+3+...+50之和,计算结果的输出采用形式:
1+2+3+...+50=计算值
#include
3、利用for循环语句编程,求1+2+3+...+50之和,计算结果的输出采用形式:
1+2+3+…50=计算值
#include
int i=1,sum=0; for(;i<=50;i++) sum+=i;
printf(\
4、编程,输入10个整数,求其中正数的个数及其平均值(精确到小数点后两位)。
#include
int i;
float n,avg=0;
for(i=1;i<=10;i++) { }
scanf(\f\ (不能是lf) avg+=n;
printf(\}
5、编程实现:输入一个整数(不超过5位),要求按逆序输出各位数字,如原数为321,则应输出123。
提示:参照【例4-6】
6、编写一个程序,求两个整数的最小公倍数。
提示:可以参考“最大公约数”的求法,从两个数中较大的一个出发,找到的第一个能被这两个数整除的数,就是最小公倍数。参照【例4-4】
#include
int a,b,m;
scanf(\m=a>b?a:b;
while(m%a!=0||m%b!=0) m++; printf(\最小公倍数为\
}
7、统计输入的一串字符中每个元音字母(a,e,i,o,u)出现的次数,当输入#时输入结束。 提示:使用循环结构读入字符,循环体内用switch或if…else if…else结构。可参考教材P97【例5-3】和P106【例5-6】 while((c=getchar())!=’#’) { if(c==’a’) { … } else if( ) { … } … else { } } while((c=getchar())!=’#’) { switch() { case ‘a’: ….(略) } } #include
int a=0,e=0,i=0,o=0,u=0; char c;
scanf(\
while((c=getchar())!='#') {
if(c=='a') a++;
else if(c=='e') e++;
else if(c=='i') i++; else if(c=='o') o++; else if(c=='u') i++;
}
printf(\出现的次数%d\\n\
printf(\出现的次数%d\\n\ printf(\出现的次数%d\\n\ printf(\出现的次数%d\\n\ printf(\出现的次数%d\\n\}
8、输出100~200间的全部素数。 提示:参照【例4-16】 #include
9、求n!,其中,n为用户输入的任何整数。(n<=50,具体值由用户输入)。 #include
int n,sum=1,i; scanf(\for(i=1;i<=n;i++) int n,i;
for(n=100;n<=200;n++) {
for(i=2;i if(n%i==0) break; if(i>sqrt(n)) printf(\ else } printf(\ } sum*=i; printf(\ 10、求 ?n!,即求1!+2!+…+19!+20! n?120#include 11、编写程序,找出1~999之间的全部同构数。同构数是这样的数,它出现在它的平方数的右边,例如:5是25的右边的数,25是625右边的数,5和25都是同构数。 提示:如何验证m是n右边的数, 若m是个位数,则判断若n-m能整除10,则m是n右边的数; 若m是十位数,则判断若n-m能整除100,则m是n右边的数; 若m是百位数,则判断若n-m能整除1000,则m是n右边的数; #include { int n,m; for(n=1;n<1000;n++) { int sum=1,i,n,k=0; for(n=1;n<20;n++) {for(i=1;i printf(\ sum*=i; k+=sum; m=n*n; if(n<10) { if((m-n)==0) } printf(\ else if(n<100) { if((m-n)0==0) printf(\} else if(n<1000) { if((m-n)00==0) } printf(\