C语言一个while循环的选择题

下面程序的运行结果是 。

a=1; b=2; c=2;

while (a<b<c) {t = a ; a = b ; b = t ; c - - ;}

printf ("%d , %d, %d", a, b, c);

A) 1, 2, 0 B) 2, 1, 0 C) 1, 2, 1 D) 2, 1, 1
为什么C的值为0?

第一次循环:执行a<b,它的值等于1,1<c,执行while里面的语句,那么c=1
第二次:执行a<b,它的值是0,0<c,执行while里面的语句,那么c=0
第三次:执行a<b,它的值是1,1>c,不执行while
故a=1,b=2,c=0
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-12-29
a<b<c
先比较a<b,为真,值为1,然后再比较1<c
所以vc6.0里会有警告提醒:warning C4804: '<' : unsafe use of type 'bool' in operation
用bool(真值1)型的做比较运算不安全
但仍然可以通过运行,
第一次while循环,a<b<c 为真,循环体执行 // a= 2,b=1 ,c=1
第二次while循环,a<b<c 为真,//a=2,b=1 所以a<b 为假,值为0,0<c为真。
循环体执行。//a=1,b=2,c=0.
第三次while循环,a<b<c 为假,// a<b 为真,值为1,1<c为假。
跳出循环,循环体不执行。
第2个回答  2009-12-29
<是左结合性的运算符,因为这a<b<c可以理解为(a<b)<c
第一次循环a=1;b=2;(a<b)为真,即(a<b)=1,后而c=2;1<c为真,做进入循环。
第二次循环a=2;b=1;c=1;(a<b)=0;0<c为真,还能进入循环。
第三次循环a=1;b=2;c=0;(a<b)=1;1<c为假,不再进入循环。
所以答案为A
第3个回答  2009-12-29
第一个循环 1<2 值为 1,1<2,所以满足循环条件,a 与b的值交换,c变为1.
第二个循环 (这时a==2,b==1),2<1 值为 0,0<1,仍满足循环条件,所以c变为0.