for循环的作用域问题

来源:百度知道 编辑:UC知道 时间:2024/05/22 03:22:02
写了个程序计算1+(1+2+3)+(1+2+3+4)+......+(1+2+3+....+n)的值,程序如下:
#include<stdio.h>
int main(void)
{
int i,j,temp,sum,n;
temp=0;
sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=i;j++)
temp=temp+j;
printf("%d\n\n",sum);//看临时变量
}//A
sum=sum+temp;//B
printf("%d\n",sum);
return 0;

}
这个程序的最终结果是正确的,但我想看一下sum临时变量却都是0,这是为什么?再就是就for语句的作用域而言,那么整个for循环的作用域在标记A处就应该结束了(也就是说到不了标记B处),我有的疑问就是变量i没增加一次,都可以得到一个确定的temp值,这个值最后才参与sum=sum+temp的运算,我的理解是这样只有最后一次值temp才参与上述的计算,而实际情况并非如此,而且当每一个确定的i值,比如,i=1时,temp=1;i=2时,temp=4;i=3时,temp=10;.........,这么多的temp在内存是以什么形式存储的?期待大哥些说详细一点,关于这个问题我很纳闷。
我知道这个问题的算法很多,这样写得目的就是想看看双重for循环的内部思想

1. 在你的sum变量位置,sum还没被使用呢,一直是0不奇怪
2. 最后一次值temp才参与计算,这个理解完全正确,这个temp被双重for循环累加着,双重for循环结束后,temp里已经是你的结果了。

参考程序
#include<stdio.h>
int main(void)
{
int i,j,temp,sum,n;
sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
temp = 0; // 给temp清0,你的程序里没有清0,temp就一直往上涨
for(j=1;j<=i;j++)
temp=temp+j;
printf("%d\n\n",temp); //temp临时变量保存1+2+3+..+n的值
sum += temp;
}

printf("%d\n",sum); //存储最新结果
return 0;
}

#include<stdio.h>
int main(void)
{
int i,j,temp,sum,n;
temp=0;
sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=i;j++)
temp=temp+j;
printf("%d\n\n",sum);//这里并没有给sum赋任何值,所以sum还是初始化时的0
}//A
sum=sum+temp;// 这里才为sum赋了新的值
printf("%d\n",sum);
system( "pause" );