实验5 循环及其应用实验报告答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五循环及其应用
【实验类型】设计性
【实验学时】2学时
【实验目的】
1、熟悉掌握用while语句,do-while语句和for语句实现循环的方法。
2、掌握在程序设计中用循环语句实现一些常用算法(如穷举、迭代、递推等)。【实验内容】
编程序并上机调试运行。
1.输入两个正整数m和n,求它们的最大公约数和最小公倍数。
输入时,使m 再输入时使m>n,观察结果是否正确; 修改程序使对任何的整数都能得到正确的结果。 解: (1) #include void main() {int hcf(int,int); int lcd(int,int,int); int m,n,h,x; printf("请输入两个整数m,n:\n"); scanf("%d,%d",&m,&n); h=hcf(m,n); x=lcd(m,n,h); printf("最大公约数是%d,\n最小公倍数是%d。\n",h,x); } int hcf(int m,int n) {int r; if((r=m%n)!=0) {m=n;n=r;} return(r); } int lcd(int m,int n,int h) {return (m*n/h);} (2) #include void main() {int hcf(int,int); int lcd(int,int,int); int m,n,h,x; printf("请输入两个整数m,n:\n"); scanf("%d,%d",&m,&n); h=hcf(m,n); x=lcd(m,n,h); printf("最大公约数是%d ,\n 最小公倍数是%d 。\n",h,x); } int hcf(int m,int n) { int t,r; if(n>m) {t=n;n=m;m=t;} while((r=m%n)!=0) {m=n;n=r;} return(n); } int lcd(int m,int n,int h) { int j; if(m>=n) j=m; else j=n; for(;!(j%m==0&&j%n==0);j++); return j; } 2.编写程序利用公式:! n 1!21!111e ++++= 求e 的近似值,精确到小数后6位 解: (1) #include void main() { int i=1; double e=1,k=1; do { e=e+1/k; i++; k=k*i; }while(1/k>=1e-6); printf("e 的近似值e=%f\n",e); } (2) #include void main() { int i; double e=1,k=1; for(i=1;1/k>=1e-6;i++) { k=k*i; e=e+1/k; } printf("e的近似值e=%f\n",e); } 3.编程求1到n中能被3或7整除的数之和。分别用for循环语句和while循环语句完成本题。 解: (for循环语句) #include void main() { int i=1; long int k=0,n; printf("请输入n:\n"); scanf("%ld",&n); for(;i<=n;i++) if(i%3==0||i%7==0) k=k+i; else; printf("1到n中能被3或7整除的数之和k=%ld。\n",k); } #include void main() { int i=1; long int k=0,n; printf("请输入n:\n"); scanf("%ld",&n); printf("1到n中能被3或7整除的数:\n"); for(;i<=n;i++) if(i%3==0||i%7==0) { k+=i; printf("%-7ld",i); if(i%14==0) printf("\n"); } printf("\n1到n中能被3或7整除的数之和k=%ld。\n",k); } (用while循环实现) #include void main() { int i=1; long int k=0,n; printf("请输入n:\n"); scanf("%ld",&n); while(i<=n) { { if(i%3==0||i%7==0) k=k+i; } i++; } printf("1到n中能被3或7整除的数之和k=%ld。\n",k); } #include void main() { int i=1; long int k=0,n; printf("请输入n:\n"); scanf("%ld",&n); printf("1到n中能被3或7整除的数:\n"); while(i<=n) {if(i%3==0||i%7==0) {k+=i; printf("%-7ld",i); if(i%14==0) printf("\n"); } i++; } printf("\n1到n中能被3或7整除的数之和k=%ld。\n",k); } 4.上机完成习题6.10:猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉了一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少桃子。 在得到正确结果后,修改题目,改为每天早上都吃了前一天剩下的一半加二个,请修改程序,并运行,检查运行结果是否正确。 解: #include void main() {int i,x,y;