使用三元运算符在 C 中查找最大负数、最小正数(无 while 循环,for 循环)

问题描述 投票:0回答:1
int main() {
    int a, b, c, d, e, f;
    scanf("%d %d %d %d %d %d", &a, &b, &c, &d, &e, &f);

    int max = (a < 0 ? a : 0);
    int mmin = (a > 0 ? a : 0);
    
    max = (b < 0 && b > max ? b : max);
    max = (c < 0 && c > max ? c : max);
    max = (d < 0 && d > max ? d : max);
    max = (e < 0 && e > max ? e : max);
    max = (f < 0 && f > max ? f : max);
    
    mmin = (b > 0 && b < mmin ? b :mmin);
    mmin = (c > 0 && c < mmin ? c :mmin);
    mmin = (d > 0 && d < mmin ? d :mmin);
    mmin = (e > 0 && e < mmin ? e :mmin);
    mmin = (f > 0 && f < mmin ? f :mmin);
    
    printf("The max negative number is: %d\n", max);
    printf("The min positive number is: %d\n", mmin);
}

所以..这是我的代码,当我尝试运行它时,它的输出有问题,例如“ 1 -2 3 -4 5 -6 ”,它给我的最大负数是 1,最小正数是0(但不是-2),有人知道为什么吗?

c conditional-operator
1个回答
0
投票

您的代码最多只能为您提供您正在寻找的两件事之一。如果第一个数字为正数,您将获得最小的正值,而另一个数字为零。如果第一个数字为负数,则反之亦然。问题在于将第一个数字 (

max
) 的
mmin
a
或两者都设置为零。一旦其中一个为零,无论其余值如何,它都将保持为零。

不要从零开始。将

max
初始设置为
INT_MIN
,并将
mmin
设置为
INT_MAX
,两者均来自
#include <limits.h>
。然后处理
a
,
b
, ...

© www.soinside.com 2019 - 2024. All rights reserved.