(注:本文一部分图片来源于网络,如有侵权请联系我,我将在第一时间移除相关插图)

本文目录

  • 1、两值交换是要实现什么?
  • 2、为什么说每一个编程人都必须掌握两值交换?
  • 3、两值交换:初学者常走的误区
  • 4、正确解法与代码示范
    • 4.1 正确算法的伪码模型
    • 4.2 程序语言实现
      • 4.2.1 两值交换:Java实现
      • 4.2.2 两值交换:C语言实现
    • 4.3 情景设定
  • 5、心得

1、两值交换是要实现什么?

我们考虑这样的情况。有两个变量a和b,其初始状态a=9,b=3。现欲将a和b的值互换,使a=3,b=9。这就是这篇文章的主题——两值交换所要实现的目标。

2、为什么说每一个编程人都必须掌握两值交换?

两值交换是针对数据的一种很基础、很基础的操作。编程人不会两值交换,就好比下围棋不会星小飞定式、数学家不会勾股定理一样。在后面即将学习的数据的排序、检索、增加、删除等管理操作里,两值交换是被使用得最频繁(没有之一)的基础子操作。
因此,学习两值交换,不仅有助于初学者正确认识与理解编程语言的赋值过程,而且也具备非常重要、非常基础性的实际应用意义。

3、两值交换:初学者常走的误区

有些对计算机的运行方式了解尚浅的初学者同志们拿到这个问题,会心里暗想:这还不简单?就你等于我、我等于你不就好了?于是拿起键盘,两秒钟便敲出了如下代码:

a = b;
b = a;

这看起来有点像马戏团表演杂技,表演者左右手分别拿了两个不同颜色的球,然后两手同时一抛,以迅雷不及掩耳之势,两个球就各自到了另一只手上。在上面这段代码中,仿佛a在接收了b的值之后,同时又保持了自己原来的值,然后b又很智能地接收了a的这个原来的值似的。

这在我们人类看来似乎是合情合理的——左手的东西抛给右手,右手的东西抛给左手,不就实现互换了?能有什么问题?
然而,我们把计算机想成是和我们一样具备高度智能了。我们没有看到,在我们的潜意识里,我们的大脑又给变量a划出了一个分区来,用以储存a原来的值。正因为有这个多出来的变量,我们才能知道在a被赋予新值之后,它原来的值是多少,也从而知道该把什么值甩给b。而计算机,甚至连金鱼的7秒记忆都没有,一旦a原来的值被覆盖抹去,它就会在一瞬间忘了a等于多少来着?基于计算机的这一特性,我们必须另外声明一个变量,用以储存a原来的值。

4、正确解法与代码示范

4.1 正确算法的伪码模型

现欲交换变量a与变量b的值,则其算法之伪码,当如是表达:

begin临时变量 ← 变量a变量a ← 变量b变量b ← 临时变量
end

4.2 程序语言实现

有些同志若不仅仅满足于伪码的,一定要实际编写并运行一下才安逸的,我这里也提供了Java和C语言两种源码,供同志们复制粘贴。

4.2.1 两值交换:Java实现

public class Swap{public static void main(String[] args){int a = 9, b = 3;int temp;  //注:互换辅助变量,类型不一定要为int。可根据实际需要,自行调整。变量名一般为temp,但可根据个人喜好进行调整,只要见名知义就好System.out.printf("互换前:a=%d, b=%d\n", a, b);temp = a;a = b;b = temp;System.out.printf("互换后:a=%d, b=%d\n", a, b);}
}

4.2.2 两值交换:C语言实现

#include <stdio.h>int main(void){int a = 9;int b = 3;int temp;printf("互换前:a=%d, b=%d", a, b);temp = a;a = b;b = temp;printf("互换后:a=%d, b=%d", a, b);
}

4.3 情景设定

我们考虑这样的情景。
暑假的某一天,小贝和他的女朋友小舒约会去爬山。由于天气炎热,两人需要将冰镇饮料装在各自的保温杯里。小贝喝肥宅快乐水,小舒喝珍珠奶茶。但由于他们俩的保温杯是情侣款,外表很相似,导致小贝在倒饮料的时候弄错了,误将自己的杯子里倒了奶茶,小舒的杯子里倒了快乐水。
小舒很生气,要求小贝对此负责,将两个保温杯里的饮料换回来。应该怎么办呢?幸好,小贝发现,自己还多带了一个空碗出来。
于是他:

  1. 取出空碗
  2. 将小舒保温杯里的肥宅快乐水倒入空碗中
  3. 将自己保温杯里的奶茶倒入小舒的保温杯中
  4. 将碗里的肥宅快乐水倒入自己的保温杯中

如此,小贝就顺利地完成了两个保温杯饮料的互换。
是不是和程序世界中的两值互换很像?



5、心得

为提高分析程序执行流程的能力,编程初学者需要多加训练,培养计算机式的逻辑思维模式,才能更懂得如何驾驭CPU的心,让电脑乖乖听你的话。于此过程中,我们可能需要纠正一下自己惯用的人类思维,细心地去发掘一些被我们的大脑忽略掉、却实际存在的变量。
毕竟,计算机可不是天生就能理清什么是主要矛盾、什么是次要矛盾,从而选择性地执行命令、绕过冗余的代码,或者智能脑补应有却缺失的代码的。你每写一个语句,它就一定会忠实地、确切地执行,且只会执行你所写的语句。可别指望它能与你心有灵犀一点通,读懂你的内心。

【基础算法】编程初学者入门必须掌握的算法——两值交换相关推荐

  1. JavaScript_牛客网_编程初学者入门训练(21-30题解)

    牛客网编程初学者入门训练题解JavaScript版本 编程初学者入门训练第21-30题解答(js) 22.你能活多少秒 25.计算体重指数 26.计算三角形的周长和面积 27.计算球体体积 28.大小 ...

  2. java编程题身高排队_编程初学者入门4_从键盘输入5个人的身高(米),求他们的平均身...

    编程初学者入门4_从键盘输入5个人的身高(米),求他们的平均身 编程初学者入门4_从键盘输入5个人的身高(米),求他们的平均身高(米).(C的没什么问题,试着用Java写一下,Java的Scanner ...

  3. 区块链编程初学者入门指南

    我有很多问题需要了解区块链Blockchain的工作原理.重要的是"我如何在其上构建应用程序dapp?".花了几个星期的时间挖掘,阅读和试验才最终了解.我找不到简短而全面的指南.现 ...

  4. 牛客网 编程初学者入门训练 BC133 KiKi说祝福语

    题目来源:牛客网 编程初学者入门训练 BC133 KiKi说祝福语 import java.util.Scanner; public class Main {public static void ma ...

  5. JavaScript_牛客网_编程初学者入门训练(131-140题解)

    牛客网编程初学者入门训练题解JavaScript版本 编程初学者入门训练第131-140题解答(js) 131.KiKi学程序设计基础 132.KiKi算期末成绩 133.KiKi说祝福语 134.K ...

  6. 电脑编程自学(零基础自学编程怎么入门)

    电脑编程自学入手:确定编程学习的方向.编程语言有多种:php,C++,C,C#,JAVA,Python等,每种语言都有不同的优缺点,可以根据自己的兴趣方向选择一门编程语言作为自己的学习目标. 基础阶段 ...

  7. 牛客网 编程初学者入门训练 BC37 网购 Java

    题目来源:牛客网 编程初学者入门训练 BC37 网购 import java.util.Scanner; public class Main {public static void main(Stri ...

  8. 牛客网 编程初学者入门训练 BC3 有容乃大 Java

    题目来源:牛客网 编程初学者入门训练 BC3 有容乃大 public class Main {public static void main(String[] args) {System.out.pr ...

  9. 编程初学者入门训练-基础语法(15题|C语言)

    文章目录 简单输出 BC1 Hello Nowcoder BC2 小飞机 基本类型 BC3 牛牛学说话之-整数 BC4 牛牛学说话之-浮点数 BC5 牛牛学说话之-字符 BC6 牛牛的第二个整数 BC ...

最新文章

  1. 专题 4 通用函数库之调试功能封装
  2. 基于.NET的图表控件解决方案
  3. vue-cli 官方模板webpack-simple的npm run dev 与npm run bulid的一些问题
  4. linux的mysql修改用户密码与忘记密码的方法
  5. android tls1.2用法,如何添加特定TLSv1.2工作CipherSuits与OkHttp支持 - Android 4.4的奇巧(API 19)...
  6. gitlab 构建tag_Gitlab详细操作
  7. aop在项目中的实际运用_【消防验收】防火玻璃在实际运用中的四大关键问题
  8. 细丝极恐的华为251事件
  9. java 堆排序方式_幾種排序方式的java實現(02:希爾排序,歸並排序,堆排序)
  10. 离开载具_迷你世界 自制火箭试飞成功 飞行载具不负众望
  11. 电脑计算机内存不够怎么办,电脑内存不足怎么办 电脑内存不足怎么解决
  12. 小狼程序员:工作遐想
  13. 邮件策略在域树中的实战应用:Exchange2003系列之十
  14. 开发工具 之 PowerDesigner
  15. 选修课网上考试论述题不能复制粘贴的办法
  16. C语言#include<stdio.h>什么意思?
  17. 个税系统代理服务器参数是什么,个税系统网络参数设置服务器地址
  18. 彻底解决乱码问题(一):为何会出现乱码
  19. mysql的right函数_MySQL数据库中系统函数right功能简介
  20. 未知USB设备(设备描述符请求失败)解决方法之一

热门文章

  1. 立体匹配经典算法:PatchMatchStereo
  2. JTAG、JLINK、ULINK、ST-LINK的区别
  3. android高德地图获取海拔_高德导航地图能显示海拔高度吗
  4. 京东追赶拼多多的焦虑
  5. RTX3080ti比2080ti强多少
  6. Android佳博网络打印机例子
  7. 翔龙家庭记帐本 v1.63 下载
  8. 微软雅黑console_在 Win10 命令行使用 Consolas + 微软雅黑
  9. 基于C++的网盘系统项目开发教程
  10. 虹科PagerDuty为Brightcove提供视频解决方案轻松应对三大难题