算法及程序设计.ppt
《算法及程序设计.ppt》由会员分享,可在线阅读,更多相关《算法及程序设计.ppt(71页珍藏版)》请在三一办公上搜索。
1、第5章 算法及程序设计,要点算法数据结构程序设计算术逻辑运算非数值计算面向过程和面向对象的程序设计。,5.1 算法的描述与实现,利用计算机解题的步骤是,实际的问题抽象为数学问题找到解决数学问题的方法转化为计算机算法用计算机程序设计语言编程调试程序运算得到结果。,5.1.1 计算机算法,1.计算机算法的特点(1)对于任何一组确定的输入,都在有限的处理步骤后得到一组明确的输出。(2)计算机输出的结果是明确的。(3)计算机只能做有限步骤运算(处理)。可以手工用4(1-1/3+1/5-1/7+1/9-)的公式,无限精确地计算圆周率,但没有一种计算机算法能实现无限精确地计算圆周率。,1.算法表示方法(1
2、)流程图表示法利用基本流程图符号的组合,可以表示较复杂的设计思想。它主要由下面一些符号及流程指向线组成。主要包括:开始、结束、输入、输出、过程、判断、循环等。,例如,输入一个数,如果它为0,输出“0”,否则输出“0”,(2)问题分析图表PAD法,PAD(Problem Analysis Diagram)是一种二维树形结构的软件设计表现方法。它强调“自顶向下,逐步求精”的设计思想。,基本符号,例:设计菜单程序,(3)表达式,在高级程序设计语言中,表达式类似数学中的计算公式,但与数学公式有较大区别。表达式是由变量名及运算符组成的式子。1)特殊运算符号 程序设计语言中,只能以ASCII符号组成表达式
3、,因此运算符号与数学中使用的符号有一些不相同。例如算数运算符号在C语言中:“*”表示乘法,“/”表示除法。C语言中还包括许多数学中没有的运算符号,例如“&变量名”表示取变量的地址运算,“*变量名”表示间接访问变量运算。,2)变量名是符号化的内存地址,不是代数中的“未知数”的概念。,在使用变量运算之前,它一定已被赋值。C语言表达式举例:Z=12*(A+3.7)/BCP=&C,5.1.2 数值计算,1 利用表达式作计算(1)算术表达式 例:输入圆半径,计算圆面积#include“stdio.h”/*标准 io头文件*/main()/*主函数*/float r,s;/*定义变量类型*/scanf(“
4、%f”,/*输出*/,(2)关系表达式,关系表达式的值是逻辑值“真/伪”,“1/0”。例如xy,a+b9.8都是合法表达式。当x=10,y=9时,c=xy表示c被赋值为1(c语言中真用1表示)。,(3)逻辑表达式,用逻辑运算符将关系表达式或逻辑量联系起来的式子为逻辑表达式。例如:&为逻辑与运算符号。e=(a=b)&(c=d),如果a=1,b=2,c=3,d=3则e被赋值为1。,2.算法设计,(1)尽量节约内存、减少计算次数 设计算法时,要综合考虑:计算机的内存储器大小是有限的,因而数字的范围、精度是有限的;计算机的计算速度是有限的,因而等待程序执行的时间是有限的。因此在设计算法时要尽量节约内存
5、、减少指令执行次数。9*9比92运算快,(2)尽量使用编译,不使用解释语言。(3)使用内存覆盖技术。,3.算法误差,(1)二进制小数转换误差计算浮点数可能产生积累误差。(2)截断误差计算由于误差3/(n1),当误差0.005时,N=5。,(3)有效数字误差,有效数字的最后一位与真值在此位相差正负1。例如:3位有效数字1.23的真值在1.220 x 与1.229999999 之间。在第4位作四舍五入。(4)精度转换误差实际上高精度与低精度数运算结果应以低精度为准,但在计算机程序设计语言中,多数是把低精度自动转换为高精度。,5.1.3 常用算法,1.枚举法判断集合中,所有元素为真,则命题为真。例如
6、,若公鸡每只3元,母鸡每只5元,小鸡每只1元,求100元买100只鸡有多少种方案。x+y+z=1003*x+5*y+z/3=100两个方程式不可能解出3个未知数,但可以用x、y、z的各种组合来试验。当试验次数超过10的10次方时,实用性不大。,2.递归算法,定义算法的过程中使用了被定义的算法本身。(1)直接递归 重复一组或一个操作,例如累加,累减,累乘,累除等。a=a+1,把a加1后的值赋给a。,(2)间接递归,程序用到它自身的前一步或前几步。例1 计算阶乘。2!=1*23!=1*2*3=2!*3(N+1)!=N!*(N+1)例2 有若干球,若每次拿走剩下的一半还于1个,当第10次要拿球时,仅
7、剩下1个球,问原来有多少球?,3 迭代算法,每一次计算都在前一次计算的基础上进行,解决已知有解,但难用表达式表示的问题。(1)对分法(2)逐次逼近法,4 回朔法,枚举和试探的结合。将要解决的问题过程分为若干结点,每个结点有若干可供选择的后续结点。若不满足条件,返回到上一层结点,恢复刚才的参数,再试探其他分支。,5 排序,将杂乱无章的数据按升序或降序排列。常用冒泡法6 插值 一些函数表无法用f(x)表示,在表中插入一些中间值,构成新的表,用p(x),近似代替f(x)。要求p(xi)=f(xi),xi为已知点。,7 数据压缩与解压缩,科学家在研究中发现,大多数信息的表达都存在着一定的冗余度,通过采
8、用一定的模型和编码方法,可以降低这种冗余度。计算机中用二进制表示的数据文件(包括数字或符号)中有许多是同一个或同一组数据的多次重复。重复的数据使得文件的总长度变长,不利于存储和传输。设计算法,尽量去除文件中的重复数据,形成等效的新文件是数据压缩要解决的问题。,反之,把已经压缩了的文件恢复成原来未压缩的文件是解压缩要解决的问题。为了提高压缩比例,压缩可分无损压缩和有损压缩两大类。无损压缩比例较小,一般在一倍以下,有损压缩比例可达几倍,十几倍,甚至几十倍!前者用于对文档、程序、重要数据的压缩,后者多用于对声音、图像、影像等文件的压缩。,压缩技术大致可以按照以下的方法分类,常用压缩/解压缩软件,在W
9、indows 操作系统支持下的压缩/解压缩软件很多,以WinRAR和WinZIP最常用,压缩比例较高,可支持的压缩文件类型较多。,5.2 程序设计方法,程序设计方法已有很大发展:个人集体协作利用程序设计语言软件开发平台面向过程面向对象手工生产软件工程,5.2.1 面向过程的程序设计,这种程序设计方法是先把计算机要处理的事务分解成若干个独立的过程(procedures),自顶向下不断的把复杂的处理分解为子处理,一层一层地分解下去,直到仅剩下若干个容易处理的子处理为止。再用面向过程的开发语言(汇编、C语言等)编制源程序,然后经过编译形成计算机可执行程序,通过反复修改最后完成设计工作。这种方法的理论
10、基础是数据结构和算法,流程图能较好反映整个设计和执行过程。,1 结构化程序设计方法,主要特点是:把过程分为顺序、条件转移(循环)、分支、子过程等标准程序功能模块,每块都只能有唯一的入口和出口,模块之间通过入口、出口连接。由于块内的程序结构是封闭的,因此便于设计和检验程序的正确性。适合开发小型应用软件。,2 支持面向过程设计的高级程序设计语言,常用的有:(1)C语言(包括Microsoft C、Turbo C等多种版本)它是于20世纪60年代在ALGOL语言基础上研制的。其显著特点是代码及数据分隔,即程序的各个部分除了必要的信息交流外彼此独立。C语言提供给用户各种函数,这些函数可方便的调用,并具
11、有多种循环、条件语句用来控制程序流向,从而使程序完全结构化。C语言还提供许多汇编一级的指令,可直接指挥硬件工作,因此也有人称它为中间级语言。,(2)Pascal 语言 它是于20世纪70年代在ALGOL语言基础上研制的。PASCAL语言最初是为系统地教授程序设计而设计的,它具有丰富的数据类型,其控制结构体现了结构化程序设计原则。适合教学,科学计算与系统软件的研制。(3)Basic语言,3 软件测试,(1)白箱法:设计多组输入数据,使得程序中的每一个分支都得到测试,要求测试中使用合理的输入数据能得到合理的输出结果;程序能对不合理的输入作出适当的反应。由于这种测试涉及程序的具体结构,有时实际操作有
12、困难。(2)黑箱法:设计多组输入数据,要求程序能在输入合理的数据后得到合理的输出结果;对不合理的输入作出适当的反应。,5.2.2 面向对象的程序设计,1.基本概念(1)对象对象是包括自己的数据和一组对这些数据的操作的独立实体。对象=数据+作用于这些数据上的操作。在面向对象的程序设计方法中,对象是基本单位。,(2)类,具有相同属性和操作对象的集合称为类。编译系统为程序员预先设置了上万个类供选用。每个类可以派生(继承)出子类、孙类。实际上类是用来定义对象的抽象数据类型,它把整数、实数、符号等具体的数据类型和过程操作都已经隐藏起来了。,(3)封装把对象的属性和操作结合成一个独立的系统单位,并尽可能隐
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 程序设计

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