C中變量互換問題

如下:

include<stdio.h>
in main()
{
     int i = 3,j = 5;//等價於int i=3;  int j=5;
     i = j;//期望把j的值賦給i
     j = i;//期望把i的值賦給j
     printf( " i = %d,j = %d",i,j);
     return 0; 
}

期望的結果是 i 與 j 的值互換,但是上面的輸出結果卻是:

i=5
j=5

這是爲什麼呢?
因爲當計算機執行第一個語句:i = j 的時候i的值已經變成了5,所以繼續執行下一個語句的時候,把 i 的值賦給 j,j 就變成了5。

那麼如果我們想完成 i 與 j 的互換,該怎麼做到呢?
這時,我們不妨定義一箇中間值 t 輔助 i 與 j 的互換。

在這裏插入圖片描述

比如上圖,如果想把 i 與j 互換,我們可以把 i 比作一瓶可樂,而 j 代表一瓶雪碧,t 可以看作一個空瓶子,先把 可樂倒入空瓶子裏,再把雪碧倒入可樂瓶子中,最後再把裝可樂的瓶子倒入之前裝雪碧的瓶子中。
那麼,我們可以這樣做,已達到互換的問題:

#include<stdio.h>
int main()
{
     int i = 3, j = 5, t;
     t = i;
     i = j;
     j = t;
     printf("i = %d,j = %d", i, j);
     return 0;
}

在vs2017的環境下運行結果是:

i = 5,j = 3

這樣就可以完成互換問題,由此,我們還可以寫出一個簡單的小程序,既任意輸入三個數,按從大到小的順序輸出他們:
(思路:如果a小於b,就把a,b位置互換,再用a與c相比,如果a小於b,就讓a與c位置互換…)

#include<stdio.h>
int main()
{
     int a,b,c,t;                  //a,b,c可以看作三個盛放變量的容器
     printf("請輸入三個數,中間以空格隔開:");
     scanf("%d %d %d",&a,&b,&c);
     if (a < b)
     {
         t = a; a = b; b = t;
     }
     if(a < c)
     {
        t = a; a = c; c = t;
     }
     if(b < c)
     {
        t = b; b = c; c = t;
     }
     printf("%d %d %d",a,b,c);
     return 0;
}

輸入:5 1 2
運行結果爲:

5 2 1