c语言编程问题 求救!!

输入包含3个int范围内的整数,用空格隔开。
输出

输出三个数中绝对值最大的数,单独占一行。若绝对值最大的数不唯一,则输出最先出现的那个。例如,若输入为1 -3 3,则输出为-3;若输入为1 3 -3则输出为3。

#include <stdio.h>
#include <stdlib.h>
#define max(a,b) ((a)>(b)?(a):(b))

int main()
{
int a,b,c,d;
scanf("%d%d%d",&a,&b,&c);
d=max(max(c,-c),max(max(b,-b),max(a,-a)));
if(d==-a)
{
printf("%d\n",a);
} else if(d==-b)
{
printf("%d\n",b);
} else if(d==-c)
{
printf("%d\n",c);
} else
{
printf("%d\n",d);
}

return 0;
}
为什么我这个程序输入 -3 3 1 会输出 -3
而输入 3 -3 1 还是输出-3?

逻辑错误,并且你的用例也反映了这个错误 如a=3 b=-3 并且3为最大绝对值时,你的第一个判断却会跳过, if(d==-a) 在本题的含义是
如果a的绝对值最大,且为负数 才会判断最大
在a为正数的前提下,若b,c出现相同绝对值的负数,就悲剧了。。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-10-31
d=max(max(c,-c),max(max(b,-b),max(a,-a)));

这句能编译过也挺神奇,明明你定义的两个参数,却兼容3个实参?考虑修改一下。本回答被网友采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网