编写程序,计算1!+2!+3!+.......+n!的值,其中n的值由用户输入。答案给出来了,求讲解过程,谢谢!

#include <stdio.h>
main ( )
{int k,l,n;/*定义k,l,n代表什么?请讲解*/
double sum=0,fact_k=1;/*fact-k=1,又表示什么?请讲解*/
printf("Please Input n:");
scanf("%d",&n);
for(k=1;k<=n;k++)
{fact_k=1;
for(l=1;l<=k;l++)/*两个for 循环分别表是什么?请讲解*/
fact_k*=l;/*这个又表示什么?*/
sum+=fact_k;
}
printf("sum=%.2lf",sum);
}希望能详细地讲解整个过程,谢谢!
还有就是 printf("sum=%.2lf",sum);中的%.21f表示什么?如果熟悉的话,希望每一行都能给我讲解,谢谢!

#include <stdio.h>
main ( )
{int k,l,n;
/*n代表用户输入的值;k是一个循环变量,代表从1到n;l也是循环变量代表从1到k,用来计算 k!时用*/
double sum=0,fact_k=1;/*fact-k=1,这是给fact_k赋一个初始值,下面在计算每一个k的阶乘时会用到*/
printf("Please Input n:");
scanf("%d",&n);/* 输入一个整型数,这个数赋值给变量n*/
for(k=1;k<=n;k++)
/*这个循环代表,计算1到n的阶乘的和, sum+=fact_k就是sum存储了1到n的阶乘的和*/
{fact_k=1;/* 每个k的阶乘都要从1开始乘*/
for(l=1;l<=k;l++)/*这个循环代表,计算每一个K的阶乘,从1*2*...*k */
fact_k*=l;/* 这个等价于 fact_k= fact_k * l , 循环结束的时候,k!就等于fact_k*/
sum+=fact_k;/* 这个等价于 sum=sum+fact_k */
}
printf("sum=%.2lf",sum);/* 这个表示sum输出时的精确度是小数点后2位有效数字,类型是浮点型 */
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-25
#include <stdio.h>
main ( )
{int k,l,n;/*定义k,l,n代表输入数据,K和I是中间变量,K表示从1到N;I表示从1到K。*/
double sum=0,fact_k=1;/*fact-k=1,SUM就是n!,这里是给赋初值; */
printf("Please Input n:"); 输入n
scanf("%d",&n); 这n赋值给变量
for(k=1;k<=n;k++) 第一个循环1.。。n
{fact_k=1;
for(l=1;l<=k;l++)/*两个for 循环:第一个代表K从1到N;第二个代表I从1到K 。就是计算1!到N! /
fact_k*=l;/*这个表示计算K!的函数*/
sum+=fact_k; 阶乘求和:1!+2!。。。+n!
}
printf("sum=%.2lf",sum);这个表示sum输出时的精确度是小数点后2位有效数字,类型是浮点型
}
第2个回答  2011-03-25
int k,l,n只是定义三个变量,后面都要用的。
fact_k=1表示阶乘从1开始,就是一开始的“1!”。
for(k=1;k<=n;k++)表示每一项,比如说k=3,就表示第三项,以你题目的要求就是“3!”。
for(l=1;l<=k;l++)是用来计算阶乘的,是嵌套在上一个循环里的,还是以上面那个例子,k=3时,这个循环就算出“3!”的值。fact_k*=l就是里面这个子循环的算法,表示的意思是fact_k=fact_k*l,这只是简便的写法。结合上面循环你应该看的懂吧。。。
printf("sum=%.2lf",sum);中的%.21f表示表示结果保留两位小数。
这个程序其实很简单的,书上应该会有详细的解释吧,认真看看书。。。
相似回答