int a,b,c;a=b=0; c=(++a>0)?5:(++b>0)?6:7; printf("%d%d%d",abc)为什么是105
答案:2 悬赏:30 手机版
解决时间 2021-03-04 13:37
- 提问者网友:轮囘Li巡影
- 2021-03-04 08:24
int a,b,c;a=b=0; c=(++a>0)?5:(++b>0)?6:7; printf("%d%d%d",abc)为什么是105
最佳答案
- 五星知识达人网友:轮獄道
- 2021-03-04 08:52
条件运算符具有右结合性
当一个表达式中出现多个条件运算符时,应该将位于最右边的问号与离它最近的冒号配对,并按这一原则正确区分各条件运算符的运算对象。
例如:
w<x ? x+w : x<y ? x : y
与 w<x ? x+w : ( x<y ? x : y) 等价
与 (w<x ? x+w : x<y) ? x : y 不等价
这里c=(++a>0)?5:(++b>0)?6:7;等价与c=(++a>0)?5:((++b>0)?6:7)
(++b>0)?6:7 = 6
c = (++a>0)?5:6 = 5
所以c=(++a>0)?5:(++b>0)?6:7 = 5咯,
(++a>0)?5这里直接选择了5,没有运行后面的,所以没执行++b
所以b=0;
所以输出是105
当一个表达式中出现多个条件运算符时,应该将位于最右边的问号与离它最近的冒号配对,并按这一原则正确区分各条件运算符的运算对象。
例如:
w<x ? x+w : x<y ? x : y
与 w<x ? x+w : ( x<y ? x : y) 等价
与 (w<x ? x+w : x<y) ? x : y 不等价
这里c=(++a>0)?5:(++b>0)?6:7;等价与c=(++a>0)?5:((++b>0)?6:7)
(++b>0)?6:7 = 6
c = (++a>0)?5:6 = 5
所以c=(++a>0)?5:(++b>0)?6:7 = 5咯,
(++a>0)?5这里直接选择了5,没有运行后面的,所以没执行++b
所以b=0;
所以输出是105
全部回答
- 1楼网友:雾月
- 2021-03-04 09:12
自己一步步慢慢算。
第一次循环:
w = 24 % 16 = 8
u = v ->16
v= w -> 8
第二次循环(u 16, v 8)
w = 16 % 8 = 0
u = 8
v = 0
这个时候循环中止,返回值是u,就是8
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯