首頁 > 後端開發 > C#.Net教程 > c語言交換兩個數的值

c語言交換兩個數的值

angryTom
發布: 2019-10-23 16:53:41
原創
15510 人瀏覽過

c語言交換兩個數的值

c語言交換兩個數的值

#程式中有兩個數a,b,其中a =4,b=5,現在希望交換兩個數的值,使得a=5,b=4.

推薦課程:C語言教學

方法1: 使用一個臨時變數來保存,這應該也是大家最容易想到的方法

參考程式碼:

#include <stdio.h>
int main()
{
    int a = 4;
    int b = 5;
    int nTemp;
    printf("交换前a,b的值为:\n");
    printf("a=%d\n", a);
    printf("b=%d\n", b);
    printf("\n");
    nTemp = a;
    a = b;
    b = nTemp;
    printf("----------------------------------我是分割线------------------------------------\n");
    printf("交换前a,b的值为:\n");
    printf("a=%d\n", a);
    printf("b=%d\n", b);
    return 0;
}
登入後複製

運行結果: 

c語言交換兩個數的值

方法2:使用加減法來進行交換,這個方法其實就是先把a b的結果暫時先保存在變數a中,然後經過這改變後的a和原始的b進行減法就可以得到交換後的b,但是這個方法有一個缺陷,就是a和b都是int型,a b的結果可以越界。

參考程式碼:

#include <stdio.h>
int main()
{
    int a = 4;
    int b = 5;
    printf("交换前a,b的值为:\n");
    printf("a=%d\n", a);
    printf("b=%d\n", b);
    printf("\n");
    a = a + b;
    b = a - b;
    a = a - b;
    printf("----------------------------------我是分割线------------------------------------\n");
    printf("交换前a,b的值为:\n");
    printf("a=%d\n", a);
    printf("b=%d\n", b);
    return 0;
}
登入後複製

執行結果: 

c語言交換兩個數的值

#方法3:使用乘除法來進行交換,這種方法和方法2類似,只是用a*b代替a b放在a中暫存,後面思路一樣,這種方法有著和方法2一樣的缺陷,就是越界問題,而且更加容易越界。

參考程式碼:

#include <stdio.h>
int main()
{
    int a = 4;
    int b = 5;
    printf("交换前a,b的值为:\n");
    printf("a=%d\n", a);
    printf("b=%d\n", b);
    printf("\n");
    a = a * b;
    b = a / b;
    a = a / b;
    printf("----------------------------------我是分割线------------------------------------\n");
    printf("交换前a,b的值为:\n");
    printf("a=%d\n", a);
    printf("b=%d\n", b);
    return 0;
}
登入後複製

方法4:使用異或的方法來進行交換,這種方法不存在先前越界的缺陷,是一種很完美的方法,這種方法主要利用了異或的特性a^b的值先保存到a,因為a^b^b=a所以可以順利完成交換。

參考程式碼:

#include <stdio.h>
int main()
{
    int a = 4;
    int b = 5;
    printf("交换前a,b的值为:\n");
    printf("a=%d\n", a);
    printf("b=%d\n", b);
    printf("\n");
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
    printf("----------------------------------我是分割线------------------------------------\n");
    printf("交换前a,b的值为:\n");
    printf("a=%d\n", a);
    printf("b=%d\n", b);
    return 0;
}
登入後複製

方法5:使用移位的方法,把原來的int型別的a,把a的值分割成高16位和低16位,相當於多了16位的暫存空間可以周轉,但是此方法的缺陷也顯而易見,就是如果被賦值的a或者b超過了16位,這種方法就會發生錯誤。

參考程式碼:

#include <stdio.h>
int main()
{
    int a = 32123;
    int b = 12345;
    printf("交换前a,b的值为:\n");
    printf("a=%d\n", a);
    printf("b=%d\n", b);
    printf("\n");
    a <<= 16;
    a |= b;
    b = a >> 16;
    a = a & 0xffff;
    printf("----------------------------------我是分割线------------------------------------\n");
    printf("交换前a,b的值为:\n");
    printf("a=%d\n", a);
    printf("b=%d\n", b);
    return 0;
}
登入後複製

執行結果: 

c語言交換兩個數的值

#

以上是c語言交換兩個數的值的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
c
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板