- 學習 C 示例時間
- 透過示例學習 C - 主頁
- C 示例 - 簡單的程式
- C 示例 - 迴圈/迭代
- C 示例 - 模式
- C 示例 - 陣列
- C 示例 - 字串
- C 示例 - 數學
- C 示例 - 連結串列
- C 程式設計實用資源
- 透過示例學習 C - 快速指南
- 透過示例學習 C - 資源
- 透過示例學習 C - 討論
無需變數交換兩個數字
在許多情況下,程式設計師需要交換兩個變數的值。在這裡,我們將學習如何交換兩個整數變數的值,這可能會導致交換任何型別的變數。變數之間值可以透過兩種方式交換 -
- 藉助第三個(臨時)變數
- 不使用任何臨時變數
我們已經學到了 第一種方法。在這裡,我們將學習第二種方法。雖然它看起來像一個魔法,但它只是一個小的訣竅。想象一下我們有兩個數字 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
廣告