📜  C 程序的输出 |第 55 组(三元运算符)

📅  最后修改于: 2022-05-13 01:56:11.108000             🧑  作者: Mango

C 程序的输出 |第 55 组(三元运算符)

预测以下程序的输出
问题 1

#include 
int main()
{
    int x, a = 0;
    x = sizeof(a++) ? printf("Geeks for Geeks\n") : 0;
    printf("Value of x:%d\n", x);
    printf("Value of a:%d", a);
    return 0;
}

输出:

Geeks for Geeks
Value of x:16
Value of a:0

说明: sizeof 是一个编译时运算符,所以在编译时 sizeof 及其操作数被结果值替换。根本不计算操作数(除非它是可变长度数组);只有结果的类型很重要。在 sizeof 运算符,不会评估 a++。所以它将保持不变,即 a 的值将为 0。
printf 返回宽度的数量。 Geeks for Geeks 的宽度为 16。这将返回 16。所以 x 现在是 16。

问题2

#include 
int main()
{
    int x;
    x = 5 > 8 ? 10 : 1 != 2 < 5 ? 20 : 30;
    printf("Value of x:%d", x);
    return 0;
}

输出:



Value of x:30

说明

exp1?exp2:exp3          
5 > 8 ? 10: 1!= 2<5 ? 20:30

exp1 的输出为假,因此将评估 exp3 (1 != 2 <5 ? 20 : 30)。在 exp3 中,这也是三元运算符的形式。
1 != 2< 5 ? 20:30exp1?exp2:exp3
现在,将评估 exp1。根据运算符优先级, 2<5 将首先被评估(将给出输出 1)。现在,exp1 就像 1!=1(条件为假)。因此,将评估 exp3。因此,最终输出为 30。问题 3

#include 
int main()
{
    int x;
    x = 5 < 8 ? 1 != 2 < 5 == 0 ? 10 : 20 : 30;
    printf("Value of x:%d", x);
    return 0;
}

输出:

Value of x:10

解释 :

exp1?exp2:exp3
5 < 8? 1!=2<5 == 0 ? 10:20:30

exp1 为真,因此将评估 exp2。 exp2 也是三元运算符的形式。
1!= 2<5 == 0? 10 : 20 ( exp1?exp2:exp3 )
exp1(1 != 2 < 5 ==0) 被评估。在 exp1 中,根据运算符优先级,2<5 将首先被评估(条件为真)。现在 exp1 是 1!=1==0。同样,根据运算符优先级,评估 1==0(条件为假)。现在 exp1 是 1!=0(条件为真)。现在,将评估 exp2。因此,最终输出为 10。问题 4

#include 
#include 
int main()
{
    int x;
    x = 2 > 5 != 1 ? 5 < 8 && 8 > 2 ? !5 ? 10 : 20 : 30 : 40;
    printf("Value of x:%d", x);
    return 0;
}

输出:

Value of x:20

解释:

exp1?exp2:exp3
2 > 5 != 1 ? 5 2 ? !5 ? 10:20:30:40

exp1 将始终被评估。根据运算符优先级,2>5 将首先被评估(条件为假)。现在,exp1 为 0!=1。Condition 为 true。因此,将评估 exp2,这也是三元运算符形式。



52 ? !5 ? 10:20:30 
(exp1?exp2:exp3)

exp1 将被评估。根据运算符优先级,将评估 52(条件为真)。现在,exp1 是 1&&1(条件为真)。所以 exp2 将被评估,它也是三元运算符的形式。

!5 ? 10:20 (exp1?exp2:exp3)

exp1 将被评估,!5 的值为零,因此 exp3 将被评估。最终输出将为 20。问题 5

#include 
int main()
{
    int x;
    x = 2 > 5 ? 1 != 2 > 5 ? 10 : 20 : 5 < 8 ? 2 != 2 > 5 ?
    !5 ? 30 : !1 != 1 ? 40 : 50 : 60 : 70;
    printf("Value of x:%d", x);
    return 0;
}

输出:

Value of x:40

解释

exp1?exp2:exp3
2>5   ?   1!=2>5?10:20   :  55?!5?30:!1!=1?40:50:60:70;

exp1 总是会被求值 2>5(条件为假),所以 exp3 会被求值,也是三元运算符的形式。

55?!5?30:!1!=1?40:50:60 : 70  (exp1?exp2:exp3)

exp1会被求值,5<8(条件为真),所以exp2会被求值,也是三元运算符的形式。

2!=2>5  ?  !5?30:!1!=1?40:50  :  60 (exp1?exp2:exp3)

exp1 将被评估。根据运算符优先级,将首先评估 2>5(条件为假)。所以,exp1 现在是 2!=0(条件为真)。现在, exp2 将被评估,它是三元运算符的形式。

!5  ?  30  :  !1!=1?40:50  (exp1?exp2:exp3)

exp1 将被评估,!5 的值为零。因此,将评估 exp3,其形式为三元运算符。

!1!=1  ?  40  :  50  (exp1?exp2:exp3)

exp1 将被评估。根据运算符优先级,!1 将首先被评估,即。 0.现在,exp1 为 0!=1(条件为真),exp2 将被评估。因此最终输出为 40。