求下面程序执行的结果及解析

int a=3;
a+=(a<1)?a:1;
printf(“%d”,a);

答案是:4。
1、首先涉及一个运算符优先级的问题,a+=(a<1)?a:1;:小于操作符在这里面运算优先级最高,其次是条件运算符(三目运算符),最后是赋值运算(加后赋值);
2、条件运算符,表达式1 ? 表达式2 : 表达式3,先判断表达式1,如果表达式1为真,则最终结果用表达式2的结果,如果表达式1为假,则最终结果用表达式3的结果。
3、这里(a<1) ? a : 1;其中a=3,因此表达式1a<1为假,最终结果为表达式31,因此(a<1) ? a : 1;最终结果为1,然后执行+=操作,最终a为4;

4

4

运算符优先级的问题。
a+=(a<1)?a:1;
?是条件运算符,优先级高于+=,所以先算(a<1)?a:1,就是如果a小于1,算式的结果是a,否则就是1,a=3,不成立,所以结果是1,然后执行a+=1 就是a = a+1 = 3+1 = 4;
运算符优先级参考:https://baike.baidu.com/item/%E8%BF%90%E7%AE%97%E7%AC%A6%E4%BC%98%E5%85%88%E7%BA%A7/4752611?fr=aladdin

如有帮助,请采纳一下,谢谢。