关注

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完全覆盖,此时ij的值均为5。后续执行j = i时,只是将i的当前值5再次赋给j,最终两个变量的值完全相同,无法实现互换。

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

1. 原理类比

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

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

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

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

操作流程:

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

  2. 将B中的液体倒入A(将j的值赋给i

  3. 将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

代码逐行解析

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

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

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

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

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

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

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

四、关键注意事项

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

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

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

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

参考出处

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

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

转载自CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/weixin_57913829/article/details/162075899

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--