交換兩個數的內容是c語言中常見的問題,所以在此總結一下我所學到的幾種方法。
首先,舉乙個例子,假設a=10,b=20.
第一種方法,借助乙個臨時變數來進行儲存,這是最容易也是最直觀的方法。
**如下:
int a, b, t;
a = 10;
b = 20;
printf("a=%d b=%d", a, b);
t = a;
a = b;
b = t;
printf("\n");
printf("a=%d b=%d", a, b);
實現結果如下:
在這種方法的基礎上,可以借助指標寫乙個函式來交換兩個數的大小。
**如下:
void swap(int
*pa, int
*pb)
int main()
實現結果如下:
第二類方法,如果不允許借助第三個變數,該如何做呢?
此時,可以有如下幾種辦法。
1)加減運算,這種方法實際上就是先將a+b的結果暫時先儲存在變數a中,通過改變後的a和原始的b進行減法就可以得到交換後的b,但是這種方法存在缺陷,a和b都是int型的話,可能會造成溢位。
**如下:
int a = 10;
int b = 20;
printf("a=%d b=%d\n", a, b);
a = a + b;
b = a - b;
a = a - b;//同號時可能溢位
printf("a=%d b=%d\n", a, b);
2)乘除運算,與加減類似,用a*b替代a+b放在a中暫存,但是這種方法與加減運算一樣有著缺陷,比加減運算更容易溢位。
int a = 10;
int b = 20;
printf("a=%d b=%d\n", a, b);
a = a*b;
b = a/b;
a = a/b;
printf("a=%d b=%d\n", a, b);
3)位運算,這種方法比起加減和乘除來說,並不會有溢位的可能。主要利用了異或的特性,將a^b的值存在a裡,就可以順利完成交換。
int a = 10;
int b = 20;
printf("a=%d b=%d\n", a, b);
a = a^b;
b = a^b;
a = a^b;
printf("a=%d b=%d\n, a, b);
總的來說,使用第一種借助第三變數方法更為直觀,異或的方法也不會存在缺陷。這是兩種較為常用的方法,但值得注意的是 ,在使用指標變數做交換時,形參的改變並不會影響實參的改變,採用單向值傳遞的方法,應該使他們的位址進行交換。 多種方法交換兩個數的值
方法1 程式例項 include void exchange int x,int y intmain 執行結果 方法2 include intmain 執行結果 此處通過巧用位操作符 按位異或 的方法,完成兩個數的轉化。按位異或操作符的口訣 相異為1,相同為0 三個按位異或的具體如下 注 以下二進位...
交換兩個數的幾種方法
這是最常用的交換兩數的方法 void swap 1 int a,int b 有兩種方法。1 採用加減的方法,這種方法容易越界 void swap 2 int a,int b 2 採用按位異或的方法 void swap 3 int a,int b 這兩種方法並不常用甚至有些時候容易出bug,但有時面試...
C語言中交換兩個數的5種方法
程式中有兩個數a,b,其中a 4,b 5,現在希望交換兩個數的值,使得a 5,b 4.使用乙個臨時變數來進行儲存 temp a a b b temp 使用加減法來進行交換,這種方法實際上就是先把a b的結果暫時先儲存在變數a中,然後通過這改變後的a和原始的b進行減法就可以得到交換後的b,但是這種方法...