这道题为什么c啊 谢谢啦

来源:百度知道 编辑:UC知道 时间:2024/07/07 16:26:37
19.有以下程序
main()
{ int i=1,j=1,k=2;
if((j++||k++)&& i++)
printf("%d,%d,%d\n",i,j,k);
}
执行后输出结果是
A)1,1,2
B)2,2,1
C)2,2,2
D)2,2,3

关键在于这一句:if((j++||k++)&& i++)
在C语言中,如果一个表达式的结果能够确定,那么表达式剩余的部分不会被计算。
在该if中,&&符号两端的表达式都必须被计算,而||符号两端的表达式只要有一端为1则该表达式必为1。因此j++的结果是大于0的,C语言不会再计算k++的结果,而是继续计算i++的结果。这样,j++,i++都被执行,而k++没有被执行,因此答案选C(2,2,2)

因为表达式(j++||k++)执行好j++后,已经为真,所以k++不执行。

第一位说的没错

在这句里 "if((j++||k++)&& i++)" j++||k++,在逻辑或里只要前一个条件(j++)是真那么无论后一个条件(k++)是否为真都不影响整个语句(j++||k++)为真. 在系统编译时只要第一个条件是真的那么第2个条件就自动跳过不再执行了.所以(k++)这条语句根本就没有执行.结果当然就是C了

if((j++||k++)&& i++) 这一句在执行当中,j++结果已经是2,则不再执行k++,然后继续执行i++,i++执行之后结果为2,则开始打印i 、j、k的结果,自然是C了

D