单元五 · 把数据排列有序
第16课 比较交换找最值

一、学习目标
- 了解在一组无序数中找出最大数的基本步骤,并能辨认其中的循环操作。
- 分析、描述找出最大数的算法,体验用程序验证算法的一般过程。
二、情境导入
日常生活中,我们常常遇到找出最大数或最小数的问题,如找出身高最高的人、找出直径最大的水果、找出某月气温最高的一天、找出同款价格最低的商品等。
想一想:你还知道哪些与「最值」有关的事情?
三、核心讲解
本课学习路径:
1.描述找出最大数的算法
桌上有 5 个信封,编号分别为 1、2、3、4、5,每个信封里装有一张卡片,卡片上写着一个大于 0 的数,请找出其中的最大数。
活动规则:每次只能打开一个信封,查看卡片上的数后把卡片放回原信封内,才能继续打开另外一个信封。
活动要求:以小组合作探究的方式,找出解决问题的算法,并描述算法的基本步骤。
- 准备一张新卡片 A 卡,用来记录查找过程中的最大数。
- 打开第一个信封,查看卡片上的数并记录在 A 卡上。
- 打开第二个信封,查看卡片上的数并与 A 卡上的数比较:若更大则更新 A 卡,否则不更新。
- 用同样的方法,依次打开第三、四、五个信封,比较并决定是否更新 A 卡。
- 最后,A 卡上的数就是最大数。
从第 3 步开始就是重复操作。如果首先在 A 卡上记录 0,第 2 步就可以是重复操作,可以构建循环结构来描述算法。算法涉及搜索、比较、交换等操作。
想一想:找出最大数并记录所在的信封,应该如何改进算法?在寻找最大数的过程中,一共要循环多少次?如果是 5000 个数呢?
流程图:比较交换找最大值
2.验证找出最大数的算法
用列表保存一串数(本课新语法),再循环比较找最大值;算法见流程图。
列表下标从 0 开始。循环与分支语法已学过,载入练习即可。
程序进行了 4 次循环,比活动中少循环一次:活动中先在 A 卡上记录 0 再比较,而程序先把第一个数存入 a,再从第二个数开始比较。
本课新语法与图形块
本课首次出现:列表。找最值算法见流程图;循环与分支已在前面课讲过。
| 语法 | 图形块 | 说明 |
|---|---|---|
box = [24, 91, 42] | ![]() | 一串数据;下标从 0 开始 |
弄清以上要点后,再进入下方 Python Online,用循环验证找最大数算法。载入后对照流程图与本课列表积木。
四、动手体验 · Python 3 Online 编程
五年级 · 找最值:比较交换找最大数。
正在载入 Python 3 Online
正在载入编程环境…
五、课堂总结
- 在无序数中找出最值的算法,在生活中有很多应用案例,只要细心观察,就会发现它们的存在和所起的作用。
- 寻找最值的算法主要采用了记录、比较、交换以及循环判断等操作,这也是对数据进行比较运算的基本方法。
六、拓展提升
- 随意列举一些无序的数,要从中找出最小数,应该如何操作?尝试用程序验证。
测评
选出后点「检查」。答错会显示简短说明。
在一组无序数中找最大数,基本思路是?
信封找最大数活动中,哪部分体现了循环操作?
Python 列表 box = [24, 91, 42] 中,box[0] 表示?
本节小结
找最大数靠记录、比较和循环更新;生活中找最高、最大、最低都可用类似算法。程序用列表和 while 循环可验证这一算法。
