论文部分内容阅读
摘要:比起《信息技术基础》,《算法与程序设计》这门选修课对高一学生来说,更具有挑战性,这也使学生对这门课产生了兴趣。如何带领学生挑战自我,学会编程解决问题呢?笔者认为首先要让学生理解学会编程解题的重要性。接着要从学生熟悉的问题出发,进行算法设计训练,让学生懂得将人工解题的过程描述成算法。教学中还应灵活处理教材,做到分散难点、用到再学,时刻牢记以“问题解决”为主线,精选“问题”以吸引学生兴趣,调动学生进行自主探究学习的积极性。
关键词:算法;程序设计;教学;问题解决
高中新的课程标准指出,在中学开设《算法与程序设计》课程的主要目的是使学生能从简单问题出发,设计解决问题的算法,并能初步使用一种程序设计语言编制程序实现算法解决问题。我们要解决的问题虽然比较简单,但这对初学《算法与程序设计》的学生来说可是不容易的,有人甚至觉得比数学还难。那么如何做好《算法与程序设计》这门选修课的教学呢?使学生能学得轻松、学得高兴呢?下面就谈一谈一个学期来我的做法。
一、明确学习课程用途,消除学生畏难情绪
在学习本课程前,可能会有比较多的学生认为:人要计算机解决的问题都可以找到相应的软件,为何还要学习编程?针对这个问题,我在第一节课就向学生介绍了我自己工作中遇到的问题:“如何批量添加“Serv-U”用户”。
例1每年开学时,我都要在服务器上为每个学生开避一个文件夹,并利用“Serv-U”FTP软件为每个学生设置对自己文件夹的使用权限。一个年段600人,每人建一个文件夹、设置权限这些工作少说要花1分钟,600个人要600分钟(10个小时),手工操作工作量大,且容易出错。那么如何解决这个问题呢?
通过认真分析,我们发现同学们的文件夹可以按班级分类存放,每个同学的文件夹名称也可以设置为“g06??**”这种形式(其中??表示班级,**表示座号),另外,“Serv-U”中的用户配置都保存在一个文本文件中,且用户与权限都很有规律。因此我们可以编写一个程序,一个班一个班地、每个班一个一个同学地进行开辟空间和“Serv-U”的用户权限设置。最后我演示一下我的程序,并简要的解析了一下程序。
另外,我还结合实例,简要介绍程序设计语言的发展,让学生感受到高级语言比起低级语言是容易学习的,将要学习的VB高级语言是很容易被我们掌握的,从而消除学生对学习这门课的畏难情绪。
这节课我向学生传递了“编程有用、编程不难”这样的信息,增强了学生学习本门课的兴趣与信心,为本门课的教学打下了一个非常好的基础。
二、让学生理解算法设计重要性,引导学生进行简单问题的算法设计
算法设计是程序设计的核心。多年的程序设计教学经验告诉我们,学生学习这门课的难点就是如何进行设计算法。因此,我在这门课的第2、3节课就着重通过一些简单的例子来让学生懂得算法设计的三种基本结构。
1 实例入手,引导学生认识算法设计
例2时间转换
输入一个以秒为单位的时间t,将其转换成x小时节v分钟z秒形式,用自然语言描述算法。
一开始我们发现,学生对此问题无从下手。于是我们将问题改为“3800秒是几小时几分几秒?”,学生很快算出答案“1小时3分20秒”。究其原因,我觉得学生可能习惯于解决一个具体的数学问题,而不习惯于解决一个带变量的问题。这个恰恰是数学解题与编程解题的一个区别。接下来就让学生说出他们是如何可得出以上的答案,然后引导学生进行归纳,将3800这个数换成t,再让他们尝试说法求法,经过几次进行修改,最后我们得到如下的算法:
(1)输入以秒为单位的时间t
(2)求出t整除3600的商x和余数a
(3)求出a除以60的商v和余数z
(4)输出x小时v分z秒
通过这节课,从实例入手,逐步地把人工的解法用精确的方法描述出来。学生明白什么是算法设计,同时让学生明白设计算法中要象数学一样要适当使用记号(即将来要学习的变量)。
2 从学生熟悉的问题出发,进行算法设计训练
在讲解选择结构问题的算法设计时,我们从学生在初中阶段就知道的“求一元二次方程实根”的问题出发,进行算法设计的训练。
我们先让学生自己来描述一下“求实根”问题的算法,由于学生对此问题比较熟悉,同时有例2中的顺序结构算法设计的基础和老师点拔,学生很快得出如下的算法描述:
(1)输入a,b,c
(2)求DLT=b2-4ae
(3)如果DLT<0,则输出“无实根”,转(5)
(4)否则,求两实根x1,x2,输出x1,x2
(5)结束
接着我们再分析自然语言描述法的不足,引出流程图描述法,进而用流程图把以上算法描述出来。学生就很容易理解了。
从学生熟悉的问题入手,进行算法设计的训练,会收到较好的效果。
三、理解可视化编程一般步骤。灵活进行教材的处理
由于我们这门课是要用VB程序设计语言来实现简单问题的编程解决,因此必须让学生对VB可视化编程一般过程有所理解。按教材上的安排,可视化编程是在第三章,而第二章中有“程序的顺序结构”、“程序的选择结构”与“程序的循环结构”等重要教学内容,为了教学上方便,我将第三章的内容简化、提前。重点让学生理解“对象”、“属性”、“事件”、“事件过程”、“事件驱动”等概念以及掌握可视化编程的一般步骤。
四、分散难点,用到再学
在教材中,第二章第1节的主要内容是VB程序的结构、数据类型、变量、常量、运算符、表达式与函数等概念,如果专门花一节课给学生讲解,不仅枯燥而且抽象。对于本部分的教学,我们采取了分散难点、用到再学的策略。因此,我们就跳过这节课。当学习到下一节程序的顺序结构时,我们通过计算“圆面积”这个学生最容易理解的问题,来讲解程序的结构、变量、常量、赋值语句、输入函数和输出方法等。
这种分散难点、用到再学的策略通过将难点分散到多个任务中,用到再学,它不仅避免了由于难点太多而造成知识混淆的问题,同时又能结合实例,使学生有感性认识,便于难点的理解,收到极好的效果。
五、牢记“问题解决”主线,精选“问题”激发兴趣
编程的目的就是为了解决问题,因此本门课程的教学应牢牢地把握“以问题解决”的主线。对任何一个问题讲解,老师都要严格按照“分折问题”、“设计算法”、“编写程序”、“调试运行”这几个步骤进行,自始至终、潜移默化地培养学生正确的解题流程。当学生也能按照正确的解题过程进行解题,学生才算真正学会独立地编程解题。
同时,“问题”还是学生学习本门课的动力,好的问题一出现在学生面前,就会让学生跃跃欲试。因此我们在备课时要精选“问题”,从而引导学生思考问题,进而解决问题。
例如,我在讲授“多分支选择语句”这一节时,选择了“星座计算”这个问题。这个问题是当今学生(特别是女生)比较兴趣的,有了这个程序以后,他们就很容易替任何人测算出星座。于是我就安排学生以小组为单位,先学习课本中有关知识后,然后开始解决星座测算这个问题,看哪个小组设计更好、更快。最后我再对本节课的重点进行小结归纳,总结select case语句中的重点。
六、结束语
一个学期来,大部分同学都能认真完成作业,不少学生的作业不仅正确,而且界面漂亮。同学们上课听讲也较为认真,还经常有同学向我提问。我觉得本学期这门课程的教学基本上是成功的。
关键词:算法;程序设计;教学;问题解决
高中新的课程标准指出,在中学开设《算法与程序设计》课程的主要目的是使学生能从简单问题出发,设计解决问题的算法,并能初步使用一种程序设计语言编制程序实现算法解决问题。我们要解决的问题虽然比较简单,但这对初学《算法与程序设计》的学生来说可是不容易的,有人甚至觉得比数学还难。那么如何做好《算法与程序设计》这门选修课的教学呢?使学生能学得轻松、学得高兴呢?下面就谈一谈一个学期来我的做法。
一、明确学习课程用途,消除学生畏难情绪
在学习本课程前,可能会有比较多的学生认为:人要计算机解决的问题都可以找到相应的软件,为何还要学习编程?针对这个问题,我在第一节课就向学生介绍了我自己工作中遇到的问题:“如何批量添加“Serv-U”用户”。
例1每年开学时,我都要在服务器上为每个学生开避一个文件夹,并利用“Serv-U”FTP软件为每个学生设置对自己文件夹的使用权限。一个年段600人,每人建一个文件夹、设置权限这些工作少说要花1分钟,600个人要600分钟(10个小时),手工操作工作量大,且容易出错。那么如何解决这个问题呢?
通过认真分析,我们发现同学们的文件夹可以按班级分类存放,每个同学的文件夹名称也可以设置为“g06??**”这种形式(其中??表示班级,**表示座号),另外,“Serv-U”中的用户配置都保存在一个文本文件中,且用户与权限都很有规律。因此我们可以编写一个程序,一个班一个班地、每个班一个一个同学地进行开辟空间和“Serv-U”的用户权限设置。最后我演示一下我的程序,并简要的解析了一下程序。
另外,我还结合实例,简要介绍程序设计语言的发展,让学生感受到高级语言比起低级语言是容易学习的,将要学习的VB高级语言是很容易被我们掌握的,从而消除学生对学习这门课的畏难情绪。
这节课我向学生传递了“编程有用、编程不难”这样的信息,增强了学生学习本门课的兴趣与信心,为本门课的教学打下了一个非常好的基础。
二、让学生理解算法设计重要性,引导学生进行简单问题的算法设计
算法设计是程序设计的核心。多年的程序设计教学经验告诉我们,学生学习这门课的难点就是如何进行设计算法。因此,我在这门课的第2、3节课就着重通过一些简单的例子来让学生懂得算法设计的三种基本结构。
1 实例入手,引导学生认识算法设计
例2时间转换
输入一个以秒为单位的时间t,将其转换成x小时节v分钟z秒形式,用自然语言描述算法。
一开始我们发现,学生对此问题无从下手。于是我们将问题改为“3800秒是几小时几分几秒?”,学生很快算出答案“1小时3分20秒”。究其原因,我觉得学生可能习惯于解决一个具体的数学问题,而不习惯于解决一个带变量的问题。这个恰恰是数学解题与编程解题的一个区别。接下来就让学生说出他们是如何可得出以上的答案,然后引导学生进行归纳,将3800这个数换成t,再让他们尝试说法求法,经过几次进行修改,最后我们得到如下的算法:
(1)输入以秒为单位的时间t
(2)求出t整除3600的商x和余数a
(3)求出a除以60的商v和余数z
(4)输出x小时v分z秒
通过这节课,从实例入手,逐步地把人工的解法用精确的方法描述出来。学生明白什么是算法设计,同时让学生明白设计算法中要象数学一样要适当使用记号(即将来要学习的变量)。
2 从学生熟悉的问题出发,进行算法设计训练
在讲解选择结构问题的算法设计时,我们从学生在初中阶段就知道的“求一元二次方程实根”的问题出发,进行算法设计的训练。
我们先让学生自己来描述一下“求实根”问题的算法,由于学生对此问题比较熟悉,同时有例2中的顺序结构算法设计的基础和老师点拔,学生很快得出如下的算法描述:
(1)输入a,b,c
(2)求DLT=b2-4ae
(3)如果DLT<0,则输出“无实根”,转(5)
(4)否则,求两实根x1,x2,输出x1,x2
(5)结束
接着我们再分析自然语言描述法的不足,引出流程图描述法,进而用流程图把以上算法描述出来。学生就很容易理解了。
从学生熟悉的问题入手,进行算法设计的训练,会收到较好的效果。
三、理解可视化编程一般步骤。灵活进行教材的处理
由于我们这门课是要用VB程序设计语言来实现简单问题的编程解决,因此必须让学生对VB可视化编程一般过程有所理解。按教材上的安排,可视化编程是在第三章,而第二章中有“程序的顺序结构”、“程序的选择结构”与“程序的循环结构”等重要教学内容,为了教学上方便,我将第三章的内容简化、提前。重点让学生理解“对象”、“属性”、“事件”、“事件过程”、“事件驱动”等概念以及掌握可视化编程的一般步骤。
四、分散难点,用到再学
在教材中,第二章第1节的主要内容是VB程序的结构、数据类型、变量、常量、运算符、表达式与函数等概念,如果专门花一节课给学生讲解,不仅枯燥而且抽象。对于本部分的教学,我们采取了分散难点、用到再学的策略。因此,我们就跳过这节课。当学习到下一节程序的顺序结构时,我们通过计算“圆面积”这个学生最容易理解的问题,来讲解程序的结构、变量、常量、赋值语句、输入函数和输出方法等。
这种分散难点、用到再学的策略通过将难点分散到多个任务中,用到再学,它不仅避免了由于难点太多而造成知识混淆的问题,同时又能结合实例,使学生有感性认识,便于难点的理解,收到极好的效果。
五、牢记“问题解决”主线,精选“问题”激发兴趣
编程的目的就是为了解决问题,因此本门课程的教学应牢牢地把握“以问题解决”的主线。对任何一个问题讲解,老师都要严格按照“分折问题”、“设计算法”、“编写程序”、“调试运行”这几个步骤进行,自始至终、潜移默化地培养学生正确的解题流程。当学生也能按照正确的解题过程进行解题,学生才算真正学会独立地编程解题。
同时,“问题”还是学生学习本门课的动力,好的问题一出现在学生面前,就会让学生跃跃欲试。因此我们在备课时要精选“问题”,从而引导学生思考问题,进而解决问题。
例如,我在讲授“多分支选择语句”这一节时,选择了“星座计算”这个问题。这个问题是当今学生(特别是女生)比较兴趣的,有了这个程序以后,他们就很容易替任何人测算出星座。于是我就安排学生以小组为单位,先学习课本中有关知识后,然后开始解决星座测算这个问题,看哪个小组设计更好、更快。最后我再对本节课的重点进行小结归纳,总结select case语句中的重点。
六、结束语
一个学期来,大部分同学都能认真完成作业,不少学生的作业不仅正确,而且界面漂亮。同学们上课听讲也较为认真,还经常有同学向我提问。我觉得本学期这门课程的教学基本上是成功的。