首页 > 代码库 > 作业5
作业5
1.输入两个正整数m和n(要求m<=n), 求m!+(m+1)!+(m+2)!…+n!
代码;
#include<stdio.h> int main() { int m,n,a,b,j; float s; printf("请分别输入两个正整数m,n,并且m小于等于n"); scanf("%d%d",&m,&n); if (m<=0||n<=0) { printf("error1"); } else if(m>n) { printf("error2"); } else { for(s=0;m<=n;m++) { for(j=1,b=1;b<=m;b++) { j=j*b; } s=s+j; } printf("%.0f",s); } return 0; }
2.输出1000以内的所有完数。所谓完数是指这个数恰好等于除他本身外的所有因子之和。例,6的因子为1,2,3,6=1+2+3,所以6是完数。
代码
#include<stdio.h> int main() { int a,b,s; for(a=1;a<=1000;a++) { for (b=1,s=0;b<a;b++) { if(a%b==0) { s=s+b; } } if (s==a) { printf("%d\n",a); } } return 0; }
3.奇偶归一猜想——对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环,最终都能够得到1。 如n = 11,得序列:11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1。(共有14个步骤) 题目输入正整数n,求这个n多少步能归一
代码
#include<stdio.h> int main() { int a,i=0; printf("输入一个整数\n"); scanf("%d",&a); while(1) { if(a==1) { break; } if(a%2!=0) { a=a*3+1; i++; printf("%d ",a); } else { a=a/2; i++; printf("%d ",a); } } printf("一共执行了%d步",i); return 0; }
实验总结
1:直接用s来保存j的阶乘结果,造成输出的时候总是输出error。for循环的内循环中引用了一个j来保存阶乘循环中的数据没有直接用s。没注意好,m,n的正负判断。根据前提判断好m n的大小和正负。
2:2题中有个双重for循环。执行一次里边那个for循环,再执行if,再执行for......。以前想的是先执行for循环, 循环完了再执行if,就把if循环又套到里边那个for循环里了。
3:一开始用的for循环每做出来,后来注意到了死循环跳出的用法。
作业5
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。