無需變數交換兩個數字



在許多情況下,程式設計師需要交換兩個變數的值。在這裡,我們將學習如何交換兩個整數變數的值,這可能會導致交換任何型別的變數。變數之間值可以透過兩種方式交換 -

  • 藉助第三個(臨時)變數
  • 不使用任何臨時變數

我們已經學到了 第一種方法。在這裡,我們將學習第二種方法。雖然它看起來像一個魔法,但它只是一個小的訣竅。想象一下我們有兩個數字 1 和 2 分別儲存在 a 和 b 中 -

  • 如果我們新增 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
simple_programs_in_c.htm
廣告
© . All rights reserved.