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