/*计算1!+2!+…+100!*/
#include<stdio.h> double fact (int n); //定义fact函数求阶乘
int main(void) { int n; double sum; //用sum求和,令初始值为0
sum=0; for(n=1;n<=100;n++) sum=sum+fact(n); printf("%.2f ",sum); return 0; } double fact(int n) //调用fact函数函数
{ int i; double product; product=1; for(i=1;i<=n;i++) product=product*i; //上一次调用的值再乘i,计算出下一个数的阶乘
return product; }
2、编制程序,输入m、n(m≥n≥0)后,计算下列表达式的值并输出。 要求将计算阶乘的运算编写作函数fact(n),函数返回值的类型为float。
/* 计算下列表达式的值并输出 */
#include<stdio.h> double fact(int x); //设定自定义函数
int main(void) { int m,n; double sum; printf("please enter m and n(m>n): "); scanf_s("%d%d",&m,&n); //输入m和n的值
sum=fact(m)/fact(n)*fact(m-n); //公式
printf("%f ",sum); } double fact(int x){ //fact函数求阶乘
int i; double y; y=1; for(i=1;i<=x;i++){ y=y*i; } return y; }
3、输入两个正整数m和n(m<n),求从m到n之间(包括m和n)所有素数的和,要求定义并调用函数isprime(x)来判断x是否为素数(素数是除1以外只能被自身整除的自然数)。
/* 求从m到n之间(包括m和n)所有素数的和 */
#include<stdio.h> int main(void) { int m,n; int is_prime(int x); //定义 is_prime函数判断是否为素数
int sum=0; printf("请输入两个正整数m,n(m<n): "); scanf_s("%d %d",&m,&n); int i; for(i=m;i<=n;i++) { if(is_prime(i)) sum += i; //将结果累和
} printf("m,n之间的所有素数之和为:%d ",sum); return 0; } int is_prime(int x){ int tmp=x/2; //一个数若不能被它的1/2内的所有数整除,就是素数,也可用平方根求
int i; for(i=2;i<=tmp;i++) { if(x%i==0) //若能被整除,即不是素数,结果返回0
return 0; } return 1; //是素数则返回1
}
4、验证哥德巴赫猜想:任何一个大于6的偶数均可表示为两个素数之和。例如6 = 3 + 3,8 = 3 + 5,…,18 = 7 + 11。将6~100之间的每个偶数都表示成两个素数之和。函数prime(m)用于判断m是否为素数。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。
/* 验证哥德巴赫猜想 */
#include<stdio.h> int prime(int m); int main(void) { int a,b,i; for(i=6;i<=100;i+=2){ //当i大于6小于等于100时开始循环,因为是偶数所以每次增加2
for(a=2;a<=i;a++){ //设置其中一个素数,则另一个等于总数-该素数
b=i-a; if (prime(a)&&prime(b)){ //当a和b都为素数时,输出结果
printf("%d=%d+%d ",i,a,b); if(i%5==0) //每行显示5个
printf(" "); break; } } } } int prime(int m) // 调用prime函数,求素数
{ int n ; for( n=2; n<=m/2; n++) if ( m%n==0) break; return ( n>m/2 ); }