如下:
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