永发信息网

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
全部回答
  • 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
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯