这个是错误答案:
#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; }
下面这个是修正的正确答案:
#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; }
先看看这里面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主函数中自己直接定义,在下面就不用去定义了。