一、实验内容
实验一
实验要求:输入两个正数m和n(要求m<=n),求m!+(m+1)!+(m+2)!...+n!
代码:
include <stdio.h> int main() { int m,n,i; float sum,p; printf("请输入两个整数 "); scanf("%d,%d",&m,&n); sum=0; if(m<=n) { for(m;m<=n;m++) { p=1; for(i=1;i<=m;i++) { p=p*i; } sum=p+sum; } } else { printf("数据错误 "); } printf("sum=%.0f ",sum); }
程序运行结果:
实验二
实验要求:输出1000以内的所有完数。所谓完数是指这个数恰好等于除它本身外的所有因子之和。例:6的因子为1,2,3,6=1+2+3,所以6是完数。
代码:
# include <stdio.h> int main() { int m,i,sum; for(i=2;i<1000;i=i+1) { sum=1; for(m=2;m<i;m=m+1) { if(i%m==0) { sum=sum+m; } } if(sum==i) { printf("%03d ",i); } } return 0; }
程序运行结果:
实验三
实验要求:奇偶归一猜想--对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它初一2,如此循环,最终都能得到1.如n=11,得序列:11,34,17,52,26,13,40,10,5,16,8,4,2,1.(共有14个步骤)题目输入正整数n求这个n多少步能归一。
代码:
# include<stdio.h> int main() { int m,sum; printf("请输入一个正整数 "); scanf("%d",&m); sum=0; while(1) { if(m==1) { break; } else if(m%2!=0) { m=3*m+1; sum=sum+1; } else if(m%2==0) { m=m/2; sum=sum+1; } } printf("这个数%d步能归一 ",sum); return 0; }
程序运行结果:
二、实验总结
- 循环之间的嵌套。
- while,do...while,for语句的熟练掌握。
- 在while后面不能加分号,在do...while的while后面要加分号。
- 对死循环的应用。
- 在两个循环的嵌套中外层循环控制外层函数,内层循环控制内层函数。
- 在循环中break应该在if后面,不能跟在else if后面。
- 完数的计算中sum的初值应为1。