【程序16】 一、题目:求1+2!+3!+...+20!的和
二、程序分析:此程序只是把累加变成了累乘。
三、程序源代码:
main() {float n,s=0,t=1; for(n=1;n<=20;n++) { t*=n; s+=t; } printf("1+2!+3!...+20!= %en",s); }
【程序17】 一、题目:利用递归方法求5!。
二、程序分析:递归公式:fn=fn_1*4!
三、程序源代码:
#include "stdio.h" main() { int i; int fact(); for(i=0;i<=5;i++) printf("%d!=%dn",i,fact(i)); } int fact(int j) { int sum; if(j==0) sum=1; else sum=j*fact(j-1); return sum; }
【程序18】 一、题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
二、程序分析:
三、程序源代码:
#define N 5 void invert (int *s,int i,int j) { int t; if(i<j) { t=*(s+i); *(s+i)=*(s+j); *(s+j)=t; invert(s,i+1,j-1); } } main() { int a[N],i; printf("please input 5 chars:n"); for(i=0;i<N;i++) scanf("%c",a+i); invert(a,0,N-1); for(i=0;i<N;i++) printf("%c",a[i]); printf("n"); getch(); }
【程序19】 一、题目:判断101-200之间有多少个素数,并输出所有素数。
二、程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。
三、程序源代码:
#include "math.h" main() { int m,i,k,h=0,leap=1; printf("n"); for(m=101;m<=200;m++) {k=sqrt(m+1); for(i=2;i<=k;i++) if(m%i==0) {leap=0;break;} if(leap) {printf("%-4d",m); h++; if(h%10==0) printf("n"); } leap=1; } printf("nThe total is %d",h); }
【程序20】
一、题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数 本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
二、程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
三、程序源代码:
main() { int i,j,k,n; printf("water flower number is:nn"); for(n=100;n<1000;n++)/*从100到1000之间每个数的循环*/ { i=n/100;/* 求百位数 */ j=n/10-i*10;/* 求十位数 */ k=n%10;/* 求个位数 */ if(n==i*i*i+j*j*j+k*k*k) printf("%4d",n);/* 比对三次方后的数的和,并输出 */ } printf("n"); }
|