c语言问题

1。解释下(!x||y--)是什么意思。
2。
main()
{int x=10,y=10,i;
for(i=0;x>8;y=++i)
printf("%d,%d",x--,y);
}
以上程序输出结果是10,10,9,1。x的输出我明白,给我讲下y的输出,在for循环中不是已经将++i的值赋给y了么,为什么又输出10?
拉了一道...
a<b?a:c<d?a:d代表什么意思?解释的详细点
还有x+=y+=z
不好意思,要考试了,很多东西不会..所以就连着问了...

1.这个表达式等价于(!x)||(y--);
就是!x的值和y的值求或运算,如果!x的值为1,那么整个表达式的值为1,而且y--运行不到,这是因为||的逻辑短路规则,因为参与或运算只要有一个参数是1,那么或运算的结果就是1,而不用管另外一个参数是1还是0;
如果!x的值为0,那么运算完或运算以后,y的值再减1

2.for(i=0;x>8;y=++i){语句A}
运行的时候,先运行一次(唯一的一次)i=0;
开始循环:如果x>8,那么执行语句A,然后执行y=++i;
如果x>8,那么执行语句A,然后执行y=++i;
....
直到x<=8,结束循环,不再运行y=++i;

i=0;
x=10,x>8成立,所以执行printf("%d,%d",x--,y);这个语句等价于{printf("%d,%d",x,y);x=x-1;} 所以是输出10,10;x=9
执行y=++i;等价于{i=i+1;y=i;}i=1,y=1;

x=9,x>8成立,所以执行printf("%d,%d",x--,y);所以输出9,1;x=8
执行y=++i;所以i=2,y=2

x=8,x>8不成立,for循环结束

综上所述,输出结果是10,10 9,1(实际显示效果应该是10,109,1)

3.a<b?a:c<d?a:d
判断a<b真假,如果真那么执行a;
如果假,那么执行c<d?a:d
{判断c<d真假,如果真,那么执行a;如果假,那么执行d}

4.x+=y+=z
赋值运算是右结合的,也就是形如这样的y左边有x,右边有z,先运算y+=z;也就是y=y+z,然后运行x+=y,所以x+=y+=z相当于{y=y+z;x=x+y;}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-06-27
1: 不存在X或者Y-- (二个满足一个就OK)
2:你的Y=++I是在循环判断上面的,必须要将本次循环执行完成了后才改变Y的值.
3:表示如果a<b 那么结果为a
如果a>b ,执行c<d,如果成立则: a
否则:d
就是两个IF嵌套:
if (a<b)
a;
else if(c<d)
a;
else
d;
第2个回答  2009-06-27
1, FOR循环的y=++i是在循环体开始新一轮循环时执行的,所以第一次打印y没变呢;

2,(a<b)? a : ( (c<d) ?a : d )
主要是体会一下运算符的优先级问题,同级的还有一个结合顺序的问题
第3个回答  2009-06-27
1是个括号表达式,只要||前后有一个值是非零 那么括号表达式值就为1 如果两个都为零 那么等零
2这个是for语句执行顺序问题 先执行第一个;前语句 然后判断中间那个语句时候为真。若为否不执行下面的循环语句,执行第二个;后面语句。然后再判断第二个语句是否成立。第二个语句若为真,则先执行循环体,然后才执行第二个;后面的语句。对于这题来说,在第一次循环中,判断条件成立,先执行循环体中的输出语句,然后才是y=++i。所以y第一次等于10第二次1。
3 这是条件运算符叠一起用。由其运算先后可知:先判断左边问号前的,若成立整个式子值等于?后面的式子的值,如果不成立 就等于:后面的式子的值。在这题中:后面也是个条件表达式,执行方法同上
第4个回答  2009-06-27
y是局部变量,在函数体内定义了,就是这个值了
相似回答