下列输出结果为什么是3 3 3 啊

CSDN问答 2021-12-30 14:34:42 阅读数:551

编程开发 输出 下列 CSDN问答

#include<stdio.h>void main()
{int i=2,j=2,k=3;
if(i++==2&&(++j==3||k++==3))
printf("%d %d %d\n",i,j,k)
}




采纳答案:

i++,先输出再执行加一运算,所以i++==2,先判断i==2,再执行i+=1;
++j,先执行加一运算,再输出,所以++j==3,先执行j+=1,再判断j==3;
k++,先输出再执行加一运算,所以k++==3,先判断k==3,再执行k+=1
所以执行完成后,i=3,j=3,k=3,输出3 3 3



其他答案2:

这里括号优先级最高
先看++j == 3这一句为真,且j变成了3
由于||是短路或,前面为真就不用看后面了,k++不会执行
再看&&的前面
i ++ == 2为真,然后i ++ 变成了3
所以整个表达式为真
输出3 3 3


其他答案3:

i++==2&&(++j==3||k++==3)
执行顺序:
1、判断i==2是否成立,成立
2、执行i++,i变成3
3、执行++j,j变成3
4、判断j==3是否成立,成立,整个if条件成立,后面的k++=3不会再执行,
所以i,j,k都是3


其他答案4:
#include <stdio.h>void main(){ int i = 2, j = 2, k = 3; if (i++ == 2 && (++j == 3 || k++ == 3)) // i++ == 2 相当于 i == 2, i += 1 // ++j == 3 相当于 j += 1, j == 3 // k++ == 3 相当于 k == 3, k += 1 printf("%d %d %d\n", i, j, k)}
版权声明:本文为[CSDN问答]所创,转载请带上原文链接,感谢。 https://ask.csdn.net/questions/7618522