C语言求:1+(1+2)+(1+2+3)+(1+2+3+4)+。。。。。。+(1+2+3+4+5+...+n)问题

#include<stdio.h>
int slie();
void main(){
int n,i;
printf("please input n:");
scanf("%d",&n);
for(i=1;i<=n;i++){
slie(i);
}
printf("the sum is %d\n",slie(i));
}
int slie(int j){
static int a=0;
static int sum=0;
a=a+j;
sum=sum+a;
return sum;
}
这个程序总是多循环一遍。例如:输入1时应当输出1,而却输出4,而4是输入2时的输出值啊。求高手指教。。。
把for(i=1;i<=n;i++)改成for(i=1;i<n;i++)就是对的了,但为什么不能加等号啊,感觉该加等号才对啊!

#include<stdio.h>

int slie(int);

void main()
{
int n,i;
printf("please input n:");
scanf("%d",&n);
/*这里要改为i<n,1楼改的地方是对的,但是逻辑是错的,
假定n=1,不是for(i=1;i<=1;i++)中1走了2遍,1只走一边,而为什
么输出是4呢,看下一行的注释*/
//for(i=1;i<=n;i++)
for(i=1;i<n;i++)
{
slie(i);
}
/*实际上你在上面已经处理完n的操作了,
现在printf()的slie()还处理一次i,此时
i=n+1=2,所以变成实际上的运算变成了
1+1+2=4了*/
printf("the sum is %d\n",slie(i));
}

int slie(int j)
{
static int a=0;
static int sum=0;
a=a+j;
sum=sum+a;
return sum;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-05-31
for(i=1;i<=n;i++)改成for(i=1;i<n;i++)就行了

比如你输入1for(i=1;i<=1;i++)这样1就走了两次了。。。
第2个回答  2010-05-31
printf("the sum is %d\n",slie(i));中的slie(i)又让他执行了一下int slie(int j)的函数,
相似回答