结构化程序设计、算法评价.ppt
《结构化程序设计、算法评价.ppt》由会员分享,可在线阅读,更多相关《结构化程序设计、算法评价.ppt(64页珍藏版)》请在三一办公上搜索。
1、结构化程序设计、算法评价,江苏省金湖中学张厚林,结构化程序设计,荷兰学者Dijkstra提出了“结构化程序设计”的思想,规定了一套方法,使程序具有合理的结构,以保证和验证程序的正确性。重要目的:是使程序具有良好的结构,使程序易于设计,易于理解,易于调试修改,以提高设计和维护程序工作的效率。,结构化程序设计,结构化程序规定了三种基本结构作为程序的基本单元:顺序、分支、循环结构。(1)顺序结构它是最简单,最基本的一种结构。在这个结构中的各块是只能顺序执行的。每一块可以包含一条或若干条可执行的指令。,结构化程序设计,(2)判断选择结构根据给定的条件是否满足执行A块或B块,结构化程序设计,(3)循环结
2、构“当型”循环:当给定的条件满足是执行A块,否则不执行A块而执行循环后面的部分。“直到型”循环:执行A块直到满足给定的条件为止(满足了条件就不再执行A块)。这两种循环的区别是:当型循环是先判断(条件)再执行,而直到型循环是先执行后判断。,结构化程序设计,三种基本结构都具有以下特点:有一个入口;有一个出口;结构中每一部分都应当有被执行到的机会,也就是说,每一部分都应当有一条从入口到出口的路径通过它(至少通过一次);没有死循环(无终止的循环)。,结构化程序设计,描述一个问题求解的算法有多种方法,常用的有自然语言,流程图(包括NS图)、程序设计语言、伪代码等。在结构化程序设计中,使用一种“结构化流程
3、图”,所谓流程图是用图形来表示程序设计的方法,它采用一些几何图形来代表各种性质的操作,是程序设计中广泛使用的一种辅助设计手段.。,结构化程序设计,N-S结构化流程图(1)一条简单的指令,用一个矩形框来表示:顺序结构可以表示:,结构化程序设计,交换两个变量的值的过程:,结构化程序设计,(2)判断选择结构,结构化程序设计,判断某一年份(year)是否闰年就是一个选择结构,闰年的判断方法是:如果此年份是400倍数,则它是闰年,或者此年份不是100的倍数却是4的倍数,则它也是闰年。,结构化程序设计,与框图对应if-then语句为:if year mod 100=0 then if year mod 4
4、00=0then writeln(yes)else writeln(no)elseif year mod 4=0then writeln(yes)else writeln(no),结构化程序设计,(3)循环结构,结构化程序设计,判断一个自然数是否为质数的算法可用当型循环结构流程图来表示:,结构化程序设计,例1用筛选法找出n以内的所有素数(就是质数),并按每行10个数的形式打印出来.n=25时,用筛选法选素数的过程如下:(1)2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20(2)2 3 4 5 6 7 8 9 10 11 12 13 14 15 1
5、6 17 18 19 20(3)2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20(4)2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20(5)2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20,结构化程序设计,首先确定2是素数,接着把凡是2的倍数的那些数筛去,过程见步骤(2),其中带有圆圈的数就是被筛去的数。接着把凡是3的倍数的那些数筛去,过程见步骤(3)。接着把凡是4的倍数的那些数筛去,过程见步骤(4)。接着在把凡是5的倍数的那些数筛去,过程见步骤(5)
6、。这时数列中剩下的未被筛去那些数就都是素数。,结构化程序设计,结构化程序设计,write(Input n:);readln(n);for i:=2 to maxn do primei:=1;i:=2;while i*i=n dobeginj:=i*2;while j=n do begin primej:=0;j:=j+i end;i:=i+1end;for i:=2 to n do if primei=1 then write(i:8);writeln,结构化程序设计,在某些程序中,一些具有相似功能的程序段在程序的不同位置反复出现,通常将这些重复出现的程序段抽出来,单独书写成为子程序,并通过一
7、个标识符加以标识,在程序中凡是出现这个程序段的地方只要简单地引用该标识符即可。这样的程序段就称为子程序,在pascal语言中,子程序一般是以函数和过程的形式来呈现的。,结构化程序设计,引入子程序之后,可以方便地把较为复杂的问题分解成若干较小但易于处理的子问题,更重要的是使程序的结构清晰、层次分明,增强了程序的可读性,使程序易于调试和维护。,结构化程序设计,理解“自顶向下,逐步求精”的思想 编写一个程序有两种截然不同的思考问题的方法:“自顶向下”和“自底向上”。“自顶向下,逐步细化”先进行整体设计,然后再进行下一层的设计,把若干个局部构成整体。结构化程序设计提倡这种方法,应采用自顶向下、逐步细化
8、和模块化的方法。,算法评价,算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。常见的算法有:穷举法,分治法,筛选法,构造法,贪心法,动态规划等。,算法评价,例2 H数问题(Hnum)问题描述所谓数,是指该数除以外最多只有2,3,5,7四种因子,如630即为数,而22不是。要求对键盘输入的自然数,求出第个数。如=30,应输出49。规定要求的数不超出长整型数的范围。,算法评价,算法分析从数的定义可以看出,如果一个数是数,那么将它的2,3,5,7四种因子去掉以后必然是剩下1。下面就根据数的这一特性用穷举法来解决这个问题。首先用自然语言描述该算法。,算法评价,算
9、法1_1:穷举法计算第n个H数第一步:从键盘输入一个自然数给N;第二步:将h置为1,order置为1;表示第一个数为1第三步:如果order=n,则转第七步;否则转第四步;第四步:h增加1,并将k的值置为h;第五步:将k中的2,3,5,7四种因子去掉;第六步:如果k=1,则order 增加1;第七步:输出h;,算法评价,以上描述中第五步的描述不够明确,下面对去掉k中因子i作更进一步的说明:第1步:如果k是i的倍数,则转第2步,否则算法结束;第2步:将k置为k/i;第3步:转第1步;,算法评价,const mark:array 1.4 of integer=(2,3,5,7);var i,h,k
10、,n,order:longint;begin write(Input n:);readln(n);h:=1;order:=1;while ordern do begin h:=h+1;k:=h;for i:=1 to 4 do while k mod marki=0 do k:=k div marki;if k=1 then order:=order+1 end;writeln(The no.,n,H number is,h)end.,算法评价,一个算法应该具有下列特性:有穷性:一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有穷时间内完成。确定性:算法的每一步,必须
11、是确切地定义的,读者理解时不会产生二义性。并且,在任何条件下,算法只有唯一的一条执行路径,即对于相同的输入只能得出相同的输出。,算法评价,输入:一个算法有0个或多个输入。它们是在算法开始前对算法给定的量,这些输入取自于特定对象的集合。输出:一个算法有一个或多个输出。它们是同输入有某种特定关系的量。可行性:算法应该是可行的。这意味着算法中所有有待实现的运算都是相当基本的,也就是说,它们原则上都是能够精确地进行的,甚至人们仅用笔和纸做有穷次运算即可完成。,算法评价,一般对算法进行评价主要有四个方面:1、算法的正确性正确性是设计和评价一个算法的首要条件,如果一个算法不正确,其它方面就无从谈起。一个正
12、确的算法是指在合理的输入数据下,能在有限的运行时间内得到正确的结果。通过对数据输入的所有可能情况的分析和上机调试,以证明算法是否正确。,算法评价,2、算法的简单性算法简单有利于阅读,也使得证明算法正确性比较容易,同时有利于程序的编写、修改和调试。但是算法简单往往并不是最有效。因此,对于问题的求解,我们往往更注意有效性。有效性比简单性更重要。,算法评价,3、算法的运行时间:时间复杂性算法的运行时间是指一个算法在计算机上运算所花费的时间。它大致等于计算机执行简单操作(如赋值操作,比较操作等)所需要的时间与算法中进行简单操作次数的乘积。通常把算法中包含简单操作次数的多少叫做“算法的时间复杂性”。,算
13、法评价,x:=x+1 for i:=1 to n do x:=x+1;for j:=1 to n do for k:=1 to n do x:=x+1 for i:=1 to n do for j:=1 to n do begin ci,j:=0;for k:=1 to n do ci,j:=ci,j+ai,k*bk,j end;,算法评价,一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时间量度记作:T(n)=O(f(n)它表示问题规模n的增大、算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称时间复杂度。,算法评价,在n很大时,不同数量
14、级时间复杂度显然有O(1)O(log n)O(n)O(nlog n)O(n2)O(n3)O(2n),可以看出,在算法设计时,我们应该尽可能选用多项式阶O(nk)的算法,而不希望用指数阶的算法。,算法评价,由于算法的时间复杂度考虑的只是对于问题规模n的增长率,则在难以计算基本操作执行次数(或语句频度)的情况下,只需求出它关于n的增长率或阶即可,一般可忽略常数项、底阶项、甚至系数。例如,在下列程序段中:for i:=2 to n do for j:=2 to i-1 do x:=x+1 语句x:=x+1执行次数关于n的增长率为n2,它是语句频度表达式(n-1)(n-2)/2中增长最快的一项。,算法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构 程序设计 算法 评价

链接地址:https://www.31ppt.com/p-6599125.html