C语言变量 -C语言交换两个变量的值
有两个整型变量 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 就消失了
上面的程序代码的执行步骤如下:
步骤 1:定义变量 A 和 B,并分别代入初始值 18 和 10(变量初始化);
步骤 2:把变量 B 的值代入变量 A;
步骤 3:把变量 A 的值代入变量 B;
步骤 4:屏幕打印输出变量 A 和 B 的值。
| 顺序 | 处理 | 变量 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 所示。

图 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
上面程序代码的执行步骤如下:
步骤 1:定义变量 A 和 B,并分别代入初始值 18 和 10(变量初始化);
步骤 2:定义临时变量 C;
步骤 3:把变量 A 的值代入变量 C;
步骤 4:把变量 B 的值代入变量 A;
步骤 5:把变量 C 的值代入变量 B;
步骤 6:屏幕打印输出变量 A 和 B 的值。
表 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 |

图 2:利用临时变量正确交换变量的值的算法