如题所述
一楼的做法严格说还是有点问题,因为abs函数本身就用到关系比较符:
nt __cdecl abs (
int number
)
{
return( number>=0 ? number : -number );
}
这是另一种方法,通过取符号位:
#include <stdio.h>
typedef union
{
int nVal;
struct
{
unsigned int abs : 31;
unsigned int flag : 1; // 符号位
} sVal;
} data;
void main()
{
int a, b, c;
data d1, d2;
char res[4] = {'>', '=', '<', '<'};
printf("Input 2 numbers:");
scanf("%d %d", &a, &b);
d1.nVal = a - b; // 判断出 a >= b, 或者 a < b
d2.nVal = d1.sVal.abs - 1; // 判断出 a = b
c = d1.sVal.flag * 2 + d2.sVal.flag; // 0 : a > b, 1 : a = b, 2,3 : a < b
printf("%d %c %d\n", a, res[c], b);
}
nt __cdecl abs (
int number
)
{
return( number>=0 ? number : -number );
}
这是另一种方法,通过取符号位:
#include <stdio.h>
typedef union
{
int nVal;
struct
{
unsigned int abs : 31;
unsigned int flag : 1; // 符号位
} sVal;
} data;
void main()
{
int a, b, c;
data d1, d2;
char res[4] = {'>', '=', '<', '<'};
printf("Input 2 numbers:");
scanf("%d %d", &a, &b);
d1.nVal = a - b; // 判断出 a >= b, 或者 a < b
d2.nVal = d1.sVal.abs - 1; // 判断出 a = b
c = d1.sVal.flag * 2 + d2.sVal.flag; // 0 : a > b, 1 : a = b, 2,3 : a < b
printf("%d %c %d\n", a, res[c], b);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答 2010-11-02
int a,b,max,min;
scanf("%d%d",&a,&b);
max = ((a+b)+abs(a-b))/2;
min = ((a+b)-abs(a-b))/2;
printf("%d %d",max,min);
scanf("%d%d",&a,&b);
max = ((a+b)+abs(a-b))/2;
min = ((a+b)-abs(a-b))/2;
printf("%d %d",max,min);