专题讲座高中数学“算法与框图”一、整体把握“算法与框图”的教学内容(一)算法1.什么是算法算法(algorithm)一词源于算术(algorism),算术方法的原义是一个由已知推求未知的运算过程.后来,人们把它推广到一般,指算法是在有限步骤内求解某一问题所使用的一组定义明确的规则,甚至把把进行某一工作的方法和步骤也称为算法.例如,人们在计算过程中,先乘除,后加减,从内到外去括号等规则,都是按部就班必须遵守的算法.人类最早关于算法的记录存在于在两河流域发现的公元前两三千年的泥板书上,其中的一个典型例子就是计算利息何时能够够等于本金.算法早期发展中值得一提的另一个成果应归功于古希腊的欧几里得,他提出的计算最大公约数的方法——辗转相除法(又称欧几里得算法)至今仍在使用.我国古代数学发展的主导思想,就是构造“算法”,解决问题.可以说:我国古代数学中蕴含着丰富的算法思想,其中最具代表性的就是《九章算术》.《九章算术》是战国、秦、汉时期数学发展的总结,就其数学成就来说,堪称是世界数学名著.其内容按类分章,以数学问题的形式出现,包括分数四则运算、开平方与开立方(包括二次方程数值解法)、盈不足术、各种面积和体积公式、线性方程组解法、正负数运算的加减法则、勾股形解法(特别是勾股定理和求勾股数的方法)等.其中方程组解法和正负数加减法则在世界数学发展上是遥遥领先的.就其特点来说,它形成了一个以筹算为中心,与古希腊数学完全不同的独立体系.我们现在学习的算法,不同于求解某一个具体问题的方法,它应具有如下特点:2.算法的特点通用性:能解决一类问题.能重复使用.程序性:stepbystep.算法过程要一步一步执行.确定性:算法的每一步执行的操作,必须确切,不能含混不清.可行性:算法中的每一个步骤必须是能实现的.例如,在算法中,不允许出现分母为零的情况;在实数范围内不能求一个负数的平方根等.有穷性:算法要有明确的开始和结束,当到达终止步骤时所要解决的问题必须有明确的结果,也就是说必须在有限步内完成任务,不能无限制的持续进行.3.为什么要学习算法?算法一方面具有具体化、程序化、机械化的特点,同时又有抽象性、概括性和精确性.对于一个具体算法而言,从算法分析到算法语言的实现,任何一个疏漏或错误都将导致算法的失败.算法是思维的条理化、逻辑化.算法所体现出来的逻辑化特点被有些学者看成是逻辑学继形式逻辑和数理逻辑之后发展的第三个阶段.因此,培养逻辑思维能力,不仅可以通过几何论证、代数运算等手段来进行,还可以通过算法设计的学习来达到.4.整体把握“算法”教学内容《课程标准》中算法的内容以两种形式呈现:一是在本模块中,相对集中地介绍算法的基本思想、基本结构、基本语句等;另外,《标准》还要求把算法思想渗透在其他相关内容之中.中学数学中的算法内容和其他内容是密切联系在一起的,比如线性方程组的求解、数列的求和等.具体来说,需要通过模仿、操作、探索,学习设计程序框图表达解决问题的过程,体会算法的基本思想和含义,理解算法的基本结构和基本算法语句,并了解中国古代数学中的算法.(二)框图框图是表示一个系统各部分和各环节之间关系的图示,它能够清晰地表达比较复杂的系统各部分之间的关系,是表达和交流思想的有力工具.框图分为流程图和结构图两种.流程图用来描述动态过程,可用来刻画数学问题或其他问题的解决过程,结构图用来刻画系统结构或组成.流程图通常会有一个“起点”,一个或多个“终点”,其基本单元之间由流程线连接;结构图则更多表现为“树”形结构,其基本要素之间一般为概念上的从属关系或逻辑上的先后关系.框图有直观、明确的特点.用框图表达数学问题解决的过程或事物之间的关系,有助于提高抽象概括能力和逻辑思维能力,提高清晰表达和交流思想的能力.(三)重点、难点分析课标要求:1.算法初步(约12课时)(1)算法的含义、程序框图①通过对解决具体问题过程与步骤的分析(如二元一次方程组求解等问题),体会算法的思想,了解算法的含义.②通过模仿、操作、探索,经历通过设计程序框图表达解决问题的过程.在具体问题的解决过程中(如三元一次方程组求解等问题),理解程序框图的三种基本逻辑结构:顺序、条件分支、循环.(2)基本算法语句经历将具体问题的程序框图转化为程序语句的过程,理解几种基本算法语句——输入语句、输出语句、赋值语句、条件语句、循环语句,进一步体会算法的基本思想.(3)通过阅读中国古代数学中的算法案例,体会中国古代数学对世界数学发展的贡献.2.框图(约6课时)(文科)(1)流程图①通过具体实例,进一步认识程序框图.②通过具体实例,了解工序流程图(即统筹图)(参见例4、例5).③能绘制简单实际问题的流程图,体会流程图在解决实际问题中的作用.(2)结构图①通过实例,了解结构图;运用结构图梳理已学过的知识、整理收集到的资料信息.②结合作出的结构图与他人进行交流,体会结构图在揭示事物联系中的作用.结合课标要求和前面的分析,可以看到:算法中,算法思想——即程序化处理问题的思想是教学的重点,而算法的基本结构、基本语句无疑也是算法学习的重点.难点则集中体现循环结构的学习中.程序框图,作为描述算法的一种简洁清晰地语言,是算法也是框图的重点.另外,算法与框图除作为各自单元学习的内容之外,其思想方法也应渗透在高中教学课程其他有关内容中,鼓励学生尽可能地运用算法解决相关问题,运用框图表达知识结构.让程序化思想成为我们思考问题的习惯.二、“算法与框图”教与学的策略(一)注重算法基本思想的理解算法与框图作为新名词,在以前的数学教材中没有出现,但是算法与框图本身,学生并不陌生,解方程的算法、解不等式的算法、每章的知识结构图,都是同学们熟知的内容.只是算法的基本思想、特点,学习算法的必要性等问题没有专门的涉及.算法与框图首先培养学生的是一种思维习惯,为了让学生体会这种思想,这种思维方法的好处,一开始的时候,我们不应该让算理成为算法学习的难点.应选用大量具体的、学生熟悉的实例,在剖析具体实例的过程中,体会算法的基本思想以及算法的重要性和有效性.例1.让学生整理用加减消元法解二元一次方程组的步骤,并将步骤用语言描述;(该步骤即为算法)在这个过程中,体会算法就是有条理地解决问题的步骤;体会算法的特性:通用性、程序性、确定性、可行性、精确性等.给人看的算法与给机器用的算法.例2.红色的瓶装着红墨水,蓝色的瓶装着蓝墨水,请设计算法,将两瓶里的墨水互换.S1:找一个空瓶.S2:将红墨水倒在空瓶里,于是红瓶空了.S3:将蓝墨水倒在红色的瓶里,于是蓝瓶空了.S4:将空瓶里的红墨水倒在蓝瓶里.例3.判断1997是否质数?算理:用小于1997的所有数去除1997,看余数是否为0S1:用2去除1997,看余数是否为0,若余数为0,输出“不是质数”,结束;若余数不为0,执行下一步.S2:用3去除1997,看余数是否为0,若余数为0,输出“不是质数”,结束;若余数不为0,执行下一步.……S1995:若1996去除1997,看余数是否为0,若余数为0,输出“不是质数”,结束;若余数不为0,输出“质数”.(二)案例教学是算法与框图教学的基本方法在算法与框图的教学中,案例应该贯穿始终.从某种意义上来看,程序框图、程序语言其实都是一种描述算法的语言.那么,语言应该如何学习呢?适合在具体的语境中通过模仿、使用来学习.比如算法的三种基本逻辑结构及其框图表示,可用下面的方法来教学.(三)赋值语句与循环结构的教学在算法中有两个难点:一个是赋值语句,一个是循环结构.教学中,教师要注意分散这些难点.比如说:我们可以在讲完算法的概念之后,就安排一节课,专门讲“变量与赋值”,学生有了一定的了解之后,再讲算法的三种逻辑结构,并在这两种结构中有意识地运用“变量与赋值”,以求达到让学生逐步熟悉的目的,这样,循环结构中再用到变量与赋值的时候,就比较自然,学生可以将主要精力放在循环结构的其它部分,达到了分散难点的目的.【案例1】变量与赋值我们已经注意到,设计算法的过程中,解决问题的基本思想常常很简单,很清楚,但是表述却很麻烦,(比如说:判断1997是不是质数).为了解决这个问题,需要引入变量与赋值,在初中我们就了解变量的含义:在研究问题的过程中可以取不同数值的量称为变量.变量和函数是中学数学最重要和最基本的概念,在算法和程序设计中,它们仍然发挥着重要和基本的作用,它们会使算法的表述变得非常简洁、清楚.这节课来介绍如何设置变量和给变量赋值.例1.设计一个算法,从5个数中找出最大数剖析算理:解决这个问题的思想很简单,先选两个数进行比较,去掉小的,留下大的;再取第三个数与留下的数进行比较,去掉小的,留下大的;继续进行,直到每个数都被比较,最后留下的数就是最大数.设计算法:记这5个不同的数分别为a1,a2,a3,a4,a5,算法步骤如下:1.比较a1与a2,将较大的数记作b.{在这一步中,b表示的是前两个数中的最大数.}2.再将b与a3进行比较,将较大的数记作b.{执行完这一步后,b的值就是前3个数中的最大数.}3.再将b与a4进行比较,将较大的数记作b.{执行完这一步后,b表示的是什么?}4.再将b与a5进行比较,将较大的数记作b.{执行完这一步后,b表示的是什么?}5.输出b,b的值即为所求的最大数.上述算法的四个步骤中,每步都要与上一步中得到的最大数b进行比较,得出新的最大数,也记作b,b可以取不同的值,通常把b称作变量.比如第1步中,如果a1a2,则把a1的值赋予b,否则就把a2的值赋予b.这个过程称为赋值.把将a1的值赋予b记作:b=a1.(bßa1.或b:=a1).其中“=”为赋值符号.第一步用赋值语句,可以表示为:如果a1a2,则b=a1,否则,b=a2.回到例1,在这个问题中,可以将a1作为初始值赋予变量b.这样可以把算法步骤改写如下:1.b=a1;2.比较b与a2,如果ba2,则b=a2;3.比较b与a3,如果ba3,则b=a3;4.比较b与a4,如果ba4,则b=a4;5.比较b与a5,如果ba5,则b=a5;6.输出b,b就是这5个数中的最大数.本题中只有一个变量b.变量和赋值的概念在算法中十分重要.可以把变量想象成一个盒子,赋值就相当于往盒子里放东西.这个盒子可以装不同的数值,但是一次只能装一个.当赋予它新值的时候,原来的值将被新值取代.当变量参与运算和操作时,它表示的是想象中盒子里装的值.有的老师用“喜新厌旧”来比喻赋值语句,只要给他一个新的数值,旧的数值马上不见踪影;形象有趣;还有“见异思迁”的条件语句;“不撞南墙不落泪”的循环结构.例2.现有一瓶红墨水,一瓶蓝墨水,红墨水装在了红瓶子中,蓝墨水装在了蓝瓶子中,设计一个算法,将两瓶墨水对调瓶子.问题的实质就是:现有两个变量a,b,设计算法,交换两个变量的值.于是,需增设一个变量c.c=a,a=b,b=c.例3.设计算法,判断一个大于2的正整数n是否质数?剖析算理:先从具体的例子看起:如何判断1997是不是质数?用小于1997的所有数去除1997,看余数是否为0.这个问题中有1个变量(除数),若有必要,余数也可设成变量.S0:i=2.S1:用i去除1997,看余数是否为0,若余数为0,输出“不是质数”;若余数不为0,执行下一步.S2:i=i+1.S3:若i1997,返回S1;否则,输出“质数”.算法教学要注意循序渐进,先具体再抽象,先了解算理,再描述算法.通常,我们说一个算法越是抽象,有一般意义,应用就越广泛,越能体现算法本身的应用价值.可是,作为教学意义上的算法则不同,一定要从具体问题出发分析算法的算理、步骤,然后抽象概括出一般意义的算法,画出算法流程图,并在这个过程中,学习使用变量,学习更好的表示算法,以便在计算机上操作执行.【案例2】循环结构循环结构之所以是教学的难点,主要的原因是由于它的高度抽象.循环结构的主要组成部分是循环体,而循环体中往往涉及两个变量——计数变量和累加变量,变量的选择、变量的初值、循环的终止条件,这些都是学生容易犯错误的地方.如何突破这个难点?除了把变量和赋值先期处理,分散难点之外