第一章算法初步
1.1.1算法的概念 【学习目标】
1、了解算法的含义,体会算法的思想;2、能够用自然语言叙述算法;3、掌握正确的算法应满足的要求;4、会写出解线性方程(组)的算法;5、会写出一个求有限整数序列中的最大值的算法;6、会应用Scilab求解方程组。 【预习指导】
预习课本P2到P5关于“算法的概念”的相关内容,完成下列问题: 1、算法的概念:
广义地说,算法就是做某一件事的步骤或程序。
在数学中,主要研究计算机实现计算的算法,即告诉计算机计算的步骤和方法。比如解方程的算法就是告诉计算机解方程的步骤和方法、函数求值的算法就是告诉计算机函数求值的步骤和方法、作图的算法就是告诉计算机作图的步骤和方法等。
算法的描述可以用自然语言,也可以用数学语言,数学语言和自然语言是相同的,唯一不同的是数学语言采用一些记号表示某些文字。
例如,某同学要在下午到体育馆参加比赛,比赛下午2时开始,请写出该同学从家里发到比赛地的算法。
若用自然语言来描述可写为 (1)1:00从家出发到公共汽车站 (2)1:10上公共汽车 (3)1:40到达体育馆 (4)1:45做准备活动。 (5)2:00比赛开始。 若用数学语言来描述可写为: S1 1:00从家出发到公共汽车站 S2 1:10上公共汽车 S3 1:40到达体育馆 S4 1:45做准备活动 S5 2:00比赛开始
大家从中要以看出,实际上两种写法无本质区别,但我们在书写时应尽量用教学语言来描述。
2、算法与计算机:
计算机解决任何问题都要依赖于,只有将解决问题的过程分解为若干个,即,并用计算
机能够接受的“”准确地描述出来,计算机才能够解决问题。 【课堂探究】
1. 教材P3例1
1
任意给定一个大于1的整数n,试设计一个程序或步骤对n是否为质数做出判定。 思维指导:
①本题的问题是设计一个程序或步骤对n是否为质数做出判定 第一,本题的条件是给定某一个数n;
第二,思考:判断一个数是质数的方法是什么?
第三,按照判断一个数是质数的方法设计出下面的步骤:
第一步:先要判断n是否等于2,若n=2,则n是质数;若n>2,则执行第二步。 思考:为什么一定要判断n是否等于2?
第二步:依次从2至(n-1)检验是不是n的因数,即整除n的数,若有这样的数,则n不是质数;若没有这样的数,则n是质数。
这是判断一个大于1的整数n是否为质数的最基本算法。
2.教材P4例2
2
例2 用二分法设计一个求方程x–2=0的近似根的算法。 思维指导:
2
①本题的问题是设计一个用二分法求方程x–2=0的近似根的算法。
2
第一,本题的条件是给定方程x–2=0; 第二,解决方法:二分法; 第三,问题是编写算法。
思考:求任何近似解,必须有近似程度,题目给定了吗? 本题假设所求近似根与准确解的差的绝对值不超过0.005.
2
第一步:令f(x)=x–2。因为f(1)<0,f(2)>0,所以设x1=1,x2=2。 第二步:令m=(x1+x2)/2,判断f(m)是否为0,若则,则m为所求;若否,则继续判断f(x1)·f(m)大于0还是小于0。
第三步:若f(x1)·f(m)>0,则令x1=m;否则,令x2=m。
第四步:判断|x1–x2|<0.005是否成立?若是,则x1、x2之间的任意取值均为满足条件的近似根;若否,则返回第二步。
小结:算法具有以下特性:(1)有穷性;(2)确定性;(3)顺序性
?x?2y??13.例写出解二元一次方程组? 的算法
2x?y?1? 解:第一步,②-①×2得5y=3;③ 第二步,解③得y=3/5;
第三步,将y=3/5代入①,得x=1/5
学生做一做:对于一般的二元一次方程组来说,上述步骤应该怎样进一步完善?
老师评一评:本题的算法是由加减消元法求解的,这个算法也适合一般的二元一次方程组的
解法。下面写出求二元一次方程组的解的算法: 第一步:②×A1-①×A2,得(A1B2-A2B1)y+A1C2-A2C1=0;③ 第二步:解③,得y?
第三步:将y?A2C1?A2C2;
A1B2?A2B1A2C1?A2C2代入①,得
A1B2?A2B1
x?
?B2C1?B1C2。
A1B2?A2B1此时我们得到了二元一次方程组的求解公式,利用此公司可得到例3的另一个算法: 第一步:取A1=1,B1=-2,C1=1,A2=2,B2=1,C2=-1; 第二步:计算x??B2C1?B1C2A2C1?A2C2y?与
A1B2?A2B1A1B2?A2B1第三步:输出运算结果。
可见利用上述算法,更加有利于上机执行与操作。
基础知识应用题
4.例: 写出一个求有限整数列中的最大值的算法。 解:算法如下。
S1 先假定序列中的第一个整数为“最大值”。
S2 将序列中的下一个整数值与“最大值”比较,如果它大于此“最大值”,这时你就假定“最大值”是这个整数。
S3 如果序列中还有其他整数,重复S2。
S4 在序列中一直到没有可比的数为止,这时假定的“最大值”就是这个序列中的最大值。 学生做一做 写出对任意3个整数a,b,c求出最大值的算法。
老师评一评 在例中我们是用自然语言来描述算法的,下面我们用数学语言来描述本题的算法。
S1 max=a
S2 如果b>max, 则max=b. S3 如果C>max, 则max=c. S4 max就是a,b,c中的最大值。 综合应用题
5.例 写出求1+2+3+4+5+6的一个算法。
分析:可以按逐一相加的程序进行,也可以利用公式
n(n?1)1+2+?+n=进行,也可以根据加法运算律简
2化运算过程。 解:算法1:
S1:计算1+2得到3;
S2:将第一步中的运算结果3与3相加得到6; S3:将第二步中的运算结果6与4相加得到10; S4:将第三步中的运算结果10与5相加得到15; S5:将第四步中的运算结果15与6相加得到21。 算法2: S1:取n=6;
n(n?1)S2:计算;
2S3:输出运算结果。 算法3:
S1:将原式变形为(1+6)+(2+5)+(3+4)=3×7; S2:计算3×7; S3:输出运算结果。
小结:算法1是最原始的方法,最为繁琐,步骤较多,当加数较大时,比如1+2+3+?+10000,再用这种方法是行不通的;算法2与算法3都是比较简单的算法,但比较而言,算法2最为简单,且易于在计算机上执行操作。
学生做一做 求1×3×5×7×9×11的值,写出其算法。 老师评一评
算法1:第一步,先求1×3,得到结果3;
第二步,将第一步所得结果3再乘以5,得到结果15; 第三步,再将15乘以7,得到结果105; 第四步,再将105乘以9,得到945;
第五步,再将945乘以11,得到10395,即是最后结果。 算法2:用P表示被乘数,i表示乘数。 S1 使P=1。 S2 使i=3 S3 使P=P×i
S4 使i=i+2
S5 若i≤11,则返回到S3继续执行;否则算法结束。
小结 由于计算机动是高速计算的自动机器,实现循环的语句。因此,上述算法2不仅是正确的,而且是在计算机上能够实现的较好的算法。在上面的算法中,S3,S4,S5构成一个完整的循环,这里需要说明的是,每经过一次循环之后,变量P、i的值都发生了变化,并且生循环一次之后都要在步骤S5对i的值进行检验,一旦发现i的值大于11时,立即停止循环,同时输出最后一个P的值,对于循环结构的详细情况,我们将在以后的学习中介绍。 【巩固练习】
1、下面四种叙述可以称为算法的是( ) (A)在家里一般是妈妈做饭
(B)做米饭需要刷锅、淘米、添水、加热这些步骤 (C)在野外做饭叫野炊 (D)做饭必须要有米
2、下列对算法的理解不正确的是( )
(A)算法有一个共同的特点就是对一类问题都有效,而不是个别问题 (B)算法要求是一步步执行,每一步都能得到唯一的结果
(C)算法一般是机械的,有时要进行大量重复计算,它的优点是一种通法 (D)任何问题都可以用算法来解决
3、对于算法:第一步,输入n。第二步,判断n是否等于2,若n=2,则n满足条件;若n>2,则执行第三步。第三步,依次从2到(n-1)检验能不能整除n,若不能整除n,则执行第四步;若能整除n,则执行第一步。第四步,输出n。满足条件的n是( ) (A)质数 (B)奇数 (C)偶数 (D)合数
4、已知直角三角形两条直角边长分别为a,b,写出求斜边c的算法如下: 第一步,输入两直角边长a,b的值。 第二步,计算c?a2?b2。 第三步,。
5、写出用“二分法”求方程x?5?0
1.1.2程序框图、算法的基本逻辑结构
2(x?0)的近似解的算法。