c語言 多種方法實現兩個數的交換

2021-08-10 16:02:55 字數 1640 閱讀 2203

交換兩個數的內容是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,但是這種方法...