输入包含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出现相同绝对值的负数,就悲剧了。。
如果a的绝对值最大,且为负数 才会判断最大
在a为正数的前提下,若b,c出现相同绝对值的负数,就悲剧了。。
温馨提示:答案为网友推荐,仅供参考
第1个回答 2016-10-31
d=max(max(c,-c),max(max(b,-b),max(a,-a)));
这句能编译过也挺神奇,明明你定义的两个参数,却兼容3个实参?考虑修改一下。本回答被网友采纳
这句能编译过也挺神奇,明明你定义的两个参数,却兼容3个实参?考虑修改一下。本回答被网友采纳