首页 > 试题广场 >

以下程序的输出结果是: void main() {

[单选题]
以下程序的输出结果是:
#include<stdio.h>
int  main()
{
	int x = 0, y = 5, z = 3;
	while(z-->0 && ++x<5)
	{
		y= y - 1;
	}
	printf("%d, %d, %d\n", x, y, z);
	return 0;
}



  • 2,2,0
  • 3,2,-1
  • 4,3,-1
  • 5,-2,-5
int x = 0, y = 5, z = 3;
while(z-->0 && ++x<5) {

y= y - 1;

}

(1)第一次:z=3>0,x=1<5 执行循环
x=1,y=4,z=2
(2)第二次:z=2>0,x=2<5执行循环
x=2,y=3,z=1
(3)第三次:z=1>0,x=3<5执行循环
x=3,y=2,z=0
(4)第四次:z=0不满足>0,判断后z--后z=-1,++x<5被短路,循环也不执行;
最终 x=3,y=2,z=-1
编辑于 2017-07-06 14:22:53 回复(5)
++i是在变量使用前先对其执行加1操作。
i++是先使用当前值,在执行加1操作。
由此,选B
发表于 2017-03-27 15:22:10 回复(0)
把z-->0,中间看成了箭头,一直没想通啥意思
发表于 2018-05-14 17:11:54 回复(5)
在最后一次满足z-->0时,z变成0,这时候++x编程了3,因为z操作了3次,进入循环体,y也改变了3变成2;
再次判断是,z--==0不满足,然后z编程-1了,而后因为&&短路,所以++x和循环体都不执行,所以结果是3 2 -1.
发表于 2017-03-23 19:08:00 回复(0)
z在等于1的时候,比较后,––等于0,下次再比较,尽管为假,但是它运算了,还要–1,因此为-1
发表于 2017-02-16 15:33:35 回复(0)

主要考察的是++

发表于 2019-07-15 17:09:09 回复(0)
原来z--判断后还要继续做运算鸭,学到了

发表于 2023-03-09 14:41:42 回复(0)
1)第一次:z=3>0,x=1<5 执行循环 x=1,y=4,z=2 (2)第二次:z=2>0,x=2<5执行循环 x=2,y=3,z=1 (3)第三次:z=1>0,x=3<5执行循环 x=3,y=2,z=0 (4)第四次:z=0不满足>0,判断后z--后z=-1,++x<5被短路,循环也不执行; 最终 x=3,y=2,z=-1
发表于 2022-08-31 15:33:05 回复(0)
当Z=0时,0-->0已不成立,但是--还要再进行,故最后z=-1,&&后面的由于短路就不执行了
发表于 2020-07-06 16:28:12 回复(0)
z-->0判断z是否大于0然后自减
发表于 2020-06-12 09:21:45 回复(0)
我怎么感觉z不能到-1,只能到0;如果到-1 的话,那进行了第四次while循环判断,且只判断了z--,没有判断++x,若两者同时判断,则z=-1,x=4;
发表于 2019-06-13 21:32:47 回复(0)
考符号的短路,看错了-->
发表于 2019-05-07 14:37:28 回复(0)
最后一次z = 0的时候要判断,判断结束后变为-1,然后与运算后面的部分不判断,循环体也不执行,相当于z做了四次运算,而x , y只做了三次运算
发表于 2018-06-22 09:11:33 回复(0)
Z--是先进行操作后判断
发表于 2018-04-11 15:19:15 回复(1)
b,注意i++与++i的区别
发表于 2017-03-20 23:31:58 回复(0)