问题 单项选择题

有以下程序
main()
int i=1,j=2,k=3;
if(i++==1&&(++j==3 || k++==3))printf("%d %d %d\n",i,j,k);

程序运行后的输出结果是______。

A.1 2 3

B.2 3 4

C.2 2 3

D.2 3 3

答案

参考答案:C

解析: 在C语言中,计算逻辑或(||)和逻辑与(&&)运算时有一种特殊情况:当||左边为真时,忽略其右边的表达式,因为此时不论右边表达式的结果如何,||的结果都为真;同样,当&&左边为假时,忽略其右边的表达式。在计算i++=1&&(++i==3||k++=3)时,先计算i++==1,==的优先级低于++,所以先计算i++,该值为1,所以i++==1等价于1==1,为真。此时i的值为2。&&右边为(++j=3||k++==3),所以先计算||运算。而||左边++j==3等价于3==3,为真。所以||右边的表达式k++==3被忽略,||运算的结果为真。所以条件语句的判断结果为真,执行输出语句。此时j的值为3,k的值为3,最终输出的结果为“2 2 3”。所以选项C正确。

问答题
单项选择题