欢迎光临
我们一直在努力

C语言学习笔记 - 58.流程控制12 - if语句应用1:两个变量值互换

一、错误的变量互换方式及原理分析

1. 错误代码示例

初学者常尝试通过连续两次赋值实现变量互换,但该方式存在根本性逻辑错误:

#include <stdio.h>
int main()
{
int i = 3, j = 5;
i = j; // 将j的值赋给i
j = i; // 将此时i的值赋给j
printf("i=%d, j=%d\\n", i, j);
return 0;
}

运行结果:i=5, j=5

2. 错误原因深度解析

C语言中赋值语句具有覆盖特性:执行i = j时,变量i中原有的值3会被j的值5完全覆盖,此时i和j的值均为5。后续执行j = i时,只是将i的当前值5再次赋给j,最终两个变量的值完全相同,无法实现互换。

二、正确的变量互换方法:引入临时变量

1. 原理类比

变量互换的逻辑可类比交换两个杯子中的液体:

  • 杯子A(变量i):盛放液体A(值3)

  • 杯子B(变量j):盛放液体B(值5)

  • 空杯子C(临时变量t):作为中转容器

操作流程:

  • 将A中的液体倒入C(保存i的原始值)

  • 将B中的液体倒入A(将j的值赋给i)

  • 将C中的液体倒入B(将保存的i原始值赋给j)

  • 2. 标准互换三步法

    t = i; // 第一步:保存i的原始值到临时变量t
    i = j; // 第二步:将j的值赋给i,覆盖i的原始值
    j = t; // 第三步:将临时变量t中保存的i原始值赋给j

    核心规则:三步顺序不可颠倒,必须先保存原始值再进行覆盖操作。

    三、完整代码实现与逐行解析

    #include <stdio.h> // 引入标准输入输出头文件,提供printf函数支持

    int main()
    {
    int i = 3, j = 5; // 定义两个整型变量并初始化
    int t; // 定义临时变量t(temp的缩写,是临时变量的通用命名)

    printf("互换前:i=%d, j=%d\\n", i, j);

    // 标准变量互换三步法
    t = i;
    i = j;
    j = t;

    printf("互换后:i=%d, j=%d\\n", i, j);
    return 0;
    }

    运行结果:

    互换前:i=3, j=5
    互换后:i=5, j=3

    代码逐行解析

  • #include <stdio.h>:包含标准输入输出库,程序中使用printf函数必须引入该头文件。

  • int i = 3, j = 5;:定义两个整型变量i和j,分别初始化为3和5。

  • int t;:定义临时变量t,用于存储i的原始值,避免被覆盖后丢失。

  • t = i;:将i的值3保存到t中,此时t=3,i=3,j=5。

  • i = j;:将j的值5赋给i,此时i=5,t=3,j=5。

  • j = t;:将t中保存的原始值3赋给j,此时i=5,j=3,完成互换。

  • printf语句:分别输出互换前后的变量值,验证结果正确性。

  • 四、关键注意事项

  • 临时变量命名规范:临时变量通常命名为t或temp,这是行业通用习惯,可显著提高代码可读性。

  • 三步顺序不可变:若颠倒顺序(如先执行i = j再执行t = i),会导致i的原始值丢失,互换失败。

  • 通用性:该方法适用于C语言所有基本数据类型(整型、浮点型、字符型等),只需修改变量的类型声明即可。

  • 强制记忆要求:变量互换是编程中最基础、最常用的操作,建议将T=I, I=J, J=T作为标准公式背诵,形成肌肉记忆。

  • 参考出处

  • 《C程序设计(第五版)谭浩强》第4章 4.2.1 用if语句处理选择结构举例(例4.2 两个数按从小到大输出,使用了变量互换方法)

  • 郝斌-C语言自学入门教程 第5章 流程控制 第6节 if语句应用举例

  • 赞(0)
    未经允许不得转载:171主机测评 » C语言学习笔记 - 58.流程控制12 - if语句应用1:两个变量值互换
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址