|
2007年3月27日 星期二 12:00:27
《算法与程序设计》课堂练习的设计
□广东省中山纪念中学 邱崇志
《算法与程序设计》是高中信息技术选修模块之一,它与往年高中《程序设计》教学内容、目标都有比较大的不同,新《算法与程序设计》模块的教学目标不再是强调一种程序设计语言的学习,而是强调通过培养学生程序设计能力与算法思维能力来达到提高学生信息素养的目的,体现了知识与技能、过程与方法、情感态度与价值观三个层面的学习目标。就目前信息技术课程的教学情况来看,课堂练习是学生掌握与运用所学知识,活用信息能力的必要过程,而且这一过程是在提高学生信息活用能力的整个过程中最有效的过程之一,因此,根据教学内容,设计不同的课堂练习是非常重要的。
以下是笔者在设计《算法与程序设计》课程的课堂练习题的一些想法:
一、 提供程序的半成品
在教学的初始阶段,学生还没有完全掌握程序的语句语法,编写程序的能力有限,这时的教学中也只涉及算法,虽然算法是凌驾于程序设计语言之上的,但算法又必须通过程序设计语言去运行得到结果,所以教师可以提供现成的程序的半成品给学生,把不可操作、不好操作的题变得可操作,让学生动一动手就能完成一个程序,能够运行程序得到结果。例如“求100以内能被3整除的数”的课堂练习题中,教师自己演示的教学效果是有限的,这时完全可以提供程序的半成品给学生,把判断整除时的除数3留给学生自己填写,然后学生运行得到结果。之后,对此题再进行简单的扩展,例如求1000以内的,能被另外某个数整除的,甚至是不能被某个数整除的,学生都能够在半成品中进行简单的填写、修改后,就能得到一个完整的程序,并且能够运行得到结果,
另外,循环、条件语句的教学中涉及到的练习题,由于学生不可避免地会出现不能完全理解、掌握、应用这些语句的情况;同时,学生的打字速度、打字错误等情况都会影响整个程序的运行。所以这时提供半成品给学生,让学生能够非常迅速地制造出一个能够正常运行的程序,让他们能够以最短的时间理解掌握这些语句是非常有益的;这样做对学生对算法的理解、对程序的神秘感的消除都是有非常大的好处的;让学生排除了其它因素影响,先完全理解语句语法,先掌握好这个语句在程序中的用法,自然就能更好地在整个程序中熟练运用它了。这也使得学生更加明确了算法与程序的关系。
二、 适当地强调小组协作,而不要强求小组协作
《算法与程序设计》的课堂应该回归课堂教学的本质,不应强求轰动、热闹的场面。在教学中我们发现,这门课在课堂上是很难实施小组协作的,一些老师在课堂上滥用小组协作、合作探究,把本该很简单、很单纯的课堂搞得热热闹闹的,其实是对教学无益的。大家都知道,程序员在编写程序时是需要一个安静的、独立的环境的,那么我们在《算法与程序设计》教学的课堂上,当布置学生去思考算法、编写程序时,我们当然应该给他们提供一个安静的环境,让他们能够安静地思考。因为毕竟有许多练习题是需要学生进行深入地、细致地思考的。当然,在课堂教学中少部分涉及需要讨论、需要合作研究的算法时,是可以适当安排一些小组协作的教学方式的,例如在“排序”、“查找”算法的教学中,是可以适当设计一些适合小组讨论、研究的练习题的,例如研究几种排序方法、查找方法的程序运行效率、现实生活中的实际应用等。
三、 算法、程序优化的练习
算法与程序的优化是一项非常重要的环节,在本课程的教学中,都应该坚持加强这一环节的教学。尤其是在学习完多重循环后,可以为学生提供教材中以及自己补充的练习题的练习,在课时上也可以增加几个课时,力求在这一环节中使学生初步具备算法、程序优化的思想,掌握优化的能力,同时也使学生知道数学思想在程序设计中的重要性。为了使学生理解程序运行的效率,可以向学生推出程序运行的时间复杂度O的概念。
例如在循环语句教学中,练习题“已知S=1+2+3+……N,找出一个最大的整数N,使得S<30000。”虽然这一练习题是循环语句内容中的,但在学生提供了使用循环语句的正常的算法与程序,掌握了循环语句后,可以要求学生提供了一个纯数学的、不需要循环的算法。这样程序的时间复杂度由O(N)降到了O(1)。
在循环语句以及穷举法的练习题中,如“百鸡问题”、“求1000以内的所有素数”、“玫瑰花数”等教材中提供的练习题中,以及教师可以额外提供的如“百马问题”、“找1000以内能同时被3、5整除的数”、“找水仙花数”等问题中,都可以要求学生提供进一步,甚至进几步的优化算法,不断地优化算法与程序,使得自己的程序的时间复杂度可以大大降低为原来程序的几百甚至上万分之一。这样学生就能明确算法是比程序设计更重要的思想;明确数学知识的重要性;理解算法决定程序;算法就是人的思想的体现;算法需要人花更多时间去思考完善;算法可以体现出人的素质;可以决定程序运行的效率;而在实际的社会应用中;程序的效率是极为重要的。在后面的查找算法、排序算法中,学生也才能更容易理解与掌握。
四、 加强本课程与其它科目的横向联系
高中数学的教材中,同样有算法设计的内容,因此在我们的教学中可以把数学书中相关的部分内容拿到我们的课堂中来,虽然不一定让学生自己编程去解决,但教师可以提供半成品,或者是成品给学生查看、完善修改及运行,加强程序设计与数学的联系,提高学生的兴趣。
同时,可以针对教材中的不少练习题进行修改,例如求平面两点的距离,可以修改为求地图上两个城市之间的距离;可以设计英语或者汉语短文中单词、字母出现次数的统计;可以增加逻辑判断题;可以为某个物理、化学实验设计一个实验数据的计算处理程序(算法),有条件的学校,甚至可以让学生在理、化、生探究实验室做各种实验时,自己思考那些实验数据处理软件中用到的算法,甚至可以自己编写自己设计的特殊实验的数据处理程序(算法),为自己的探究实验处理数据。另外,有条件开展机器人活动的学校,也可以鼓励学生研究相关的算法并加以实施。
五、 鼓励、引导学生参与出题,或者是改题
学有余力、掌握程度好的同学,完全可以帮助老师出题、甚至修改老师的题。学生站在自己的层面上出的题,可以更加激发学生的学习兴趣,这在中学信息学竞赛辅导中是天天在用的训练方法,在《算法与程序设计》的教学是可以借鉴的。
学生改题、出题的方式有很多种,出题的过程本身对学生来说就是一件很有意义的事:
1、 他们可以在很短的时间内,为某一个已经存在的题或者自己头脑中的题,编出一个动听的故事,把题目的本质隐藏在那个故事中;
2、 把别人的题做简单的修改,可以把算法加深、简化、变异,也可以设置陷阱,甚至可以做深入修改,引出一个题目系列,对学生来说这是一个难得的拓展训练。
学生出的题目,主角当然是学生,出题者、讲解者、解题者、提供标准算法者、反驳者、提供更优算法者、组织研究讨论者,全是学生自己,这时教师的职责就只是管理课堂了,何乐而不为呢。
这样,经过教师精心设计的课堂练习的训练,学生们对《算法与程序设计》教学内容的掌握、教学目的的完成就水到渠成了。
(责任编辑:陈明宏)
|