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 的值。

表 1:代码清单 1 的程序执行过程中变量值的变化情况
顺序 处理 变量 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 所示。

表 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:利用临时变量正确交换变量的值的算法