1、1如何破解高中算法课教学难题一提起“算法与程序设计”(以下简称算法课),很多老师和学生立刻会说这是一门难教、难学的课程。其实,只是我们还没有找到更合适更有效的教法和学法而已。面对初学算法程序的学生,教学中难免会遇到这样或那样的问题和困难,只要我们有信心和耐心,不怕困难,积极探索,锲而不舍,一定会苦尽甘来,有所收获。随着信息技术教育的发展,算法这个核心将逐渐深入人心,传统而永恒。我们应该鼓励学生选修算法课,并以此推动自己钻研算法与程序设计的教学业务。算法课应该怎么上,这是广大信息技术老师十分关注和积极探索的课题。我经历了算法课教学,现在谈几点心得体会,以供大家参考。 一、以身试水,知其深浅 出现
2、难学难教现象,其中很重要原因是我们自己对一些概念的理解也比较模糊,难怪学生不清楚。例如,算法就是解法吗?对象的方法就是事件处理吗?面对学生的这些质疑,我们无法回避,首先自己要弄明白,然后去教育学生。就以求 S=1+2+3+99+100 的值为例: 高斯的解法: S=(1+100)+(2+99)+(3+98)+ (50+51) =101+101+101+101 =50101 2=5050 “高斯同学”的解法:S=1, S=S+2=3, S=S+3=6, S=S+99=4950, S=S=S+100=5050 很明显,高斯的解法优于其同学的解法,可是高斯的解法虽然简单,但每一步都不相同,并且让计算
3、机去做却不容易,而“高斯同学”的解法虽然麻烦,但每一步做的都是同一件事“累加”,并且这种重复的事情让计算机做起来却很简单。可见,算法与解法(想法)是有区别的,解法代表人的思路,算法代表机器的思路。这些概念教师自己必须首先要弄清楚才可以去教学生。 二、思维建模,举一反三 我们常会遇到这样的情况:在课堂上学生对例题的解法一听就懂,可课后或隔一段时间再练习同类型但情节稍有变化的题目时,一些学生就会感到束手无策,思维无法进入到原先的轨道。造成这种现象的原因很多,其中最主要原因是在学生头脑中没有建立起清晰的牢固的思维模式。庖丁之所以是宰牛高手,也是因为他一看见牛就是条条通道,这样宰割起来畅通无阻。所以,
4、我们很有必要指导和帮助学生从思维上建构模式,以便学生抓住关键。下面我就介绍几种方法: 1.提取关键词句。对于常用算法基本思想的理解和记忆,如果通过提3取关键词句的办法对课本上的叙述加以概括,学生就容易记住了。例如:枚举算法可概括为“一一列举、逐一验证”,解析算法可概括为“列出算式”,冒泡排序可概括为“逐个比较、逐步交换”,选择排序可概括为“选出最值、直接交换”,顺序查找可概括为“依次比对”,对分查找可概括为“取中间比较、缩一半范围”,递归算法可概括为“大事化小、小事化了” 。 2.建构程序模板。模板很常见,例如做 PPT 课件时,可以直接应用现成的幻灯片模板,在模板上修改,无需再重复设置背景、
5、格式、字体等修饰,提高了工作效率。借用“模板”一词,如果我们根据某一类程序的结构特征把通用部分保留,变化部分留白,这就成了“程序模板” 。有了程序模板,学生就容易记住,在程序设计时可以直接套用,以提高编程效率。 例如:For 语句模板,我们只需关心具体的初值、终值、步长,不必关心格式的通用部分。 又如:累加、累乘的模板,是在 For 模板基础上修改,添加循环体的通式,我们只需关心循环体通式的变项部分。 3.提炼核心结构。对于冒泡排序、选择排序和对分查找三种算法,这是高中算法课的重难点,也是学生感到最怕的知识点。如果我们根据算法的特征提炼出核心的一般结构,学生就容易理解和记忆了,也能轻松地转化为
6、代码,今后可以视作模式来套用,以提高读程编程的效率。就以冒泡4排序(小大)算法为例,对其思想方法和程序特征进行概括提炼,可得程序的核心的结构模式: 有了这样的程序模式,解题时,学生只需先判断算法的类型,或者通过模式比对,如果属于冒泡排序,就直接套用冒泡法的程序模式来读程序或写程序。 建模是我对算法课教学的思想主题。对于学生而言,初学算法与程序设计,更重要的是对已有解题模式的学习和应用,研究前人的思路模式,只有打好基础,才能想出更优秀的新模式来。有了模式建构与识别的眼光,一些学习问题就变得简单了。在算法课里,可以把各种常用算法的程序结构视作模式,把各种语句的格式结构视作模式,把程序段看成由顺序、
7、分支、循环三种基本模式的组合,把一些复杂的程序看成是若干个功能模式块的组合,把上机操作步骤看成“界面设计编写代码调试程序”模式,把某一类题型的解题方法看成模式。当然,模式思维方法也有局限性,易使学生产生思维定势,应加强一题多解、一题多变的发散思维训练来弥补不足。 三、降低起点,突出重点 算法课教学跟目前以 Office 软件为代表的创作使用教学有很大区别。软件的创作使用侧重于操作技术,而算法与程序设计侧重于思想方法,所以在教学方法上我们应该也有所变化和侧重。在新课改的背景下,我认为算法课教学应抓好以下两点: 首先,教学要面向大众。准备一堂课,首先要作好课堂定位,如果你设计的课堂过于高深,思维跨
8、度很大,这样你所给出的课堂面向的只是部分5学生,而不是全体学生,那么这是个不公平的课堂,因为你给他们的第一个台阶就不一样,如何引领他们向上攀登?在算法课教学中,有些老师常常引用信息学奥赛中的一些例子,这些例子闪烁着人类智慧的火花,对个别优秀学生是很适合,而对全体学生也许欠妥当了。对于初学算法程序的学生,他们的个体思维能力的差异很大,有些同学很容易理解计算机解决问题的思路,有些同学则显得比较困难,我们不能简单地解释成兴趣、基础等原因。所以,教学起点先稍低一些,例子先简单一些,要时刻提醒自己“简单的才是大众的” 。 其次,教学要突出过程。现今的算法与程序设计教学跟过去的程序语言教学有很大区别。例如
9、在“循环语句”教学时,以前通常按照教材上编排的“格式功能说明举例”模式教学,属于一种结论灌输式教学。当今课堂教学不仅仅要让学生知道一些知识结论,更重要的是要让学生理解一些概念是怎样形成的,一些原理是怎样得到的,一些方法是怎样想到的,要体现过程。在知识传授过程中,应该突出思想方法教学和能力培养。有一个“画 100 个同心圆”案例很值得我们借鉴。先不要直接告诉学生知识结论,而是给出一个任务让学生去做和想:“在屏幕中央画 1 个圆,在屏幕中央画 10 个同心圆,在屏幕中央画 100 个同心圆” 。隐含着令人深思的悬念:画 1 个圆,学生只需用一条画圆语句 Circle(320,240),30,1 即
10、可,画 10 个同心圆,一些有耐心的学生用 10 条画圆语句就完成了任务,画 100 个同心圆时,最有耐心的学生也不愿去写 100 条画圆语句了,已有的画圆方法虽然简单但用起来很繁琐,写了 100 条语句还会有画 10006个同心圆的问题呢?学生认知发生冲突。这时候引导学生找规律想办法,如果真的写出 100 条画圆语句,那么它们又有什么共同特点呢?能不能像数学中的通式一样,用一条画圆语句概括描述 100 条语句呢?最后让学生总结得出:Circle(320,240),R,1 语句,其中 R 代表半径。再引导学生得出“通过改变 R 的值,重复执行上面的语句,就可以画出 100 个同心圆”,这正是循环结构程序的思想。这样,新的概念就在学生的头脑中建立起来了,老师再给出循环语句的功能、格式、用法就成了很自然的事情。本案例强调新概念的形成过程,学生循着思维阶梯步步制胜,使学生感受到循环语句结构的解题优势,从而使学生对知识的认识更深刻。学生学到的不仅仅是新知识,更重要的是学会了解决问题的方法,知道何时何地去应用知识,培养了能力。 以上几点个人心得体会,是我对高中算法课教学的反思和实践经验,对大家提高算法课的教学效果和教学技巧有借鉴作用。让我们一起令“算法与程序设计”课程精彩起来,不再是难学难教的包袱。 (作者单位:浙江省宁海县正学中学) 责编 /齐鲁青