有人问我是否可以编写代码来查找五个数字中的最大数字,而不是使用常规的if...else
(不能使用switch
或遍历-受限制),我决定使用紧凑版本,但IMO我发现它过于冗长和混乱(首先在三个数字上进行了尝试):
#include<stdio.h>
int main(void)
{
int a[3]={9,5,13};
printf("Biggest No. is: %d\n",(a[0]>
(a[1]>a[2]?a[1]:a[2])?a[0]:
(a[1]>a[2]?a[1]:a[2])));
return 0;
}
现在使用此方法对五个数字执行此操作似乎是灾难性的,是否有任何方法可以简化(仅使用?:
的紧凑方法)来编写用作的表达式条件并再次将其写为结果似乎太多?
还是应该使用常规的if ... else
块?
发现了一件事情:要对一个表达式使用宏,并将该宏用作条件和结果进行另一比较。
答案 0 :(得分:4)
您可以使用嵌套宏来分解逻辑。
#define MAX2(a,b) (a)>(b)?(a):(b)
#define MAX3(a,b,c) (a)>(b)? MAX2(a,c): MAX2(b,c)
#define MAX4(a,b,c,d) (a)>(b)? MAX3(a,c,d): MAX3(b,c,d)
#define MAX5(a,b,c,d,e) (a)>(b)? MAX4(a,c,d,e): MAX4(b,c,d,e)
答案 1 :(得分:1)
尝试一下:
int main(){
int a[3]={9,5,13};
int arr1[] = { a[0], a[1] };
int arr2[] = { arr1[ a[0] < a[1] ], a[2] };
printf("max is %d\n", arr2[ arr2[0] < a[2] ]);
}
我尝试了一些案例,似乎奏效了。