tianliangcsdn
2015-04-05 07:33
采纳率: 8.7%
浏览 2.0k
已采纳

for语句的镶嵌是怎么回事?

int n,t,i,j,sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
t=1;
for(j=1;j<=i;j++)

    t=t*j;


 sum=sum+t;

}
printf("%d",sum);
system("pause");

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • gonghao2014 2015-04-05 08:44
    已采纳

    首先这段代码的功能是执行楼上所说的计算:1!+2!+3!+...+n! 的和
    然后运行情况:
    (注:for循环中,如果不加大括号,默认的只执行for后的一个语句)
    假设:n=4;
    1.进入for(i=1;i<=n;i++)中:
    i=1;t=1;
    进入for(j=1;j<=i;j++)中:
    j=1;(满足j<=i)
    t=t*j;(注:t=1*1=1)
    此次for(j=1;j<=i;j++)中的语句执行完,j++;j=2;不满足j<=i;
    for(j=1;j<=i;j++)循环结束
    执行sum=sum+t;(注:sum=0+1*1=1*1)
    此次for(i=1;i<=n;i++)中的语句执行完,i++;i=2;满足i<=n;
    2.再次进入for(i=1;i<=n;i++)循环:
    i=2;t=1;
    进入for(j=1;j<=i;j++)中:
    j=1;(满足j<=i)
    t=t*j;(注:t=1*1=1)
    此次for(j=1;j<=i;j++)中的语句执行完,j++;j=2;满足j<=i;
    t=t*j;(注:t=1*1*2=1*2;)
    此次for(j=1;j<=i;j++)中的语句执行完,j++;j=2;不满足j<=i;
    for(j=1;j<=i;j++)循环结束
    执行sum=sum+t;(注:sum=1*1+1*2即sum=1!+2!)
    此次for(i=1;i<=n;i++)中的语句执行完,i++;i=2;满足i<=n;
    3.再一次进入for(i=1;i<=n;i++)循环:
    i=3;t=1;
    进入for(j=1;j<=i;j++)中:
    ......
    如上循环下去,直到
    此次for(i=1;i<=n;i++)中的语句执行完,i++;i=6;不满足i<=n;
    for(i=1;i<=n;i++)循环结束;

    后话:运行情况可通过调试,一步一步的走,看的清楚,希望对你有帮助(求采纳)

    已采纳该答案
    打赏 评论
  • threenewbee 2015-04-05 07:34

    很正常,就是两重循环,这个代码是计算
    1!+2!+3!+...+n!

    打赏 评论
  • 河北小黄人 2015-04-05 07:36

    就是先执行外面的,每执行一次,就执行里面的for语句,直到里面的for语句执行完毕,再执行外面的for语句下一次

    打赏 评论
  • threenewbee 2015-04-05 07:38

    你可以单步调试下,看得更清楚
    这段代码会对于每个外侧的循环,都执行一次内侧的循环。

    打赏 评论
  • threenewbee 2015-04-05 07:39

    好比让你不用计算机算1!+2!+3!+...+n!你怎么算?
    对于每个项,你都要反复做乘法,做完乘法,还要把它们加起来。就是这样

    打赏 评论
  • _寒潭雁影 2015-04-05 08:00

    可以看看c语言的书,这种问题书上都有讲的

    打赏 评论
  • bdmh 2015-04-05 08:31

    两层循环,就像一个二维数组,或者理解为表格,从第一行开始,遍历,每一行又要遍历其中的每一列,遍历完这行的列,在到下一行,继续上面的过程

    打赏 评论

相关推荐 更多相似问题