c语言求s=1!+2!+3!+…+n!(n由输入决定)。求大神能详细解读一下这个程序,尤其是for语句里面是什么意思
void main()
{
int i,j,n;
long int t=1,sum=0;
printf("input n:",&n);
scanf("%d",&n);
for (i=1;i<=n;i++)
{
t=1;
for(j=1;j<=i;j++)
t=t*j;
sum=sum+t;
}
printf("n!=%ld",sum);
} 展开
第一二行代码:int i,j,n;
long int t=1,sum=0;//定义了三个整数型(短整型)的变量,定义两个长整整型变量并初始化。
第三行代码:printf("input n:",&n);//提示输入。
第四行代码:scanf("%d",&n);利用scanf()函数输入n。
第五行代码:for (i=1;i<=n;i++)//进入for循环,外部for循环的主要作用是进行阶乘的求和。
第六七八行代码:t=1;
for(j=1;j<=i;j++)
t=t*j;//引用t这个变量进行对i这个阶乘的计算,并将结果储存在t中。内部的for循环的主要作用是计算阶乘。
第九行代码:sun=sum+t;//计算阶乘的和。
第十行代代码:printf("n!=%ld",sum);//利用printf()函数对结果进行输出。
扩展资料:
循环的嵌套:
1,while循环包含while循环的内层循环。
2,do…while循环包含do…while循环的内层循环。
3,for循环包含for循环的内层循环。
4,while循环包含do…while循环的内层循环。
5,for循环包含while循环的内层循环。
6,do…while循环包含for循环的内层循环。
参考资料来源:百度百科—C语言
解释如下:
#include<stdio.h>
void main()
{
int i,j,n;
long int t=1,sum=0;//必要的初始化,保证后面for循环的语句“sum=sum+t;”能正常执行。
printf("input n:",&n);
scanf("%d",&n);//输入式中n
for (i=1;i<=n;i++)
{
t=1;//作为计算阶乘的起始
for(j=1;j<=i;j++)//这个内层循环计算的是 i !(i由1递增至n)
t=t*j;
sum=sum+t;//每进行一次外层循环,加一个 i !由此实现整个式子的计算
}
printf("n!=%ld",sum);//输出计算结果
}
望采纳~如您还有不解,欢迎追问~
第一层for(i=1;i<=n;i++)
{
t=1;
还有第二层for(j=1;j<=i;j++)
t=t*j
sum=sum+t;
这里还是不太懂,第一层for是什么意思?第二层你说是内层循环计算的是 i !(i由1递增至n),为什么不是j!,感觉这个好难懂。。。
简单来说,第一层for负责算加法,第二层for算阶乘。
先不管第二层for。第一层for:
for (i=1;i<=n;i++)
{
t=1;
//***********第二层for算出了“各项阶乘t”***********//
sum=sum+t;//把每一项阶乘加起来
}
第二层for:
for(j=1;j<=i;j++) t=t*j;
在循环里,j从1开始,每执行一次循环就自加1。
比如i为3时,循环的流程:j=1,判断“j<=3”(为真,循环得到执行),t=t*j=1*1=1,j自加1(j=2);判断“j<=3”(为真,循环得到执行),t=t*j=1*2=2!,j自加1(j=3);判断“j<=3”(为真,循环得到执行),t=t*j=2!*3=3!,j自加1(j=4);判断“j<=3”(为假,立即跳出循环)。得到t=3!,也就是计算了t=i!。