求n的阶乘 为什么程序倒数第三行又有一个sum=1; ?

int n,i=1,sum=1;
system("color 2e");
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++)
{
sum=sum*i;
}
printf("%d",sum);
sum=1;
system("pause");
}

您好,你的这个程序可以实现输入一个数,按下Enter就实现一次求解,而在每次求得解之后sum的值就变为当前所求数字的n!的值,为了不影响下次输入数字的值,倒数第三行只是起到重置的作用罢了!

其实代码如果改成这样,你就理解了:

 int n,i=1,sum=1;
system("color 2e");
while(scanf("%d",&n)!=EOF)
{
    sum=1;
    for(i=1;i<=n;i++)
    {
        sum=sum*i;
    }
    printf("%d",sum);

    system("pause");
}

因为你的程序被设计为不止执行一次。仅此而已。
如果是累加,就设置为0。
而求积就设置为1。sum这个名字具有迷惑性,不是和,而是积。

首先这个程序可以看做这么几块:

1.第一块,变量初始化
int n,i=1,sum=1;
system("color 2e");
这块里面你看到的i、sum都被给了一个值--1,这个赋值在程序中,是只**执行一次**的;

2.第二块,阶乘的算法实现部分,是一个大的循环体
while(scanf("%d",&n)!=EOF)
{....}
只要你还在输入数字,上面这个while大括号里的东西会**一次一次执行**。

大括号里面,你看到有一个:
for(i=1;i<=n;i++)
{
sum=sum*i;
}
这段代码在进行阶乘的计算,比如输入的数字是3,他就会计算出3的阶乘,这个阶乘结果就保存在了sum这个变量里。
好的,注意到了吗?“这个阶乘结果就保存在了sum这个变量里”,也就是说,sum的值,每循环一次就会变了,不是1了,比如,这里就是6了。
假如我接着再输入一个4,我们说过只要还在输入数字就重复执行while大括号里面的东西,假如我不给sum赋值回1,那么第二次4的阶乘就会从4*1*2*...计算结果就会错误。所以我们必须要给sum赋值回1,而且这个赋值的代码必须在while大括号里面,因为每一次新的循环只执行大括号里面的语句。

sum只是一个计数的,这里是把阶乘的结果放到sum里,然后输出,但是最后要把sum清零,否则下次输入n,计算的就不是n的阶乘而是n的阶乘乘以上一次sum的值,

这个,因为那里有个while循环。
表示,你只需要启动一次程序,
然后在while中,
输入第一个数字N,计算输出N的阶乘之后
再输入第二个N,计算出第二个N的阶乘
再输入第三个N......
......


说那么多废话,意思就是,那个sum=1;是为下一次输入计算N的阶乘做的准备。

将sum重置成1,用于下一次计算阶乘,不然数据就乱了。