c语言问题

#include "stdio.h"
void main()
{int a=3,b=4,c=5,t=79;
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 79
计算机二级的题 不知道过程怎么来的

if(b<a&&a<c)
t=a;
a=c;
c=t;
if(a<c&&b<c)
t=b;
b=a;
a=t;
代码这么看舒服点,一个if判断只管到下面一句,所以第一个判断后的t=a不执行,下面的a=c;c=t都能执行,所以a=5,c=79,再往下,if(a<c&&b<c)条件符合,t=4,b=5,a=4,所以最终的结果为a=4,b=5,c=79
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-08
你看见的这个程序应该这么看:
void main()
{int a=3,b=4,c=5,t=79;
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);
}
C语言语句的结束符不是换行 而是分号“;” 并且if语句如果后面没有{}括起来的代码块 只把条件语句后紧跟着的一个语句(第一个分号前)作为表达式成立时执行的语句,比如:
if(a<c&&b<c)t=b;b=a;a=t;
这句在(a<c&&b<c)成立的时候只执行t=b; 然后顺序执行后面的b=a;和a=t;
如果不成立t=b;不执行,但仍然执行后面的b=a;和a=t;。
所以整个语句看来就是:
题设:a=3 b=4 c=5 t=79
if(b<a&&a<c)t=a;a=c;c=t; b大于a 所以表达式不成立则t=a;不执行 执行a=c=5,c=t=79
if(a<c&&b<c)t=b;b=a;a=t; 此时a=5,c=79,b=4所以a小于c并且b小于c,表达式成立则t=b=4,b=a=5,a=t=4。得出a=4 b=5 c=79
printf("%d %d %d\n",a,b,c);所以最终屏幕输出:4 5 79。

参考资料:手打

第2个回答  2011-09-08
if(b<a&&a<c)t=a;a=c;c=t;
1.第一个ifb<c不满足,不执行t=a。
2.接着执行if后面的a=c;c=t;
。执行C的值赋给a,a=5,c=79;
3.第二个if条件满足,执行t=4,b=5,a=t=4.
最后输出,a=4,b=5,c=79
第3个回答  2011-09-08
由于b>a,所以没有执行语句t=a;
接着执行语句
a=c; //此时a=5
c=t; //此时c=79
if(a<c&&b<c)
t=b; //此时t=4
b=a; //此时b=5
a=t; //此时a=4
所以a=4,b=5,c=79
第4个回答  2011-09-08
这是个基础题,面试肯定有,a,b,c 都被赋值了,也就是说都已经被分配了地址,再将已经复制的变量付给已经有地址和值的变量,怎么赋得过来啊。比如说有一个瓶子a已经装满了水,再找个相同的有水的瓶子b,将瓶子b的水倒进瓶子a里面,瓶子a 能改变什么呢?
相似回答