人教版高中数学A版必修三优秀教案(第一章 算法初步)

发布时间:2012-08-12 09:55:23

第一章 算法初步

本章教材分析

算法是数学及其应用的重要组成部分,是计算科学的重要基础.算法的应用是学习数学的一个重要方面.学生学习算法的应用,目的就是利用已有的数学知识分析问题和解决问题.通过算法的学习,对完善数学的思想,激发应用数学的意识,培养分析问题、解决问题的能力,增强进行实践的能力等,都有很大的帮助.

本章主要内容:算法与程序框图、基本算法语句、算法案例和小结.教材从学生最熟悉的算法入手,通过研究程序框图与算法案例,使算法得到充分的应用,同时也展现了古老算法和现代计算机技术的密切关系.算法案例不仅展示了数学方法的严谨性、科学性,也为计算机的应用提供了广阔的空间.让学生进一步受到数学思想方法的熏陶,激发学生的学习热情.

在算法初步这一章中让学生近距离接近社会生活,从生活中学习数学,使数学在社会生活中得到应用和提高,让学生体会到数学是有用的,从而培养学生的学习兴趣.“数学建模也是高考考查重点.

本章还是数学思想方法的载体,学生在学习中会经常用到算法思想” “转化思想,从而提高自己数学能力.因此应从三个方面把握本章:

1)知识间的联系;

2)数学思想方法;

3)认知规律.

本章教学时间约需12课时,具体分配如下(仅供参考):

1.1 算法与程序框图

1.1.1 算法的概念

整体设计

教学分析

算法在中学数学课程中是一个新的概念,但没有一个精确化的定义,教科书只对它作了如下描述:在数学中,算法通常是指按照一定规则解决某一类问题的明确有限的步骤.”为了让学生更好理解这一概念,教科书先从分析一个具体的二元一次方程组的求解过程出发,归纳出了二元一次方程组的求解步骤,这些步骤就构成了解二元一次方程组的算法.教学中,应从学生非常熟悉的例子引出算法,再通过例题加以巩固.

三维目标

1.正确理解算法的概念,掌握算法的基本特点.

2.通过例题教学,使学生体会设计算法的基本思路.

3.通过有趣的实例使学生了解算法这一概念的同时,激发学生学习数学的兴趣.

重点难点

教学重点:算法的含义及应用.

教学难点:写出解决一类问题的算法.

课时安排

1课时

教学过程

导入新课

思路1(情境导入)

一个人带着三只狼和三只羚羊过河,只有一条船,同船可容纳一个人和两只动物,没有人在的时候,如果狼的数量不少于羚羊的数量狼就会吃羚羊.该人如何将动物转移过河?请同学们写出解决问题的步骤,解决这一问题将要用到我们今天学习的内容——算法.

思路2(情境导入)

大家都看过赵本山与宋丹丹演的小品吧,宋丹丹说了一个笑话,把大象装进冰箱总共分几步?

答案:分三步,第一步:把冰箱门打开;第二步:把大象装进去;第三步:把冰箱门关上.

上述步骤构成了把大象装进冰箱的算法,今天我们开始学习算法的概念.

思路3(直接导入)

算法不仅是数学及其应用的重要组成部分,也是计算机科学的重要基础.在现代社会里,计算机已成为人们日常生活和工作中不可缺少的工具.听音乐、看电影、玩游戏、打字、画卡通画、处理数据,计算机是怎样工作的呢?要想弄清楚这个问题,算法的学习是一个开始.

推进新课

新知探究

提出问题

1)解二元一次方程组有几种方法?

2)结合教材实例总结用加减消元法解二元一次方程组的步骤.

3)结合教材实例总结用代入消元法解二元一次方程组的步骤.

4)请写出解一般二元一次方程组的步骤.

5)根据上述实例谈谈你对算法的理解.

6)请同学们总结算法的特征.

7)请思考我们学习算法的意义.

讨论结果:

1)代入消元法和加减消元法.

2)回顾二元一次方程组

的求解过程,我们可以归纳出以下步骤:

第一步,+×2,得5x=1.

第二步,解,得x=.

第三步,-×2,得5y=3.

第四步,解,得y=.

第五步,得到方程组的解为

(3)用代入消元法解二元一次方程组

我们可以归纳出以下步骤:

第一步,由x=2y1.

第二步,把代入,得2(2y1)+y=1.

第三步,解y=.

第四步,把代入,得x=2×1=.

第五步,得到方程组的解为

(4)对于一般的二元一次方程组

其中a1b2a2b1≠0,可以写出类似的求解步骤:

第一步,×b2-×b1,得

a1b2a2b1x=b2c1b1c2.

第二步,解,得x=.

第三步,×a1-×a2,得(a1b2a2b1y=a1c2a2c1.

第四步,解,得y=.

第五步,得到方程组的解为

(5)算法的定义:广义的算法是指完成某项工作的方法和步骤,那么我们可以说洗衣机的使用说明书是操作洗衣机的算法,菜谱是做菜的算法等等.

在数学中,算法通常是指按照一定规则解决某一类问题的明确有限的步骤.

现在,算法通常可以编成计算机程序,让计算机执行并解决问题.

(6)算法的特征:确定性:算法的每一步都应当做到准确无误、不重不漏.“不重是指不是可有可无的,甚至无用的步骤,不漏是指缺少哪一步都无法完成任务.逻辑性:算法从开始的第一步直到最后一步之间做到环环相扣,分工明确,前一步后一步的前提,后一步前一步的继续.有穷性:算法要有明确的开始和结束,当到达终止步骤时所要解决的问题必须有明确的结果,也就是说必须在有限步内完成任务,不能无限制地持续进行.

(7)在解决某些问题时,需要设计出一系列可操作或可计算的步骤来解决问题,这些步骤称为解决这些问题的算法.也就是说,算法实际上就是解决问题的一种程序性方法.算法一般是机械的,有时需进行大量重复的计算,它的优点是一种通法,只要按部就班地去做,总能得到结果.因此算法是计算科学的重要基础.

应用示例

思路1

1 1)设计一个算法,判断7是否为质数.

2)设计一个算法,判断35是否为质数.

算法分析:1)根据质数的定义,可以这样判断:依次用267,如果它们中有一个能整除7,则7不是质数,否则7是质数.

算法如下:1)第一步,用27,得到余数1.因为余数不为0,所以2不能整除7.

第二步,用37,得到余数1.因为余数不为0,所以3不能整除7.

第三步,用47,得到余数3.因为余数不为0,所以4不能整除7.

第四步,用57,得到余数2.因为余数不为0,所以5不能整除7.

第五步,用67,得到余数1.因为余数不为0,所以6不能整除7.因此,7是质数.

2)类似地,可写出判断35是否为质数的算法:第一步,用235,得到余数1.因为余数不为0,所以2不能整除35.

第二步,用335,得到余数2.因为余数不为0,所以3不能整除35.

第三步,用435,得到余数3.因为余数不为0,所以4不能整除35.

第四步,用535,得到余数0.因为余数为0,所以5能整除35.因此,35不是质数.

点评:上述算法有很大的局限性,用上述算法判断35是否为质数还可以,如果判断1997是否为质数就麻烦了,因此,我们需要寻找普适性的算法步骤.

变式训练

请写出判断n(n>2)是否为质数的算法.

分析:对于任意的整数n(n>2),若用i表示2(n-1)中的任意整数,则判断n是否为质数的算法包含下面的重复操作:用in,得到余数r.判断余数r是否为0,若是,则不是质数;否则,将i的值增加1,再执行同样的操作.

这个操作一直要进行到i的值等于(n-1)为止.

算法如下:第一步,给定大于2的整数n.

第二步,令i=2.

第三步,用in,得到余数r.

第四步,判断“r=0”是否成立.若是,则n不是质数,结束算法;否则,将i的值增加1,仍用i表示.

第五步,判断“i>(n-1是否成立.若是,则n是质数,结束算法;否则,返回第三步.

2 写出用二分法求方程x2-2=0 (x>0)的近似解的算法.

分析:f(x)=x2-2,则方程x2-2=0 (x>0)的解就是函数f(x)的零点.

二分法的基本思想是:把函数f(x)的零点所在的区间[a,b(满足f(a)·f(b)<0一分为二,得到[a,m]和[m,b.根据“f(a)·f(m)<0”是否成立,取出零点所在的区间[a,m]或[m,b],仍记为[a,b.对所得的区间[a,b]重复上述步骤,直到包含零点的区间[a,b足够小,则[a,b]内的数可以作为方程的近似解.

解:第一步,令f(x)=x2-2,给定精确度d.

第二步,确定区间[a,b],满足f(a)·f(b)<0.

第三步,取区间中点m=.

第四步,若f(a)·f(m)<0,则含零点的区间为[a,m];否则,含零点的区间为[m,b.将新得到的含零点的区间仍记为[a,b.

第五步,判断[a,b]的长度是否小于df(m)是否等于0.若是,则m是方程的近似解;否则,返回第三步.

d=0.005时,按照以上算法,可以得到下表.

于是,开区间(1.414 062 5,1.417 968 75)中的实数都是当精确度为0.005时的原方程的近似解.实际上,上述步骤也是求的近似值的一个算法.

点评:算法一般是机械的,有时需要进行大量的重复计算,只要按部就班地去做,总能算出结果,通常把算法过程称为数学机械化”.数学机械化的最大优点是它可以借助计算机来完成,实际上处理任何问题都需要算法.如:中国象棋有中国象棋的棋谱、走法、胜负的评判准则;而国际象棋有国际象棋的棋谱、走法、胜负的评判准则;再比如申请出国有一系列的先后手续,购买物品也有相关的手续……

思路2

1 一个人带着三只狼和三只羚羊过河,只有一条船,同船可容纳一个人和两只动物,没有人在的时候,如果狼的数量不少于羚羊的数量就会吃羚羊.该人如何将动物转移过河?请设计算法.

分析:任何动物同船不用考虑动物的争斗但需考虑承载的数量,还应考虑到两岸的动物都得保证狼的数量要小于羚羊的数量,故在算法的构造过程中尽可能保证船里面有狼,这样才能使得两岸的羚羊数量占到优势.

解:具体算法如下:

算法步骤:

第一步:人带两只狼过河,并自己返回.

第二步:人带一只狼过河,自己返回.

第三步:人带两只羚羊过河,并带两只狼返回.

第四步:人带一只羊过河,自己返回.

第五步:人带两只狼过河.

点评:算法是解决某一类问题的精确描述,有些问题使用形式化、程序化的刻画是最恰当的.这就要求我们在写算法时应精练、简练、清晰地表达,要善于分析任何可能出现的情况,体现思维的严密性和完整性.本题型解决问题的算法中某些步骤重复进行多次才能解决,在现实生活中,很多较复杂的情境经常遇到这样的问题,设计算法的时候,如果能够合适地利用某些步骤的重复,不但可以使得问题变得简单,而且可以提高工作效率.

2 喝一杯茶需要这样几个步骤:洗刷水壶、烧水、洗刷茶具、沏茶.问:如何安排这几个步骤?并给出两种算法,再加以比较.

分析:本例主要为加深对算法概念的理解,可结合生活常识对问题进行分析,然后解决问题.

解:算法一:

第一步,洗刷水壶.

第二步,烧水.

第三步,洗刷茶具.

第四步,沏茶.

算法二:

第一步,洗刷水壶.

第二步,烧水,烧水的过程当中洗刷茶具.

第三步,沏茶.

点评:解决一个问题可有多个算法,可以选择其中最优的、最简单的、步骤尽量少的算法.上面的两种算法都符合题意,但是算法二运用了统筹方法的原理,因此这个算法要比算法一更科学.

3 写出通过尺轨作图确定线段AB一个5等分点的算法.

分析:我们借助于平行线定理,把位置的比例关系变成已知的比例关系,只要按照规则一步一步去做就能完成任务.

解:算法分析:

第一步,从已知线段的左端点A出发,任意作一条与AB不平行的射线AP.

第二步,在射线上任取一个不同于端点A的点C,得到线段AC.

第三步,在射线上沿AC的方向截取线段CE=AC.

第四步,在射线上沿AC的方向截取线段EF=AC.

第五步,在射线上沿AC的方向截取线段FG=AC.

第六步,在射线上沿AC的方向截取线段GD=AC,那么线段AD=5AC.

第七步,连结DB.

第八步,过CBD的平行线,交线段ABM,这样点M就是线段AB的一个5等分点.

点评:用算法解决几何问题能很好地训练学生的思维能力,并能帮助我们得到解决几何问题的一般方法,可谓一举多得,应多加训练.

知能训练

设计算法判断一元二次方程ax2+bx+c=0是否有实数根.

解:算法步骤如下:

第一步,输入一元二次方程的系数:abc.

第二步,计算Δ=b24ac的值.

第三步,判断Δ≥0是否成立.Δ≥0成立,输出方程有实根;否则输出方程无实根,结束算法.

点评:用算法解决问题的特点是:具有很好的程序性,是一种通法.并且具有确定性、逻辑性、有穷性.让我们结合例题仔细体会算法的特点.

拓展提升

中国网通规定:拨打市内电话时,如果不超过3分钟,则收取话费0.22元;如果通话时间超过3分钟,则超出部分按每分钟0.1元收取通话费,不足一分钟按一分钟计算.设通话时间为t(分钟),通话费用y(元),如何设计一个程序,计算通话的费用.

解:算法分析:

数学模型实际上为:y关于t的分段函数.

关系式如下:

y=

其中[t3]表示取不大于t3的整数部分.

算法步骤如下:

第一步,输入通话时间t.

第二步,如果t≤3,那么y=0.22;否则判断tZ 是否成立,若成立执行

y=0.2+0.1×(t3);否则执行y=0.2+0.1×([t3+1.

第三步,输出通话费用c.

课堂小结

1)正确理解算法这一概念.

(2)结合例题掌握算法的特点,能够写出常见问题的算法.

作业

课本本节练习12.

设计感想

本节的引入精彩独特,让学生在感兴趣的故事里进入本节的学习.算法是本章的重点也是本章的基础,是一个较难理解的概念.为了让学生正确理解这一概念,本节设置了大量学生熟悉的事例,让学生仔细体会反复训练.本节的事例有古老的经典算法,有几何算法等,因此这是一节很好的课例.

1.1.2 程序框图与算法的基本逻辑结构

整体设计

教学分析

用自然语言表示的算法步骤有明确的顺序性,但是对于在一定条件下才会被执行的步骤,以及在一定条件下会被重复执行的步骤,自然语言的表示就显得困难,而且不直观、不准确.因此,本节有必要探究使算法表达得更加直观、准确的方法.程序框图用图形的方式表达算法,使算法的结构更清楚、步骤更直观也更精确.为了更好地学好程序框图,我们需要掌握程序框的功能和作用,需要熟练掌握三种基本逻辑结构.

三维目标

1.熟悉各种程序框及流程线的功能和作用.

2.通过模仿、操作、探索,经历通过设计程序框图表达解决问题的过程.在具体问题的解决过程中,理解程序框图的三种基本逻辑结构:顺序结构、条件结构、循环结构.

3.通过比较体会程序框图的直观性、准确性.

重点难点

数学重点:程序框图的画法.

数学难点:程序框图的画法.

课时安排

4课时

教学过程

1课时 程序框图及顺序结构

导入新课

思路1(情境导入)

我们都喜欢外出旅游,优美的风景美不胜收,如果迷了路就不好玩了,问路有时还听不明白,真是急死人,有的同学说买张旅游图不就好了吗,所以外出旅游先要准备好旅游图.旅游图看起来直观、准确,本节将探究使算法表达得更加直观、准确的方法.今天我们开始学习程序框图.

思路2(直接导入)

用自然语言表示的算法步骤有明确的顺序性,但是对于在一定条件下才会被执行的步骤,以及在一定条件下会被重复执行的步骤,自然语言的表示就显得困难,而且不直观、不准确.因此,本节有必要探究使算法表达得更加直观、准确的方法.今天开始学习程序框图.

推进新课

新知探究

提出问题

1)什么是程序框图?

2)说出终端框(起止框)的图形符号与功能.

3)说出输入、输出框的图形符号与功能.

4)说出处理框(执行框)的图形符号与功能.

5)说出判断框的图形符号与功能.

6)说出流程线的图形符号与功能.

7)说出连接点的图形符号与功能.

8)总结几个基本的程序框、流程线和它们表示的功能.

9)什么是顺序结构?

讨论结果:

1)程序框图又称流程图,是一种用程序框、流程线及文字说明来表示算法的图形.

在程序框图中,一个或几个程序框的组合表示算法中的一个步骤;带有方向箭头的流程线将程序框连接起来,表示算法步骤的执行顺序.

2)椭圆形框:表示程序的开始和结束,称为终端框(起止框).表示开始时只有一个出口;表示结束时只有一个入口.

3)平行四边形框:表示一个算法输入和输出的信息,又称为输入、输出框,它有一个入口和一个出口.

4)矩形框:表示计算、赋值等处理操作,又称为处理框(执行框),它有一个入口和一个出口.

5)菱形框:是用来判断给出的条件是否成立,根据判断结果来决定程序的流向,称为判断框,它有一个入口和两个出口.

6)流程线:表示程序的流向.

7)圆圈:连接点.表示相关两框的连接处,圆圈内的数字相同的含义表示相连接在一起.

8)总结如下表.

(9)很明显,顺序结构是由若干个依次执行的步骤组成的,这是任何一个算法都离不开的基本结构.

三种逻辑结构可以用如下程序框图表示:

顺序结构 条件结构 循环结构

应用示例

1 请用程序框图表示前面讲过的判断整数n(n>2)是否为质数的算法.

解:程序框图如下:

点评:程序框图是用图形的方式表达算法,使算法的结构更清楚,步骤更直观也更精确.这里只是让同学们初步了解程序框图的特点,感受它的优点,暂不要求掌握它的画法.

变式训练

观察下面的程序框图,指出该算法解决的问题.

解:这是一个累加求和问题,共99项相加,该算法是求的值.

2 已知一个三角形三条边的边长分别为abc,利用海伦秦九韶公式设计一个计算三角形面积的算法,并画出程序框图表示.(已知三角形三边边长分别为a,b,c,则三角形的面积为S=),其中p=.这个公式被称为海伦秦九韶公式)

算法分析:这是一个简单的问题,只需先算出p的值,再将它代入分式,最后输出结果.因此只用顺序结构应能表达出算法.

算法步骤如下:

第一步,输入三角形三条边的边长a,b,c.

第二步,计算p=.

第三步,计算S=.

第四步,输出S.

程序框图如下:

点评:很明显,顺序结构是由若干个依次执行的步骤组成的,它是最简单的逻辑结构,它是任何一个算法都离不开的基本结构.

变式训练

下图所示的是一个算法的流程图,已知a1=3,输出的b=7,a2的值.

根据题意=7,

a1=3,a2=11.a2的值为11.

3 写出通过尺轨作图确定线段AB的一个5等分点的程序框图.

解:利用我们学过的顺序结构得程序框图如下:

点评:这个算法步骤具有一般性,对于任意自然数n,都可以按照这个算法的思想,设计出确定线段的n等分点的步骤,解决问题,通过本题学习可以巩固顺序结构的应用.

知能训练

有关专家建议,在未来几年内,中国的通货膨胀率保持在3 %左右,这将对我国经济的稳定有利无害.所谓通货膨胀率为3%,指的是每年消费品的价格增长率为3% .在这种情况下,某种品牌的钢琴2004年的价格是10 000元,请用流程图描述这种钢琴今后四年的价格变化情况,并输出四年后的价格.

解:P表示钢琴的价格,不难看出如下算法步骤:

2005P=10 000×1+3%=10 300

2006P=10 300×1+3%=10 609

2007P=10 609×1+3%=10 927.27

2008P=10 927.27×1+3%=11 255.09

因此,价格的变化情况表为:

程序框图如下:

点评:顺序结构只需严格按照传统的解决数学问题的解题思路,将问题解决掉.最后将解题步骤细化就可以.“细化指的是写出算法步骤、画出程序框图.

拓展提升

如下给出的是计算的值的一个流程图,其中判断框内应填入的条件是______________.

答案:i>10.

课堂小结

1)掌握程序框的画法和功能.

2)了解什么是程序框图,知道学习程序框图的意义.

3)掌握顺序结构的应用,并能解决与顺序结构有关的程序框图的画法.

作业

习题1.1A 1.

设计感想

首先,本节的引入新颖独特,旅游图的故事阐明了学习程序框图的意义.通过丰富有趣的事例让学生了解了什么是程序框图,进而激发学生学习程序框图的兴趣.本节设计题目难度适中,逐步把学生带入知识的殿堂,是一节好的课例.

2课时 条件结构

导入新课

思路1(情境导入)

我们以前听过这样一个故事,野兽与鸟发生了一场战争,蝙蝠来了,野兽们喊道:你有牙齿是我们一伙的,鸟们喊道:你有翅膀是我们一伙的,蝙蝠一时没了主意.过了一会儿蝙蝠有了一个好办法,如果野兽赢了,就加入野兽这一伙,否则加入另一伙,事实上蝙蝠用了分类讨论思想,在算法和程序框图中也经常用到这一思想方法,今天我们开始学习新的逻辑结构——条件结构.

思路2(直接导入)

前面我们学习了顺序结构,顺序结构像是一条没有分支的河流,奔流到海不复回,事实上多数河流是有分支的,今天我们开始学习有分支的逻辑结构——条件结构.

推进新课

新知探究

提出问题

1)举例说明什么是分类讨论思想?

2)什么是条件结构?

3)试用程序框图表示条件结构.

4)指出条件结构的两种形式的区别.

讨论结果:

1)例如解不等式ax>8(a≠0),不等式两边需要同除a,需要明确知道a的符号,但条件没有给出,因此需要进行分类讨论,这就是分类讨论思想.

2)在一个算法中,经常会遇到一些条件的判断,算法的流程根据条件是否成立有不同的流向.条件结构就是处理这种过程的结构.

3)用程序框图表示条件结构如下.

条件结构:先根据条件作出判断,再决定执行哪一种操作的结构就称为条件结构(或分支结构),如图1所示.执行过程如下:条件成立,则执行A框;不成立,则执行B框.

1 2

注:无论条件是否成立,只能执行AB之一,不可能两个框都执行.AB两个框中,可以有一个是空的,即不执行任何操作,如图2.

4)一种是在两个分支中均包含算法的步骤,符合条件就执行步骤A”,否则执行步骤B”;另一种是在一个分支中均包含算法的步骤A,而在另一个分支上不包含算法的任何步骤,符合条件就执行步骤A”,否则执行这个条件结构后的步骤.

应用示例

1 任意给定3个正实数,设计一个算法,判断以这3个正实数为三边边长的三角形是否存在,并画出这个算法的程序框图.

算法分析:判断以3个任意给定的正实数为三条边边长的三角形是否存在,只需验证这3个数中任意两个数的和是否大于第3个数.这个验证需要用到条件结构.

算法步骤如下:

第一步,输入3个正实数abc.

第二步,判断a+b>cb+c>ac+a>b是否同时成立.若是,则存在这样的三角形;否则,不存在这样的三角形.

程序框图如右图:

点评:根据构成三角形的条件,判断是否满足任意两边之和大于第三边,如果满足则存在这样的三角形,如果不满足则不存在这样的三角形.这种分类讨论思想是高中的重点,在画程序框图时,常常遇到需要讨论的问题,这时要用到条件结构.

2 设计一个求解一元二次方程ax2+bx+c=0的算法,并画出程序框图表示.

算法分析:我们知道,若判别式Δ=b2-4ac>0,则原方程有两个不相等的实数根

x1=,x2=

Δ=0,则原方程有两个相等的实数根x1=x2=

Δ<0,则原方程没有实数根.也就是说,在求解方程之前,可以先判断判别式的符号,根据判断的结果执行不同的步骤,这个过程可以用条件结构实现.

又因为方程的两个根有相同的部分,为了避免重复计算,可以在计算x1x2之前,先计算p=q=.

解决这一问题的算法步骤如下:

第一步,输入3个系数abc.

第二步,计算Δ=b2-4ac.

第三步,判断Δ≥0是否成立.若是,则计算p=q=;否则,输出方程没有实数根,结束算法.

第四步,判断Δ=0是否成立.若是,则输出x1=x2=p;否则,计算x1=p+qx2=p-q,并输出x1x2.

程序框图如下:

3 设计算法判断一元二次方程ax2+bx+c=0是否有实数根,并画出相应的程序框图.

解:算法步骤如下:

第一步,输入3个系数:abc.

第二步,计算Δ=b24ac.

第三步,判断Δ≥0是否成立.若是,则输出方程有实根;否则,输出方程无实根”.结束算法.

相应的程序框图如右:

点评:根据一元二次方程的意义,需要计算判别式Δ=b24ac的值.再分成两种情况处理:(1)当Δ≥0时,一元二次方程有实数根;

2)当Δ0时,一元二次方程无实数根.该问题实际上是一个分类讨论问题,根据一元二次方程系数的不同情况,最后结果就不同.因而当给出一个一元二次方程时,必须先确定判别式的值,然后再用判别式的值的取值情况确定方程是否有解.该例仅用顺序结构是办不到的,要对判别式的值进行判断,需要用到条件结构.

4 1)设计算法,求ax+b=0的解,并画出流程图.

解:对于方程ax+b=0来讲,应该分情况讨论方程的解.

我们要对一次项系数a和常数项b的取值情况进行分类,分类如下:

1)当a≠0时,方程有唯一的实数解是

2)当a=0b=0时,全体实数都是方程的解;

3)当a=0b≠0时,方程无解.

联想数学中的分类讨论的处理方式,可得如下算法步骤:

第一步,判断a≠0是否成立.若成立,输出结果解为”.

第二步,判断a=0b=0是否同时成立.若成立,输出结果解集为R”.

第三步,判断a=0b≠0是否同时成立.若成立,输出结果方程无解,结束算法.

程序框图如下:

点评:这是条件结构叠加问题,条件结构叠加,程序执行时需依次对条件1”“条件2”“条件3”……都进行判断,只有遇到能满足的条件才执行该条件对应的操作.

知能训练

设计算法,找出输入的三个不相等实数abc中的最大值,并画出流程图.

解:算法步骤:

第一步,输入abc的值.

第二步,判断a>b是否成立,若成立,则执行第三步;否则执行第四步.

第三步,判断a>c是否成立,若成立,则输出a,并结束;否则输出c,并结束.

第四步,判断b>c是否成立,若成立,则输出b,并结束;否则输出c,并结束.

程序框图如下:

点评:条件结构嵌套与条件结构叠加的区别:

1)条件结构叠加,程序执行时需依次对条件1”“条件2”“条件3”……都进行判断,只有遇到能满足的条件才执行该条件对应的操作.

2)条件结构的嵌套中,条件2”条件1”的一个分支,条件3”条件2”的一个分支……依此类推,这些条件中很多在算法执行过程中根据所处的分支位置不同可能不被执行.

3)条件结构嵌套所涉及的条件2”“条件3”……是在前面的所有条件依次一个一个的满足分支条件成立的情况下才能执行的此操作,是多个条件同时成立的叠加和复合.

5 “特快专递是目前人们经常使用的异地邮寄信函或托运物品的一种快捷方式.某快递公司规定甲、乙两地之间物品的托运费用根据下列方法计算:

f=

其中f(单位:元)为托运费,ω为托运物品的重量(单位:千克).

试画出计算费用f的程序框图.

分析:这是一个实际问题,根据数学模型可知,求费用f的计算公式随物品重量ω的变化而有所不同,因此计算时先看物品的重量,在不同的条件下,执行不同的指令,这是条件结构的运用,是二分支条件结构.其中,物品的重量通过输入的方式给出.

解:算法程序框图如右图:

拓展提升

有一城市,市区为半径为15 km的圆形区域,近郊区为距中心1525 km的范围内的环形地带,距中心25 km以外的为远郊区,如右图所示.市区地价每公顷100万元,近郊区地价每公顷60万元,远郊区地价为每公顷20万元,输入某一点的坐标为(x,y),求该点的地价.

分析:由该点坐标(xy),求其与市中心的距离r=,确定是市区、近郊区,还是远郊区,进而确定地价p.由题意知,p=

解:程序框图如下:

课堂小结

1)理解两种条件结构的特点和区别.

2)能用学过的两种条件结构解决常见的算法问题.

作业

习题1.1A3.

设计感想

本节采用引人入胜的方法引入正课,选用的例题难度适中,有的经典实用,有的新颖独特,每个例题都是很好的素材.条件结构是逻辑结构的核心,是培养学生逻辑推理的好素材,本节设计符合新课标精神,难度设计略高于教材.

3课时 循环结构

导入新课

思路1(情境导入)

我们都想生活在一个优美的环境中,希望看到的是碧水蓝天,大家知道工厂的污水是怎样处理的吗?污水进入处理装置后进行第一次处理,如果达不到排放标准,则需要再进入处理装置进行处理,直到达到排放标准.污水处理装置是一个循环系统,对于处理需要反复操作的事情有很大的优势.我们数学中有很多问题需要反复操作,今天我们学习能够反复操作的逻辑结构——循环结构.

思路2(直接导入)

前面我们学习了顺序结构,顺序结构像一条没有分支的河流,奔流到海不复回;上一节我们学习了条件结构,条件结构像有分支的河流最后归入大海;事实上很多水系是循环往复的,今天我们开始学习循环往复的逻辑结构——循环结构.

推进新课

新知探究

提出问题

1)请大家举出一些常见的需要反复计算的例子.

2)什么是循环结构、循环体?

3)试用程序框图表示循环结构.

4)指出两种循环结构的相同点和不同点.

讨论结果:

1)例如用二分法求方程的近似解、数列求和等.

2)在一些算法中,经常会出现从某处开始,按照一定的条件反复执行某些步骤的情况,这就是循环结构.反复执行的步骤称为循环体.

3)在一些算法中要求重复执行同一操作的结构称为循环结构.即从算法某处开始,按照一定条件重复执行某一处理的过程.重复执行的处理步骤称为循环体.

循环结构有两种形式:当型循环结构和直到型循环结构.

1°当型循环结构,如图(1)所示,它的功能是当给定的条件P成立时,执行A框,A框执行完毕后,返回来再判断条件P是否成立,如果仍然成立,返回来再执行A框,如此反复执行A框,直到某一次返回来判断条件P不成立时为止,此时不再执行A框,离开循环结构.继续执行下面的框图.

2°直到型循环结构,如图(2)所示,它的功能是先执行重复执行的A框,然后判断给定的条件P是否成立,如果P仍然不成立,则返回来继续执行A框,再判断条件P是否成立.继续重复操作,直到某一次给定的判断条件P时成立为止,此时不再返回来执行A框,离开循环结构.继续执行下面的框图.

见示意图

当型循环结构 直到型循环结构

(4)两种循环结构的不同点直到型循环结构是程序先进入循环体,然后对条件进行判断,如果条件不满足,就继续执行循环体,直到条件满足时终止循环.

当型循环结构是在每次执行循环体前,先对条件进行判断,当条件满足时,执行循环体,否则终止循环.

两种循环结构的相同点: 两种不同形式的循环结构可以看出,循环结构中一定包含条件结构,用于确定何时终止执行循环体.

应用示例

思路1

1 设计一个计算1+2+……+100的值的算法,并画出程序框图.

算法分析:通常,我们按照下列过程计算1+2+……+100的值.

显然,这个过程中包含重复操作的步骤,可以用循环结构表示.分析上述计算过程,可以发现每一步都可以表示为第(i-1)步的结果+i=i步的结果.

为了方便、有效地表示上述过程,我们用一个累加变量S来表示第一步的计算结果,即把S+i的结果仍记为S,从而把第i步表示为S=S+i

其中S的初始值为0i依次取12100,由于i同时记录了循环的次数,所以也称为计数变量.

解决这一问题的算法是:

第一步,令i=1S=0.

第二步,若i≤100成立,则执行第三步;否则,输出S,结束算法.

第三步,S=S+i.

第四步,i=i+1,返回第二步.

程序框图如右:

上述程序框图用的是当型循环结构,如果用直到型循环结构表示,则程序框图如下:

点评:这是一个典型的用循环结构解决求和的问题,有典型的代表意义,可把它作为一个范例,仔细体会三种逻辑结构在程序框图中的作用,学会画程序框图.

变式训练

已知有一列数,设计框图实现求该列数前20项的和.

分析:该列数中每一项的分母是分子数加1,单独观察分子,恰好是1234n,因此可用循环结构实现,设计数器i,用i=i+1实现分子,设累加器S,用S=,可实现累加,注意i只能加到20

解:程序框图如下:

方法一: 方法二:

点评:在数学计算中,i=i+1不成立,S=S+i只有在i=0时才能成立.在计算机程序中,它们被赋予了其他的功能,不再是数学中的相等关系,而是赋值关系.变量i用来作计数器,i=i+1的含义是:将变量i的值加1,然后把计算结果再存贮到变量i中,即计数器i在原值的基础上又增加了1

变量S作为累加器,来计算所求数据之和.如累加器的初值为0,当第一个数据送到变i中时,累加的动作为S=S+i,即把S的值与变量i的值相加,结果再送到累加器S中,如此循环,则可实现数的累加求和.

2 某厂2005年的年生产总值为200万元,技术革新后预计以后每年的年生产总值都比上一年增长5%,设计一个程序框图,输出预计年生产总值超过300万元的最早年份.

算法分析:先写出解决本例的算法步骤:

第一步,输入2005年的年生产总值.

第二步,计算下一年的年生产总值.

第三步,判断所得的结果是否大于300,若是,则输出该年的年份,算法结束;否则,返回第二步.

由于第二步是重复操作的步骤,所以本例可以用循环结构来实现.我们按照确定循环体”“初始化变量”“设定循环控制条件的顺序来构造循环结构.

1)确定循环体:设a为某年的年生产总值,t为年生产总值的年增长量,n为年份,则循环体为t=0.05a,a=a+t,n=n+1.

2)初始化变量:若将2005年的年生产总值看成计算的起始点,则n的初始值为2005a的初始值为200.

3)设定循环控制条件:当年生产总值超过300万元时终止循环,所以可通过判断“a>300”是否成立来控制循环.

程序框图如下:

思路2

1 设计框图实现1+3+5+7+…+131的算法.

分析:由于需加的数较多,所以要引入循环结构来实现累加.观察所加的数是一组有规律的数(每相临两数相差2),那么可考虑在循环过程中,设一个变量i,用i=i+2来实现这些有规律的数,设一个累加器sum,用来实现数的累加,在执行时,每循环一次,就产生一个需加的数,然后加到累加器sum中.

解:算法如下:

第一步,赋初值i=1sum=0.

第二步,sum=sum+ii=i+2.

第三步,如果i≤131,则反复执第二步;否则,执行下一步.

第四步,输出sum.

第五步,结束.

程序框图如右图.

点评:1)设计流程图要分步进行,把一个大的流程图分割成几个小的部分,按照三个基本结构即顺序、条件、循环结构来局部安排,然后把流程图进行整合.

2)框图画完后,要进行验证,按设计的流程分析是否能实现所求的数的累加,分析条件是否加到131就结束循环,所以我们要注意初始值的设置、循环条件的确定以及循环体内语句的先后顺序,三者要有机地结合起来.最关键的是循环条件,它决定循环次数,可以想一想,为什么条件不是“i<131”“i=131”,如果是“i<131”,那么会少执行一次循环,131就加不上了.

2 高中某班一共有40名学生,设计算法流程图,统计班级数学成绩良好(分数>80)和优秀(分数>90)的人数.

分析:用循环结构实现40个成绩的输入,每循环一次就输入一个成绩s,然后对s的值进行判断.设两个计数器m,n,如果s>90,则m=m+1,如果80,则n=n+1.设计数器i,用来控制40个成绩的输入,注意循环条件的确定.

解:程序框图如下图:

知能训练

由相应的程序框图如右图,补充完整一个计算1+2+3+…+100的值的算法.(用循环结构)

第一步,设i的值为_____________.

第二步,设sum的值为_____________.

第三步,如果i≤100执行第_____________,否则,转去执行第_____________.

第四步,计算sumi并将结果代替_____________.

第五步,计算_____________并将结果代替i.

第六步,转去执行第三步.

第七步,输出sum的值并结束算法.

分析:流程图各图框的内容(语言和符号)要与算法步骤相对应,在流程图中算法执行的顺序应按箭头方向进行.

解:第一步,设i的值为1.

第二步,设sum的值为0.

第三步,如果i≤100,执行第四步,否则,转去执行第七步.

第四步,计算sumi并将结果代替sum.

第五步,计算i1并将结果代替i.

第六步,转去执行第三步.

第七步,输出sum的值并结束算法.

拓展提升

设计一个算法,求1+2+4+…+249的值,并画出程序框图.

解:算法步骤:

第一步,sum=0.

第二步,i=0.

第三步,sum=sum+2i.

第四步,i=i+1.

第五步,判断i是否大于49,若成立,则输出sum,结束.否则,返回第三步重新执行.

程序框图如右图:

点评:1)如果算法问题里涉及的运算进行了许多次重复的操作,且先后参与运算的数之间有相同的规律,就可引入变量循环参与运算(我们称之为循环变量),应用于循环结构.在循环结构中,要注意根据条件设计合理的计数变量、累加和累乘变量及其个数等,特别要求条件的表述要恰当、精确.

2)累加变量的初始值一般取0,而累乘变量的初始值一般取1.

课堂小结

1)熟练掌握两种循环结构的特点及功能.

2)能用两种循环结构画出求和等实际问题的程序框图,进一步理解学习算法的意义.

作业

习题1.1A2.

设计感想

本节的引入抓住了本节的特点,利用计算机进行循环往复运算,解决累加、累乘等问题.循环结构是逻辑结构中的难点,它一定包含一个条件结构,它能解决很多有趣的问题.本节选用了大量精彩的例题,对我们系统掌握程序框图有很大的帮助.

4课时 程序框图的画法

导入新课

思路1(情境导入)

一条河流有时像顺序结构,奔流到海不复回;有时像条件结构分分合合向前进;有时像循环结构,虽有反复但最后流入大海.一个程序框图就像一条河流包含三种逻辑结构,今天我们系统学习程序框图的画法.

思路2(直接导入)

前面我们学习了顺序结构、条件结构、循环结构,今天我们系统学习程序框图的画法.

推进新课

新知探究

提出问题

(1)请大家回忆顺序结构,并用程序框图表示.

(2)请大家回忆条件结构,并用程序框图表示.

(3)请大家回忆循环结构,并用程序框图表示.

(4)总结画程序框图的基本步骤.

讨论结果:

(1)顺序结构是由若干个依次执行的步骤组成的,这是任何一个算法都离不开的基本结构.框图略.

(2)在一个算法中,经常会遇到一些条件的判断,算法的流程根据条件是否成立有不同的流向.条件结构就是处理这种过程的结构.框图略.

(3)在一些算法中要求重复执行同一操作的结构称为循环结构.即从算法某处开始,按照一定条件重复执行某一处理过程.重复执行的处理步骤称为循环体.

循环结构有两种形式:当型循环结构和直到型循环结构.框图略.

(4)从前面的学习可以看出,设计一个算法的程序框图通常要经过以下步骤:

第一步,用自然语言表达算法步骤.

第二步,确定每一个算法步骤所包含的逻辑结构,并用相应的程序框表示,得到该步骤的程序框图.

第三步,将所有步骤的程序框图用流程线连接起来,并加上终端框,得到表示整个算法的程序框图.

应用示例

1 结合前面学过的算法步骤,利用三种基本逻辑结构画出程序框图,表示用二分法求方程x2-2=0x>0)的近似解的算法.

算法分析:1)算法步骤中的第一步”“第二步第三步可以用顺序结构来表示(如下图):

2)算法步骤中的第四步可以用条件结构来表示(如下图).在这个条件结构中,分支用“a=m”表示含零点的区间为[mb,并把这个区间仍记成[ab];分支用“b=m ”表示含零点的区间为[a,m],同样把这个区间仍记成[ab.

3)算法步骤中的第五步包含一个条件结构,这个条件结构与第三步”“第四步构成一个循环结构,循环体由第三步第四步组成,终止循环的条件是“|a-b|df(m)=0”.第五步中,还包含由循环结构与输出m”组成的顺序结构(如下图).

4)将各步骤的程序框图连接起来,并画出开始结束两个终端框,就得到了表示整个算法的程序框图(如下图).

点评:在用自然语言表述一个算法后,可以画出程序框图,用顺序结构、条件结构和循环结构来表示这个算法,这样表示的算法清楚、简练,便于阅读和交流.

2 相传古代的印度国王要奖赏国际象棋的发明者,问他需要什么.发明者说:陛下,在国际象棋的第一个格子里面放1粒麦子,在第二个格子里面放2粒麦子,第三个格子放4粒麦子,以后每个格子中的麦粒数都是它前一个格子中麦粒数的二倍,依此类推(国际象棋棋盘共有64个格子),请将这些麦子赏给我,我将感激不尽.国王想这还不容易,就让人扛了一袋小麦,但不到一会儿就没了,最后一算结果,全印度一年生产的粮食也不够.国王很奇怪,小小的棋盘,不足100个格子,如此计算怎么能放这么多麦子?试用程序框图表示此算法过程.

解:将实际问题转化为数学模型,该问题就是要求1+2+4+……+263的和.

程序框图如下:

点评:对于开放式探究问题,我们可以建立数学模型(上面的题目可以与等比数列的定义、性质和公式联系起来)和过程模型来分析算法,通过设计算法以及语言的描述选择一些成熟的办法进行处理.

3 乘坐火车时,可以托运货物.从甲地到乙地,规定每张火车客票托运费计算方法是:行李质量不超过50 kg时按025 /kg;超过50 kg而不超过100 kg时,其超过部分按035/kg;超过100 kg时,其超过部分按045/kg.编写程序,输入行李质量,计算出托运的费用.

分析:本题主要考查条件语句及其应用.先解决数学问题,列出托运的费用关于行李质量的函数关系式.设行李质量为x kg,应付运费为y元,则运费公式为:

y=

整理得y=

要计算托运的费用必须对行李质量分类讨论,因此要用条件语句来实现.

解:算法分析:

第一步,输入行李质量x.

第二步,当x≤50时,计算y=0.25x,否则,执行下一步.

第三步,当x≤100,计算y=0.35x5,否则,计算y=0.45x15.

第四步,输出y

程序框图如下:

知能训练

设计一个用有理数数幂逼近无理指数幂的算法,画出算法的程序框图.

算法步骤:

第一步,给定精确度d,i=1.

第二步,取出的到小数点后第i位的不足近似值,记为a;取出的到小数点后第i位的过剩近似值,记为b.

第三步,计算m=5b-5a.

第四步,若m则得到的近似值为5a;否则,将i的值增加1,返回第二步.

第五步,得到的近似值为5a.

程序框图如下:

拓展提升

,画出程序框图.

分析:如果采用逐步计算的方法,利用顺序结构来实现,则非常麻烦,由于前后的运算需重复多次相同的运算,所以应采用循环结构,可用循环结构来实现其中的规律.观察原式中的变化的部分及不变项,找出总体的规律是4+,要实现这个规律,需设初值x=4

解:程序框图如下:

课堂小节

1)进一步熟悉三种逻辑结构的应用,理解算法与程序框图的关系.

2)根据算法步骤画出程序框图.

作业

习题1.1B12.

设计感想

本节是前面内容的概括和总结,在回忆前面内容的基础上,选择经典的例题,进行了详尽的剖析,这样降低了学生学习的难度.另外,本节的练习难度适中,并且多为学生感兴趣的问题,这样为学生学好本节内容作好充分准备,希望大家喜欢这一节课.

1.2 基本算法语句

1.2.1 输入语句、输出语句和赋值语句

整体设计

教学分析

通过上一节的学习,学生了解了算法的含义,学习了用算法步骤和程序框图表示算法的方法,本节介绍用程序设计语言表示算法的方法. 算法步骤和程序框图表示的算法,计算机是不能理解的,程序是算法的精确形式,是计算机可以理解的算法.本节的教学重点是通过实例使学生理解三种基本算法语句的结构和用法,并在此基础上编写由算法语句组成的程序,从而更细致地刻画算法,进一步体会算法的基本思想.

三维目标

1.理解学习基本算法语句的意义.

2.学会输入语句、输出语句和赋值语句的基本用法.

3.理解算法步骤、程序框图和算法语句的关系,学会算法语句的写法.

重点难点

教学重点:输入语句、输出语句和赋值语句的基本用法.

教学难点:算法语句的写法.

课时安排

1课时

教学过程

导入新课

思路1(情境导入)

中国足球队在亚洲杯上的失利说明,中国足球仍然需要请外国教练.高水平的外国教练有先进的足球理念,有系统科学的训练计划,有先进的足球技术,但由于语言不通不能直接传授给队员. 算法步骤、程序框图虽然容易掌握,但计算机不能理解,因此我们需要学习算法语句.

思路2(直接导入)

前面我们学习了程序框图的画法,为了让计算机能够理解算法步骤、程序框图,我们开始学习算法语句.

推进新课

新知探究

提出问题

1)指出输入语句的格式、功能、要求.

2)指出输出语句的格式、功能、要求.

3)指出赋值语句的格式、功能、要求.

4)利用框图总结三种语句的功能、格式、特点.

5)指出三种语句与框图的对应关系.

讨论结果:

(1)输入语句的格式:INPUT“提示内容 变量

例如:INPUT “x=”x

功能:实现算法的输入变量信息(数值或字符)的功能.

要求:

1°输入语句要求输入的值是具体的常量.

2°提示内容提示用户输入的是什么信息,必须加双引号,提示内容原原本本的在计算机屏幕上显示,提示内容与变量之间要用分号隔开.

3°一个输入语句可以给多个变量赋值,中间用分隔.

形式如:INPUT“a=b=c=abc

(2)输出语句的一般格式:PRINT“提示内容;表达式

例如:PRINT“S=”S

功能:实现算法输出信息(表达式)的功能.

要求:

1°表达式是指算法和程序要求输出的信息.

2°提示内容提示用户要输出的是什么信息,提示内容必须加双引号,提示内容要用分号和表达式分开.

3°如同输入语句一样,输出语句可以一次完成输出多个表达式的功能,不同的表达式之间可用分隔.

形式如:PRINT “a,b,c:”a,b,c

(3)赋值语句的一般格式:变量=表达式.

赋值语句中的称作赋值号.

功能:将表达式所代表的值赋给变量.

要求:

1°赋值语句左边只能是变量名字,而不是表达式,右边表达式可以是一个常量、变量或含变量的运算式.如:2=x是错误的.

2°赋值号的左右两边不能对换.赋值语句是将赋值号右边的表达式的值赋给赋值号左边的变量.“A=B”“B=A”的含义运行结果是不同的,如x=5是对的,5=x是错的,A+B=C是错的,C=A+B是对的.

3°不能利用赋值语句进行代数式的演算(如化简、因式分解、解方程等),如y=x21=(x1)(x+1),这是实现不了的.在赋值号右边表达式中每一个变量的值必须事先赋给确定的值.在一个赋值语句中只能给一个变量赋值,不能出现两个或以上的“=”.但对于同一个变量可以多次赋值.

(4)三种语句的功能、格式、特点如下:

QBASIC语言中,输入语句 INPUT语句,输出语句是PRINT语句,赋值语句是LET语句(“LET”可以省略).下表列出了这三种语句的一般格式、主要功能和相关说明,供教师教学时参考,不要求学生掌握.

5)指出三种语句与框图的对应关系如下图.

应用示例

思路1

1 用描点法作函数y=x3+3x2-24x+30的图象时,需要求出自变量和函数的一组对应值 .编写程序,分别计算当x=-5-4-3-2-1012345时的函数值.

算法分析:根据题意,对于每一个输入的自变量的值,都要输出相应的函数值.写成算法步骤如下:

第一步,输入一个自变量的x的值.

第二步,计算y=x3+3x2-24x+30.

第三步,输出y.

程序框图如下图:

显然,这是一个由顺序结构构成的算法,按照程序框图中流程线的方向,依次将程序框中的内容写成相应的算法语句,就得相应的程序.

解:程序:

INPUT “x”x

y=x^3+3*x^2-24*x+30

PRINT y

END

点评:前面我们学习了算法步骤、程序框图,我们对照程序框图与算法语句可以得到它们之间的对应关系.例如:在这个程序中,第1行中的INPUT语句就是输入语句.这个语句的一般格式是

其中,提示内容一般是提示用户输入什么样的信息,每次运行例1中的程序时,依次输入-5-4-3-2-1012345,计算机每次都把新输入的值赋给变量“x”,并按“x”新获得的值计算变量“y”的值.

2 给一个变量重复赋值.

解:程序:

A=10

A=A+15

PRINT A

END

点评:给一个变量重复赋值,变量只保存最后一次赋值,比如此程序的输出值是25.

3 编写程序,计算一个学生数学、语文、英语三门课的平均成绩.

算法分析:

先写出解决本例的算法步骤:

第一步,输入该学生数学、语文、英语三门课的成绩abc.

第二步,计算y=.

第三步,输出y.

程序框图如下:

由于PRINT 句还可以用于输出数值计算的结果,所以这个算法可以写成下列程序.

程序:

INPUT “Maths=”;a

INPUT “Chinese=”;b

INPUT “English=”;c

PRINT “The average=”;(a+b+c)/3

END

点评:3中的第4行的 PRINT 句是输出语句,它的一般形式是

PRINT语句可以在计算机的屏幕上输出常量、变量的值和系统信息,同输入语句一样,这里的表达式前也可以有提示内容”.

4 变换两个变量AB的值,并输出交换前后的值.

解:程序:

INPUT AB

PRINT AB

x=A

A=B

B=x

PRINT A,B

END

思路2

1 写出求三个数abc的方差的程序.

分析:方差是在初中统计内容中学习过的知识,计算所有数的方差首先计算所有数的平均数,通过公式s2=来计算.

算法步骤:

第一步,计算平均数.

第二步,计算方差s2=.

第三步,得到的结果即为所求.

程序如下:

INPUT abc

y=(a+b+c)/3

S=((ay)2+ (by)2+ (cy)2)/3

PRINT S

END

点评:套用公式求值问题是传统数学求值问题的一种,它是一种典型的顺序结构,也就是说只通过输入、输出和赋值语句就可以完成任务.解决这类问题的关键是先分析这种问题的解法,即构造计算的过程,再写出算法步骤和流程图,再翻译成算法语句即可.

2 编写一个程序,要求输入两个正数ab的值,输出abba的值.

分析:可以利用 INPUT 句输入两个正数,然后将abba的值分别赋给两个变量输出即可.也可以将abba的底数和幂数进行交换,故还可以利用赋值语句,采用将两个变量的值互换的办法实现.

解:程序1

INPUT “abab

A=a^b

B=b^a

PRINT “a^b=”A“b^a=”B

END

程序2

INPUT “abab

A=a^b

PRINT “a^b=”A

x=a

a=b

b=x

A=a^b

PRINT “b^a=”A

END

点评:交换ab的值可通过下面三个语句来实现:

t=a

a=b

b=t

通过引进一个中间变量t实现变量ab的值的交换,因此只需用赋值语句即可实现算法.在一些较为复杂的问题算法中经常需要对两个变量的值进行交换,因此应熟练掌握这种方法.

知能训练

1.判断下列给出的输入语句、输出语句和赋值语句是否正确?为什么?

1)输入语句INPUT abc

2)输出语句A4

3)赋值语句3B

4)赋值语句AB=-2

解:1)错,变量之间应用号隔开.

2)错,PRINT语句不能用赋值号“=”.

3)错,赋值语句中“=”号左右不能互换.

4)错,一个赋值语句只能给一个变量赋值.

点评:输入语句、输出语句和赋值语句基本上对应于算法中的顺序结构.输入语句、输出语句和赋值语句都不包括控制转移,由它们组成的程序段必然是顺序结构.

2.请写出下面运算输出的结果.

1a=5

b=3

c=(a+b)/2

d=c*c

PRINT“d=”;d

(2)a=1

b=2

c=a+b

b=a+c-b

PRINT “a=,b=,c=”;a,b,c

(3)a=10

b=20

c=30

a=b

b=c

c=a

PRINT “a=,b=,c=” ;a,b,c

解:116;语句c=(a+b)/2是将ab和的一半赋值给变量c,语句d=c*c是将c的平方赋值给d,最后输出d的值.

2123;语句c=a+b是将ab的和赋值给c,语句b=a+cb是将a+cb的值赋值给了b.

3203020;经过语句a=babc的值是202030.经过语句b=cabc的值是203030.经过语句c=aabc的值是203020.

点评:语句的识别问题是一个逆向性思维,一般我们认为我们的学习是从算法步骤(自然语言)至程序框图,再到算法语言(程序).如果将程序摆在我们的面前时,我们要先识别每个语句,再整体把握并概括出程序的功能.

拓展提升

已知某生某三科的成绩为807595分,求三科的总分及平均分.

分析:将三科成绩赋给三个变量ABC,然后对三个变量进行操作、运算,求其总分、平均分.变量的起名规则:由字母、数字、下划线组成,但第一个字符必须是字母(大、小写皆可),起名时尽量做到见名知义,如本例中我们可用变量 ZF表示总分,PJF 示平均分.

解:程序框图如下图:

程序:

A=80

B=75

C=95

ZF=A+B+C

PJF=ZF/3

PRINT ZFPJF

END

课堂小结

1)输入语句、输出语句和赋值语句的基本用法.

2)用输入语句、输出语句和赋值语句编写算法语句.

作业 习题1.2A2.

设计感想

本节的引入阐明了程序框图与算法语句的关系,本节利用框图与语句的对应关系降低了本节的学习难度.由于本节是算法语句的开始,所以本节选用了大量难度较低的算法语句供学生练习,让学生充分体会程序框图与算法语句的关系,为今后的学习打好基础并树立信心.

1.2.2 条件语句

整体设计

教学分析

通过上一节的学习,学生学会了输入语句、输出语句和赋值语句的基本用法,本节介绍条件语句的用法. 程序中的条件语句与程序框图中的条件结构存在一一对应关系,这种对应关系对于学生理解条件语句的结构,进一步理解算法中的条件结构都是很有帮助的.我们可以给出条件语句的一般格式,让学生自己画出相应的程序框图,也可以给出程序框图,让学生写出算法语句.

三维目标

1.理解学习基本算法语句的意义.

2.学会条件语句的基本用法.

3.理解算法步骤、程序框图和算法语句的关系,学会算法语句的写法.

重点难点

教学重点:条件语句的基本用法.

教学难点:算法语句的写法.

课时安排

1课时

教学过程

导入新课

思路1(情境导入)

一位老农平整了一块良田,种瓜好呢,还是种豆好呢,他面临着一个选择.如果他选择种瓜,他会得瓜,如果他选择种豆,他会得豆.人的一生面临许多选择,我们要做出正确的选择.前面我们学习了条件结构,今天我们学习条件语句.

思路2(直接导入)

前面我们学习了程序框图的画法,为了让计算机能够理解算法步骤、程序框图,上一节我们学习了输入语句、输出语句、赋值语句,今天我们开始学习条件语句.

推进新课

新知探究

提出问题

1)回忆程序框图中的两种条件结构.

2)指出条件语句的格式及功能.

3)指出两种条件语句的相同点与不同点.

4)揭示程序中的条件语句与程序框图中的条件结构存在一一对应关系.

讨论结果:

1)一个算法中,经常会遇到一些条件的判断,算法的流程根据条件是否成立有不同的流向.条件结构就是处理这种过程的结构.

用程序框图表示条件结构如下图:

2)条件语句

1°“IF—THEN—ELSE”语句

格式:

IF 条件 THEN

语句体1

ELSE

语句体2

END IF

功能:在“IF—THEN—ELSE”语句中,条件表示判断的条件,语句体1”表示满足条件时执行的操作内容;语句体2”表示不满足条件时执行的操作内容;END IF表示条件语句的结束.计算机在执行“IF—THEN—ELSE”语句时,首先对IF后的条件进行判断,如果符合条件,则执行THEN后面的语句1”;若不符合条件,则执行ELSE后面的语句2”.

2°“IF—THEN”语句

格式:

IF 条件 THEN

语句体

END IF

功能:条件表示判断的条件;语句表示满足条件时执行的操作内容,条件不满足时,直接结束判断过程;END IF表示条件语句的结束.计算机在执行“IF—THEN”语句时,首先对IF后的条件进行判断,如果符合条件就执行THEN后边的语句,若不符合条件则直接结束该条件语句,转而执行其他后面的语句.

3)相同点:首先对IF后的条件进行判断,如果符合条件就执行THEN后边的语句.

不同点:对于“IF—THEN—ELSE”语句,若不符合条件,则执行ELSE后面的语句体2”.

对于“IF—THEN”语句,若不符合条件则直接结束该条件语句,转而执行其他后面的语句.

4)程序中的条件语句与程序框图中的条件结构存在一一对应关系如下图:

应用示例

思路1

1 编写一个程序,求实数x的绝对值.

算法分析:首先,我们来设计求实数x的绝对值的算法,因为实数x的绝对值为

|x|=

所以算法步骤可以写成:

第一步,输入一个实数x.

第二步,判断x的符号.x≥0,则输出x;否则,输出-x.

显然,第二步可以用条件结构来实现.

程序框图如下图:

程序:

INPUT x

IF x=0 THEN

PRINT x

ELSE

PRINT -x

END IF

END

点评:通过本题我们看到算法步骤可以转化为程序框图,程序框图可以转化为算法语句.本题揭示了它们之间的内在联系,只要理解了程序框图与算法语句的对应关系,把程序框图转化为算法语句就很容易了.

变式训练

阅读下面的程序,你能得出什么结论?

INPUT x

IF x0 THEN

x=-x

END IF

PRINT x

END

解:由程序得出,该程序是输出x的绝对值.

2 把前面求解一元二次方程ax2+bx+c=0的程序框图转化为程序.

解:由程序框图可以发现,其中包含着两个条件结构,而且内层的条件结构是外层的条件结构的一个分支,所以,可以用“IF—THEN—ELSE—END IF”来完成转化.

程序:

INPUT “a,b,c=”;a,b,c

d=b^2-4*a*c

IF d=0 THEN

p=-b/(2*a)

q=SQR(d)/(2*a)

IF d=0 THEN

PRINT “x1=x2=”;p

ELSE

PRINT “x1,x2=”;p+q,p-q

END IF

ELSE

PRINT“No real root”

END IF

END

3 编写程序,使任意输入的3个整数按从大到小的顺序输出.

算法分析:abc表示输入的3个整数.为了节约变量,把它们重新排列后,仍用abc表示,并使a≥b≥c.具体操作步骤如下:

第一步,输入3个整数abc.

第二步,将ab比较,并把小者赋给b,大者赋给a.

第三步,将ac比较,并把小者赋给c,大者赋给a(此时a已是三者中最大的).

第四步,将bc比较,并把小者赋给c,大者赋给b(此时abc已按从大到小的顺序排列好).

第五步,按顺序输出abc.

如下图所示,上述操作步骤可以用程序框图更直观地表达出来.

根据程序框图,写出相应的计算机程序.

INPUT “a,b,c=”;a,b,c

IF ba THEN

t=a

a=b

b=t

END IF

IF ca THEN

t=a

a=c

c=t

END IF

IF cb THEN

t=b

b=c

c=t

END IF

PRINT a,b,c

END

思路2

1 编写程序,输出两个不相等的实数ab的最大值.

分析:要输出两个不相等的实数ab的最大值,从而想到对ab的大小关系进行判断,ab的大小关系有两种情况:(1a>b;(2b>a.这也就用到了我们经常提及的分类讨论的方式,找出两个数的最大值.

解:算法一:

第一步,输入a b的数值.

第二步,判断ab的大小关系,若a>b,则输出a的值,否则,输出b的值.

(程序框图如下图)

程序如下:(“IF—THEN—ELSE”语句)

INPUT “ab”ab

IF ab THEN

PRINT a

ELSE

PRINT b

END IF

END

算法二:

第一步,输入a,b的数值.

第二步,判断a,b的大小关系,若b>a,则将b的值赋予a;否则,直接执行第三步.

第三步,输出a的值,结束.

(程序框图如下图)

程序如下:(“IF—THEN”语句)

INPUT “ab”ab

IF ba THEN

a=b

END IF

PRINT a

END

点评:设计一个的算法需要在大量的算法设计中积累经验.我们也可以先根据自己的思路设计算法,再与成形的、高效的、优秀的算法比较,改进思路,改进算法,以避免重复计算等问题,提高算法设计的水平.

2)我们在平常的训练中尽可能地少引用变量,过多的变量不仅会使得算法和程序变得复杂,而且不利于计算机的执行.为此,我们在练习中要尽可能少引入变量并且要积极思考才能少引入变量.

2 高等数学中经常用到符号函数,符号函数的定义为y=试编写程序输入x的值,输出y的值.

解:程序一:(嵌套结构)

程序框图:(下图)

程序如下:

INPUT x

IF x>0 THEN

y=1

ELSE

IF x=0 THEN

y=0

ELSE

y=1

END IF

END IF

PRINT y

END

程序二:(叠加结构)

程序框图(右图):

程序如下:

INPUT x

IF x>0 THEN

y=1

END IF

IF x=0 THEN

y=0

END IF

IF x<0 THEN

y=1

END IF

PRINT y

END

点评:1)条件结构的差异,造成程序执行的不同.当代入x的数值时,程序一先判断外层的条件,依次执行不同的分支,随后再判断内层的条件;而程序二中执行了对条件1”的判断,同时也对条件2”进行判断,是按程序中条件语句的先后依次判断所有的条件,满足哪个条件就执行哪个语句.

2)条件语句的嵌套可多于两层,可以表达算法步骤中的多重限制条件.

知能训练

中国网通规定:拨打市内电话时,如果不超过3分钟,则收取话费0.22元;如果通话时间超过3分钟,则超出部分按每分钟0.1元收取通话费,不足一分钟按以一分钟计算.设通话时间为t(分钟),通话费用y(元),如何设计一个程序,计算通话的费用.

解:算法程序如下:

INPUT “请输入通话时间:t

IF t<=3 THEN

y=0.22

ELSE

IF INT(t)=t THEN

y=0.22+0.1*(t3)

ELSE

y=0.22+0.1*(INT(t3)+1)

END IF

END IF

PRINT “通话费用为:y

END

拓展提升

函数y=写出求函数的函数值的程序.

解:INPUT x=;x

IF x>=0 and x<=4 THEN

y=2*x

ELSE IF x<=8 THEN

y=8

ELSE y=2*(12-x)

END IF

END IF

PRINT y

END

课堂小结

1)条件语句的用法.

2)利用条件语句编写算法语句.

作业

习题1.2 B1.

设计感想

条件语句是算法语句的基础和核心,本节设计以条件结构和条件语句的对应关系为基础,引导学生将程序框图转化为算法语句.本节的难点是正确区分叠加结构和镶嵌结构,并会应用它们编写算法语句.本节选用大量精彩题目让学生反复训练,使学生熟练掌握程序框图与算法语句的关系,达到解决本节难点的目的.

1.2.3循环语句

整体设计

教学分析

通过前面的学习,学生学会了输入语句、输出语句、赋值语句和条件语句的基本用法,本节将介绍循环语句的用法. 程序中的循环语句与程序框图中的循环结构存在一一对应关系,这种对应关系对于学生理解循环语句的结构,进一步理解算法中的循环结构都是很有帮助的.我们可以给出循环语句的一般格式,让学生自己画出相应的程序框图,也可以给出程序框图,让学生写出算法语句,提高学生的应用能力.

三维目标

1.理解学习基本算法语句的意义.

2.学会循环语句的基本用法.

3.理解算法步骤、程序框图和算法语句的关系,学会算法语句的写法.

重点难点

教学重点:循环语句的基本用法.

教学难点:循环语句的写法.

课时安排1课时

教学过程

导入新课

思路1(情境导入)

一位同学不小心违反了学校纪律,班主任令其写检查,他写完后交给班主任,班主任看后说:认识不深刻,拿回去重写,直到认识深刻为止.这位同学一想,这不是一个循环结构吗?可惜我还没学循环语句,不然可以写一个算法语句输入计算机了.同学们,今天我们开始学习循环语句.

思路2(直接导入)

前面我们学习了程序框图的画法,为了让计算机能够理解算法步骤、程序框图,上一节我们学习了输入语句、输出语句、赋值语句和条件语句,今天我们开始学习循环语句.

推进新课

新知探究

提出问题

1)试用程序框图表示循环结构.

2)指出循环语句的格式及功能.

3)指出两种循环语句的相同点与不同点.

4)揭示程序中的循环语句与程序框图中的条件结构存在一一对应关系.

讨论结果:

1)循环结构

循环结构有两种形式:当型循环结构和直到型循环结构.

1°当型循环结构,如图(1)所示

2°直到型循环结构,如图(2)所示,

1)当型循环结构 2)直到型循环结构

2)循环语句

1°当型循环语句

当型(WHILE型)语句的一般格式为:

WHILE 条件

循环体

WEND

功能:计算机执行此程序时,遇到WHILE语句,先判断条件是否成立,如果成立,则执行WHILEWEND之间的循环体;然后返回到WHILE语句再判断上述条件是否成立,如果成立,再执行循环体,这个过程反复执行,直到一次返回到WHILE语句判断上述条件不成立为止,这时不再执行循环体,而是跳到WEND语句后,执行WEND后面的语句.因此当型循环又称前测试型循环,也就是我们经常讲的先测试后执行”“先判断后循环.

2°直到型循环语句

直到型(UNTIL型)语句的一般格式为:

DO

循环体

LOOP UNTIL 条件

功能:计算机执行UNTIL语句时,先执行DOLOOP UNTIL之间的循环体,然后判断LOOP UNTIL后面的条件是否成立,如果条件不成立,返回DO语句处重新执行循环体.这个过程反复执行,直到一次判断LOOP UNTIL后面的条件成立为止,这时不再返回执行循环体,而是跳出循环体执行LOOP UNTIL条件下面的语句.

因此直到型循环又称后测试型循环,也就是我们经常讲的先执行后测试”“先循环后判断.

(3)相同点:都是反复执行循环体语句.

不同点:当型循环语句是先判断后循环,直到型循环语句是先循环后判断.

(4)下面为循环语句与程序框图中的条件结构的一一对应关系.

1°直到型循环结构:

2°当型循环结构:

应用示例

思路1

1 修改前面编写过的求函数y=x3+3x2-24x+30的值的程序,连续输入11个自变量的取值,输出相应的函数值.

算法分析:与前面不同的是,本例要求连续输入11个自变量的取值.并输出相应的函数值,先写出解决本例的算法步骤:

第一步,输入自变量x的值.

第二步,计算y=x3+3x2-24x+30.

第三步,输出y.

第四步,记录输入次数.

第五步,判断输入的次数是否大于11.若是,则结束算法;否则,返回第一步.

显然,可以用计数变量n1n11)记录次数,通过循环结构来实现算法.

程序框图如下图:

程序:

n=1

DO

INPUT x

y=x^3+3*x^2-24*x+30

PRINT y

n=n+1

LOOP UNTIL n11

END

2 教材中的用二分法求方程x2-2=0x0)的近似解的程序框图(见教材图1.120)包含了顺序结构、条件结构和循环结构.下面,我们把这个程序框图转化为相应的程序.

解:程序为

INPUT a,b,d=”;a,b,d

DO

m=(a+b)/2

g=a^2-2

f=m^2-2

IF g*f0 THEN

b=m

ELSE

a=m

END IF

LOOP UNTIL ABS(a-b)d OR f=0

PRINT m

END

点评:ABS()是一个函数,用来求某个数的绝对值,即ABSx=|x|.

3 设计一个计算1×3×5×7×…×99的算法,编写算法程序.

解:算法如下:

第一步,s1.

第二步,i3.

第三步,ss×i.

第四步,ii2.

第五步,如果i99,那么转到第三步.

第六步,输出s.

程序如下:(WHILE循环语句)

s1

i3

WHILE i<=99

ss*i

ii2

WEND

PRINT s

END

点评:前面我们已经学过求和问题,这是一个求积问题,这两个问题都是典型的算法问题,注意它们的联系与区别.

4 编写一个程序,求1!+2!++10!的值(其中n=1×2×3×…×n.

分析:这个问题可以用WHILE+ WHILE循环嵌套语句格式来实现.

程序结构要做到如下步骤:

①处理n的值;(注:处理n!的值的变量是一个内循环变量)

②累加n的值.(注:累加n!的值的变量是一个外循环变量)

显然,通过10次循环可分别求出1!2!10!的值,并同时累加起来, 可求得S的值.而求T=n!,又可以用一个循环(内循环)来实现.

解:程序为

s=0

i=1

WHILE i<=10

j=1

t=1

WHILE j<=i

t=t*j

j=j+1

WEND

s=s+t

i=i+1

WEND

PRINT s

END

思考:上面程序中哪个变量是内循环变量,哪个变量是外循环变量?

解答:内循环变量:jt.外循环变量:si.

上面的程序是一个的WHILE+WHILE型循环嵌套语句格式.这是一个比较好想的方法,但实际上对于求n!,我们也可以根据求出的(n1)!乘上n即可得到,而无需重新从1再累乘到n.

程序可改为:

s=0

i=1

j=1

WHILE i<=10

j=j*i

s=s+j

i=i+1

WEND

PRINT s

END

显然第二个程序的效率要比第一个高得多.第一程序要进行1+2++10=55次循环,而第二程序进行10次循环.如题目中求的是1!+2!+1 000!,则两个程序的效率区别会更明显.

点评:解决具体的构造循环语句的算法问题,要尽可能地少引入循环变量,否则较多的变量会使得设计程序比较麻烦,并且较多的变量会使得计算机占用大量的系统资源,致使系统缓慢.另外,也尽可能使得循环嵌套的层数少,否则也浪费计算机的系统资源.

变式训练

某种蛋白质是由四种氨基酸组合而成.这四种氨基酸的相对分子质量分别是577197101.实验测定蛋白质的相对分子质量为800.问这种蛋白质的组成有几种可能?

分析:该问题即求如下不定方程的整数解:设四种氨基酸在蛋白质的组成中分别各有xyzw.则由题意可得57x+71y+97z+101w=800,(xyzw是非负整数)

这里0x140y110z80w7,利用穷取法,考虑一切可能出现的情况.运用多层循环嵌套处理即可.

解:编写程序如下:

w=0

WHILE w<=7

z=0

WHILE z<=8

y=0

WHILE y<=11

x=0

WHILE x<=14

IF 57*x+71*y+97*z+101*w=800 THEN

PRINT xyzw

END IF

x=x+1

WEND

y=y+1

WEND

z=z+1

WEND

w=w+1

WEND

END

知能训练

设计算法求的值.要求画出程序框图,写出用基本语句编写的程序.

解:这是一个累加求和问题,共99项相加,可设计一个计数变量,一个累加变量,用循环结构实现这一算法.程序框图如下图所示

程序如下

s=0

i=1

Do

s=s+1/i*(i+1)

i=i+1

LOOP UNTIL i>99

PRINT s

END

拓展提升

青年歌手电视大赛共有10名选手参加,并请了12名评委,在计算每位选手的平均分数时,为了避免个别评委所给的极端分数的影响,必须去掉一个最高分和一个最低分后再求平均分.试设计一个算法解决该问题,要求画出程序框图,写出程序(假定分数采用10分制,即每位选手的分数最高分为10分,最低分为0分).

解:由于共有12位评委,所以每位选手会有12个分数,我们可以用循环语句来完成这12个分数的输入,同时设计累加变量求出这12个分数的和,本问题的关键在于从这12个输入分数中找出最大数与最小数,以便从总分中减去这两个数.由于每位选手的分数都介于0分和10分之间,我们可以先假设其中的最大数为0,最小数为10,然后每次输入一个评委的分数,就进行一次比较,若输入的数大于0,就将之代替最大数,若输入的数小于10,就用它代替最小数,依次下去,就能找出这12个数中的最大数与最小数,循环结束后,从总和中减去最大数与最小数,再除以10,就得到该选手最后的平均分.

程序框图如右图:

程序如下:s=0

i=1

max=0

min=10

DO

INPUT x

s=s+x

IF max<=x THEN

max=x

END IF

IF min>=x THEN

min=x

END IF

i=i+1

LOOP UNTIL i>12

s1=smaxmin

a=s1/10

PRINT a

END

课堂小结

1)学会两种循环语句的应用.

(2)熟练应用两种循环语句编写计算机程序,巩固算法应用.

作业

习题1.2A3.

设计感想

本节的导入符合学生心理要求,能够激发学生的学习兴趣.算法像一个故事,循环语句就是故事的高潮,它以前面的内容为基础,是前面内容的总结和发展.本节选用了大量的精彩例题为故事高潮的到来作好了铺垫,精彩的点评把本节推向了高潮,所以本节教案值得期待.

1.3 算法案例

整体设计

教学分析

在学生学习了算法的初步知识,理解了表示算法的算法步骤、程序框图和程序三种不同方式以后,再结合典型算法案例,让学生经历设计算法解决问题的全过程,体验算法在解决问题中的重要作用,体会算法的基本思想,提高逻辑思维能力,发展有条理地思考与数学表达能力.

三维目标

1.理解算法案例的算法步骤和程序框图.

2.引导学生得出自己设计的算法程序.

3. 体会算法的基本思想,提高逻辑思维能力,发展有条理地思考与数学表达能力.

重点难点

教学重点:引导学生得出自己设计的算法步骤、程序框图和算法程序.

教学难点:体会算法的基本思想,提高逻辑思维能力,发展有条理地思考与数学表达能力.

课时安排

3课时

教学过程

1课时 案例1 辗转相除法与更相减损术

导入新课

思路1(情境导入)

大家喜欢打乒乓球吧,由于东、西方文化及身体条件的不同,西方人喜欢横握拍打球,东方人喜欢直握拍打球,对于同一个问题,东、西方人处理问题方式是有所不同的.在小学,我们学过求两个正整数的最大公约数的方法:先用两个数公有的质因数连续去除,一直除到所得的商是互质数为止,然后把所有的除数连乘起来. 当两个数公有的质因数较大时(如 8 251 6 105),使用上述方法求最大公约数就比较困难.下面我们介绍两种不同的算法——辗转相除法与更相减损术,由此可以体会东、西方文化的差异.

思路2(直接导入)

前面我们学习了算法步骤、程序框图和算法语句.今天我们将通过辗转相除法与更相减损术来进一步体会算法的思想.

推进新课

新知探究

提出问题

1)怎样用短除法求最大公约数?

2)怎样用穷举法(也叫枚举法)求最大公约数?

3)怎样用辗转相除法求最大公约数?

4)怎样用更相减损术求最大公约数?

讨论结果:

1)短除法

求两个正整数的最大公约数的步骤:先用两个数公有的质因数连续去除,一直除到所得的商是两个互质数为止,然后把所有的除数连乘起来.

2)穷举法(也叫枚举法)

穷举法求两个正整数的最大公约数的解题步骤:从两个数中较小数开始由大到小列举,直到找到公约数立即中断列举,得到的公约数便是最大公约数.

3)辗转相除法

辗转相除法求两个数的最大公约数,其算法步骤可以描述如下:

第一步,给定两个正整数mn.

第二步,求余数r:计算m除以n,将所得余数存放到变量r.

第三步,更新被除数和余数:m=nn=r.

第四步,判断余数r是否为0.若余数为0,则输出结果;否则转向第二步继续循环执行.

如此循环,直到得到结果为止. 这种算法是由欧几里得在公元前300年左右首先提出的,因而又叫欧几里得算法.

4)更相减损术

我国早期也有解决求最大公约数问题的算法,就是更相减损术. 《九章算术》是中国古代的数学专著,其中的更相减损术也可以用来求两个数的最大公约数,即可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也.以等数约之.”翻译为现代语言如下:

第一步,任意给定两个正整数,判断它们是否都是偶数,若是,用2约简;若不是,执行第二步.

第二步,以较大的数减去较小的数,接着把所得的差与较小的数比较,并以大数减小数,继续这个操作,直到所得的数相等为止,则这个数(等数)或这个数与约简的数的乘积就是所求的最大公约数.

应用示例

1 用辗转相除法求8 2516 105的最大公约数,写出算法分析,画出程序框图,写出算法程序.

解:用两数中较大的数除以较小的数,求得商和余数:8 251=6 105×1+2 146.

由此可得,6 1052 146的公约数也是8 2516 105的公约数,反过来,8 2516 105的公约数也是6 1052 146的公约数,所以它们的最大公约数相等.

6 1052 146重复上述步骤:6 105=2 146×2+1 813.

同理,2 1461 813的最大公约数也是6 1052 146的最大公约数.继续重复上述步骤:

2 146=1 813×1+333

1 813=333×5+148

333=148×2+37

148=37×4.

最后的除数3714837的最大公约数,也就是8 2516 105的最大公约数.

这就是辗转相除法.由除法的性质可以知道,对于任意两个正整数,上述除法步骤总可以在有限步之后完成,从而总可以用辗转相除法求出两个正整数的最大公约数.

算法分析:从上面的例子可以看出,辗转相除法中包含重复操作的步骤,因此可以用循环结构来构造算法.

算法步骤如下:

第一步,给定两个正整数mn.

第二步,计算m除以n所得的余数为r.

第三步,m=nn=r.

第四步,若r=0,则mn的最大公约数等于m;否则,返回第二步.

程序框图如下图:

程序:

INPUT m,n

DO

r=m MOD n

m=n

n=r

LOOP UNTIL r=0

PRINT m

END

点评:从教学实践看,有些学生不能理解算法中的转化过程,例如:求8 2516 105的最大公约数,为什么可以转化为求6 1052 146的公约数.因为8 251=6 105×1+2 146

可以化为8 251-6 105×1=2 164,所以公约数能够整除等式两边的数,即6 1052 146的公约数也是8 2516 105的公约数.

变式训练

你能用当型循环结构构造算法,求两个正整数的最大公约数吗?试画出程序框图和程序.

解:当型循环结构的程序框图如下图:

程序:

INPUT mn

r=1

WHILE r0

r=m MOD n

m=n

n=r

WEND

PRINT m

END

2 用更相减损术求9863的最大公约数.

解:由于63不是偶数,把9863以大数减小数,并辗转相减,如下图所示.

所以,9863的最大公约数等于7.

点评:更相减损术与辗转相除法的比较:尽管两种算法分别来源于东、西方古代数学名著,但是二者的算理却是相似的,有异曲同工之妙.主要区别在于辗转相除法进行的是除法运算,即辗转相除;而更相减损术进行的是减法运算,即辗转相减,但是实质都是一个不断的递归过程.

变式训练

用辗转相除法或者更相减损术求三个数324,243,135的最大公约数.

解:324=243×181

243=81×30

324243的最大公约数为81.

135=81×15481=54×127

54=27×20

81 135的最大公约数为27.

所以,三个数324243135的最大公约数为27.

另法:324243=81,24381=162,16281=81,则324243的最大公约数为81.

13581=54,8154=27,5427=27,则81135的最大公约数为27.

所以,三个数324243.135的最大公约数为27.

3 1)用辗转相除法求12348的最大公约数.

2)用更相减损术求8036的最大公约数.

解:1)辗转相除法求最大公约数的过程如下:

1232×4827

481×2721

271×216

213×63

62×3+0

最后6能被3整除,得12348的最大公约数为3.

2)我们将80作为大数,36作为小数,因为8036都是偶数,要除公因数2.

80÷2=4036÷2=18.

4018都是偶数,要除公因数2.

40÷2=2018÷2=9.

下面来求209的最大公约数,

209=11

119=2

92=7

72=5

52=3

32=1

21=1

可得8036的最大公约数为22×1=4.

点评:对比两种方法控制好算法的结束,辗转相除法是到达余数为0,更相减损术是到达减数和差相等.

变式训练

分别用辗转相除法和更相减损术求1 734816的最大公约数.

解:辗转相除法:

1 734=816×2+102816=102×8(余0),

1 734816的最大公约数是102

更相减损术:因为两数皆为偶数,首先除以2得到867408,再求867408的最大公约数.

867-408=459

459-408=51

408-51=357

357-51=306

306-51=255

255-51=204

204-51=153

153-51=102

102-51=51.

1 734816的最大公约数是51×2=102

利用更相减损术可另解:

1 734816918

918816102

816102714

714102612

612102510

510102408

408102306

306102204

204102102.

1 734816的最大公约数是102

知能训练

319377116的最大公约数.

解:377=319×1+58

319=58×5+29

58=29×2.

377319的最大公约数为29,再求29116的最大公约数.

116=29×4.

29116的最大公约数为29.

377319116的最大公约数为29.

拓展提升

试写出利用更相减损术求两个正整数的最大公约数的程序.

解:更相减损术程序:

INPUT “mn=”mn

WHILE m<>n

IF m>n THEN

m=m-n

ELSE

m=n-m

END IF

WEND

PRINT m

END

课堂小结

1)用辗转相除法求最大公约数.

2)用更相减损术求最大公约数.

思想方法:递归思想.

作业

分别用辗转相除法和更相减损术求261319的最大公约数.

分析:本题主要考查辗转相除法和更相减损术及其应用.使用辗转相除法可依据m=nq+r,反复执行,直到r=0为止;用更相减损术就是根据m-n=r,反复执行,直到n=r为止.

解:辗转相除法:

319=261×1+58,

261=58×4+29,

58=29×2.

319261的最大公约数是29

更相减损术:

319-261=58,

261-58=203,

203-58=145,

145-58=87,

87-58=29,

58-29=29,

319261的最大公约数是29

设计感想

数学不仅是一门科学,也是一种文化,本节的引入从东、西方文化的不同开始,逐步向学生渗透数学文化.从知识方面主要学习用两种方法求两个正整数的最大公约数,从思想方法方面,主要学习递归思想.本节设置精彩例题,不仅让学生学到知识,而且让学生进一步体会算法的思想,培养学生的爱国主义情操.

2课时 案例2 秦九韶算法

导入新课

思路1(情境导入)

大家都喜欢吃苹果吧,我们吃苹果都是从外到里一口一口的吃,而虫子却是先钻到苹果里面从里到外一口一口的吃,由此看来处理同一个问题的方法多种多样.怎样求多项式f(x)=x5+x4+x3+x2+x+1x=5时的值呢?方法也是多种多样的,今天我们开始学习秦九韶算法.

思路2(直接导入)

前面我们学习了辗转相除法与更相减损术, 今天我们开始学习秦九韶算法.

推进新课

新知探究

提出问题

1)求多项式f(x)=x5+x4+x3+x2+x+1x=5时的值有哪些方法?比较它们的特点.

2)什么是秦九韶算法?

3)怎样评价一个算法的好坏?

讨论结果:

1)怎样求多项式f(x)=x5+x4+x3+x2+x+1x=5时的值呢?

一个自然的做法就是把5代入多项式f(x),计算各项的值,然后把它们加起来,这时,我们一共做了1+2+3+4=10次乘法运算,5次加法运算.

另一种做法是先计算x2的值,然后依次计算x2·x,(x2·x·x,((x2·x·x·x的值,这样每次都可以利用上一次计算的结果,这时,我们一共做了4次乘法运算,5次加法运算.

第二种做法与第一种做法相比,乘法的运算次数减少了,因而能够提高运算效率,对于计算机来说,做一次乘法运算所用的时间比做一次加法运算要长得多,所以采用第二种做法,计算机能更快地得到结果.

2)上面问题有没有更有效的算法呢?我国南宋时期的数学家秦九韶(约1202~1261)在他的著作《数书九章》中提出了下面的算法:

把一个n次多项式f(x)=anxn+an-1xn-1+…+a1x+a0改写成如下形式:

f(x)=anxn+an-1xn-1+…+a1x+a0

=anxn-1+an-1xn-2+…+a1x+ a0

=((anxn-2+an-1xn-3+…+a2x+a1)x+a0

=…

=((anx+an-1x+an-2x+…+a1x+a0.

求多项式的值时,首先计算最内层括号内一次多项式的值,即

v1=anx+an-1

然后由内向外逐层计算一次多项式的值,即

v2=v1x+an-2

v3=v2x+an-3

vn=vn-1x+a0

这样,求n次多项式fx)的值就转化为求n个一次多项式的值.

上述方法称为秦九韶算法.直到今天,这种算法仍是多项式求值比较先进的算法.

3)计算机的一个很重要的特点就是运算速度快,但即便如此,算法好坏的一个重要标志仍然是运算的次数.如果一个算法从理论上需要超出计算机允许范围内的运算次数,那么这样的算法就只能是一个理论的算法.

应用示例

1 已知一个5次多项式为fx=5x5+2x4+3.5x3-2.6x2+1.7x-0.8

用秦九韶算法求这个多项式当x=5时的值.

解:根据秦九韶算法,把多项式改写成如下形式:

f(x)=(((5x+2)x+3.5)x-2.6)x+1.7)x-0.8

按照从内到外的顺序,依次计算一次多项式当x=5时的值:

v0=5

v1=5×5+2=27;

v2=27×5+3.5=138.5;

v3=138.5×5-2.6=689.9;

v4=689.9×5+1.7=3 451.2;

v5=3 415.2×5-0.8=17 255.2;

所以,当x=5时,多项式的值等于17 255.2.

算法分析:观察上述秦九韶算法中的n个一次式,可见vk的计算要用到vk-1的值,若令v0=an,我们可以得到下面的公式:

这是一个在秦九韶算法中反复执行的步骤,因此可用循环结构来实现.

算法步骤如下:

第一步,输入多项式次数n、最高次的系数anx的值.

第二步,将v的值初始化为an,将i的值初始化为n-1.

第三步,输入i次项的系数ai.

第四步,v=vx+ai,i=i-1.

第五步,判断i是否大于或等于0.若是,则返回第三步;否则,输出多项式的值v.

程序框图如下图

程序

INPUT “n=”n

INPUT “an=”a

INPUT “x=”x

v=a

i=n-1

WHILE i=0

PRINT “i=”i

INPUT “ai=”a

v=v*x+a

i=i-1

WEND

PRINT v

END

点评:本题是古老算法与现代计算机语言的完美结合,详尽介绍了思想方法、算法步骤、程序框图和算法语句,是一个典型的算法案例.

变式训练

请以5次多项式函数为例说明秦九韶算法,并画出程序框图.

解:fx=a5x5+a4x4+a3x3+a2x2+a1x+a0

首先,让我们以5次多项式一步步地进行改写:

fx=a5x4+a4x3+a3x2+a2x+a1x+a0

=((a5x3+a4x2+ a3x+a2x+a1x+a0

=(((a5x2+a4x+ a3x+a2x+a1x+a0

=((((a5x+a4x+ a3x+a2x+a1x+a0.

上面的分层计算,只用了小括号,计算时,首先计算最内层的括号,然后由里向外逐层计算,直到最外层的括号,然后加上常数项即可.

程序框图如下图:

2 已知n次多项式Pn(x)=a0xn+a1xn-1+…+an-1x+an,如果在一种算法中,计算k=234n)的值需要k1次乘法,计算P3(x0)的值共需要9次运算(6次乘法,3次加法),那么计算P10(x0)的值共需要__________次运算.下面给出一种减少运算次数的算法:P0(x)=a0,Pk+1(x)=xPk(x)+ak+1k012n1).利用该算法,计算P3(x0)的值共需要6次运算,计算P10(x0)的值共需要___________次运算.

答案:65 20

点评:秦九韶算法适用一般的多项式f(x)=anxn+an-1xn-1+…+a1x+a0的求值问题.直接法乘法运算的次数最多可到达,加法最多n.秦九韶算法通过转化把乘法运算的次数减少到最多n次,加法最多n.

3 已知多项式函数f(x)=2x55x44x3+3x26x+7,求当x=5时的函数的值.

解析:把多项式变形为:f(x)=2x55x44x3+3x26x+7

=((((2x5)x4)x+3)x6)x+7.

计算的过程可以列表表示为:

最后的系数2 677即为所求的值.

算法过程:

v0=2

v1=2×55=5

v2=5×54=21

v3=21×5+3=108

v4=108×56=534

v5=534×5+7=2 677.

点评:如果多项式函数中有缺项的话,要以系数为0的项补齐后再计算.

知能训练

x=2时,用秦九韶算法求多项式f(x)=3x5+8x4-3x3+5x2+12x-6的值.

解法一:根据秦九韶算法,把多项式改写成如下形式:

f(x)=((((3x+8)x-3)x+5)x+12x-6.

按照从内到外的顺序,依次计算一次多项式当x=2时的值.

v0=3;

v1=v0×2+8=3×2+8=14;

v2=v1×2-3=14×2-3=25;

v3=v2×2+5=25×2+5=55;

v4=v3×2+12=55×2+12=122;

v5=v4×2-6=122×2-6=238.

x=2时,多项式的值为238.

解法二:f(x)=((((3x+8)x-3)x+5)x+12x-6

f(2)=((((3×2+8)×23)×2+5)×2+12)×26238

拓展提升

用秦九韶算法求多项式f(x)=7x7+6x6+5x5+4x4+3x3+2x2+xx=3时的值.

解:f(x)=((((((7x+6)+5)x+4)x+3)x+2)x+1)x

v0=7

v1=7×3+6=27

v2=27×3+5=86

v3=86×3+4=262

v4=262×3+3=789

v5=789×3+2=2 369

v6=2 369×3+1=7 108

v7=7 108×3+0=21 324.

f(3)=21 324.

课堂小结

1.秦九韶算法的方法和步骤.

2.秦九韶算法的计算机程序框图.

作业

已知函数f(x)=x32x25x+8,f(9)的值.

解:f(x)=x32x25x+8=(x22x5)x+8=((x2)x5)x+8

f(9)=((92)×95)×9+8=530.

设计感想

古老的算法散发浓郁的现代气息,这是一节充满智慧的课.本节主要介绍了秦九韶算法.

通过对秦九韶算法的学习,对算法本身有哪些进一步的认识?

教师引导学生思考、讨论、概括,小结时要关注如下几点:(1)算法具有通用的特点,可以解决一类问题;(2)解决同一类问题,可以有不同的算法,但计算的效率是不同的,应该选择高效的算法;(3)算法的种类虽多,但三种逻辑结构可以有效地表达各种算法等等.

3课时 案例3 进位制

导入新课

情境导入

在日常生活中,我们最熟悉、最常用的是十进制,据说这与古人曾以手指计数有关,爱好天文学的古人也曾经采用七进制、十二进制、六十进制,至今我们仍然使用一周七天、一年十二个月、一小时六十分的历法.今天我们来学习一下进位制.

推进新课

新知探究

提出问题

1)你都了解哪些进位制?

2)举出常见的进位制.

3)思考非十进制数转换为十进制数的转化方法.

4)思考十进制数转换成非十进制数及非十进制之间的转换方法.

活动:先让学生思考或讨论后再回答,经教师提示、点拨,对回答正确的学生及时表扬,对回答不准确的学生提示引导考虑问题的思路.

讨论结果:

1)进位制是人们为了计数和运算方便而约定的计数系统,约定满二进一,就是二进制;满十进一,就是十进制;满十二进一,就是十二进制;满六十进一,就是六十进制等等.也就是说:满几进一就是几进制,几进制的基数(都是大于1的整数)就是几.

2)在日常生活中,我们最熟悉、最常用的是十进制,据说这与古人曾以手指计数有关,爱好天文学的古人也曾经采用七进制、十二进制、六十进制,至今我们仍然使用一周七天、一年十二个月、一小时六十分的历法.

3)十进制使用0~9十个数字.计数时,几个数字排成一行,从右起,第一位是个位,个位上的数字是几,就表示几个一;第二位是十位,十位上的数字是几,就表示几个十;接着依次是百位、千位、万位……

例如:十进制数3 721中的3表示3个千,7表示7个百,2表示2个十,1表示1个一.于是,我们得到下面的式子:

3 721=3×103+7×102+2×101+1×100.

与十进制类似,其他的进位制也可以按照位置原则计数.由于每一种进位制的基数不同,所用的数字个数也不同.如二进制用01两个数字,七进制用0~6七个数字.

一般地,若k是一个大于1的整数,那么以k为基数的k进制数可以表示为一串数字连写在一起的形式

anan-1…a1a0k)(0ank0≤an-1a1a0k).

其他进位制的数也可以表示成不同位上数字与基数的幂的乘积之和的形式,如

110 0112=1×25+1×24+0×23+0×22+1×21+1×20

7 3428=7×83+3×82+4×81+2×80.

非十进制数转换为十进制数比较简单,只要计算下面的式子值即可:

anan-1…a1a0(k)=an×kn+an-1×kn-1+…+a1×k+a0.

第一步:从左到右依次取出k进制数anan-1…a1a0(k)各位上的数字,乘以相应的k的幂,k的幂从n开始取值,每次递减1,递减到0,即an×kn,an-1×kn-1,…,a1×k,a0×k0

第二步:把所得到的乘积加起来,所得的结果就是相应的十进制数.

4)关于进位制的转换,教科书上以十进制和二进制之间的转换为例讲解,并推广到十进制和其他进制之间的转换.这样做的原因是,计算机是以二进制的形式进行存储和计算数据的,而一般我们传输给计算机的数据是十进制数据,因此计算机必须先将十进制数转换为二进制数,再处理,显然运算后首次得到的结果为二进制数,同时计算机又把运算结果由二进制数转换成十进制数输出.

1°十进制数转换成非十进制数

把十进制数转换为二进制数,教科书上提供了2取余法,我们可以类比得到十进制数转换成k进制数的算法k取余法”.

2°非十进制之间的转换

一个自然的想法是利用十进制作为桥梁.教科书上提供了一个二进制数据与16进制数据之间的互化的方法,也就是先由二进制数转化为十进制数,再由十进制数转化成为16进制数.

应用示例

思路1

1 把二进制数110 011(2)化为十进制数.

解:110 011(2)=1×25+1×24+0×23+0×22+1×21+1×20=1×32+1×16+1×2+1=51.

点评:先把二进制数写成不同位上数字与2的幂的乘积之和的形式,再按照十进制的运算规则计算出结果.

变式训练

设计一个算法,把k进制数a(共有n位)化为十进制数b.

算法分析:从例1的计算过程可以看出,计算k进制数a的右数第i位数字aiki-1的乘积ai·ki-1,再将其累加,这是一个重复操作的步骤.所以,可以用循环结构来构造算法.

算法步骤如下:

第一步,输入akn的值.

第二步,将b的值初始化为0i的值初始化为1.

第三步,b=b+ai·ki-1i=i+1.

第四步,判断in是否成立.若是,则执行第五步;否则,返回第三步.

第五步,输出b的值.

程序框图如下图

程序:

INPUT “a,kn=”akn

b=0

i=1

t=a MOD 10

DO

b=b+t*k^i-1

a=a\\10

t=a MOD 10

i=i+1

LOOP UNTIL in

PRINT b

END

2 89化为二进制数.

解:根据二进制数满二进一的原则,可以用2连续去除89或所得商,然后取余数.具体计算方法如下:

因为89=2×44+144=2×22+0

22=2×11+0

11=2×5+1

5=2×2+1

2=2×1+0

1=2×0+1

所以

89=2×2×2+1+1+0+0+1

=2×22+1+1+0+0+1

=…=1×26+0×25+1×24+1×23+0×22+0×21+1×20

=1 011 001(2).

这种算法叫做除2取余法,还可以用下面的除法算式表示:

把上式中各步所得的余数从下到上排列,得到89=1 011 001(2).

上述方法也可以推广为把十进制数化为k进制数的算法,称为除k取余法.

变式训练

设计一个程序,实现k取余法”.

算法分析:从例2的计算过程可以看出如下的规律:

若十制数a除以k所得商是q0,余数是r0,即a=k·q0+r0,则r0ak进制数的右数第1位数.

q0除以k所得的商是q1,余数是r1,即q0=k·q1+r1,则r1ak进制数的左数第2位数.

……

qn-1除以k所得的商是0,余数是rn,即qn-1=rn,则rnak进制数的左数第1位数.

这样,我们可以得到算法步骤如下:

第一步,给定十进制正整数a和转化后的数的基数k.

第二步,求出a除以k所得的商q,余数r.

第三步,把得到的余数依次从右到左排列.

第四步,若q≠0,则a=q,返回第二步;否则,输出全部余数r排列得到的k进制数.

程序框图如下图:

程序:

INPUT “ak=”ak

b=0

i=0

DO

q=a\\k

r=a MOD k

b=b+r*10^i

i=i+1

a=q

LOOP UNTIL q=0

PRINT b

END

思路2

1 8进制数314 706(8)化为十进制数,并编写出一个实现算法的程序.

解:314 706(8)=3×85+1×84+4×83+7×82+0×81+6×80=104 902.

所以,化为十进制数是104 902.

点评:利用把k进制数转化为十进制数的一般方法就可以把8进制数314 706(8)化为十进制数.

2 把十进制数89化为三进制数,并写出程序语句.

解:具体的计算方法如下:

89=3×29+2

29=3×9+2

9=3×3+0

3=3×1+0

1=3×0+1

所以:89(10)=10 022(3).

点评:根据三进制数满三进一的原则,可以用3连续去除89及其所得的商,然后按倒序的顺序取出余数组成数据即可.

知能训练

将十进制数34转化为二进制数.

分析:把一个十进制数转换成二进制数,用2反复去除这个十进制数,直到商为0,所得余数(从下往上读)就是所求.

解:

34(10)=100 010(2)

拓展提升

1 234(5)分别转化为十进制数和八进制数.

解:1 234(5)=1×53+2×52+3×5+4194

1 234(5)=302(8)

所以,1 234(5)=194302(8)

点评:本题主要考查进位制以及不同进位制数的互化.五进制数直接利用公式就可以转化为十进制数;五进制数和八进制数之间需要借助于十进制数来转化.

课堂小结

1)理解算法与进位制的关系.

2)熟练掌握各种进位制之间转化.

作业

习题1.3A34.

设计感想

计算机是以二进制的形式进行存储和计算数据的,而一般我们传输给计算机的数据是十进制数据,因此计算机必须先将十进制数转换为二进制数,再处理,显然运算后首次得到的结果为二进制数,同时,计算机又把运算结果由二进制数转换成十进制数输出.因此学好进位制是非常必要的,另外,进位制也是高考的重点,本节设置了多种题型供学生训练,所以这节课非常实用.

人教版高中数学A版必修三优秀教案(第一章 算法初步)

相关推荐