c语言求3个数最大者,为什么结果不对?如图:

点即可查看大图
我想请教我这样写哪地方错了:
#include<stdio.h>
void main()
{
int max(int x,int y,int z);
int a,b,c,d;
scanf("%d,%d,%d",&a,&b,&c);
d=max(a,b,c);
printf("max=%d\n",d);
}
int max(int x,int y,int z)
{
int s;
if(x>y&&x>z)s=x;
if(x<z&&y<z)s=z;
else s=y;
return(s);
}
结果比较11 2 3三个数会出现max=2

第1个回答  2011-08-25
把if (z > y && z > x) s = z;改成
else if (z > y && z > x) s = z;
肯定行
如果不加这个else,那么这段代码的意思就是如果z是最大值,返回z,否则返回y
因为执行第二个if的时候,无论如何返回值s都会改变,变成y或z本回答被提问者采纳
第2个回答  2011-08-25
你错误的使用了if的嵌套,程序当然出错了。
改成这样的

int max(int x,int y,int z)
{int s;
if(x>=y&&x>=z)
s=x;
else if(y>=x&&y>=z) //问题出在这里,要用else if,不能单独用if,用if的话还会再比较一次
s=y;
else
s=z;
return(s);
}
第3个回答  2011-08-25
逻辑混乱了 函数里面如果x同时大于y大于z,那么s=x已经取得了最大的值,这样后面的if就没必要继续执行啊
干嘛不两两比较
函数部分:
int max(int x, int y ,int z)
{
int s=x;
if(y>s)s=y;
if(z>s)s=z;
return(s);
}
第4个回答  2011-08-25
////////////////////////////////////////记住 以后贴代码 不要上图
/////////////////////////////////////////////////////逻辑没什么问题 能正常得出结果 只需改一处 记得采纳
#include "stdio.h"

void main()
{
int max(int x,int y,int z);
int a,b,c,d;
scanf("%d %d %d",&a,&b,&c); //这里 要有空格隔开
d=max(a,b,c);
printf("max=%d\n",d);
}

int max(int x,int y,int z)
{
int s;
if (x>y&&x>z) s=x;
if (z>y&&z>x) s=z;
else s=y;
return(s);
}
第5个回答  2011-08-25
代码格式要注意,不然会纠结死你的。。。

把max函数的内容改成
int max(int x, int y, int z){
if(x>y&&x>z){
s=x;
} else if(z>y&&z>x){
s=x;
} else {
s=y;
}
return s;
}
就行了。

出错的原因是你在判断完 if(x>y&&x>z)为true的时候还再判断了if(z>y&&z>x)。