关于低级C语言的 垃圾问题

来源:百度知道 编辑:UC知道 时间:2024/07/02 07:15:35
#include<stdio.h>
main()
{int x=0,y=3,z=2;
if(x++&&y++) z++;
else if(x+1==6||y--) z--;
printf("%d,%d,%d\n",x,y,z);
}
请详细回答怎么做的!谢啦

结果是:1,2,1
if(x++&&y++)中x++是先调用再自加,所以先判断x=0为假,因为&&只要有一个条件为假就终止判断,所以就不会运行后面的y++,这条语句后x,y。z的值为1,3,2.

else if(x+1==6||y--) z--,对x+1==6判断,1+1==6为假,再判断y—,y为3为真,(执行这语句过后y为2),再执行z--,所以z为1.

x=0 所以第一个if不执行~但是x++, x=1,y=3,z=2
下面的就执行y--和z--了~

x=1,y=3,z=1

不懂c语言就不要说c语言垃圾。你平常用的Windows操作系统都是用所谓的“垃圾语言”c语言写的!请问c真的垃圾么?

不同编译环境下结果可能会有不同,VC6.0环境下是如下执行的:
if语句的条件中有“与”计算的条件语句时,按从左到右顺序判断表达式,如果第一个表达式就为假那么就不会对后面的表达式进行判断(符合常理,“与”计算是条件全真结果才为真,条件有一是假的那其他的也就不必判断了),如
这里
if(x++&&y++) //x是0(因为是先取x值参与计算,然后给x值增1 ),与条件不满足,判断结束,因此没有进行y++判断,那么y值不变,当然z值也不变了。
因此这句执行完,三个变量值是:x==1,y==3,z==2
同理if条件中的“或”计算语句也按“或”操作的规则进行了,也是从左到右计算,但是这里遇到0是不会停止判断的,而是遇到1。
刚才那个条件不满足那么就执行
else if(x+1==6||y--) z--;
这里首先对x+1==6进行判断显然1+1==6是结果为假,那么接着执行y--,y现在的值是3(参与完计算后接着又减1那么结果就是2)非零值,那么结果为真,执行z--,z值减1(z结果为1)。
最后输出的结果就是:
1,2,1

不知道你问什么呀