题型1:算法概念
例1.下列说法正确的是( )
A.算法就是某个问题的解题过程;
B.算法执行后可以产生不同的结果;
C.解决某一个具体问题算法不同结果不同;
D.算法执行步骤的次数不可以为很大,否则无法实施。
解析:答案为选项B;选项B,例如:判断一个整数是否为偶数,结果为“是偶数”和“不是偶数”两种;选项A ,算法不能等同于解法;选项C,解决某一个具体问题算法不同结果应该相同,否则算法构造的有问题;选项D,算法可以为很多次,但不可以无限次。
点评:算法一般是机械的,有时需要进行大量的重复计算。只要按部就班去做,总能算出结果。通常把算法过程称为“数学机械化”。数学机械化的最大优点是它可以借助计算机来完成;实际上处理任何问题都需要算法。如:中国象棋有中国象棋的棋谱、走法、胜负的评判准则;而国际象棋有国际象棋的棋谱、走法、胜负的评判准则;再比如申请出国有一系列的先后手续,购买物品也有相关的手续……。
例2.下列语句中是算法的个数为( )
①从济南到巴黎:先从济南坐火车到北京,再坐飞机到巴黎;
②统筹法中“烧水泡茶”的故事;
③测量某棵树的高度,判断其是否是大树;
④已知三角形的一部分边长和角,借助正余弦定理求得剩余的边角,再利用三角形的面积公式求出该三角形的面积
A.1 B.2 C.3 D.4
解析:正确选项为C,③中我们对“树的大小”没有明确的标准,无法完成任务,不是有效的算法构造。①中,勾画了从济南到巴黎的行程安排,完成了任务;②中,节约时间,烧水泡茶完成了任务;④中,纯数学问题,借助正、余弦定理解三角形,进而求出三角形的面积。
点评:算法过程要做到能一步一步的执行,每一步执行的操作,必须确切,不能含混不清,且在有限步后的必须得到问题的结果
题型2:经典算法
例3.一个人带着三只狼和三只羚羊过河,只有一条船,同船可容纳一个人和两只动物,没有人在的时候,如果狼的数量不少于羚羊的数量就会吃羚羊。该人如何将动物转移过河?请设计算法?
解析:任何动物同船不用考虑动物的争斗但需考虑承载的数量,还应考虑到两岸的动物都得保证狼的数量要小于羚羊的数量,故在算法的构造过程中尽可能保证船里面有狼,这样才能使得两岸的羚羊数量占到优势,具体算法如下:
算法步骤:
第一步:人带两只狼过河,并自己返回;
第二步:人带一只狼过河,自己返回;
第三步:人带两只羚羊过河,并带两只狼返回;
第四步:人带一只羊过河,自己返回;
第五步:人带两只狼过河
点评:算法是解决某一类问题的精确描述,有些问题使用形式化、程序化的刻画是最恰当的。这就要求我们在写算法时应精练、简练、清晰地表达,要善于分析任何可能出现的情况,体现思维的严密性和完整性。本题型解决问题的算法中某些步骤重复进行多次才能解决,在现实生活中,很多较复杂的问题经常遇到这样的问题,设计算法的时候,如果能够合适地利用某些步骤的重复,不但可以使得问题变得简单,而且可以提高工作效率。
例4.这是中国古代的一个著名算法案例:一群小兔一群鸡,两群合到一群里,要数腿48,要数脑袋17,多少小兔多少鸡?
解析:求解鸡兔的问题简单直观,却包含着深刻的算法思想。应用解二元一次方程组的方法来求解鸡兔同笼问题
第一步:设有小鸡x只,小兔y只,则有
第二步:将方程组中的第一个方程两变乘-2加到第二个方程中去,得到,得到y=7;
第三步:将y=7代入(1)得x=10。
点评:解决这些问题的基本思想并不复杂,很清晰,但叙述起来很烦琐,有的步骤非常多,有的计算量很大,有时候完全依靠人力完成这些工作很困难。但是这些恰恰是计算机的长处,它能不厌其烦的枯燥的、重复的、繁琐的工作。但算法也有优劣,我们要追求高效。
题型3:顺序结构
例5.写出通过尺轨作图确定线段AB一个5等分点的算法。
解析:我们借助于平行线定理,把位置的比例关系变成已知的比例关系,只要按照规则一步一步去做就能完成任务
算法分析:
第一步:从已知线段的左端点A出发,任意作一条与AB不平行的射线AP;
第二步:在射线上任取一个不同于端点A的点C,得到线段AC;
第三步:在射线上延AC的方向截取线段CE=AC;
第四步:在射线上延AC的方向截取线段EF=AC;
第五步:在射线上延AC的方向截取线段FG=AC;
第六步:在射线上延AC的方向截取线段GD=AC,那么线段AD=5AB;
第七步:连接DB;
第八步:过C作BD的平行线,交线段AB于M,这样点M就是线段AB的一个5等分点。
程序框图:
点评:这个算法步骤具有一般性,对于任意自然数n,都可以按照这个算法的思想,设计出确定线段的n等分点的步骤,解决问题。
例6.有关专家建议,在未来几年内,中国的通货膨胀率保持在3%左右,这将对我国经济的稳定有利无害。所谓通货膨胀率为3%,指的是每年消费品的价格增长率为3%。在这种情况下,某种品牌的钢琴2004年的价格是10 000元,请用流程图描述这种钢琴今后四年的价格变化情况,并输出四年后的价格
解析:用P表示钢琴的价格,不难看出如下算法步骤:
2005年P=10000×(1+3%)=10300;
2006年P=10300×(1+3%)=10609;
2007年P=10609×(1+3%)=10927.27;
2008年P=10927.27×(1+3%)=11255.09;
因此,价格的变化情况表为:年份 2004 2005 2006 2007 2008
钢琴的价格 10000 10300 10609 10927.27 11255.09
程序框图为:
点评:顺序结构只须严格按照传统的解决数学问题的解题思路,将问题解决掉。最后将解题步骤 “细化”就可以。“细化”指的是写出算法步骤、画出程序框图
题型4:条件结构
例7.设计算法判断一元二次方程是否有实数根,并画出相应的程序框图。
解析:算法步骤如下:
第一步:输入一元二次方程的系数:a,b,c;
第二步:计算△的值;
第三步:判断△≥0是否成立。若△≥0成立,输出“方程有实根”;否则输出“方程无实根”。结束算法。
相应的程序框图如下:
点评:根据一元二次方程的意义,需要计算判别式△的值。再分成两种情况处理:(1)当△≥0时,一元二次方程有实数根;(2)当△<0时,一元二次方程无实数根。该问题实际上是一个分类讨论问题,根据一元二次方程系数的不同情况,最后结果就不同。因而当给出一个一元二次方程时,必须先确定判别式的值,然后再用判别式的值的取值情况确定方程是否有解。该例仅用顺序结构是办不到的,要对判别式的值进行判断,需要用到条件结构
(2009年广东卷文)某篮球队6名主力队员在最近三场比赛中投进的三分球个数如下表所示:队员i 1 2 3 4 5 6
三分球个数
下图(右)是统计该6名队员在最近三场比赛中投进的三分球总数的程序框图,则图中判断框应填 ,输出的s=
(注:框图中的赋值符号“=”也可以写成“←”或“:=”)
[解析]顺为是统计该6名队员在最近三场比赛中投进的三分球总数的程序框图,所图中判断框应填,输出的s=
.
答案 ,
例8.(1)设计算法,求的解,并画出流程图。
解析:对于方程来讲,应该分情况讨论方程的解
我们要对一次项系数a和常数项b的取值情况进行分类,分类如下:
(1)当a≠0时,方程有唯一的实数解是;
(2)当a=0,b=0时,全体实数都是方程的解;
(3)当a=0,b≠0时,方程无解
联想数学中的分类讨论的处理方式。可得如下算法步骤:
第一步:判断a是否不为零。若成立,输出结果“解为”;
第二步:判断a=0,b=0是否同时成立。若成立,输出结果“解集为R”;
第三步:判断a=0,b≠0是否同时成立。若成立,输出结果“方程无解”,结束。
程序框图:
(2)。设计算法,找出输入的三个不相等实数a、b、c中的最大值,并画出流程图。
解析:算法步骤:
第一步:输入a,b,c的值;
第二步:判断a>b是否成立,若成立,则执行第三步;否则执行第四步;
第三步:判断a>c是否成立,若成立,则输出a,并结束;否则输出c,并结束;
第四步:判断b>c是否成立,若成立,则输出b,并结束;否则输出c,并结束。
程序框图:
点评:条件结构嵌套与条件结构叠加的区别是:
(1)条件结构叠加,程序执行时需依次对“条件1”、“条件2”、“条件3”……都进行判断只有遇到能满足的条件才执行该条件对应的操作
(2)条件结构的嵌套中,“条件2”是“条件1”的一个分支,“条件3”是“条件2”的一个分支,……依此类推,这些条件中很多在算法执行过程中根据所处的分支位置不同可能不被执行。
(3)条件结构嵌套所涉及的“条件2”、“条件3”……是在前面的所有条件依次一个一个的满足“分支条件成立”的情况下才能执行的此操作,是多个条件同时成立的叠加和复合。
题型5:循环结构
例9.设计一个算法,求的值,并划出程序框图。。
解析:算法步骤:
第一步:sum=0;
第二步:i=0;
第三步:sum=sum+2i;
第四步:i=i+1;
第五步:判断i是否大于49,若成立,则输出sum,结束;否则返回第三步重新执行。
程序框图:
点评:
1.如果算法问题里涉及的运算进行了许多次重复的操作,且先后参与运算的数之间有相同的规律,就可引入变量循环参与运算(我们称之为循环变量),应用于循环结构。在循环结构中,要注意根据条件设计合理的计数变量、累加和累乘变量及其个数等,特别要求条件的表述要恰当、精确