/*从1+1+2+1+2+3+1+2+3+4+1+2+3+4+5..........+1+2+...+n求和*/

来源:百度知道 编辑:UC知道 时间:2024/06/20 09:22:27
/*从1+1+2+1+2+3+1+2+3+4+1+2+3+4+5..........+1+2+...+n求和*/
#include <stdio.h>
void main()
{
int i,j,n;
long int sum=0, temp=0;
printf("please input a number to n:\n");
scanf("%d",&n);
if(n<1)
printf("the n number must be no less than 1!\n");

for(i=1;i<=n;i++)
{ temp=0;
for( j=1;j<=i;j++)
temp+=j;
sum+=temp;
}
printf ("the sum of the sequence(%d) is %d\n",n, sum);
}

以上是我编译的一个程序,但是我发现在for的循环中有temp=0的重复定义,我开始以为没有作用,因为开始在定义时已经定义了啊,所以就把那句删了。后来,在运行的时候知道,那句删了就输出的是错误的结果。

比如,我输入2 结果本来应该是4,但是删了后变成了5。
输入3,本应是10,但变成了15.

而且,我加上那句语句后,重新运行,结果正确。

我不懂这是为什么,请高手们帮帮忙,解释一下啊!
谢谢了!
这个程序这么编是对的,我只是不懂为什么temp=0;要赋值两次才有效。第一次是在定义的时候,第二次是在for的循环里面。

temp=0;
for( j=1;j<=i;j++)
temp+=j;

这3句是求1+2+..+i的和

如果不要temp=0,那么下面一句sum+=temp;也不应该要

变成
for(i=1;i<=n;i++)
{
for( j=1;j<=i;j++) sum+=j;
}

#include <stdio.h>

int main(){
int i;
scanf("%d",&i);
printf("%d\n",i*(i+1)*(i+2)/6);
return 0;
}

for(i=1;i<=n;i++)
{ temp=0;
for( j=1;j<=i;j++)
temp+=j;
sum+=temp;
}
修改为:
temp=0;
sum=0;
for(i=1;i<=n;i++)
{
temp+=j;
sum+=temp;
}

temp=0;
for( j=1;j<=i;j++)
temp+=j;

temp 可以不用吧