不使用变量交换两个数字
在许多情况下,程序员需要交换两个变量的值。在这里,我们将学习如何交换两个整数变量的值,这可能导致交换任何类型的值。变量之间的值可以通过两种方式交换 −
- 借助第三个(临时)变量
- 不使用任何临时变量
我们已经学习了第一种方法。在这里我们将学习第二种方法。虽然它看起来像魔术,但它只是一个小技巧。假设我们现在有两个数字 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