C语言习题
main()
{ int i=1,j=1,k=2;
if((j++||k++)&&i++)
printf("%d,%d,%dn",i,j,k);
}
这个题目的答案是什么,为什么?
参考答案:结果:2,2,2 (呵\n 写成n了)
关于在于 if((j++||k++)&&i++) 的计算
计算的第一个表达式是
(j++||k++) j++,返回值为1,j的值变为2,1的值用来计算表达式,1非零,所以为真,后面是一个或运算,无论后面的k++计算与不计算都不会影响表达式(j++||k++)的结果,所以k++语句并没有执行,因为值已经确定了
i++的返回值为1,i的值变为2
整个表达式的值为真
所以一个A||B表达式,前面的A=真 的话后面的B就不计算了,也就是不作任何处理,如果A=假 的话就要计算表达式B的值了
一个A&&B表达式,前面的A=假 的话,后面的B就不计算了,也就是不作任何处理
如果,A=真 的话就要计算表达式B的值了