单元五 · 把数据排列有序

第16课 比较交换找最值

任务场景
任务场景:比较交换找最值

一、学习目标

  • 了解在一组无序数中找出最大数的基本步骤,并能辨认其中的循环操作。
  • 分析、描述找出最大数的算法,体验用程序验证算法的一般过程。

二、情境导入

日常生活中,我们常常遇到找出最大数或最小数的问题,如找出身高最高的人、找出直径最大的水果、找出某月气温最高的一天、找出同款价格最低的商品等。

想一想:你还知道哪些与「最值」有关的事情?

三、核心讲解

本课学习路径:

1描述找出最大数的算法
2验证找出最大数的算法

1.描述找出最大数的算法

桌上有 5 个信封,编号分别为 1、2、3、4、5,每个信封里装有一张卡片,卡片上写着一个大于 0 的数,请找出其中的最大数。

活动规则:每次只能打开一个信封,查看卡片上的数后把卡片放回原信封内,才能继续打开另外一个信封。

活动要求:以小组合作探究的方式,找出解决问题的算法,并描述算法的基本步骤。

  1. 准备一张新卡片 A 卡,用来记录查找过程中的最大数。
  2. 打开第一个信封,查看卡片上的数并记录在 A 卡上。
  3. 打开第二个信封,查看卡片上的数并与 A 卡上的数比较:若更大则更新 A 卡,否则不更新。
  4. 用同样的方法,依次打开第三、四、五个信封,比较并决定是否更新 A 卡。
  5. 最后,A 卡上的数就是最大数。

从第 3 步开始就是重复操作。如果首先在 A 卡上记录 0,第 2 步就可以是重复操作,可以构建循环结构来描述算法。算法涉及搜索、比较、交换等操作。

想一想:找出最大数并记录所在的信封,应该如何改进算法?在寻找最大数的过程中,一共要循环多少次?如果是 5000 个数呢?

流程图:比较交换找最大值

开始输入若干个数设 max 为第一个数依次与 max 比较并更新输出 max结束

2.验证找出最大数的算法

用列表保存一串数(本课新语法),再循环比较找最大值;算法见流程图。

列表下标从 0 开始。循环与分支语法已学过,载入练习即可。

程序进行了 4 次循环,比活动中少循环一次:活动中先在 A 卡上记录 0 再比较,而程序先把第一个数存入 a,再从第二个数开始比较。

本课新语法与图形块

本课首次出现:列表。找最值算法见流程图;循环与分支已在前面课讲过。

语法图形块说明
box = [24, 91, 42]
创建列表
一串数据;下标从 0 开始

弄清以上要点后,再进入下方 Python Online,用循环验证找最大数算法。载入后对照流程图与本课列表积木。

四、动手体验 · Python 3 Online 编程

五年级 · 找最值:比较交换找最大数。

五、课堂总结

  • 在无序数中找出最值的算法,在生活中有很多应用案例,只要细心观察,就会发现它们的存在和所起的作用。
  • 寻找最值的算法主要采用了记录、比较、交换以及循环判断等操作,这也是对数据进行比较运算的基本方法。

六、拓展提升

  • 随意列举一些无序的数,要从中找出最小数,应该如何操作?尝试用程序验证。

测评

选出后点「检查」。答错会显示简短说明。

  1. 在一组无序数中找最大数,基本思路是?

  2. 信封找最大数活动中,哪部分体现了循环操作?

  3. Python 列表 box = [24, 91, 42] 中,box[0] 表示?

本节小结

找最大数靠记录、比较和循环更新;生活中找最高、最大、最低都可用类似算法。程序用列表和 while 循环可验证这一算法。