首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

05全国二级c一道选择题,该怎么处理

2012-05-20 
05全国二级c一道选择题main(){int i1,j2,k3if(i++1&&(++j3||k++3))printf(%d%d%d,i,j,k)}结

05全国二级c一道选择题
main()
{
int i=1,j=2,k=3;
if(i++==1&&(++j==3||k++==3))
  printf("%d%d%d",i,j,k);
}
结果:2 3 3
我不明白,最后为什么k值会为3?不是都k++了吗,应该为4才对啊?

[解决办法]
++j==3||k++==3

||表达式前面条件成立则后面的条件判断不执行,从左到右
[解决办法]
好好理解一下C语言中在进行逻辑运算时的“短路”
[解决办法]
逻辑运算的短路问题。逻辑运算从左往右执行,当其最终结果可以确定的时候,后面的就不会再去运算了。
[解决办法]
main()
{
int i=1,j=2,k=3;
if(i++==1&&(++j==3||k++==3))//这个是最重要的一步
printf("%d%d%d",i,j,k);
}

在c/c++中:
if(表达式1 && 表达式2) 当表达式1为False时,(表达式1 && 表达式2)肯定为False,为了提高程序效率将不执行表达式2,直接跳过;
if(表达式1 || 表达式2) 当表达式1为True时,(表达式1 && 表达式2)肯定为Ture, 同理,将不执行表达式2,直接跳过;

if(i++==1&&(++j==3||k++==3)):
表达式'i++==1'为True,所以执行&&后面的表达式;
而表达式'++j==3'为True,所以||后面的表达式不执行;

[解决办法]
总的来说其实就是在
“if(i++==1&&(++j==3||k++==3))”
中,分清i++和++i的区别,前一个是想完成语句再自增,后者是先自增再执行语句;
还有就是8楼说的逻辑运算问题
[解决办法]
if(i++==1&&(++j==3||k++==3))

先算括号内的||,左边成立,右边就不算了,所以J=3,K=3,
再算&&,左边i++==1为假,因此 i=2,右边的就不算了,

加一块,i=2,J=3,K=3,

&&,左边不成立,右边就不计算,因为肯定为假了
||,左边成立,右边就不计算,因为肯定为真了!

热点排行