{ int a=3,b=4,c=5,t=99; if (b<a&&a<c) t=a;a=c;c=t; if (a<c&&b<c) t=a;b=a;a=t; printf("%d %d %d\n",a

这道C语言题怎么解,求过程,为什么输出是 5 5 99

if (a<c&&b<c) t=a;b=a;a=t;
这里赋值错误
你是想把它交换
所以应该是 if (a<c&&b<c) t=a;a=b;b=t;
你之前的 相当于 把 a赋予b
然后,a还是a追问

不好意思,一时粗心打错了。原文是这样。
{ int a=3,b=4,c=5,t=99; if (b<a&&a<c) t=a;a=c;c=t; if (a<c&&b<c) t=b;b=a;a=t; printf("%d %d %d\n",a,b,c);}
答案输出的是 4 5 99
为什么?

追答

首先执行 if (b<a&&a<c)
因为 b<a 成立 a<c成立
所以, 执行交换,变成 a=c c=a // a=5 ,c=3
然后继续执行 if (a<c&&b<c)
因为 a<c成立 b<c成立
所以,执行交换,变成 b=a a=b // b=a=5 a=t=4
了解了不?

追问

上题b<a成立吗?a=3,而b=4,为什么会成立?

追答

我知道了!!!!!!!!!!!!!!!!!!!
那是因为你的不是交换语句!
你少了一个{ }
它就不是交换了
而是独立的一个赋值语句
#include
main()
{ int a=3,b=4,c=5,t=99;
if (b<a&&a<c) {t=a;a=c;c=t;}
if (a<c&&b<c) {t=b;b=a;a=t;}
printf("%d %d %d\n",a,b,c);
}
这个才是赋值

追问

好像没有。
我把我原文一字一句抄给你看。
void main()
{ int a=3,b=4,c=5,t=99;
if(b<a&&a<c) t=a;a=c;c=t;
if(a<c&&b<c) t=b;b=a;a=t;
printf("%d %d %d\n",a,b,c);
}
我已经检查好几遍,是与原文一样!盼望给予答复!

追答

我就解释给你听。这个好考眼睛的!少了一个{ } 意思就完全不一样了,就你给的这个,我就分析了。很长的。。。。。。
if(b<a&&a<c) 很明显,不成立 于是就执行了 a=c;c=t;
所以 a=5 c=99
于是继续往下执行
if(a<c&&b<c) 发现,成立 于是执行 t=b 就有,t=5
然后继续往下执行 b=a;a=t;
所以 b=5 a=5
了解了不,开始看太快了。。。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-20
代码都没贴完!!
相似回答