程序框图的画法(二分法)
- 格式:ppt
- 大小:118.00 KB
- 文档页数:10
二分法程序编写二分法是一种常用的算法,也被称为二分查找或折半查找。
它的核心思想是将问题的解空间一分为二,并判断目标值所在的区间,从而缩小问题的规模,直到找到目标值或解空间为空为止。
本文将介绍二分法的原理、应用场景以及编写二分法程序的步骤。
一、二分法原理二分法的原理很简单,它利用了有序列表的特性。
假设我们要在一个有序列表中查找目标值,首先我们取列表的中间值,如果中间值等于目标值,则直接返回结果;如果中间值大于目标值,则说明目标值可能在左侧的区间,我们将问题的解空间缩小为左侧的一半;如果中间值小于目标值,则说明目标值可能在右侧的区间,我们将问题的解空间缩小为右侧的一半。
通过不断缩小解空间,最终我们可以找到目标值或确定目标值不存在于列表中。
二、二分法的应用场景二分法广泛应用于各种需要查找目标值的场景,比如在有序数组中查找特定元素、在某个范围内寻找满足某种条件的最小值或最大值等。
由于二分法的时间复杂度为O(logN),远低于线性查找的时间复杂度O(N),因此在大规模数据的查找问题中,二分法具有明显的优势。
三、编写二分法程序的步骤1. 确定问题的解空间,即确定有序列表或范围。
2. 初始化左右边界,并计算中间位置。
3. 判断中间位置的值与目标值的关系,如果相等则返回结果,如果大于目标值则缩小右边界,如果小于目标值则缩小左边界。
4. 更新中间位置,并重复步骤3,直到找到目标值或解空间为空。
5. 如果解空间为空,则说明目标值不存在于列表中。
四、二分法程序的示例下面是一个使用二分法查找有序数组中目标值的示例程序:```pythondef binary_search(nums, target):left, right = 0, len(nums) - 1while left <= right:mid = (left + right) // 2if nums[mid] == target:return midelif nums[mid] < target:left = mid + 1else:right = mid - 1return -1nums = [1, 3, 5, 7, 9]target = 5result = binary_search(nums, target)if result != -1:print("目标值在列表中的索引为:", result)else:print("目标值不在列表中")```在这个示例程序中,我们首先定义了一个名为`binary_search`的函数,它接受两个参数:一个有序数组`nums`和一个目标值`target`。
程序框图与算法的根本逻辑构造教学目标能够正确说出各种程序框图及流程线的功能与作用能够画出顺序构造、条件构造、循环构造的流程图能够设计简单问题的流程图教学重点程序框图的画法.教学难点程序框图的画法.课时安排4课时教学过程 第1课时 程序框图及顺序构造图形符号名称 功能终端框〔起止框〕 表示一个算法的起始和完毕输入、输出框 表示一个算法输入和输出的信息处理框〔执行框〕 赋值、计算 判断框 判断*一条件是否成立,成立时在出口处标明“是〞或“Y 〞;不成立时标明“否〞或“N 〞流程线连接程序框 连接点 连接程序框图的两局部三种逻辑构造可以用如下程序框图表示:顺序构造 条件构造 循环构造应用例如例1 请用程序框图表示前面讲过的“判断整数n(n>2)是否为质数〞的算法.解:程序框图如下:变式训练观察下面的程序框图,指出该算法解决的问题.解:这是一个累加求和问题,共99项相加,该算法是求100991431321211⨯++⨯+⨯+⨯ 的值.例2 一个三角形三条边的边长分别为a ,b ,c ,利用海伦—秦九韶公式设计一个计算三角形面积的算法,并画出程序框图表示.〔三角形三边边长分别为a,b,c ,则三角形的面积为S=))()((c p b p a p p ---〕,其中p=2c b a ++.这个公式被称为海伦—秦九韶公式〕 算法步骤如下:第一步,输入三角形三条边的边长a,b,c.第二步,计算p=2c b a ++.第三步,计算S=))()((c p b p a p p ---.第四步,输出S.程序框图如下:点评:很明显,顺序构造是由假设干个依次执行的步骤组成的,它是最简单的逻辑构造,它是任何一个算法都离不开的根本构造.顺序构造可以用程序框图表示为变式训练 下列图所示的是一个算法的流程图,a 1=3,输出的b=7,求a 2的值.解:根据题意221a a +=7, ∵a 1=3,∴a 2=11.即a 2的值为11.随堂练习 如下给出的是计算201614121++++ 的值的一个流程图,其中判断框内应填入的条件是______________.答案:i>10.第2课时 条件构造 教学目标1、认识条件构造2、能独立画出两种条件构造图示教学重点: 直到型构造、当型构造教学难点: 直到型构造、当型构造互化学习对象条件构造:先根据条件作出判断,再决定执行哪一种操作的构造就称为条件构造〔或分支构造〕,如图1所示.执行过程如下:条件成立,则执行A 框;不成立,则执行B 框.图1 图2应用例如例1 任意给定3个正实数,设计一个算法,判断以这3个正实数为三边边长的三角形是否存在,并画出这个算法的程序框图.算法步骤如下:第一步,输入3个正实数a ,b ,c.第二步,判断a+b>c ,b+c>a ,c+a>b 是否同时成立.假设是,则存在这样的三角形;否则,不存在这样的三角形.程序框图如右图:例2 设计一个求解一元二次方程a*2+b*+c=0的算法,并画出程序框图表示.解决这一问题的算法步骤如下:第一步,输入3个系数a ,b ,c.第二步,计算Δ=b 2-4ac.第三步,判断Δ≥0是否成立.假设是,则计算p=ab 2-,q=a 2∆;否则,输出“方程没有实数根〞,完毕算法.第四步,判断Δ=0是否成立.假设是,则输出*1=*2=p;否则,计算*1=p+q,*2=p-q,并输出*1,*2.程序框图如下:随堂练习1、设计算法判断一元二次方程a*2+b*+c=0是否有实数根,并画出相应的程序框图.相应的程序框图如右:2、〔1〕设计算法,求a*+b=0的解,并画出流程图.程序框图如下:作业:设计算法,找出输入的三个不相等实数a、b、c中的最大值,并画出流程图.解:算法步骤:第一步,输入a,b,c的值.第二步,判断a>b是否成立,假设成立,则执行第三步;否则执行第四步.第三步,判断a>c是否成立,假设成立,则输出a,并完毕;否则输出c,并完毕.第四步,判断b>c是否成立,假设成立,则输出b,并完毕;否则输出c,并完毕.程序框图如下:第3课时循环构造教学目标1、认识循环构造2、能独立画出两种循环构造图示3、能把直到型循环改写成当型构造,反之亦然教学重点: 直到型构造、当型构造教学难点: 直到型构造、当型构造互化学习对象在一些算法中,经常会出现从*处开场,按照一定的条件反复执行*些步骤的情况,这就是循环构造.反复执行的步骤称为循环体.循环构造有两种形式:当型循环构造和直到型循环构造.当型循环构造直到型循环构造直到型循环构造是程序先进入循环体,然后对条件进展判断,如果条件不满足,就继续执行循环体,直到条件满足时终止循环.当型循环构造是在每次执行循环体前,先对条件进展判断,当条件满足时,执行循环体,否则终止循环.应用例如例1 设计一个计算1+2+……+100的值的算法,并画出程序框图.第一步,令i=1,S=0.第二步,假设i≤100成立,则执行第三步;否则,输出S,完毕算法.第三步,S=S+i.第四步,i=i+1,返回第二步.当型循环直到型循环变式训练例1 设计框图实现1+3+5+7+…+131的算法.第一步,赋初值i=1,sum=0.第二步,sum=sum+i ,i=i+2.第三步,如果i ≤131,则反复执第二步;否则,执行下一步.第四步,输出sum.第五步,完毕.程序框图如右图知能训练设计一个算法,求1+2+4+…+249的值,并画出程序框图.第4课时 程序框图的画法应用例如例1 结合前面学过的算法步骤,利用三种根本逻辑构造画出程序框图,表示用“二分法〞求方程*2-2=0〔*>0〕的近似解的算法.算法分析:〔1〕算法步骤中的“第一步〞“第二步〞和“第三步〞可以用顺序构造来表示〔如下列图〕:〔2〕算法步骤中的“第四步〞可以用条件构造来表示〔如下列图〕.在这个条件构造中,“否〞分支用“a=m 〞表示含零点的区间为[m ,b ],并把这个区间仍记成[a ,b ];“是〞分支用“b=m 〞表示含零点的区间为[a,m ],同样把这个区间仍记成[a ,b ].〔3〕算法步骤中的“第五步〞包含一个条件构造,这个条件构造与“第三步〞“第四步〞构成一个循环构造,循环体由“第三步〞和“第四步〞组成,终止循环的条件是“|a-b|<d 或f(m)=0”.在“第五步〞中,还包含由循环构造与“输出m 〞组成的顺序构造〔如下列图〕. 〔4〕将各步骤的程序框图连接起来,并画出“开场〞与“完毕〞两个终端框,就得到了表示整个算法的程序框图〔如下列图〕.解:将实际问题转化为数学模型,该问题就是要求1+2+4+……+263的和.程序框图如下:点评:对于开放式探究问题,我们可以建立数学模型〔上面的题目可以与等比数列的定义、性质和公式联系起来〕和过程模型来分析算法,通过设计算法以及语言的描述选择一些成熟的方法进展处理.例3 乘坐火车时,可以托运货物.从甲地到乙地,规定每*火车客票托运费计算方法是:行李质量不超过50 kg 时按0.25元/kg ;超过50 kg 而不超过100 kg 时,其超过局部按0.35元/kg ;超过100 kg 时,其超过局部按0.45元/kg .编写程序,输入行李质量,计算出托运的费用.分析:此题主要考察条件语句及其应用.先解决数学问题,列出托运的费用关于行李质量的函数关系式.设行李质量为* kg ,应付运费为y 元,则运费公式为: y=⎪⎩⎪⎨⎧>-+⨯+⨯≤<-+⨯≤<,100),100(45.05035.05025.0,10050),50(35.05025.0,500,25.0x x x x x x整理得y=⎪⎩⎪⎨⎧>-≤<-≤<.100,1545.0,10050,535.0,500,25.0x x x x x x要计算托运的费用必须对行李质量分类讨论,因此要用条件语句来实现.解:算法分析:第一步,输入行李质量*.第二步,当*≤50时,计算y=0.25*,否则,执行下一步.第三步,当*≤100,计算y=0.35*-5,否则,计算y=0.45*-15.第四步,输出y.程序框图如下:课堂小节〔1〕进一步熟悉三种逻辑构造的应用,理解算法与程序框图的关系.〔2〕根据算法步骤画出程序框图.作业习题1.1B组1、2.设计感想本节是前面内容的概括和总结,在回忆前面内容的根底上,选择经典的例题,进展了详尽的剖析,这样降低了学生学习的难度.另外,本节的练习难度适中,并且多为学生感兴趣的问题,这样为学生学好本节内容作好充分准备,希望大家喜欢这一节课.。
1:二分法流程图:二分法基本思路:一般地,对于函数f(x),如果存在实数c,当x=c 时,若f(c)=0,那么把x=c 叫做函数f(x)的零点。
解方程即要求f(x)的所有零点。
假定f(x)在区间(x ,y )上连续先找到a 、b 属于区间(x ,y ),使f(a),f(b)异号,说明在区间(a,b)内一定有零点,然后求f[(a+b)/2],现在假设f(a)<0,f(b)>0,a<b① 如果f[(a+b)/2]=0,该点就是零点,如果f[(a+b)/2]<0,则在区间((a+b)/2,b)内有零点,(a+b)/2>=a ,从①开始继续使用② 中点函数值判断。
如果f[(a+b)/2]>0,则在区间(a,(a+b)/2)内有零点,(a+b)/2<=b ,从①开始继续使用 中点函数值判断。
这样就可以不断接近零点。
通过每次把f(x)的零点所在小区间收缩一半的方法,使区间的两个端点逐步迫近函数的零点,以求得零点的近似值,这种方法叫做二分法。
从以上可以看出,每次运算后,区间长度减少一半,是线形收敛。
另外,二分法不能计算复根和重根。
二分法步骤:用二分法求方程()0f x =的根*x 的近似值k x 的步骤① 若对于a b <有()()0f a f b <,则在(,)a b 内()0f x =至少有一个根。
② 取,a b 的中点12a b x +=计算1()f x ③ 若1()0f x =则1x 是()0f x =的根,停止计算,运行后输出结果*1x x =若1()()0f a f x <则在1(,)a x 内()0f x =至少有一个根。
取111,a a b x ==;若1()()0f a f x >,则取111,a x b b ==;④ 若12k k b a ε-≤(ε为预先给定的要求精度)退出计算,运行后输出结果*2k ka b x +≈,反之,返回步骤1,重复步骤1,2,3二分法Mtalab 程序syms x;fun=input('(输入函数形式)fx=');a=input('(输入二分法下限)a=');b=input('(输入二分法上限)b=');d=input('输入误差限d=')%二分法求根%f=inline(x^2-4*x+4);%修改需要求解的inline函数的函数体f=inline(fun);%修改需要求解的inline函数的函数体e=b-a; k=0 ;while e>dc=(a+b)/2;if f(a)*f(c)<0b=c;elseif f(a)*f(c)>0a=c;elsea=c;b=cende=e/2; k=k+1;endx=(a+b)/2;x%x为答案k%k为次数2,牛顿法及流程图:方程f(x)=0的根就是曲线y=f(x)与x轴交点的横坐标x*,当初始近似值x0选取后,过( x0,f(x0))作切线,其切线方程为:y- f(x0)=f′(x0)(x-x0)它与x轴交点的横坐标为x一般地,设是x*的第n次近似值,过( x,f(x))作y=f(x)的切线,其切线与x轴交点的横坐标为:x = - 即用切线与x轴交点的横坐标近似代曲线与x轴交点的横坐标,如图牛顿法正因为有此明显的几何意义,所以也叫切线法。