资源描述
2019-2020年高中信息技术 教材教学指导用书 算法与程序设计 广东版选修1“算法与程序设计”是高中信息技术课程的选修模块,以问题解决与程序设计为主线,揭示利用计算机解决问题的过程。学生通过本模块的学习“体验算法思想,了解算法和程序设计在解决问题过程中的地位和作用;能从简单问题出发,设计解决问题的算法,并能初步使用一种程序设计语言编制程序实现算法、解决问题。” 中华人民共和国教育部. 普通高中技术课标准(实验). 人民教育出版社,2003,19页“本模块的教学,应注意与数学课程中有关内容的衔接,要强调理论与实践的结合,引导学生注意寻找、发现身边的实际问题,进而设计出算法和计算机程序去解决这些问题。教师要注意发现对程序设计有特殊才能的学生,根据具体情况为他们提供充分的发展空间。本模块强调的是通过算法与程序设计解决实际问题的方法,对程序设计语言的选择不作具体规定。” 同上,1页课程标准中,本模块主题组成结构如下:程序设计语言初步算法与程序设计计算机解决问题的基本过程算法与问题解决例举图2.1 “算法与程序设计”主题结构图本教学指导在沿用课程标准中主题内容的前提下,为进一步增强对实际教学的指导作用,对主题结构作了些调整,两者的关系如图2.2所示。利用计算机解决问题的基本过程算法与程序实现程序设计基础程序设计思想和方法计算机解决问题的基本过程程序设计语言初步算法与问题解决例举图2.2 调整前后主题间的关系图调整后的模块由四个主题组成,四个主题在知识结构上以螺旋上升方式展开。“利用计算机解决问题的基本过程”主题旨在呈现人是如何利用计算机解决问题,解决问题需要经历哪些基本过程。教学中应注意让学生结合生活与学习提出问题,从身边简单问题入手亲历分析问题、设计算法、编写程序、解决问题的过程。应注意结合数学课程中算法这一部分知识,让学生进一步了解算法,学会用不同的方法描述算法,了解算法、程序、程序设计语言之间的关系,认识算法和程序设计的地位和作用。本主题是整个模块学习的引入,为过渡到其它主题的学习打下基础。“程序设计基础”主题旨在呈现如何用计算机语言进行程序设计。教师可以根据学生需要选择一种语言,并以该语言为载体,让学生理解数据在计算机中是如何表示与处理的,了解程序设计基本方法,初步掌握顺序、选择、循环三种基本结构,体验程序设计的实践过程,同时了解程序设计语言的编译程序、连接程序等基本知识。“算法与程序实现”主题旨在通过解析法、穷举法、排序和查找、递归等常用算法的程序实现,让学生进一步理解算法,进一步掌握程序设计基础知识,在体验算法思想与程序设计过程中,培养逻辑思维能力,塑造良好的认知结构。可以组织学生探讨需解决的问题与其相应算法之间的关系,尝试归纳算法与程序设计应用的一般规律,讨论使用计算机程序设计解决问题的优势和局限性等。“程序设计思想和方法”主题是对前三个主题内容的提升,旨在引导学生理解结构化程序设计思想,探究如何用结构化程序设计方法解决问题。了解面向对象程序设计的思想、方法和关键技术。通过引导学生亲历软件的开发过程,对算法与程序设计的思想与方法形成一个相对完整且比较准确的认识,为将来的学业发展奠定基础。在教学过程中,应注意“知识与技能”、“过程与方法”、“情感态度与价值观”三维课程目标的相互联系与相互渗透,进而提升学生的信息素养,促进学生信息技术能力的立体发展。第一节 利用计算机解决问题的基本过程课程内容标准1.结合实例,经历分析问题、确定算法、编程求解等用计算机解决问题的基本过程,认识算法和程序设计在其中的地位和作用。 2.经历用自然语言、流程图或伪代码等方法描述算法的过程。3.在使用计算机解决实际问题的过程中,通过观看演示、模仿、探究、实践等环节,了解顺序、选择、循环三种基本结构及其重要作用,掌握计算机程序的基本概念,能解释计算机程序执行的基本过程。程序设计语言产生与发展问题的认识和形成算法的概念、特征与作用算法的描述程序和程序设计算法与程序设计关系利用计算机解决问题的基本过程问题和算法算法和程序程序和程序设计语言问题的分析与算法设计一、 内容结构图图2.3 “利用计算机解决问题的基本过程”主题内容结构图二、学习目标细目表学习内容学习结果的行为指标(当学生获得这种学习结果时,他们能够)问题的认识和形成结合生活与学习的实例说明利用计算机解决问题的必要性从已有的知识与经验中例举出人工解决困难而利用计算机能够快捷解决的问题问题的分析与算法设计了解利用计算机解决问题的基本过程了解问题分析与算法设计间的关系模仿分析简单问题的已知条件、要解决的问题以及问题与条件之间的关系,写出输入、求解、输出过程的步骤算法的概念、特征与作用结合数学课程中学习的算法知识,说出自己对算法的理解说出算法的五种特征,举例说明算法特征的含义了解算法特征在解决问题过程中算法选择的作用算法的描述结合数学课程中学习的算法知识,用自然语言、流程图、伪代码描述算法算法与程序设计关系用自己的语言描述算法与程序设计间的关系程序和程序设计描述程序概念和解释程序的作用 结合实例描述顺序、选择、循环三种基本结构的单步程序执行方式画出三种程序基本结构的流程图程序设计语言产生与发展说出程序设计语言产生与发展过程了解程序设计语言的功能,针对简单问题设计一套可以解决该问题的人工语言(不超过5条指令)例举出三种以上高级语言的名称三、重点难点分析(一)重点分析1 利用计算机程序设计解决问题的必要性,建立问题意识。程序设计是运用计算机解决问题的一种方式,有些问题,如:数值、逻辑等问题适合于通过程序的方式解决。教学中应注意引导学生从生活与学习实例出发,认识与举证可以通过运用计算机程序设计得到高效解决的问题,让学生深切地感受利用计算机程序设计解决问题的必要性,引发学习本模块的兴趣和动机。2 利用计算机解决问题的过程。提出问题分析问题设计算法编写程序调试程序得到结果图2.4 利用计算机解决问题流程利用计算机解决问题流程如图2.4所示,教学中选择一个学生运用已有知识能够解决的实例,教师通过演示等手段协助学生亲历实例问题的分析、设计算法、把所要解决的问题转化成的程序输入到计算机、经调试后让计算机执行这个程序,最终达到利用计算机解决问题的过程。让学生了解和体会流程中每一步骤的含义,为展开整个课程学习打下基础。 3 算法的基本概念,使用自然语言、流程图、伪代码描述算法。学生通过高一数学知识的学习,已有算法知识的储备,结合计算机工作方式,让学生进一步了解算法,进一步学会使用自然语言、流程图、伪代码描述算法。4 程序的基本结构学生通过高一数学知识的学习,已经了解了算法的三种逻辑结构和流程图,程序的基本结构与之相对应,是程序设计的基础。让学生尝试体验程序三种结构的计算机执行方式,加深对三种基础结构的了解。5 程序设计语言程序设计语言是人利用计算机解决问题的载体,让学生充分认识程序设计语言,通过计算机语言的发展历程,感受计算机技术的发展。(二)难点分析1 算法的特征算法的特征对初学者而言较难理解,教学中尽可能通过具体问题的算法分析、程序分析,让学生感悟出算法的特征,为进一步学习分析问题、选择算法打下基础。2 “好”算法的标准算法设计除正确性外,还应考虑其高效性、可读性、健壮性,学生在开始时是做不到的,但可以让学生知道需要从不同角度分析问题,才能不断改进算法,并通过实践形成这种良好习惯。四、教学活动建议本节是算法与程序设计课程的入门。学生通过对“信息技术基础”部分的学习,已经具备了一定的信息加工、处理与交流的基础,知道使用计算机解决问题的方式多种多样,而程序设计是其中的一种。学生在高一数学课程的学习中,也已经学习了一些算法的基础知识。因此,本节的教学应注意在学生原有知识与学习经验基础上,引导学生进一步学习算法、程序设计的相关知识,体会算法与程序设计在计算机解决问题过程中的地位与作用,比较完整地认识利用计算机解决问题的过程。在教学过程中应注意活动方式的多样性,通过比较、探究、讨论、交流等活动激发学生的学习热情,培养学生的学习兴趣,引导学生学会自主创新学习,培养良好的学习方法与学习能力。(一)通过例举生活与学习中需要用计算机解决的问题,如有关数值、逻辑等方面的问题,让学生认识问题,形成问题意识,感受利用计算机解决问题的必要性。案例2.1 感受计算机解决问题的必要性教师:提出线性方程组问题,不断增加方程数量,让学生解决。现象:当方程数量少时,学生能够通过人工方法求解,但随着方程数量的增多,人工求解显得无能为力。教师:展示计算机高效求解方程组的过程。教师:提出8 皇后问题,让学生找出符合条件的方案。现象:学生能找出一些符合条件的方案,但要找出所有符合条件的方案显得无能为力。教师:展示计算机高效地找出所有方案的过程。教师:提出生物课中学到的遗传基因问题,为什么生物课人工只分析到第二层或第三层?教师:展示遗传基因问题的计算机分析过程。学生活动:尝试从生活与学习提出需要用计算机解决的问题,展开讨论。教师:回归主题,感受利用计算机解决问题的必要性。分析:案例中教师没有直面告知学生利用计算机解决问题的必要性,而是通过实例让学生不断地感受人工求解问题的局限性与计算机求解问题的优势,并通过学生的充分讨论,让学生潜移默化地感受到利用计算机解决问题的必要性。(二)利用计算机解决问题过程的教学是课程入门阶段,教师需要根据学生特点把握好度,为学生后继学习打下基础。教学中要注意的问题是:人在计算机解决问题过程担任什么样的角色;如何利用计算机解决问题;利用计算机解决问题与人解决问题有何区别;利用计算机解决问题的优势是什么;算法与程序设计解决什么样的问题。因此,选择什么样的问题切入是教学成功与否的关键所在。案例2.2 利用计算机解决问题的过程教学设计参考教学线索:选择问题让学生体验利用计算机解决问题的过程展开讨论1选择问题:选择问题的难易程度应根据学生的整体水平,由于是开篇教学,不宜太难,应源自学生已有的知识与经验,并能与后继内容的学习形成呼应。例1:求一元二次方程ax2+bx+c=0的根。该问题比较简单,利用计算机解决问题过程的每一阶段易于理解。例2:“韩信点兵”问题,“相传汉高祖刘邦问大将军韩信统御兵士多少,韩信答说,每3人一列余1 人、5人一列余2 人、7人一列余4 人、13人一列余6 人刘邦听后茫然不知其数,你能说出有多少兵士?”该问题能够体现利用计算机解决问题的特点及相对人工解决问题的优势,当条件少时可以人工求出,当条件多时利用计算机解决就显示出其优势。例3:借助高一学生正在学习函数图像知识的背景,从演示画学生熟悉的y=x2函数图像的程序入手,提出如何利用计算机画各种函数图像的问题。该问题从学生已有的知识和人工画图经验出发,引导学生理解计算机画图的过程,唤起学生的求知欲望和学习兴趣。分析:对初学者而言,例2、例3利用计算机解决的过程有一定的复杂性,教学中需要循循善诱,把握好教与学的互动关系。2让学生体验利用计算机解决问题的过程(1)引导学生探究分析问题的已知条件、隐含条件、要解决什么、它们之间的关系,通过分析问题,写出问题的求解过程,将其步骤化,设计算法。(2)让学生体验利用计算机求解过程给出对应于算法的程序,引导学生打开并执行程序,体验计算机运行程序的过程。(3)引导学生画出利用计算机解决问题的流程图。3展开讨论(1)讨论人与计算机在利用计算机解决问题的各个阶段中各自扮演的角色;(2)讨论编写程序解决问题与使用现成软件解决问题的差别,针对不同问题选择不同的解决手段;(3)讨论生活中解决问题的过程步骤,让算法思想溶于日常生活中。(三) 对初学者而言,理解算法的概念、特征、作用需要一个过程。可以通过呈现一组比较简单的现成算法,让学生逐步掌握算法的思想。通过一个问题的不同算法的比较,让学生感悟算法的特性。案例2.3 算法的基本概念1.算法的概念与特征(1)提出问题:求两个正整数的最大公约数。“更相减损之术”算法程序Private Sub Form_Click()Dim m As Long, n As Long, r As Longm = Val(InputBox(输入整数1)n = Val(InputBox(输入整数2)If m n Then r = m: m = n: n = rr = m - nDo While r 0 If r n Then m = n n = r Else m = r End If r = m - nLoopPrint 最大公约数为:; nEnd Sub给出两个正整数12、16,如何求它们的最大公约数?大家可以口算出最大公约数是4,如果给出的两数是2678945、465,又如何求呢?(2)通过介绍解决问题的经典算法,让学生体验算法思想“更相减损之术”及其算法思想:我国古代数学家对公约数求解问题进行了研究并提出了算法,称之为“更相减损之术”,其方法是以两数中较大的数减去较小的数,获得的差与原先较小的数构成新的一对数,再以大的数减去小的数如此循环,用同样的方法操作,直至产生一对相等的数,该数即为最大公约数。以求12、16这两个数的最大公约数为例,具体操作如下:(12,16)(12,4)(8,4)(4,4)4是12和16的最大公约数。“辗转相除法”及其算法思想:古希腊数学家对公约数求解问题研究提出的算法称为“辗转相除法”(欧几里得算法)。具体方法是用较大的数除以较小的数,余数和较小的数构成新的一对数,继续上面的除法,直到大数被小数除尽,则较小的数就是最大公约数。“辗转相除法”算法程序Private Sub Form_Click()Dim m As Long, n As Long, r As Longm = Val(InputBox(输入整数1)n = Val(InputBox(输入整数2)r = m Mod nDo While r 0 m = n n = r r = m Mod nLoopPrint 最大公约数为:; nEnd Sub以求288和123的最大公约数为例,具体操作如下:(288,123)(42,123)(42,39)(3,39)3是288和123的最大公约数。(3)引导学生用自然语言描述完成两种算法的思想设给定的两个正整数为m和n,“更相减损之术”算法描述如下:输入两个正整数m和n;若mn,则交换m和n;以m减去n,令所得的差为r;若r=0,则输出结果n,算法结束;否则继续;若rn,则令m=n,n=r;否则令m=r,返回步骤继续进行。 “辗转相除法”算法描述如下:输入两个正整数m和n;若m 4800 Then Label1.Left = -xx End IfEnd Sub调色器图4-6 调色器Private Sub HScroll1_Change()Picture1.BackColor=RGB(HScroll1.Value,HScroll2.Value,HScroll3.Value)End SubPrivate Sub HScroll2_Change()Picture1.BackColor=RGB(HScroll1.Value,HScroll2.Value,HScroll3.Value)End SubPrivate Sub HScroll3_Change()Picture1.BackColor=RGB(HScroll1.Value,HScroll2.Value,HScroll3.Value)End Sub正弦曲线Private Sub mand1_Click( ) Scale (-5,5)-(5,-5) For x= -5 to 5 step 0.01 Y=sin(x) Pset (x,y),vbBlue Next End Sub3.通过程序的操作过程,总结出可视编程的一般步骤,为后继程序设计的学习奠定操作基础。分析:案例采用实践教学法,让学生输入与制作曾经解决过问题的程序及其界面,熟悉程序设计开发环境的使用,了解可视编程的一般步骤。突出程序设计理论与实践相结合的特色。同时选择一些趣味性的程序,激发学生兴趣与探索的欲望。 (二) 数据的表示与处理是程序设计中的重要环节,但初学者很难比较快的理解与掌握,需要一个过程。教师可以结合计算机的工作原理,讲解数据类型的含义;比较常量、变量与数学课程中相关概念的异同,以及数学运算符和表达式与程序中的运算符和表达式的异同;常用函数的使用方式,让学生初步了解概念,并通过后续的程序设计学习过程逐步深化理解与正确使用。教学参考线索:数据类型常量与变量运算符与表达式常用函数。(三)顺序结构、选择结构、循环结构程序设计是计算机程序设计基础,是学生程序设计学习必须通过的一道关卡,教学方式可以采用问题教学法。教学中应时时关注不同基础的学生,设计不同难度的问题,使不同基础的学生都有自己的收获,让每一个学生都能体验用程序设计方式解决问题的过程与快乐。三种结构教学参考线索:顺序结构:问题引领顺序结构程序设计思想赋值语句、输入输出语句顺序结构程序实现实践解决问题。选择结构:问题引领选择结构程序设计思想条件语句、多重选择语句选择结构程序实现实践解决问题。 循环结构:问题引领循环结构程序设计思想FOR循环语句、DO循环语句循环结构程序实现实践解决问题。案例2.5 循环结构程序设计教学1.通过一个比较简单的又能体现循环思想问题。将教学重点放在循环结构的程序实现方式,让学生能够比较轻松地接受循环结构程序设计思想。例:假如你从今年开始,1月份为“希望工程”存入1元钱,2月份存入2元钱,3月份存入3元钱依次类推,问:两年时间你将为“希望工程”存入多少钱?教师:让学生分析问题,写出问题求解的步骤;教师:分析问题求解步骤中的循环结构,引出FOR循环语句的格式;教师、学生:用FOR循环语句编写程序,实现问题的解。教师:变换问题,如果要计算多少月“希望工程”储蓄才能多于500元,该怎样办?引出DO While/Loop语句的使用。学生:用DO While/Loop语句编写实现程序。2.通过一个有一定思维难度的问题,让学生进一步体会循环结构的算法与程序设计思想。例:菲波拉契数列表示的是这样一列数:0,1,1,2,3,5,,后一项等于前两项的和,输出这个数列的前30项。教师:引导学生分析问题设置30个变量:A1,A2,A3,A30,表示菲波拉契数列的前30项,设Ai-2,Ai-1,Ai分别表示数列中连续的三项,则Ai=Ai-1+ Ai-2由这个递推关系式可知,只要已知这个数列的前两项,就能输出后面的所有项。教师:引导学生进行算法设计,变量类型的定义,逐渐让学生理解程序设计中变量类型的概念。解法1:思考使用3个简单变量求得数列各项的值,分析变量初值设置,哪些操作需要反复执行。解法2:思考使用数组变量存放数列各项,引入数组的使用,分析算法步骤。学生:画出算法流程图教师、学生:进行两种算法的程序设计,比较简单变量与数组变量的使用区别,比较两程序实现上的差异及各自程序的优缺点,同一算法思想可以有不同方式的程序实现,每人可以有自己的程序设计风格,激发学生的创新意识。解法一程序:Private Sub mand1_Click()Dim a1 As Long, a2 As Long, a3 As Long, i As Integera1 = 0a2 = 1List1.AddItem a1List1.AddItem a2For i = 3 To 30 a3 = a1 + a2 List1.AddItem a3 a1 = a2 a2 = a3Next iEnd Sub解法二程序:Private Sub mand1_Click()Dim a(50) As Long, i As Integera(1) = 0a(2) = 1List1.AddItem a(1)List1.AddItem a(2)For i = 3 To 30 a(i) = a(i - 1) + a(i - 2) List1.AddItem a(i)Next iEnd Sub教师:引导学生进行简单界面设计如图,为了能利用滚动条拉动查看结果,引入listbox控件的使用。3.学生上机实践程序,解决问题。分析:案例通过难易不同的两道例题展开循环结构程序设计的教学,既让学生掌握了循环语句的使用,又让学生掌握循环结构程序设计思想。顺序结构与选择结构的教学也可以借鉴这种教学方式。(四) 设计多种形式的课内外活动,帮助学生理解程序,学习程序设计。教学中可以适当分层,使每一个学生都树立学习的信心。例1:通过阅读程序,写出程序运行结果,说明程序的功能,上机实践,理解程序。例2:通过给出问题的算法分析与部分流程图,补充完善流程图与程序,熟悉程序设计过程。例3:设计与课堂类似问题,模仿分析,设计程序。例4:对学生的要求,允许有不同层面的掌握:(1)理解三种基本结构程序设计思想与方法;(2)设计程序解决简单的问题;(3)能够透过已有的经验,分析解决较复杂的问题。课程内容标准1.解析法与问题解决(1)了解解析法的基本概念及用解析法设计算法的基本过程。(2)能够用解析法分析简单问题,设计算法,编写程序求解问题。2.穷举法与问题解决(1)了解穷举法的基本概念及用穷举法设计算法的基本过程。(2)能够根据具体问题的要求,使用穷举法设计算法,编写程序求解问题。3.查找、排序与问题解决(1)了解数组的概念,掌握使用数组存储批量数据的基本方法。(2)通过实例,掌握使用数据查找算法设计程序解决问题的方法。(3)通过实例,掌握使用排序算法设计程序解决问题的方法。4.递归法与问题解决(1)了解使用递归法设计算法的基本过程。(2)能够根据具体问题的要求,使用递归法设计算法、编写递归函数、编写程序、求解问题。第三节 算法与程序实现一、内容结构图解析法穷举法查找与排序递归法解析法基本概念解析法与问题解决穷举法基本概念穷举法与问题解决排序算法查找算法递归概念递归法与问题解决算法及程序实现图2.6 “算法与程序实现”内容结构图二、学习目标细目表学习内容学习结果的形为指标(当学生获得这种学习结果时,他们能够)解析法基本概念理解解析法基本思想,结合实例说明用解析法设计算法的基本过程解析法与问题解决运用解析法分析问题,寻找问题中各要素之间的关系,用数学表达式表示它们的关系写出解决问题的解析步骤,编写程序实现,并能通过运行程序求得问题的正确解穷举法基本概念列举出能够用穷举法解决的问题的特点穷举法与问题解决分析穷举问题的枚举主线,设计恰当的变量与循环结构进行枚举,正确写出符合问题解的条件判断语句分析不同穷举方案的效率,选择效率高的方案,设计算法、编写程序,求得问题的全部解查找算法掌握使用数组存储批量数据的基本方法理解顺序查找思想,写出顺序查找算法步骤,使用顺序查找算法编写程序解决查找问题 理解二分查找算法思想,写出二分查找算法步骤,例举出能够用二分查找法解决的问题并编写程序解决之,如:猜数、求一定范围内方程解等问题比较顺序查找算法与二分查找算法所解决问题的特点排序算法描述了解一到两种经典排序算法及其排序步骤,如:冒泡排序、插入排序、选择排序至少使用一种经典排序算法,设计程序解决排序问题递归概念理解递归思想与递归的数学意义,说明递归程序的执行方式递归法与问题解决使用自定义函数与子过程编写程序掌握递归程序的实现方法,能够使用递归法设计、解决简单递归问题,并能编程实现之三、重点难点分析(一)重点分析1解析、穷举、排序、查找、递归算法思想用数学公式描述客观事物间的数量关系,是人们解决问题时最常用的方法之一。解析算法通过分析问题中各要素间的关系,用数学表达式表示它们的关系,找到了这些表达式,问题也就得以解决。解析法是程序设计中最常用的算法之一。穷举法按问题本身的性质,将求解对象一一列举出来,然后逐一加以分析、处理,并验证结果是否满足给定的条件,穷举完所有对象后才能得出问题的所有解。排序是计算机程序经常要用到的基本算法,也是日常应用问题中经常用到的数据处理方法。排序方法有许多种,如:冒泡排序、选择排序、插入排序。教学中可以选择其中的一种或两种让学生体验其运用过程。查找是一种查询技术,查找的方法有许多,顺序查找与二分查找是比较简单的查找算法,教学中可以通过日常经验,如:快速猜某一商品价格,理解二分查找思想,推出其算法步骤。递归算法是一种直接或间接调用自身的算法。在计算机编写程序中,递归算法可以解决一大类问题。通过这些算法的学习,进一步理解算法与问题之间的关系。2解析、穷举、排序、查找、递归算法的程序实现通过解析、穷举、排序、查找、递归算法的程序实现,使学生进一步掌握程序设计方法,进一步体验算法思想并扩展算法思维,进一步理解问题、算法、程序设计间的关系。 (二)难点分析1递归算法的理解与程序实现通过经典递归问题分析,如:汉诺塔问题,了解递归问题的特点;通过分析递归程序,了解程序应该如何编写;通过递归程序的执行,了解递归程序计算机执行效率。帮助学生体验递归算法程序。2算法的延伸引导学生了解更多的算法,尝试归纳算法与程序设计应用的一般规律。四、教学活动建议本节是信息技术新课标“算法与程序设计”模块中的亮点,以往程序设计课程过多重视程序设计能力和编程技巧,新课标则重视程序设计的整体结构及思想方法。学生通过第2节的学习和实践,初步掌握了编程方法,但更多的是处于模仿编程阶段。算法是程序设计的灵魂,通过本节解析、穷举、排序、查找、递归算法的程序实现,使学生的程序设计能力从模仿为主过渡到创造为主,创造性地运用已有的知识,构造算法解决实际问题。在进一步理解程序设计基本知识基础上,帮助学生“建立尽可能合理的算法与程序设计的认知结构,学会用程序设计的思想方法解决问题,培养学习程序设计的兴趣爱好,为学生将来的发展提供该领域的知识与能力准备。”田俊华、李艺. “程序设计”课程目标的认知结构解析. 课程教材教法2005年12期由于个体经验、悟性、能力等原因,学生在这一部分的学习中会出现差异,教学中应关注学生的个性差异,在达到基本要求的前提下允许差异的存在。同时,一个问题的解决有许多种算法,中学生处于思维最活跃的阶段,教学中应多关注学生的想法,鼓励创造性的分析,创造性地构造算法。教学中多采用多样性的教学方式与手法,如:创设情境、程序演示等,把自主学习、合作探究、研究性学习等方式引入课堂教学,激发学生的学习热情,以兴趣带动学习。(一)解析法是一种学生熟悉的分析方法,教学应注意从学生已知的问题切入,寻求数学解决方法,从数学的解决方法变换到程序解决是一个需求创造的思维过程。如何使学生在分析中迁移知识,在分析中创新,是教学的一个很有意义的难点。 案例2.6 用解析法解决问题教学设计教学线索:解析法思想问题引领问题讨论、设计算法编写程序实践程序、解决问题灵活应用1从学生熟悉的例子引入解析法概念。如:数学、物理学习中的问题,日常生活中的实例。在教师引导下,让学生举例,体会解析法的核心思想。2通过实例完整地体验解析法解决问题、编写程序的过程。例1:画出如图2.7所示的钻石图案。学生:分组讨论,探究找出求解问题的解析表达式,给出算法方案,尝试编写程序,提出解决不了的问题或疑问。教师:让各组同学交流起来,分析各组学生在分析过程中的创新点,解决学生讨论中的问题,指导学生完成算法的设计,编写程序。分析:该例建立在学生的数学知识基础上,又有一定的趣味性,学生通过原有的知识能够找出描述求解问题的解析表达式,从而达到知识的迁移。3让学生实践程序,解决问题。这一过程中,学生可能会遇到各种编程问题、程序错误等,教师应当帮助学生学会纠错,或通过典型的错误的 2.7 钻石图案讲评,提高学生程序调试能力。 (二)穷举法也是处理问题的常用方法之一。用人工的方式解决穷举的问题,当需要穷举的次数增多时将无法完成。教学中注意选择能够体现计算机优势的穷举问题,让学生强烈地感到该问题只有用计算机才能很好地解决。穷举问题的穷举策略很重要,如何设计恰当的穷举变量,如何设定恰当的变量穷举范围,如何进行判断减少穷举的次数、提高穷举效率,这需要一个循序渐进的学习过程,其间也将迸发出学生的各种创新思维。教师可以多组织小组讨论活动,注意抓住学生思维中的闪光点展开教学。教学参考线索:穷举法思想问题引领问题讨论、设计算法编写程序实践程序、解决问题灵活应用。(三)查找问题在生活中很常见,教学应注意从学生的生活经验切入算法的教学。查找算法有许多,顺序查找与二分查找可以作为教学的重点,也可以让学生了解其它查找思想和方法,扩展学生思维。教学参考线索:数组的定义与使用顺序查找的思想和解决方法二分查找算法查找算法应用探究活动。(四)排序是司空见惯的问题,如何通过计算机实现呢?学生可能会觉得问题很简单,但却不知如何下手解决。先让学生展开讨论,可以发现现实生活中的排序方法有多种,总结出排序步骤,并迁移到排序程序的设计中。案例2.7 排序算法教学线索:分组讨论如何进行排序选择一种排序方法进行详细教学实践排序程序 举例多种排序算法思想。1让学生讨论如何进行排序,总结学生提出的排序方法。2选择一种排序方法进行详细教学。例:选择排序算法与程序实现问题:有n个数,将他们按其值从小到大的顺序输出。教师:从学生已有的经验入手,引导学生分析问题,推出算法,获取算法设计的经验。第一步:从小规模数据入手如有10个数: 5 2 8 12 3 45 1 9 24 10设10个数存放在:a(1) a(2) a(3) a(4) a(5) a(6) a(7) a(8) a(9) a(10)第二步:设a(1)单元存放10个数中最小数,如何完成呢?学生:一种朴素的想法将a(1)与其后面的a(2)到a(10)数进行比较,记下最小数所在的位置k,交换a(1)与a(k);第三步:接下来,设a(2)单元存放剩下9个数的最小值,如何完成?第四步:如此类推,即可实现排序,此算法思想称为选择排序。教师:引导学生结合程序设计思维设计能够编程实现的算法步骤。(1)数据存储设计:设数组a(n)存放n个数,类型为实型;变量t用于数据交换时的过渡变量,类型为实型;变量k用于记录最小数所在的位置,类型为整型;变量i 、j用于循环变量,类型为整型;(2)设计循环i从1到n-1;(3)最小值初始位置k=i;(4)设计循环j从i+1到n;(5)若a(j)a(k),则最小位置k=j;(6)继续j循环;(7)当j循环结束,则交换a(i)与a(k)的内容;(8)继续i循环;(9)输出排序后的数组a的内容。教师、学生:编写程序。Private Sub mand1_Click()Const n = 100Dim a(n) As Single, t As Single, i As Integer, j As IntegerList1.ClearRandomizeFor i = 1 To n a(i) = Round(Rnd() * 1000, 2) List1.AddItem a(i)Next iFor i = 1 To n - 1 k = i For j = i + 1 To n If a(j) a(k) Then k = j Next j t = a(i): a(i) = a(k): a(k) = t List2.AddItem a(i)Next iList2.AddItem a(100)End Sub教师:引导学生设计程序界面。教师:扩展算法介绍冒泡排序、插入排序分析问题的角度,还可以让学生认识许多优秀的排序算法,如快速排序、堆排序等,引导有兴趣、有能力的学生继续探索;演示用不同排序算法对不同数据实现的程序效率,可以让学生讨论。2 实践排序程序。分析:该案例主要通过三层次教学,第一引导学生分析排序经验;第二引导学生从经验中总结出步骤;第三结合程序设计思想,引导学生依据排序步骤得出具体的算法,使得程序设计轻松自然,突出了算法的分析与程序设计间的关系,让学生通过排序程序的实现,进一步学习了问题细化与表达的方法,积累了程序设计经验。(五)递归法对于初学者是一个比较抽象的算法,教学方式宜采用以教师讲授为主的教学方式。教学参考线索:递归概念自定义函数、子过程递归程序计算机执行方式、程序编写方式递归问题的算法分析、程序实现。教学参考步骤:1从镜子互相映像的递归现象导出递归算法的概念。在教师引导下,让学生也能举出生活中的递归例子。理解递归的思想。2自定义函数、子过程的教学:由于递归程序的核心思想是通过传递参数,调用自身程序,所以自定义函数与子过程的是递归程序设计基础。3通过实例,如:“斐波那契数列”,分析问题的递归性质、递归的数学表达式,指导学生完成简单递归程序的实现。4通过递归程序运行示意图,让学生理解递归程序的计算机执行过程。(六)程序设计在计算机应用中具有专业性色彩,算法与程序设计的掌握、应用需要一个过程,学生在学习过程中出现差异属于正常现象,建议针对不同的学生提出不同的要求,注意发现对程序设计有特殊才能的学生,根据具体情况为他们提供充分的发展空间。第一层次要求:理解问题的算法分析过程,读懂程序。第二层次要求:运用学到的算法知识,分析相关的问题,并能编写程序设计解决问题。第三层次要求:对算法产生兴趣,灵活、综合应用算法知识,解决较复杂问题,并能编程实现。第四节 程序设计思想和方法课程内容标准1.理解模块化程序设计的基本思想,初步掌握其基本方法。2.在使用某种面向对象程序设计语言解决问题的过程中,掌握面向对象程序设计语言的基本思想与方法,熟悉对象、属性、事件、事件驱动等概念并学会运用。结构化程序设计历史背景结构化程序设计的思想方法面向对象程序设计思想面向对象程序设计的基本概念面向对象程序设计的基本特征结构化程序设计面向对象程序设计程序设计思想与方法项目策划项目实现尝试软件开发一、内容结构图图2.8 “程序设计思想和方法”内容结构图二、学习目标细目表学习内容学习结果的行为指标(当学生获得这种学习结果时,他们能够)结构化程序设计的历史背景知道结构化程序设计产生的历史与由来结构化程序设计的思想方法描述结构化程序设计的基本思想与方法使用过程与函数实现子问题的程序设计,尝试使用自顶向下、逐步求精的程序设计方法设计程序 对于一个较大型问题,能够使用结构化思想进行模块化设计,画出解决问题的模块结构图面向对象程序设计思想理解面向对象程序设计思想与方法说出面向对象程序设计思想产生历程比较面向对象程序设计与面向过程程序设计,说明两种程序设计思想方法的本质及给软件开发带来的革新与影响面向对象程序设计的基本概念例举出生活与计算机操作中的对象,解释对象的不同含义运用属性的概念,举例描述对象的各种属性例举出生活或计算机操作中对象的方法及方法的作用结合Windows的使用经验,例举出常用的事件举出生活中的类与对象的实例,讨论在面向对象程序设计中,类与对象的区别与联系结合学习的程序设计知识,读懂类定义程序并能在程序设
展开阅读全文