作业五
C语言程序设计第五次作业
1.输入两个正整数m和n(要求m<=n), 求m!+(m+1)!+(m+2)!…+n!
#include<stdio.h> int main() { int m,n,a,d; float g,e=1,f=0,b=1,c=0; printf("输入m和n的值用逗号隔开\n"); scanf("%d,%d",&m,&n); if(m<0||n<0) { printf("输入错误\n"); } else if(m>=n) { printf("输入错误\n"); } else{ for(a=1;a<=n;a++) { b=b*a; c=c+b; } for(d=1;d<m;d++) { e=e*d; f=f+e; } g=c-f; printf("%.2f",g); } return 0; }
2.输出1000以内的所有完数。所谓完数是指这个数恰好等于除他本身外的所有因子之和。例,6的因子为1,2,3,6=1+2+3,所以6是完数。
#include<stdio.h> #include<math.h> int main() { int i1,i2,k,sum,m; for(i2=2;i2<=1000;i2++) { sum=0; for(i1=1;i1<i2;i1++) { if(i2%i1==0) { sum=sum+i1; } } if(i2==sum) { k++; printf(" %d",i2); } } if(m%10==0&&m!=0) { printf(" \n"); } printf("\n 有%d个",k); 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=0,b=0,c=0,d=0; printf("输入一个正整数\n"); scanf("%d",&a); do { if(a<=0) printf("输入错误,重新输入\n"); else if(a%2==0) { a=a/2; b++; } else if(a%2!=0) { a=3*a+1; c++; } d=b+c; }while(a!=1); printf("一共用了%d次",d); return 0; }
附加题:
1.输入一个正整数n,输出2/1+3/2+5/3+8/5+…的前n项之和,保留2位小数,该序列从第二项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。
#include<stdio.h> int main() { int i,n; double a,b,c,d,e,f; printf("输入n:\n"); scanf("%d",&n); if(n<=0) { printf("输入错误"); } else { a=2;b=1;d=0; for(i=1;i<=n;i++) { d=d+a/b; e=b; f=a; a=a+e; b=f; } printf("前%d项和为%.2f",n,d); } return 0; }
2.凯撒密码(caeser)的原理:每一个字母按字母表顺序向后移3位,如a加密后变成d,b加密后变成e,……x加密后变成a,y加密后变成b,z加密后变成c。例如:“baidu”用凯撒密码法加密后字符串变为“edlgx”。试写一个算法,将键盘输入的文本字符串(只包含a~z的字符)进行加密后输出。
#include<stdio.h> #include<stdlib.h> int main() { char x; a: fflush(stdin); printf("\n输入字符,将进行加密。\n"); scanf(" %c",&x); if(x>'A'&&x<'z') { while(x!='\n') { if(x>='a'&&x<'x') { x=x+3; } else if(x=='x'||x=='y'||x=='z') { x=x-23; } else if(x=='X'||x=='Y'||x=='Z') { x=x-23; } else if(x>='A'&&x<'X') { x=x+3; } printf("%c",x); scanf("%c",&x); } } else { { printf("输入错误!\n"); goto a; } } return 0; }
二、实验总结
1:注意循环的嵌套,以及在循环前赋值的位置。
2:注意完数的概念,要把所有能整除的数和“1”都加起来与原数相等。
3:注意换行。
4:赋值时注意不要把位置放反。
5:有小数点要用float或者double。
6:字符要注意是“%c”,输入时要用“char”。
7:求阶乘的时候如果不方便计算,可以求两个阶乘然后做差。
8:新学的:fflush(stdin),可以清空缓存,真是长知识了。
9:必要时可以用goto。
10:输出输入是注意变量类型。float\int\double\char。