无需变量交换两个数字



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

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

我们已经学到了 第一种方法。在这里,我们将学习第二种方法。虽然它看起来像一个魔法,但它只是一个小的诀窍。想象一下我们有两个数字 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
广告