尝试是否可以简化条件块的“?:”

时间:2018-09-21 08:13:40

标签: c

有人问我是否可以编写代码来查找五个数字中的最大数字,而不是使用常规的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块?

发现了一件事情:要对一个表达式使用宏,并将该宏用作条件和结果进行另一比较。

2 个答案:

答案 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] ]);
}

我尝试了一些案例,似乎奏效了。