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:30 ( exp1?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。