当前位置: 代码迷 >> C语言 >> [求助]为什么结果是负的呢 哪里错了啊?
  详细解决方案

[求助]为什么结果是负的呢 哪里错了啊?

热度:269   发布时间:2007-05-24 13:03:57.0
[求助]为什么结果是负的呢 哪里错了啊?
#include<stdio.h>
int sum(int x,int y)
{
int z;
for(x=0;x<=y;x++)
{
z+=x;
}
return z;
}
main()
{
int a,b,c;
a=0,b=20;
c=sum(a,b);
printf("%ld",c);
}

这是一道利用1+2+3+...+n的函数 求n=20的时候的值.
我检查了好几编不知道为什么结果一直是负的 , 哪里出错了呢


谢谢
搜索更多相关的解决方案: include  return  

----------------解决方案--------------------------------------------------------
由于你在调用函数的时候,z没有给定初值,所以返回值是系统任意给的。
----------------解决方案--------------------------------------------------------
z没有赋初值int z;改为int z=0;就可以了
这个程序还有个问题:
int sum(int x,int y)
{
int z;
for(x=0;x<=y;x++)
{
z+=x;
}
return z;
}
既然不管实参是何值,x总是从0开始,那函数sum就只需y一个形参就可以了,即将程序改为:
#include<stdio.h>
long sum(int y)
{
long z=0;
int x;
for(x=0;x<=y;x++)
{
z+=x;
}
return z;
}
main()
{
int b;
long c;
b=20;
c=sum(b);
printf("%ld",c);
}
如果你是要求两个数a,b之间整数和的话,那就用下面的程序:
#include<stdio.h>
long sum(int x,int y)
{
long z=0;
int m,n;
if(x==y) return x+y;
m=x>y?x:y; //判断x与y的大小,将大者赋值给m
n=x<y?x:y; //判断x与y的大小,将小者赋值给n
//这样就不用在输入的时候去判断实参a和b哪个大哪个小了,输出的始终是a和b之间的整数和
for(;n<=m;n++)
{
z+=n;
}
return z;
}
main()
{
int a,b;
long c;
a=0,b=20;
c=sum(a,b);
printf("%ld",c);
}


----------------解决方案--------------------------------------------------------
谢谢3楼的朋友 我自己在打一边 谢谢了

----------------解决方案--------------------------------------------------------
#include<stdio.h>
int sum(int x,int y)
{int z=0;
for(;x<=y;x++)
{z+=x;
}
return z;
}
void main()
{int a=1,b=20,c;
c=sum(a,b);
printf("%d\n",c);
}
这是我的程序。望多指教!!
----------------解决方案--------------------------------------------------------
  相关解决方案