ホームページ  >  記事  >  バックエンド開発  >  2つの数値の値を交換するC言語

2つの数値の値を交換するC言語

angryTom
angryTomオリジナル
2019-10-23 13:17:3415481ブラウズ

2つの数値の値を交換するC言語

C言語は2つの数値の値を交換します

2つの数値a、bがありますプログラムでは、a =4,b=5 となっているので、a=5,b=4 となるように 2 つの数値の値を交換したいと考えています。

推奨コース: 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;
}

実行結果:

2つの数値の値を交換するC言語

方法 2: 加算と減算を使用して交換、この方法は実際には a b の結果を変数に一時的に保存します。元の b から a を減算すると、交換された 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;
}

実行結果:

2つの数値の値を交換するC言語

方法 3: 乗算と除算を使用して交換, この方法は方法 2 と似ていますが、a に一時的に格納される a と b の代わりに a*b が使用される点が異なります。以下の考え方は同じです。この方法には方法 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: XOR メソッドを使用して を交換します。このメソッドには以前の範囲外はありません。これは完璧な方法です. この方法は主に XOR 機能を利用して 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 を上位 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;
}

実行結果:

2つの数値の値を交換するC言語

以上が2つの数値の値を交換するC言語の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。