第五次作业
一·实验内容
5-1输入两个正整数m,n要求m<=n,求m!+(m+1)!+(m+2)!+...+n!
#include<stdio.h> int main() { int m,n,i; float sum,p; printf("请输入两个正整数m,n:\n"); scanf("%d",&m); scanf("%d",&n); sum=0; if(m<=n&&m>=0&&n>=0) { for(i=m;i<=n;i++) { p=1; for(i=m;i<=n;i++) { p=p*i; sum=sum+p; } } } else { printf("error\n"); } printf("sum=%.0f\n",sum); return 0; }
5-2输出1000以内的所有完数。完数是指这个数恰好等于出它本身外的所有因子的和,例:6的因子为1,2,3,6,所以6=1+2+3,所以6为完数。
int main() { int i,j,s; for(i=1;i<=1000;i++) { s=0; for(j=1;j<=i-1;j++) { if(i%j==0) { s+=j; } } if(s==i) { printf("%d\n",i); } } return 0; }
5-3奇偶归一猜想,对于每一个正整数如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环最终都能够得到1。
#include<stdio.h> int main() { int x,a=0,b=0,sum=0; printf("请输入一位正整数x:\n"); scanf("%d",&x); do { if(x>0&&x!=1) { if(x%2==0) { x=x/2; a++; } else if(x%2!=0) { x=x*3+1; b++; } } }while(x!=1); sum=a+b; printf("数字x一共经过了%d次运算",sum); return 0; }
二·实验总结
1.第一个程序编程时遇到的问题是循环嵌套大括号加的不对,导致执行出来假如输入1和3,输出的是6,而正确答案是9.这是一个应该注意的问题,之外这道题的思路大致归结为:先声明变量,输入的和和累加累乘的变量为浮点型;赋予sum为0初始值,然后判断,分别考虑符合和不符合的情况;套用两个循环结构,外循环判断累加,内循环判断累乘,注意大括号的位置,考虑程序到底执行到哪;最后输出保留两位小数,格式为%.2f。
2.第二个程序编程时画了一个程序框架,有点理不清,输入的变量没弄清各自代表的含义,程序编的也有问题,大括号又用错,导致语句执行的不对。之外这道题的思路大致归结为:先声明变量,输入的i表示输入的完数,j表示输入的因子,s表示输入的因子的和;使用for循环,要确定范围,给因子的和赋予一个初始值,然后for循环嵌套,判断因子,依次累加,前提明白因子比完数小;再判断j是不是i的因子,大括号语句的执行强调;最后若完数与因子的和相等,证明这个数的确是完数。输出
3.第三个程序编程的时候遇到的问题是,画程序框图时没错,编的时候do...while,for...else if语句中的步骤语句存在问题。之外这道题的思路大致归结为输入一个数,赋予a,b,sum,初始值,a代表偶数的次数,b代表奇数的次数,用do...while先循环,再做判断,强调不能等于1的原因是最终都能够得到1,如果输入1就直接输出了没意义。注意执行的步骤