Learn-c-by-examples-swapping-two-numbers-without-using-variable

提供:Dev Guides
移動先:案内検索

変数なしで2つの数値を交換する

多くの場合、プログラマは2つの変数の値を交換する必要があります。 ここでは、2つの整数変数の値を交換する方法を学習します。これにより、任意のタイプの値の交換につながる可能性があります。 変数間の値は2つの方法で交換することができます-

  • 3番目の(temp)変数の助けを借りて
  • 一時変数を使用しない

リンク:/learn_c_by_examples/swapping_two_numbers_using_variable [最初の方法]はすでに学習しました。 ここでは、2番目の方法を学習します。 それは魔法のように見えますが、それはほんの小さなトリックです。 今、aとbにそれぞれ2つの数値1と2が格納されていると想像してください-

  • aとb(1 + 2)を追加してaに保存すると、aは3になり、bは2のままです。
  • ここで、a(3)の新しい値からb(2)を減算し、bに格納すると、aは3のままで、bは1になります。 1はaによって以前に保持されていたことに注意してください。
  • ここで、a(3)から新しい値(1)を持つbを減算し、それをb(a = 3-1)に格納し、aが以前bで保持していた値2を保持します。
  • 結論-値は交換されます。

アルゴリズム

ここで、上記の手順を段階的なアルゴリズムの方法で定義します-

START
   Var1, Var2
   Step 1 → Add Var1 and Var2 and store to Var1
   Step 2 → Subtract Var2 from Var1 and store to Var2
   Step 3 → Subtract Var2 from Var1 and store to Var1
STOP

疑似コード

上記のアルゴリズムから、このプログラムの擬似コードを描くことができます-

procedure swap(a, b)

   a ← a + b   //a holds the sum of both
   b ← a - b   //b now holds the value of a
   a ← a - b   //a now holds value of b

end procedure

実装

上記のアルゴリズムのC実装はこのように見えるはずです-

#include <stdio.h>

int main() {
   int a, b;

   a = 11;
   b = 99;

   printf("Values before swapping - \n a = %d, b = %d \n\n", a, b);

   a = a + b; //( 11 + 99 = 110)
   b = a - b; //( 110 - 99 = 11)
   a = a - b; //( 110 - 11 = 99)

   printf("Values after swapping - \n a = %d, b = %d \n", a, b);
}

出力

このプログラムの出力は次のようになります-

Values before swapping -
 a = 11, b = 99

Values after swapping -
 a = 99, b = 11