程序 # include< stdio. h》 void maino int i.n. double fac printf("please input n: 2): scanf(‰d”,an) for(i=1, fac=l; i<=n: i++) fac= 〔pr6%d%rwr:nfao 16
16 程序 #include <stdio.h> void main() { int i,n; double fac; printf( “please input n: ”); scanf( “%d ”,&n); for(i=1 ,fac=1 ;i<=n ;i++) { fac*=i; } printf( “%d!=%lf \ n ”,n,fac); }
例3:求1!+2!+.+! n算法: 输入 计算 循环开始:i=1:sum=0 循环条件:i=n 循环体:计算,然后,sum+=l! 输出 17
17 例3:求1!+2!+…+n! ▪ 算法: ▪ 输入 ▪ 计算 ▪ 输出 ▪循环开始:i=1;sum=0; ▪循环条件:i<=n ▪循环体:计算i!,然后,sum+=i!
例3程序 #include <stdio. h> maino [int i, n; double term, sum printf("please input n:"): scanf(%d", &n) 循环嵌套 for(i=1, sum=O i<=n; i ++) 执行顺序? for(j=1, term=li j<=i: [term"=j:] sum=sum+term *求第项:从头求起,l=1*2*,* q, printf sum= ofin, sum) 18
18 例3程序一 #include <stdio.h> main() {int i,n; double term,sum; printf(“please input n:”); scanf(“%d”,&n); for(i=1,sum=0;i<=n;i++) { for(j=1,term=1;j<=i;j++) {term*=j;} sum=sum+term; } /* 求第i项:从头求起,i!=1*2*…*i */ printf(“sum=%lf\n”,sum); } •循环嵌套 •执行顺序?
例3程序二 #include <stdio. h> maino [int i, n; double term, sum; prnf(“ please input n:")冫 scant%d”,&n) 后项还可以借 for(i=1, term=1, sum=0 i<=n: i ++) 助前项求,这 i term"= 样提高效率 sum=sum+term 这种方法又称 为递推法! 求第j项:借助于前项,il=(-1)*i* prnf(“sum=%fn,sum) 19
19 例3程序二 #include <stdio.h> main() {int i,n; double term,sum; printf(“please input n:”); scanf(“%d”,&n); for(i=1,term=1,sum=0;i<=n;i++) { term*=i; sum=sum+term; } /*求第i项:借助于前项,i!=(i-1)!*i */ printf(“sum=%lf\n”,sum); } •后项还可以借 助前项求,这 样提高效率。 这种方法又称 为递推法!
典型循环题1 累加求和的关键:寻找累加项的构成规律 前后项之间无关 1*2*3+345++99*100*101 term=i*(+1)*(+2):i=1,3,99 丌224466 前100项之积 2tem3nn/(n-1)*(n+1):n=24 ,∴100 1-1/2+1/3-1/4+∴+1/99-1/100 直到最后一项的绝对值小于10-4为止 term= sign /n: 分子sgn=-sign:初值为1 分母n=n+1:初值为1
20 典型循环题1 ▪ 累加求和的关键:寻找累加项的构成规律 ▪ 前后项之间无关 ▪ 1*2*3 + 3*4*5 +… + 99*100*101 ▪ term = i * (i+1) * (i+2); i = 1,3,…,99 ▪ 前100项之积 ▪ term = n * n / ((n-1) * (n+1)); n = 2,4,…100 ▪ 1 - 1/2 + 1/3 - 1/4 + … + 1/99 - 1/100 + …直到最后一项的绝对值小于10-4为止 ▪ term = sign / n; ▪ 分子sign = -sign; 初值为1 ▪ 分母n = n + 1; 初值为1 ... 7 6 5 6 5 4 3 4 3 2 1 2 2 =