百度文库-让每个人平等地提升自我1《实用的枚举算法》教案上课时间:班级:技术1班授课教师:徐飞翔一、教学目标:1、知识与技能:(1)理解枚举算法的概念。(2)通过枚举算法,理解循环中嵌套分支的结构特点,执行过程。(3)在理解流程图的基础上,初步实现VB代码的编写,并上机用VB语言实现程序的功能。2、过程与方法:(1)培养同学自主探索研究、解决问题的能力。(2)能通过实际问题的分析、求解过程,尝试归纳出利用枚举算法解决问题的思路和方法。(3)培养同学用计算机程序解决问题的思维能力。3、情感态度与价值观:(1)通过解决任务,培养同学勇于尝试,不怕困难的精神。(2)积极参与、主动探究;合作学习,体验成功。二、教学设计思想:《学科教学指导意见》中对枚举算法的教学目标是使学生能了解枚举算法的概念,并用枚举算法来解决实际问题。根据这两次信息技术选考考试的难度,此课例不要求同学独立地画出流程图,而仅要求学生在理解枚举算法设计思想的基础上,读懂循环中嵌套分支的流程图,并完成主程序关键处的选择或填空(其中填空比选择对学生思维的要求又高一些)。三、学情分析:通过前几个章节的学习与实践,VB中几个相关的函数已经讲解并上机实践过了,对于3种基本控制结构大部分同学已理解,对于用流程图描述算法也非常熟悉,VB上机操作已有一定的实践,为本节内容的学习提供了良好的基础。对于简单的程序段也有一定的认知意识,那么在本课中学生会觉得设计思想比较容易掌握。困难之处在于如何将题目的设计思想转化为流程图,根据流程图写出相应的代码,并通过自己编制程序上机实践来体验。那么在课堂分析过程中学生将从听课--理解--体验--探究,这些过程中全面掌握枚举算法的设计思想,并能用此算法来解决日常生活问题及与其他学科有所关联的一些简单问题。四、教学重点:理解枚举算法的概念和基本特征。五、教学难点:a)熟练掌握循环结构、分支结构的嵌套使用。b)枚举算法思想的理解与实现(流程图转化为VB代码并上机实践)。六、教学准备:计算机机房、教学课件(枚举算法.ppt)七、教学过程:(一)新课导入小明不小心把寝室门钥匙丢了,他去寝室管理员那里去找钥匙开门。寝室管理员那里总共有100把钥匙,其中配套的钥匙有若干把,但钥匙上只有1到100的编号没有寝室编号,请问小明如何才能找出能开自己寝室门的所有钥匙?设计算法画出流程图。(二)学习新课1.枚举算法:按问题本题的性质,一一列举出该问题所有可能的解,并在逐一列举的过程中,检验每个可能解是否是问题的真正解,若是,就采纳这个解,否则就抛弃它。百度文库-让每个人平等地提升自我2例题1:使用枚举算法解决问题,在列举问题可能解的过程中做到()A.不能遗漏,但可以重复B.不能遗漏,也不应该重复C.可以遗漏,但不应该重复D.可以遗漏,也可以重复例题2:鸡兔共笼问题,若有腿共60条,问鸡、兔各有多少只?下面鸡和兔只数最合理的范围是()。(范围确定了循环的起始值和终止值)A.鸡:1到28,兔:1到14B.鸡:2到28,兔:1到14C.鸡:1到28,兔:2到14D.鸡:2到28,兔:2到14例3.一份单据中被涂抹数字的推算(体验数字推算算法)有一张单据上有一个5位数的编号n,如图1所示,其百位数和十位数处已经变得模糊不清,但是知道这个5位数是37或67的倍数。现要设计一个算法,找出所有满足这些条件的5位数,并统计这些5位数的个数。图11)算法分析这个5位正整数n中的百位和十位数有00、01、02、…、97、98、99共100种可能,分别填入,从而产生出n的全部可能解:25006、25016、25026、…、25986、25996。使用枚举算法解决问题时,必须逐一地给出所有可能解并对它们逐一进行检验,既不应遗漏任何一个可能解,也不应重复地产生和检验可能解。因而将每个可能解n逐一进行判断是否是一个真正解,即n是否能被37或67整除。若n是真正解,则输出n的值,并在计数器c中加上1,表示找到了一个真正解。2)算法表示图2寻找单据中被涂抹数字算法流程图3)完成算法运行体验“涂抹数字推算”程序并补完整程序代码。百度文库-让每个人平等地提升自我3提高:把程序中的for循环换成DoWhile循环Forj=1to99n=25006+j*99IfnMod37=0OrnMod67=0ThenStr(n)c=c+1EndIfNextj2.枚举算法解题过程:解题过程分两步:逐一列举可能的解的范围。这个过程用循环结构实现。对每一个列举可能的解进行检验,判断是否为真正的解。这个过程用分支结构实现。枚举算法=循环结构+分支结构,循环结构内嵌套选择结构(三)课堂训练:有30个人,其中有男人、女人和小孩。他们在一家饭馆里花去500元。已知,每个男人花30元,每个女人花20元,每个小孩花10元。问男人、女人和小孩各为多少人?VB程序如下,在划线出填入合适的语句或表达式。Privatesubcommand1_click()Dimman,woman,children,sAsIntegerForman=1to(1)Forwoman=1to23children=(2)s=30*man+20*woman+10*childrenIf(3)then(str(man)+str(woman)+str(children))EndifnextwomannextmanEndsub(四)课堂总结:1.枚举算法=循环结构+分支结构2.做到既不遗漏任何一个解、也不重复.3.枚举算法效率较低.注:并不是所有的问题都可以使用枚举算法来求解,只有当问题的所有可能解的个数不太多时,并在可以接受的时间内得到问题的所有解,才有可能使用枚举算法。(五)课后作业完成《学生活动手册》实践活动八找出1000以内的所有素数百度文库-让每个人平等地提升自我4四、教学反思枚举算法的教学设计,得到几位听课老师的指点,经过几次教学实践环节和本人的反思,我认为以下几方面很值得去总结和改进。1、教学情境的创设枯燥乏味的程序算法课中,如何让学生变得愿学、乐学,一直是信息技术教师追求的梦想。不过,算法本来就是源于生活的,如果教师能够细心观察、多多思考,完全可以使算法的课堂变得生活气息十足。本节课以在一串钥匙中查找一把锁的所有正确钥匙为新课引入,此任务同学经常遇到,非常形象。而且又能结合课堂教学内容和教学目标,比较有效地调动了学生主动探究学习的积极性。2、培养同学总结、概括的能力开始的教学设计中在新课引入后,老师直接将枚举算法的概念和流程图特征总结了出来,同学只是被动的知识接受者,主动思考,积极参与教学环节的热情不太高。后来有听课老师指出,可以先让同学自主探索完成任务1水仙花,并在同学根据新课引入和尝试完成任务1(水仙花数)中的领悟和理解,用自己的语言讨论和总结:枚举算法的概念、结构特征和注意事项,然后老师再补充、完善。如此可以培养同学总结、概括的能力。3、程序成功的体验任务1有下列三种难度,难度★★(流程图+完整程序),难度★★★(流程图),难度★★★★(仅任务描述。)同学选择合适自己的难度(分层教学)。课后统计选择难度★★的有16人,选择难度★★★的有15人,没有同学选择难度★★★★。第一个任务(水仙花数)将作详细的介绍,大部分同学可以比较顺利地理解和上机实现。第二个任务是用枚举算法来找出一定条件下的勾股数,相关概念比较多,还用到了VB中的INT函数。部分理解能力强,上机实践熟悉的同学可以按时地独立完成此任务;有部分同学只能完成算法流程图的理解,我会提供不完整的程序代码作为学习支架,在程序的关键处还是要求其思考和填空。