有两个整型变量 A 和 B,A 中存储的值是 18,B 中存储的值是 10,编写程序交换变量 A 和 B 的值。
代码清单 1:交换变量 A 和 B 的值(错误代码)
#include <stdio.h>
int main( )
{
int A=18,B=10;
A=B;
B=A;
printf("A=%d,B=%d",A,B);
system("pause");
return 0;
}
当把变量 B 代入变量 A 后,A 中原来的值 18 就消失了
上面的程序代码的执行步骤如下:
顺序 | 处理 | 变量 A 的值 | 变量 B 的值 |
---|---|---|---|
步骤 1 | 变量初始化 A=18,B=10 | 18 | 10 |
步骤 2 | A=B | 10 | 10 |
步骤 3 | B=A | 10 | 10 |
步骤 4 | 输出 A 和 B 的值 | 10 | 10 |
从表 1 可以看出,步骤 2 中当把变量 B 代入变量 A 后,A 中原来的值 18 就消失了,此时 A 的值为 10,步骤 3 中再把 A 代入 B 以后,B 的值也为 10。因而这段代码并没有实现变量 A 和 B 的值的交换,其算法描述以及执行过程如图 1 所示。
代码清单 2:利用临时变量交换变量 A 和 B 的值(正确代码)
#include <stdio.h>
int main( )
{
int A=18,B=10;
int C;
C=A;
A=B;
B=C;
printf("A=%d,B=%d",A,B);
system("pause");
return 0;
}
运行结果为:
A=10,B=18
上面程序代码的执行步骤如下:
表 2 给出了代码清单 2 的程序执行过程中变量值的变化情况。该程序的算法描述以及执行过程如图 2 所示。
顺序 | 处理 | 变量 A 的值 | 变量 B 的值 | 变量 C 的值 |
---|---|---|---|---|
步骤 1 | 变量初始化 A=18,B=10 | 18 | 10 | / |
步骤 2 | 定义变量 C | 18 | 10 | 空 |
步骤 3 | C=A | 18 | 10 | 18 |
步骤 4 | A=B | 10 | 10 | 18 |
步骤 5 | B=C | 10 | 18 | 18 |
步骤 6 | 输出 A 和 B 的值 | 10 | 18 | 18 |