0

所以我只是想写一个C代码来比较数字,三个数字中哪个最大,哪个最小。

然后我发现我可以使用三元运算符(例如:x < y ? num1 : num2), 所以我认为是的,这可以工作,然后我编写了以下代码:

#include <stdio.h>
int main(){
int num1, num2, num3, largest, smallest;

printf("Enter three integers: ");
scanf("%d %d %d", &num1, &num2, &num3);

//largest among three integers.

largest = num1 > num2 ? (num1 > num3 ? num1 : num3) : (num2 > num3 ? num2 : num3);
printf("\nThe largest among the three is: %d", largest);

//smallest among three integers

smallest = num1 < num2 ? (num1 < num3 ? num1 : num3) : (num2 < num3 ? num2 : num3);
printf("\nThe smallest among the three is: %d", smallest);

return 0;
}

所以,如果我给出像 num1 = 10、num2 = 20 和 num3 = 30 这样的输入,那么输出是

Enter three integers: 10 20 30

The largest among the three is: 30
The smallest among the three is: 10

但是当所有这些数字都相等时会发生什么?三元运算符的条件是真还是假?

Enter three integers: 20 20 20

The largest among the three is: 20
The smallest among the three is: 20

我不知道条件是什么,但程序运行正常,输出正确。

我在最新的 Windows 10 和 gcc.exe (MinGW.org GCC-6.3.0-1) 6.3.0 上使用它

如果这是一个蹩脚的问题,我很抱歉,但我没有找到任何相关信息。

4

3 回答 3

0

如果条件运算符的第一个表达式的计算结果为 false,则条件运算符的结果是第三个表达式的值。

例如在这个声明中

largest = num1 > num2 ? (num1 > num3 ? num1 : num3) : (num2 > num3 ? num2 : num3);

如果num1不大于num2(即具有关系运算符的表达式的num1 > num2计算结果为 false),则此(第三个)表达式计算

(num2 > num3 ? num2 : num3)

同样,如果num2不大于num3则该表达式和整个封闭表达式的结果是 的值num3

于 2022-02-07T10:39:27.963 回答
0

一般来说,布尔代数是:(a > b“a 大于 b”)的反义词是a <= b(“a 小于或等于 b”)。

如果你想覆盖大于、小于和等于,那么你需要这样的伪代码:

(a < b) ? smaller : ( (a > b) ? larger : equal )

这只是等效首选代码的一种晦涩难懂的方式:

if(a < b)
{}
else if(a > b)
{}
else // equal
{}

除非您有特殊要求,例如在编写类似函数的宏时,否则请始终使用if-else if链上链。?:

于 2022-02-07T10:41:54.077 回答
0

>较大的运算符true仅当大于值时。否则会是假的

三元运算符的条件是真还是假?

n = x > y ? x : y;

nx如果x大于,将被赋值,否则(包括 when 的情况将被赋值为yx == yy

于 2022-02-07T10:54:24.127 回答