1、第二章 算法初步本章教材分析 算法是数学及其应用的重要组成部分,是计算科学的重要基础.随着现代信息技术的飞速发展,算法在科学技术、社会发展中发挥着越来越大的作用,并融入社会生活的方方面面,算法思想已经成为现代人应具备的一种数学素养.需要特别指出的是,中国古代数学中蕴涵了丰富的算法思想.在这一章中,学生将在义务教育阶段初步感受算法思想的基础上,结合对具体数学实例的分析,体验流程图在解决问题中的作用;通过模仿、操作、探索,学习设计流程图表达解决问题的过程;体会算法的基本思想以及算法的重要性和有效性,发展有条理的思考与表达的能力,提高逻辑思维能力. 算法作为新名词,在以前的数学教科书中没有出现过.但
2、是算法本身,同学们并不陌生.解方程的算法、解不等式的算法、因式分解的算法,都是同学们熟知的内容.只是算法的基本思想、特点,学习算法的必要性等问题没有专门涉及.因此,本章中的算法的基本思想,将针对同学们熟悉的一些问题,分析解决这些具体问题的算理,整理出相应问题的解决步骤,然后抽象概括出更具一般意义的算法.通过这个过程,让学生体会算法的程序化思想.同时,针对同样的问题,我们给出不同的算法,让同学们意识到:同一个问题可能存在着多种算法,算法之间有优劣之分.接下来,通过求方程近似解,让同学们意识到学习算法的必要性将问题的解决过程即算法交给计算机完成,能够极大地提高效率. 接下来,介绍算法的基本结构.顺
3、序结构和选择结构是学生比较容易接受的,循环结构则比较难以理解.分析造成理解困难的原因之一是变量以及对变量的处理赋值.在循环结构的学习中,总结了循环结构的三个要素循环变量、循环体和循环的终止条件,并提供了可供学生模仿、操作的算法流程图. 排序算法可以说是应用最广泛的算法了,而且又易于理解,便于接受,是算法教学的良好素材.教材选择这个问题作为专题来讨论,给学生提供一个完整的分析、设计算法的过程,也给学生一个应用前面所学的关于变量和结构的知识的机会. 在前面的学习中,我们分别用自然语言和流程图来描述算法,这两种方式各有优缺点.要将算法最终交给计算机执行,需要用程序语言来表述算法,程序语言有很多种,但
4、是有一些基本语句是这些语言都要用到的:输入输出语句、赋值语句、条件语句、循环语句,在本章的最后介绍了这几种基本语句. 值得注意的是:1.注重对算法基本思惲的理解.算法是高中数学课程中的新内容,其思想非常重要,但并不神秘.例如,运用消元法解二元一次方程组、求最大公因数等的过程本质上就是算法.本模块中的算法内容是将数学中的算法与计算机技术建立联系,形式化地表示算法,在条件允许的学校,使其能在计算机上实现.为了有条理地、清晰地表达算法,往往需要将解决问题的过程整理成流程图;为了能在计算机上实现,还需要将自然语言或流程图翻译成计算机语言.本模块的主要目的是使学生体会算法的思想,提高逻辑思维能力.不要将
5、此部分内容简单处理成程序语言的学习和程序设计.2.算法教学必须通过实例进行.使学生在解决具体问题的过程中学习一些基本逻辑结构和语句.有条件的学校,应鼓励学生上机尝试运行程序.在实例的选择中,我们要把握这样一些原则:亲和原则:选取的例子要贴近学生,或者来自学生的生活实践,或者是学生所学过的数学知识.趣味性原则:选取的实例一般要有丰富的背景,本身要有趣味性.基础性原则:问题本身的算理并不难,只要蕴涵丰富的算法思想.可操作性原则:所选取问题的算法一般能在计算机上实现.3.算法教学要注意循序渐进,先具体再抽象,先了解算理,再描述算法. 通常,我们说一个算法越是抽象,有一般意义,应用就越广泛,越能体现算
6、法本身的应用价值.但是,作为教学意义上的算法则不同,一定要从具体问题出发分析算法的算理及算法步骤,然后抽象概括出一般意义的算法,画出算法流程图,并在这个过程中,学习使用变量、赋值,学习更好地表述算法,以便在计算机上操作执行. 算法的教学中,变量的理解、赋值的应用、循环结构的理解是重点和难点.教师要注意分散这些难点.学生对算法思想的认识、概念的把握、知识的灵活应用及能力的形成不是一次完成的,而是要把这些作为教学目标渗透在整章的学习中. 本章教学时间约需9课时,具体分配如下(仅供参考):1.1算法案例分析约1课时1.2排序问题与算法的多样性约1课时2.1顺序结构和选择结构约2课时2.2变量与赋值约
7、1课时2.3循环结构约1课时3.1条件语句约1课时3.2循环语句约1课时本章复习约1课时1 算法的基本思想1.1 算法案例分析整体设计教学分析 算法在中学数学课程中是一个新的概念,但没有一个精确化的定义,教科书只对它作了如下描述:“算法是解决某一类问题的步骤和程序.”为了让学生更好理解这一概念,教科书用5个例子来说明算法的实质.教学中,应从学生非常熟悉的例子引出算法,再通过例题加以巩固.三维目标1.正确理解算法的概念,掌握算法的基本特点.2.通过例题教学,使学生体会设计算法的基本思路.3.通过有趣的实例使学生了解算法这一概念的同时,激发学生学习数学的兴趣.重点难点教学重点:算法的含义及应用.教
8、学难点:写出解决一类问题的算法.课时安排1课时教学过程导入新课思路1(情境导入).一个人带着三只狼和三只羚羊过河,只有一条船,同船可容纳一个人和两只动物,没有人在的时候,如果狼的数量不少于羚羊的数量狼就会吃羚羊.该人如何将动物转移过河?请同学们写出解决问题的步骤,解决这一问题将要用到我们今天学习的内容算法.思路2(情境导入).大家都看过赵本山与宋丹丹演的小品吧,宋丹丹说了一个笑话,把大象装进冰箱总共分几步?答案:分三步,第一步:把冰箱门打开;第二步:把大象装进去;第三步:把冰箱门关上.上述步骤构成了把大象装进冰箱的算法,今天我们开始学习算法的概念.思路3(直接导入).算法不仅是数学及其应用的重
9、要组成部分,也是计算机科学的重要基础.在现代社会里,计算机已成为人们日常生活和工作中不可缺少的工具.听音乐、看电影、玩游戏、打字、画卡通画、处理数据,计算机是怎样工作的呢?要想弄清楚这个问题,算法的学习是一个开始.推进新课新知探究提出问题(1)解二元一次方程组有几种方法?(2)结合实例总结用加减消元法解二元一次方程组的步骤.(3)结合实例总结用代入消元法解二元一次方程组的步骤.(4)请写出解一般二元一次方程组的步骤.(5)根据上述实例谈谈你对算法的理解.(6)请同学们总结算法的特征.(7)请思考我们学习算法的意义.讨论结果:(1)代入消元法和加减消元法.(2)回顾二元一次方程组的求解过程,我们
10、可以归纳出以下步骤:第一步,+2,得5x=1.第二步,解,得x=.第三步,-2,得5y=3. 第四步,解,得y=35.第五步,得到方程组的解为(3)用代入消元法解二元一次方程组我们可以归纳出以下步骤:第一步,由得x=2y1. 第二步,把代入,得2(2y1)+y=1. 第三步,解得y=. 第四步,把代入,得x=21=.第五步,得到方程组的解为(4)对于一般的二元一次方程组其中a1b2a2b10,可以写出类似的求解步骤:第一步,b2-b1,得(a1b2a2b1)x=b2c1b1c2. 第二步,解,得x=.第三步,a1-a2,得(a1b2a2b1)y=a1c2a2c1. 第四步,解,得y=.第五步,
11、得到方程组的解为(5)算法的定义:广义的算法是指完成某项工作的方法和步骤,那么我们可以说洗衣机的使用说明书是操作洗衣机的算法,菜谱是做菜的算法等等.在数学中,算法通常是指按照一定规则解决某一类问题的明确有限的步骤.现在,算法通常可以编成计算机程序,让计算机执行并解决问题.(6)算法的特征:确定性:算法的每一步都应当做到准确无误、“不重不漏”.“不重”是指不是可有可无的,甚至无用的步骤,“不漏” 是指缺少哪一步都无法完成任务.逻辑性:算法从开始的“第一步”直到“最后一步”之间做到环环相扣,分工明确,“前一步”是“后一步”的前提, “后一步”是“前一步”的继续.有穷性:算法要有明确的开始和结束,当
12、到达终止步骤时所要解决的问题必须有明确的结果,也就是说必须在有限步内完成任务,不能无限制地持续进行.(7)在解决某些问题时,需要设计出一系列可操作或可计算的步骤来解决问题,这些步骤称为解决这些问题的算法.也就是说,算法实际上就是解决问题的一种程序性方法.算法一般是机械的,有时需进行大量重复的计算,它的优点是一种通法,只要按部就班地去做,总能得到结果.因此算法是计算机科学的重要基础.应用示例思路1例1 在给定素数表的条件下,设计算法,将936分解成素因数的乘积.(素数表见教材附录1)分析:1.查表判断936是否是素数:(1)如果936是素数,则分解结束;(2)如果936不是素数,则进行第2步.2
13、.确定936的最小素因数:2. 936=2468.3.查表判断468是否是素数:(1)如果468是素数,则分解结束;(2)如果468不是素数,则重复上述步骤,确定468的最小素因数.重复进行上述步骤,直到找出936的所有素因数.解:算法步骤如下:1.判断936是否为素数:否.2.确定936的最小素因数:2. 936=2468.3.判断468是否为素数:否.4.确定468的最小素因数:2. 936=22234.5.判断234是否为素数:否.6.确定234的最小素因数:2 936=222117.7.判断117是否为素数:否.8.确定117的最小素因数:3. 936=222339.9.判断39是否为
14、素数:否.10.确定39的最小素因数:3. 936=2223313.11.判断13是否为素数:13是素数,所以分解结束.分解结果是936=2223313.点评:以上步骤是解决素因数分解问题的一个过程,只要仿照这一系列步骤,都能解决这个问题.我们把这一系列步骤称为解决这个问题的一个算法.变式训练 设计一个算法,求840与1 764的最大公因数.分析:我们已经学习了对自然数进行素因数分解的方法,下面的算法就是在此基础上设计的.解答这个问题需要按以下思路进行.首先,对两个数分别进行素因数分解:840=23357, 1 764=223272.其次,确定两数的公共素因数:2,3,7.接着,确定公共素因数
15、的指数:对于公共素因数2,22是1 764的因数,23是840的因数,因此22是这两个数的公因数,这样就确定了公共素因数2的指数为2.同样,可以确定出公因数3和7的指数均为1.这样,就确定了840与1 764的最大公因数为2237=84.解:算法步骤如下:1.先将840进行素因数分解:840=23357;2.然后将1 764进行素因数分解:1 764=223272;3.确定它们的公共素因数:2,3,7;4.确定公共素因数的指数:公共素因数2,3,7的指数分别为2,1,1;5.最大公因数为223171=84.例2 一位商人有9枚银元,其中有1枚略轻的是假银元.你能用天平(不用砝码)将假银元找出来
16、吗?分析:最容易想到的解决这个问题的一种方法是:把9枚银元按顺序排成一列,先称前2枚,若不平衡,则可找出假银元;若平衡,则2枚银元都是真的,再依次与剩下的银元比较,就能找出假银元.图1解:按照下列步骤,就能将假银元找出来:1.任取2枚银元分别放在天平的两边.如果天平左右不平衡,则轻的一边就是假银元;如果天平平衡,则进行第2步.2.取下右边的银元,放在一边,然后把剩余的7枚银元依次放在右边进行称量,直到天平不平衡,偏轻的那一枚就是假银元.这种算法最少要称1次,最多要称7次.是不是还有更好的办法,使得称量次数少一些?我们可以采用下面的方法:图21.把银元分成3组,每组3枚.2.先将两组分别放在天平
17、的两边.如果天平不平衡,那么假银元就在轻的那一组;如果天平左右平衡,则假银元就在未称的第3组里.3.取出含假银元的那一组,从中任取两枚银元放在天平的两边.如果左右不平衡,则轻的那一边就是假银元;如果天平两边平衡,则未称的那一枚就是假银元.点评:经分析发现,这种算法只需称量2次,这种做法要明显好于前一种做法.当然,这两种方法都具有一般性,同样适用于n枚银元的情形.这是信息论中的一个模型,可以帮助我们找出某些特殊信息.从以上两个问题中可以看出,同一个问题可能存在着多种算法,其中一些可能要比另一些好.在实际问题和算法理论中,找出好的算法是一项重要的工作.思路2例1 (1)设计一个算法,判断7是否为质
18、数.(2)设计一个算法,判断35是否为质数.算法分析:(1)根据质数的定义,可以这样判断:依次用26除7,如果它们中有一个能整除7,则7不是质数,否则7是质数.算法如下:(1)用2除7,得到余数1.因为余数不为0,所以2不能整除7.用3除7,得到余数1.因为余数不为0,所以3不能整除7.用4除7,得到余数3.因为余数不为0,所以4不能整除7.用5除7,得到余数2.因为余数不为0,所以5不能整除7.用6除7,得到余数1.因为余数不为0,所以6不能整除7.因此,7是质数.(2)类似地,可写出“判断35是否为质数”的算法:用2除35,得到余数1.因为余数不为0,所以2不能整除35.用3除35,得到余
19、数2.因为余数不为0,所以3不能整除35.用4除35,得到余数3.因为余数不为0,所以4不能整除35.用5除35,得到余数0.因为余数为0,所以5能整除35.因此,35不是质数.点评:上述算法有很大的局限性,用上述算法判断35是否为质数还可以,如果判断1 997是否为质数就麻烦了,因此,我们需要寻找普适性的算法步骤.变式训练 请写出判断n(n2)是否为质数的算法.分析:对于任意的整数n(n2),若用i表示2(n-1)中的任意整数,则“判断n是否为质数”的算法包含下面的重复操作:用i除n,得到余数r.判断余数r是否为0,若是,则不是质数;否则,将i的值增加1,再执行同样的操作.这个操作一直要进行
20、到i的值等于(n-1)为止.算法如下:1.给定大于2的整数n.2.令i=2.3.用i除n,得到余数r.4.判断“r=0”是否成立.若是,则n不是质数,结束算法;否则,将i的值增加1,仍用i表示.5.判断“i(n-1)”是否成立.若是,则n是质数,结束算法;否则,返回第3步.例2 写出用“二分法”求方程x2-2=0 (x0)的近似解的算法.分析:令f(x)=x2-2,则方程x2-2=0 (x0)的解就是函数f(x)的零点.“二分法”的基本思想是:把函数f(x)的零点所在的区间a,b满足f(a)f(b)0“一分为二”,得到a,m和m,b.根据“f(a)f(m)0”是否成立,取出零点所在的区间a,m
21、或m,b,仍记为a,b.对所得的区间a,b重复上述步骤,直到包含零点的区间a,b“足够小”,则a,b内的数可以作为方程的近似解.解:1.令f(x)=x2-2,给定精度d.2.确定区间a,b,满足f(a)f(b)0.3.取区间中点m= a+b2.4.若f(a)f(m)0,则含零点的区间为a,m;否则,含零点的区间为m,b.将新得到的含零点的区间仍记为a,b.5.判断a,b的长度是否小于d或f(m)是否等于0.若是,则m是方程的近似解;否则,返回第三步.当d=0.005时,按照以上算法,可以得到下表.ab|a-b|12111.50.51.251.50.251.3751.50.1251.3751.4
22、37 50.062 51.406 251.437 50.031 251.406 251.421 8750.015 6251.414 062 51.421 8750.007 812 51.414 062 51.417 968 750.003 906 25于是,开区间(1.414 062 5,1.417 968 75)中的实数都是当精度为0.005时的原方程的近似解.实际上,上述步骤也是求2的近似解的一个算法.点评:算法一般是机械的,有时需要进行大量的重复计算,只要按部就班地去做,总能算出结果,通常把算法过程称为“数学机械化”.数学机械化的最大优点是它可以借助计算机来完成,实际上处理任何问题都需要
23、算法.如:中国象棋有中国象棋的棋谱、走法、胜负的评判准则;而国际象棋有国际象棋的棋谱、走法、胜负的评判准则;再比如申请出国有一系列的先后手续,购买物品也有相关的手续变式训练 求方程f(x)=x3+x2-1=0在0,1上的近似解,精度为0.01.解:根据上述分析,可以通过下列步骤求得方程的近似解:1.因为f(0)=-1,f(1)=1,f(0)f(1)0.01;2.取0,1的区间中点0.5;3.计算f(0.5)=-0.625;4.由于f(0.5)f(1)0.01;5.取0.5,1的区间中点0.75;6.计算f(0.75)=-0.015 63;7.由于f(0.75)f(1)0.01;当得到新的有解区
24、间0.75,0.757 82时,由于|0.757 82-0.75|=0.007 820.01,该区间精度已满足要求,所以取区间0.75,0.757 82的中点0.753 91,它是方程的一个近似解.例3 一个人带着三只狼和三只羚羊过河,只有一条船,同船可容纳一个人和两只动物,没有人在的时候,如果狼的数量不少于羚羊的数量就会吃羚羊.该人如何将动物转移过河?请设计算法.分析:任何动物同船不用考虑动物的争斗但需考虑承载的数量,还应考虑到两岸的动物都得保证狼的数量要小于羚羊的数量,故在算法的构造过程中尽可能保证船里面有狼,这样才能使得两岸的羚羊数量占到优势.解:具体算法如下:算法步骤:1.人带两只狼过
25、河,并自己返回.2.人带一只狼过河,自己返回.3.人带两只羚羊过河,并带两只狼返回.4.人带一只羊过河,自己返回.5.人带两只狼过河.点评:算法是解决某一类问题的精确描述,有些问题使用形式化、程序化的刻画是最恰当的.这就要求我们在写算法时应精练、简练、清晰地表达,要善于分析任何可能出现的情况,体现思维的严密性和完整性.本题型解决问题的算法中某些步骤重复进行多次才能解决,在现实生活中,很多较复杂的问题经常遇到这样的问题,设计算法的时候,如果能够合适地利用某些步骤的重复,不但可以使得问题变得简单,而且可以提高工作效率.变式训练 喝一杯茶需要这样几个步骤:洗刷水壶、烧水、洗刷茶具、沏茶.问:如何安排
26、这几个步骤?并给出两种算法,再加以比较.分析:本例主要为加深对算法概念的理解,可结合生活常识对问题进行分析,然后解决问题.解:算法一:1.洗刷水壶.2.烧水.3.洗刷茶具.4.沏茶.算法二:1.洗刷水壶.2.烧水,烧水的过程当中洗刷茶具.3.沏茶.点评:解决一个问题可有多个算法,可以选择其中最优的、最简单的、步骤尽量少的算法.上面的两种算法都符合题意,但是算法二运用了统筹方法的原理,因此这个算法要比算法一更科学.知能训练 设计算法判断一元二次方程ax2+bx+c=0是否有实数根.解:算法步骤如下: 1.输入一元二次方程的系数:a,b,c.2.计算=b24ac的值.3.判断0是否成立.若0成立,
27、输出“方程有实根”;否则输出“方程无实根”,结束算法.点评:用算法解决问题的特点是:具有很好的程序性,是一种通法.并且具有确定性、逻辑性、有穷性.让我们结合例题仔细体会算法的特点.拓展提升中国网通规定:拨打市内电话时,如果不超过3分钟,则收取话费0.22元;如果通话时间超过3分钟,则超出部分按每分钟0.1元收取通话费,不足一分钟按一分钟计算.设通话时间为t(分钟),通话费用y(元),如何设计一个程序,计算通话的费用?解:算法分析:数学模型实际上为y关于t的分段函数.关系式如下:其中t-3表示取不大于t-3的整数部分.算法步骤如下:1.输入通话时间t.2.如果t3,那么y = 0.22;否则判断tZ是否成立,若成立执行y= 0.2+0.1 (t3);否则执行y = 0.2+0.1( t3+1).3.输出通话费用c.课堂小结1.正确理解算法这一概念.2.结合例题掌握算法的特点,能够写出常见问题的算法.作业 课本本节练习1、练习2.设计感想 本节的引入精彩独特,让学生在感兴趣的故事里进入本节的学习.算法是本章的重点也是本章的基础,是一个较难理解的概念.为了让学生正确理解这一概念,本节设置了大量学生熟悉的事例,让学生仔细体会反复训练.本节的事例有古老的经典算法,有几何算法等,因此这是一节很好的课例.