c中的a<b<c问题
请问下面程序段的结果是什么?
int a=1,b=2,c=3,t;
while(a<b<c)
{t=a;a=b;b=t;c--;}
printf("%d%d%d",a,b,c);
运行结果是1,2,0
我想知道a<b<c到底相当于什么?
问题点数:20、回复次数:17Top
1 楼kingfish(工作很忙,很少来csdn...)回复于 2001-12-18 14:27:32 得分 0
最好不要这样写程序
a<b<c
(a<b)<c
a<b为 true,即1,1<c
Top
2 楼zjber(流星飞月)回复于 2001-12-18 14:33:48 得分 0
turbo c上的结果吗
运行是从右向左,先判断b<c为真,值为1,再判a<1为假,不执行以下语句,
输出应为 1,2,3
Top
3 楼happyforever()回复于 2001-12-18 14:38:05 得分 0
运行结果应该是:121
a<b<c相当于(a<b)<cTop
4 楼kingfish(工作很忙,很少来csdn...)回复于 2001-12-18 14:42:43 得分 0
bcb,vc上一样执行两次循环,结果 1 2 1
vc上会有警告:
'<' : unsafe use of type 'bool' in operationTop
5 楼hello_asong(蓝色的忧郁)回复于 2001-12-18 15:09:09 得分 0
tc上的结果1,2,1Top
6 楼blood_jz()回复于 2001-12-18 15:26:43 得分 0
while中的
a<b<c--->(a<b)<c,其中的a,b值不会变化吗?为什么?
Top
7 楼BlueDog(身正方能顶天立地,心和才可容士纳物。)回复于 2001-12-18 15:29:35 得分 0
应写成while( (a<b && b<c)
否则变成了 b<c -> TRUE or FALSE (1 or 0)
a< TRUE or FALSE
Top
8 楼blood_jz()回复于 2001-12-18 15:54:14 得分 0
....faint
怎么一会是 (a<b)<c, 一会是 a<(b<c)
应该是左结合吧Top
9 楼smart_boy(William)回复于 2001-12-18 16:27:30 得分 0
呵呵,各位高人,在turboc中运行结果为1,2,0呀!Top
10 楼smart_boy(William)回复于 2001-12-18 16:37:26 得分 0
哦,我错了,结果应该是1,2,1
可是结果为什么是这个呀?Top
11 楼blood_jz()回复于 2001-12-18 16:44:29 得分 20
因为循环了两次啊
第一次:(a<b)<c-->1<3,true ,执行循环,得到:a=2;b=1,c=2;
第二次:(a<b)<c-->0<2,true ,执行循环,得到:a=1;b=2;c=1;
第三次:(a<b)<c-->1<1,false,不执行。
故,最后值为:1,2,1Top
12 楼zhanghaifeng(海风)回复于 2001-12-18 16:55:14 得分 0
在Turbo C中应是1,2,3。Top
13 楼smart_boy(William)回复于 2001-12-18 19:01:22 得分 0
呵呵,谢!Top
14 楼ynmazha(蚂蚱)回复于 2001-12-19 01:00:04 得分 0
同意blood_jz()
int a=1,b=2,c=3,t;
while(a<b<c)
{t=a;a=b;b=t;c--;
printf("%d%d%d",a,b,c);}
printf("%d%d%d",a,b,c);
运行结果是212121121
Top
15 楼smart_boy(William)回复于 2001-12-19 10:12:50 得分 0
怎么不能给分了?Top
16 楼zjber(流星飞月)回复于 2001-12-28 12:15:32 得分 0
到底谁的对Top
17 楼lypx(落叶飘香)回复于 2001-12-28 12:36:20 得分 0
同意ynmazha(蚂蚱)
int a=1,b=2,c=3,t;
while(a<b<c)
{t=a;a=b;b=t;c--;
printf("%d%d%d",a,b,c);}
printf("%d%d%d",a,b,c);
运行结果是212121121
要说明一下,因为在不同的编译器上运行,有些规则是不一样的,比如TC、VC、BC、都采用了(A<B<C)左结合,但有一些在UNIX上或LINUX上的是右结合的,这一点要特别注意。
所以大家在DOS下或WINDOWS下应该结果是121.Top




