这题不会呀

来源:百度知道 编辑:UC知道 时间:2024/06/09 22:46:14
以下程序的输出结果是
A) -1 1 B) 0 1 C) 1 0 D) 0 0
main( )
{ int a= -1,b=1,k;
if((++a<0)&& ! (b-- <=0))
printf("%d %d\n",a,b);
else
printf("%d %d\n",b,a);
答案说c 不是D吗

是C没错
首先你看IF 里的(++a<0)&& ! (b-- <=0)
这里面计算机先算(++a<0) 由于++A中 ++在前,因此整个表达式的值是先让A自增后取 增完后的 也就是0 而0<0 很显然是假的,因此&& 这个前面的表达式的值就是假的,计算机算到这里就不会算&&后边的了,因为前面是0,不管你后边是真是假 最终IF里面的一定是假, 这个你懂吧? 逻辑与的时候只有&&两边同时为真才为真, 现在左边是假,所以计算机就不去做后边的了 也就是说! (b-- <=0) 计算机没做
所以B的值仍是1,而A的值由于自增后变为0

最后输出 时 先输出B 然后输出A 因此是 1 0

答案为C
注意a的初值为-1,++a<0为假,则if后面括号中的表达式为假,直接执行else后面的语句printf("%d %d\n",b,a);
显然,b的值为他的初值1,a的值为++a,也就是0.
输出结果为 1 0
选择C

是C因为++a=0又是与号就不判断b--是否符合条件,也就没有执行b--所以明白了吧

是C,只判断到++a<0,条件不成立就跳出来了

错误操作

我感觉也是D。