基于C语言的排序算法在五年制高职课堂中的应用
2014-11-26欧阳丽娜
欧阳丽娜
(江苏联合职业技术学院镇江分院信息工程系,江苏镇江 212016)
计算机的本质是“程序的机器”,程序和指令是计算机系统中最基本的概念。进行程序设计必须以一种计算机语言为工具,否则,只能是纸上谈兵。作为当前大多数学校计算机专业入门级语言的C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点,既适合编写系统软件,又适合编写应用软件。C语言是计算机专业的必修课,也是程序开发的前导课。对于学习者而言,要进行程序设计,必须解决以下两个问题:
1)解决问题的思路和方法,即算法。
2)算法的实现,即用计算机语言编写程序,达到用计算机解决问题的目的。
算法被称为程序的灵魂。著名的计算机科学家沃思(Nikiklaus Wirth)提出一个公式,即
由此可见,算法在程序设计中的重要性。
排序算法中的冒泡排序和选择排序相对简单,有利于初学者循序渐进的学习。对于刚刚接触程序设计的学生来讲,从这两种算法开始是非常不错的选择。
1 教学对象
1)理论基础薄弱,在程序设计方面大多是零基础。C语言是在五年制高职计算机软件专业低年级开设的一门必修课,授课对象是初中毕业生。在此之前,这些学生大都没有接触过程序设计,甚至不知道什么是程序设计,这为教学工作带来了很大的阻力。
2)自信心强,又具有极强的好奇心与求知欲,喜欢运手操作,但抽象思维和自主学习能力相对薄弱,厌烦枯燥的文字讲解。在教学过程中,教师要尽量使用简单、直观的演示方式,使抽象的程序设计过程形象、生动起来。
3)层次不一,学习能力存在很大的差异。教师要根据学生的特点采用分层教学的方法,以满足不同学生的需求,并教会学生自主学习,突破零起点、高台阶的瓶颈。
2 依据内容确立目标
2.1 教学内容
数组[1]是C语言中重要的数据类型,通过数组可以进行数据的排序运算。排序算法是一种基本算法,而冒泡排序和选择排序是排序算法中的基础知识,学生接触算法也是从它们开始的。让学生熟练掌握这两种算法很有必要,可以为培养学生的程序设计能力打下良好的基础。
2.2 教学目标
教学目标是一种在教学活动之前预期的学生学习结果,即教师预先设定学生在完成某一课题的学习后应达到的标准。教学目标的确定是否全面、准确、具体、切合实际,对课堂教学至关重要。确定教学目标的依据是课程标准、教材和学情,三者缺一不可。在拟定教学目标的过程中,必须“隐”“显”兼顾,“近”“远”结合,使教学目标具有科学性、全面性、准确性和针对性。
根据课程标准、冒泡排序和选择排序的教学内容与特点,同时考虑到五年制高职学生的学情,确定教学目标:
1)理解冒泡排序和选择排序的基本原理,能够熟练应用冒泡排序算法进行运算,学会使用选择排序算法解决同样问题。
2)在理解程序设计基本方法的基础上,拓展其在现实中的应用,并通过程序设计,激发学生在预测基础上追求结果的成就感。
3 多种方法,创新教学
教学方法是多种多样的。每种方法都有其独特的作用和一定的适用范围。教学方法的选择受教学目标、教学内容、教师特点、学生的年龄特征和知识基础等因素的影响。在教学过程中,笔者以任务驱动教学法为主,结合使用情境导入、小组合作、分层教学的方法。其中小组合作教学法的关键在于分组,分组的前提条件是摸清学生目前的知识结构,按照组间同质、组内异质的原则进行分组[2]。
3.1 情境导入
皮亚杰曾说:“所有智力方面的工作者,都依赖于兴趣”。为了让学生对抽象的C语言产生学习兴趣,可以尝试将对新知识的探索融入游戏等生活情境中。通过游戏设疑,展示结果,分析程序结构,并结合动画演示,使抽象的原理变得具体形象,一定能取得事半功倍的效果。
例如,以排序游戏作为教学过程的开始。首先,宣布游戏规则,即冒泡排序的原理的实际运用。然后,让学生代表按照游戏规则对手中扑克牌进行排序,如升序。排序结束后,组织其他学生观察扑克牌的顺序变化。结果显示,扑克牌已经由乱序变为升序。在此设疑,为什么经过这样的过程会产生这样的结果呢?如果利用程序语言该怎样完成这一任务呢?学生知道游戏规则,但是不知道为什么要制定这种规则。学生在“只知其一,不知其二”的情况下进行游戏,在教师的提问中思考,充分激发了学习兴趣。
3.2 讲授新知
万丈高楼平地起,学生循序渐进地接受新知的过程是打牢基础的过程,是非常重要的环节。在观察整个排序过程后总结规律,得出冒泡排序的基本理念。由表及里,为深入理解后面的原理做好铺垫。接着,梳理过程,挑拣出关键步骤。然后,旧知新用,利用之前学习过的知识,根据关键步骤编写关键语句,意在帮助学生循序渐进地完成代码编写过程。趁热打铁,进行语句整合,利用程序语言完成排序任务。
3.3 认知提升
学生初步理解算法理念之后,层层递进,带领学生透过表象,探索原理,进一步提高他们对算法的认知程度。
1)设置疑问,递进思考。从元素位置、顺序变化、内外循环关系等方面引导学生展开组内讨论,初步理解冒泡排序原理。
2)分层教学,动画助学。学生根据自身情况借助动画演示理解程序过程。
3)要点总结,拎清特点。逐层深入,总结冒泡排序原理的特点,帮助学生进一步理解冒泡排序原理的结构。
4)填流程图,理清思路。通过动画演示,总结算法特点,组内讨论,补充流程图,帮助学生理清思路,了解程序结构。
5)探究实质,深入挖掘。学生进行小组讨论,深层次探讨算法实质。教师巡视并参与到讨论中,发现问题及时解决,共性问题集中解决。
6)程序动作,预测效果。让学生设计程序并演示程序片段、预测结果,培养学生由抽象向具体转换的能力。
3.4 发散思维
发散思维(Divergent Thinking),又称为扩散思维或求异思维,表现为思维视野广阔,呈现多维发散状,包括“一题多解”“一事多写”“一物多用”等方式[3]。
引导学生学习选择排序。具体过程,相对于同样的数列,给出不同的排序规则。学生根据新规则和选择排序的演示动画,初步自学选择排序,完成排序过程。通过观察、比较、讨论,帮助学生进一步理解选择排序的过程,为编写关键语句做好铺垫。最后,找出关键步骤,将原理转化为程序语言。同时,针对同一问题寻求多种解决方案,培养学生的发散思维能力。
3.5 对比讨论
对比教学是指在教学活动中将两个或两个以上的认识对象放在一定的条件下,按照同一标准进行对照、比较,从而确定认识对象属性的异同、作用的大小、性能的优劣、问题的难易或认识的正误深浅,以达到辨识、了解和把握认识对象之目的的一种方法。对比教学法是常用的教学方法之一,使用范围非常广。如利用动画演示分别使用冒泡排序和选择排序对同一组数列进行排序运算的过程,通过填写表格的形式对比出两种方法在算法和代码方面的区别,可以帮助学生深入理解两种算法的原理,并且通过比较两种排序方法的执行代码,加深对代码的理解和记忆。
3.6 拓展提升
学生的接受能力和理解能力有很大差异,可以进行分层教学,利用不同层次的习题巩固理论知识,加深学生对算法的理解。设置基础任务和拓展创新任务,为学生提供创新思维平台,让学生不必拘于一种思维方式,锻炼创新思维能力[4-5]。如任务可以设置为:
1)基础任务——按由大到小的顺序排列10个地区的面积。考虑比较过程中外循环次数、内循环交换次数,排序后两两之间的交换次数。如利用冒泡排序对上述数列进行降序排列。
2)拓展创新任务——有10个质量未知且不等的苹果和一台电子秤,用你的方法,按质量从小到大的顺序排列这10个苹果,并尝试完成这个过程。
3.7 交流总结
学生通过交流总结,及时修正练习题解答中的不足之处,强化学习效果,培养分析问题、解决问题的能力和交流能力,学会倾听他人意见。具体操作过程如下:
1)针对学生上传的“习题一”答案,采取匿名的方式,将错误的答案拿出来共同探讨。
2)“习题二”部分,小组间交流互换思路,取长补短。
3)完成课堂效果验收评价表。
4)学生总结本节课的收获,教师补充,并对各组表现给予评价[6]。
4 结束语
读懂课程内容,做到“远”“近”兼顾,“隐”“显”结合;读懂学生,遵循学生由具体—抽象—具体的认知活动规律,确定目标,多种教学手段相结合,为学生提供拓展创新思维的平台,可以激发学生的学习兴趣,使他们主动探索、接受、消化知识,更好地完成教学任务,并为今后的学习打下坚实的基础。
[1]谭浩强.C程序设计[M].北京:清华大学出版社,2010:142-146.
[2]陈宝芬.小组合作教学法在高职计算机实践教学中的应用:如何进行分组[J].内蒙古石油化工,2011,37(24):112-113.
[3]姚小兵.高职院校计算机教育创新的探索[J].科技情报开发与经济,2007,17(22):253-254.
[4]熊治荣.任务驱动法在程序设计教学中的应用[J].硅谷,2009(12):157.
[5]戎小群.高职软件技术专业课程体系目标的创设[J].教育与职业,2010(35):136-137.
[6]谢翠萍,陈家益.C语言中冒泡排序教学设计与分析[J].福建电脑,2013(5):50-51.