C语言刚刚学,输入3个数,把它们按从小到大的顺序排列输出,有不理解的地方!!请指教

#include <stdio.h>
void main()
{
int a, b, c,temp;
printf("\ninput three numbers:\n");
scanf("%d%d%d",&a,&b,&c);
if(a > b)
{
temp = a;
a = b;
b = temp;
}
if(a > c)
{
temp = a;
a = c;
c = temp;
}
if(b > c)
{
temp = b;
b = c;
c = temp;
}
printf("%d %d% d\n",a, b, c);
}
如这样写的话,
temp = a;
a = b;
b = temp 为什么这样一写,就能把a和b的位置对调呢??十分不理解!
最新回答
无人问我粥可暖

2024-11-06 07:25:14

这不是把a和b的位置对调,是把变量a和b中原有的值对调一下。其中temp是中间变量。是他俩换值的媒介。
南栀北辰

2024-11-06 04:31:15

这三个语句的意思是:把a中的值赋值到temp中,然后把b中的值赋值到a中,这时a的值就是b的值了,再把temp(这时是a 的值)赋值到b中,然后b的值就是原来a的值了
干净好听的昵称

2024-11-06 15:34:53

有两个瓶子,分别装有酱油和醋,要把它们互换,当然不能直接交换。我们可以再取一个空瓶,先把酱油倒入空瓶中,再把醋倒入原来装有酱油的瓶中,然后再把空瓶中的酱油倒入原本装有醋的瓶子,这样以一个空瓶为媒介,实现酱油和醋的交换。这里的temp就相当于一个空瓶,a、b则相当于终于酱油和醋的瓶子,以temp为中介,实现a、b值的交换
暗中人

2024-11-06 10:09:39

你把这3个变量想象成3个盒子。
把temp中装的东西变得和a中的东西一样
把a中装的东西变得和b中一样
把b中装的东西变得和temp中的一样,
你可以在纸上草草的画一下,就会发现最终的结果就是a的结果是b的初始状态,b的结果是a的初始状态。
追问
谢谢回答啊。回答的很好。想再问下,C程序是逐条运行的,那么3个 if 语句之间有没有什么联系呢?换句话说,第一个 if 中,a的值已经被灌注成了b的值了,那么在第二个 if 中,那a的值是初始的a的值还是b的值呢?哎,基础都没搞明白...
追答
如果第二个if 段是包含在第一个if 段里面的,那么第二个if 里面a的值是在第一个if 的基础上的,也就是b的值了。例子:
if( ) //第一个if
{
if( ) //第二个if
{
}
}
如果两个if 是并联的关系,那么是不关联的。因为两个并联 的if 或者说N个并联的if 最终只可能执行一个if 里面的代码。例子:
if( ) //第一个if
{
}
else if //第二个if
{
}

当然,还有一种特殊情况,也就是你给的代码中的这种情况了。前后是否有关联是不一定的,这需要根据代码的运行情况而定。
代码逐条执行的,在进行到第一个if 段的时候会进行判断,如果括号里面的事件为真,那么会进行第一个if 段里面的事件,也有可能因为括号里面的事件为假,就不会执行if 段里面的代码了。但是无论第一个if 段是否执行了,在这之后肯定是会进入第二个if 段的判断,和第一个if 一样,是否执行也是要看括号里面的事件真假的,是未知的。后面的if 段类推。
所以,第二个if 中a的值是a还是b是不一定的。
建议楼主先不要急着研究代码,先把流程图方面的知识打牢固,然后再从流程图写代码。
另类收藏者

2024-11-06 20:16:54

temp = a 是把‘a’中的数据存储到‘temp’中
同样 a = b 是把‘b’中的数据存储到‘a’中
C语言的命令式逐条执行的 所以 a=b 不会影响上面的temp = a 命令 也就是说从‘a’中已经存入‘temp’的数据,不会因为后面‘a’的改变而改变了。
temp就相当于一个中转变量
temp = b;
b = a;
a = temp
的意思也是吧a,b对调。不同的temp中的数据不同