鱼C论坛

 找回密码
 立即注册
查看: 2914|回复: 6

[已解决]看不懂循环

[复制链接]
发表于 2021-4-19 16:57:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
//1到20阶乘的和
#include<stdio.h>
int main()
{
        double i,sum=0,j=1;
        for(i=1;i<=20;i++)
        {
                j=j*i;
                sum=sum+j;
        }
        printf("%lf",sum);
        return 0;
}
我看这个for语句后j=j*i;不是只有20的阶乘么 为什么是能求1-20的阶乘和吗
最佳答案
2021-4-19 20:20:11
qqqpang 发表于 2021-4-19 19:45
我不明白为啥j=j*i能一直循环到i,j=j*i不是只成了一次嘛,就比如到i等于3的时候不就是1*3吗,怎么做阶乘 ...


看不懂的时候就做分解
i 从1 到 20 这个应该是没问题
那就分开来看呗
i = 1:
        j = j * i;                  此时  j = 1 * 1  --> j = 1
        sum = sum + j;       此时 sum = 0 + 1;  --> sum = 1
i = 2:
        j = j * i;                  此时  j = 1 * 2  --> j = 2
        sum = sum + j;       此时  sum = 1 + 2  -->  sum = 3

这种分步解析会把,自己分析下去


j = 1 * 2 * 3 * 4 * ... * 20
因为 j 每次都会乘以之前的结果,所以 j 最后的结果就是阶乘的结果
sum = 1 + 2 + 6 + 24 + ... + 2432902008176640000
因为 sum 每次都会加上上一次阶乘的结果,所以sum最后的值就是所有阶乘的和
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-19 17:28:56 | 显示全部楼层
后面不是把每次都把j加到sum上了么  j是阶乘,sum是阶乘的和啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-19 17:38:57 | 显示全部楼层
sum是1到20的阶乘的和呀!!循环里面j每做一次阶乘,sum就加一次刚才做的阶乘,一直到20,你可以吧i调成单位数测试一下,也输出一下j 。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-19 17:41:39 | 显示全部楼层
#include<stdio.h>
int main(void)
{
        double i,sum=0,j=1;
        
        for(i=1;i<=3;i++)
        {
                j=j*i;
                sum=sum+j;
        }
        printf("sum=%lf,j=%lf\n",sum,j);
        return 0;
}
//sum=9.000000,j=6.000000
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-19 19:40:14 | 显示全部楼层
lingnuous 发表于 2021-4-19 17:38
sum是1到20的阶乘的和呀!!循环里面j每做一次阶乘,sum就加一次刚才做的阶乘,一直到20,你可以吧i调成单 ...

我不明白为啥j=j*i能一直循环到i,j=j*i不是只成了一次嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-19 19:45:50 | 显示全部楼层
yuxijian2020 发表于 2021-4-19 17:28
后面不是把每次都把j加到sum上了么  j是阶乘,sum是阶乘的和啊

我不明白为啥j=j*i能一直循环到i,j=j*i不是只成了一次嘛,就比如到i等于3的时候不就是1*3吗,怎么做阶乘呢

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-19 20:20:11 | 显示全部楼层    本楼为最佳答案   
qqqpang 发表于 2021-4-19 19:45
我不明白为啥j=j*i能一直循环到i,j=j*i不是只成了一次嘛,就比如到i等于3的时候不就是1*3吗,怎么做阶乘 ...


看不懂的时候就做分解
i 从1 到 20 这个应该是没问题
那就分开来看呗
i = 1:
        j = j * i;                  此时  j = 1 * 1  --> j = 1
        sum = sum + j;       此时 sum = 0 + 1;  --> sum = 1
i = 2:
        j = j * i;                  此时  j = 1 * 2  --> j = 2
        sum = sum + j;       此时  sum = 1 + 2  -->  sum = 3

这种分步解析会把,自己分析下去


j = 1 * 2 * 3 * 4 * ... * 20
因为 j 每次都会乘以之前的结果,所以 j 最后的结果就是阶乘的结果
sum = 1 + 2 + 6 + 24 + ... + 2432902008176640000
因为 sum 每次都会加上上一次阶乘的结果,所以sum最后的值就是所有阶乘的和
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-9 02:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表