码迷,mamicode.com
首页 > 其他好文 > 详细

做题纹路6

时间:2018-03-29 19:06:02      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:直接   结果   alt   自己   效果   use   std   body   技术   

这个是错误答案:

技术分享图片
#include <stdio.h>

#include <stdlib.h>

 

int main()

{

    int sum = 0,i = 1, a;

    int temp = 1;

 

    for (; i < 7; ++i)

    {

        temp = 1;

 

        for (a = 1; a <= i; ++a)

        {

            temp = temp * a;

        }

        sum += temp;

        printf("%d", sum);

        printf("\n");

    }

    system("pause");

    return 0;

}
View Code

 

下面这个是修正的正确答案:

技术分享图片
#include <stdio.h>

#include <stdlib.h>

 

int main()

{

    int sum = 0,i = 1, a;

    int temp;

 

    for (; i < 7; ++i)

    {

        temp = 1;

 

        for (a = 1; a <= i; ++a)

        {

            temp = temp * a;

        }

        sum += temp;

        printf("%d", sum);

        printf("\n");

    }

    system("pause");

    return 0;

}
View Code

 

先看看这里面a值的变化:

 

按照我们的思路是没有问题的,而正真出现问题的是temp那里,在每次内部循环后temp:

这个是错误那个:

 

 

可以看到temp的值是非常大的,这个原因是为什么呢?

那是因为,在错误答案中,首先temp为全局变量,在内部循环结束时,他不会因为for循环的结束而结束,他还是会保存上一次的运算结果。在下一次temp的运算中累积。所以,会造成最终sum值的变化。

而在那个正确答案中,对temp在for循环(外部循环中进行了再度赋初值值为1)这样就让temp进行了重新定义。以此达到使程序正常运行的效果。

在这里正常运行的temp与sum值如下图:

 

补充:刚刚看了一下,temp也可以直接定义为局部变量,就是把上面的int temp删除,就只保留在下面的temp=1;嗯... ...似乎师哥们也说for(int temp=1;... ...)

 

里面的a值,也是相同的道理,也是如果定义为全局变量,在每次结束后,都会保留原来的值,而不会重新定义,这时候,要么,我们自己在内部循环中重新定义,要么,在int主函数中自己直接定义,在下面就不用去定义了。

做题纹路6

标签:直接   结果   alt   自己   效果   use   std   body   技术   

原文地址:https://www.cnblogs.com/Mayfly-nymph/p/8671115.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!