发展计算思维 突破教学难点
——计算思维在选择排序算法教学中的体现
上海市南洋中学 陈敏
计算思维是高中信息技术学科四个核心素养之一,是指个体运用计算科学领域的思维方法,在形成问题解决方案的过程中产生的一系列思维活动。本课例从选择排序算法教学中,就如何培养学生计算思维能力,如何突破教学中的难点进行探讨与实践。
一、学生理解选择排序时遭遇的思维瓶颈
选择排序属于《高中信息科技》(第二册)中2.3节排序的内容。依照教学设计,我将选择排序分成了两个课时完成。在第一课时教学中,解决了数组中两个变量值的交换问题和用打擂法求最值问题,介绍了VB中的常用内置函数,并且让学生体验自定义函数min(),实现在数组中找到最小数所在的位置;在第二课时教学中,学生根据选择排序的算法思想,绘制流程图,推测计算机的执行过程,并尝试运用VB语言完成部分程序设计。
学生在学习选择排序过程中,对于理解选择排序的算法思想,并将此算法用流程图进行描述,以及用程序设计语言实现算法流程图,都存在一定程度的困难。
本课例主要就第二课时教学中通过发展学生计算思维,突破教学中的难点进行归纳与总结。
二、通过排队游戏理解选择排序算法思想
课程导入:生活中会碰到很多需要排序的操作,如网上购物、成绩排序、文件进行排序等。问题:网页或者软件背后,所运行的程序是如何实现排序操作的?实现排序的算法有很多,今天同学们将学习选择排序的算法。首先通过一个游戏来了解一下选择排序。
排队游戏:四位同学演示,依据选择排序思想实现四人身高从矮到高排序(排队游戏规则、变量说明,如图1所示)。
图1 教师在PPT上演示游戏规则、变量说明
学生在三轮排序演示结束后,师生间进行了如下的对话:
【情境再现】
1. 第一轮排序
学生在第一轮排序演示结束后
师:让我们一起来归纳一下第一轮排序的过程,在第一轮加工过程中,在什么范围中找到最小数的位置k?(教师在白板上贴纸演示,如图2所示)
图2 教师在白板上贴纸演示
生:在d(1)-d(4)中找最小数的位置k。
师:接下来做了什么事情?
生:交换。
师:交换了哪两个数?提示:擂主是谁?
生:d(1)和d(k)做了交换。
(教师在白板上贴纸演示,如图3所示)
图3 教师在白板上演示的第二步贴纸
师:这样就完成了第一轮排序。
2. 第二轮排序
学生在第二轮排序演示结束后
师:下面我们将第二轮排序进行归纳。在第二轮加工中,做了两件事,第一件事是在什么?(教师在白板上贴纸演示,如图4所示)
图4 教师在白板上贴纸演示
生:在d(2)-d(4)中找最小数的位置k。
师:第二件事情是什么?
生:交换d(2)和d(k)的值。
(教师在白板上贴纸演示,如图5所示)
图5 教师在白板上贴纸演示
3. 第三轮排序
学生在第三轮排序演示结束后
师:接下来我们将第三轮排序进行归纳。在第三轮加工中,做了哪两件事?(教师在白板上贴纸演示,如图6所示)
图6 教师在白板上贴纸演示
生:在d(3)-d(4)中找最小数的位置k。
师:第二件事是什么?
生:交换d(3)和d(k)的值。
(教师在白板上贴纸演示,如图7所示)
图7 教师在白板上贴纸演示
【课例分析】
发展学生计算思维:针对较复杂的任务,能运用形式化方法描述问题,并采用模块化设计解决问题的方案。[1]
由于选择排序算法较复杂,学生难以理解。在教学设计中,我将求最值问题和交换两个变量值的问题,放在第一课时中进行解决。因此在第二课时中,归纳出每一轮排序过程就是在完成“在d(i)-d(4)中找最小数的位置k”和“交换d(i)和d(k)的值”这两件事,将这两个问题进行了模块化的设计,以此帮助学生更好地理解选择排序的算法思想。
三、通过画流程图描述选择排序算法思想
【情境再现】
学生完成身高排序游戏之后
师:重复操作的语句,我们可以使用哪种更加简洁的算法结构来实现?
生:循环结构。
师:我把贴在白板上归纳出来的三轮加工的关键信息用表格进行提炼:i的值为1、2、3,分别表示了三轮加工;接下来每一轮加工过程中完成的两件事情是“在d(i)-d(4)中寻找最小数的位置”和“交换d(i)和d(k)的值”。问题:为了实现三轮加工,需要循环几次才能做到?
(教师在PPT上显示循环结构的空白流程图,将学生回答的语句写在流程图相应的空格中,如图8所示)
图8 教师演示PPT
生:循环3次。
师:如何用现成的变量,做到3次循环?
生:用i变量。
师:怎么使用i变量实现3次循环?i变量初值如何设定?
生:i变量初值等于1。
师:条件怎样写?
生:i小于等于3。
师:在循环体中必须改变i变量的值,这条语句怎么写?
生:i=i+1。
师:这样就能做到3次循环实现3轮加工。每次循环中,做了两件事:第一件事是在某个范围中找最小数的位置赋值给变量k,第二件事是交换d(i)和d(k)的值。
(教师演示PPT ,如图9所示)
图9 教师演示PPT
师:刚才完成了部分流程图,现在PPT上显示的是相对完整的流程图,有赋值和输出语句。……请同学们将老师下发电子版学案上的流程图填写完整。
(电子版学案上的所需完成的流程图,如图10所示)
图10 电子版学案
【课例分析】
发展学生计算思维:针对给定的任务,能够识别主要特征,并用流程图画出完成任务的关键过程。[2]
在学生理解选择排序算法思想之后,接下来的任务是实现将此算法思想转化为流程图表示。为了帮助学生完成这个任务,我提炼了排序中的关键信息放在表格中,由此学生就能识别出循环变量的初值与终值,继而完成循环条件和循环语句的设定,这样就可以搭建出流程图中循环结构的基本框架。接下来,通过引导学生理解流程图中两个模块,让学生将选择排序的算法流程图中剩余的部分填写完整。
四、通过编写程序实现选择排序算法思想
【情境再现】
学生完成流程图之后
师:在发给大家的VB文件中,老师已经把部分的代码写好了,包含自定义函数min()代码的编写。前一节课中我们已经学会如何在循环语句中调用min()函数。接下来请大家将代码编写完整,最后实现的效果是将所给的4个数进行升序排序。
(教师事先编写的VB代码,如图11所示)
图11 教师事先编写的VB代码
学生活动5分钟后
师:已经有部分同学完成了代码的编写。让我们先来看36号同学的代码。他使用了Do While语句来实现循环,但是他在运行后发现没法得到正确的结果。请同学们帮助他修正代码。(同学编写的错误代码,如图12所示)
图12 同学编写的错误代码
学生一:不需要Print d(k)语句。
学生二:n<=4应该改成n<=3。
学生三:应该将n变量改为i变量,将n=1改为i=1,将n<=4改成i<=3,将n=n+1改成i=i+1。
师:请36号同学将代码做一下修改,再运行一下代码,看一下结果是否正确。
【课例分析】
发展学生计算思维:针对不同模块,设计合适的算法,利用编程语言实现各模块的功能;允许学生“犯错”,在“尝试→验证→修正”的“试错”过程中,发展学生的计算思维。[3]
学生能够用流程图描述出这个算法之后,就可以尝试使用VB程序设计语言将此算法进行实现。为了降低编写代码的难度,我事先将部分代码写在文件中,学生只需要完成选择排序最核心的代码,也就是用循环语句实现几轮加工,并在循环语句中调取min()函数和实现两个变量值的交换。但是实际在课堂中,还是存在部分同学代码出现错误,无法运行出正确结果。通过让其他同学帮助他找到错误的代码,并让他修正代码,最终该同学能够运行得到正确的结果。
五、算法教学中渗透计算思维的点滴感悟
在选择排序算法教学过程中,时时体现出对学生计算思维能力的培养。为了突破教学难点,我使用了模块化的设计思想,将每一轮排序过程中的“在d(i)-d(4)中寻找最小数”和“交换d(i)和d(k)的值”进行了模块化设计,使学生能较好地理解选择排序的算法思想。在用流程图描述算法的过程中,通过引导学生思考变量的变化规律,让学生较好完成流程图算法中的循环部分。在用程序语言实现算法的过程中,通过自定义函数的调用,让学生对模块化的程序设计有更加深刻的体会。课堂上,学生基本理解了选择排序的算法思想,并能用流程图描述算法,部分学生能够用VB程序语言实现算法。此外,从课后作业的反馈中,发现学生能够使用选择排序的方法对数据进行排序。课程结束,基本实现了本课的教学目标与任务。
本节课结束后,我对计算思维有了一点粗浅的感悟:计算思维本质上来说,是一系列思维活动,更多地是要靠学生自己的体验及感悟,教师只是起到引导的作用。因此,要给学生更多的“思考”空间。这也给作为教师的我们带来了更大的挑战:让学生在知识的学习过程中培养计算思维,在计算思维的发展中带来知识的迁移与创新,让学生的能力随着计算思维的提升而提高。
[1] 摘自《普通高中信息技术课程标准》(2017年版)P.69
[2] 摘自《普通高中信息技术课程标准》(2017年版)P.68
[3] 摘自《普通高中信息技术课程标准》(2017年版)P.48