不使用变量交换两个数字

在许多情况下,程序员需要交换两个变量的值。在这里,我们将学习如何交换两个整数变量的值,这可能导致交换任何类型的值。变量之间的值可以通过两种方式交换 −

  • 借助第三个(临时)变量
  • 不使用任何临时变量

我们已经学习了第一种方法。在这里我们将学习第二种方法。虽然它看起来像魔术,但它只是一个小技巧。假设我们现在有两个数字 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。

  • 结论 −值被交换。

算法

现在我们将以逐步算法的方式定义上述程序 −

开始
Var1,Var2
步骤 1 → 将 Var1 和 Var2 相加并存储到 Var1
步骤 2 → 从 Var1 中减去 Var2 并存储到 Var2
步骤 3 → 从 Var1 中减去 Var2 并存储到 Var1
停止

伪代码

从上述算法中,我们可以为该程序绘制伪代码 −

procedure swap(a, b)

    a ← a + b // a 保存两者之和
    b ← a - b // b 现在保存 a 的值
    a ← a - b // a 现在保存 b 的值

end procedure

实现

上述算法的 C 实现应如下所示 −

#include <stdio.h>

int main() {
   int a, b;

   a = 11;
   b = 99;

   printf("Values before swapping - 
 a = %d, b = %d 

", a, b);

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

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

输出

此程序的输出应为 −

Values before swapping -
 a = 11, b = 99                                         
 
Values after swapping -
 a = 99, b = 11

simple_programs_in_c.html