收藏 分享(赏)

第11章 软件技术基础.ppt

上传人:dreamzhangning 文档编号:4052484 上传时间:2018-12-06 格式:PPT 页数:68 大小:1.35MB
下载 相关 举报
第11章 软件技术基础.ppt_第1页
第1页 / 共68页
第11章 软件技术基础.ppt_第2页
第2页 / 共68页
第11章 软件技术基础.ppt_第3页
第3页 / 共68页
第11章 软件技术基础.ppt_第4页
第4页 / 共68页
第11章 软件技术基础.ppt_第5页
第5页 / 共68页
点击查看更多>>
资源描述

1、第三部分 计算机应用技术基础,2,本章介绍了软件工程的基本概念和开发方法,结构化程序设计的思想,面向对象程序设计的基本概念,算法的特征与表示,数据结构的基本概念,线性表、二叉树的基本操作及查找、排序的方法。,第11章 软件技术基础,3,了解程序设计语言的分类、选择及程序设计方法与风格 理解算法与数据结构的基本思想,掌握线性表、二叉树的操作及查找、排序的方法 了解结构化程序设计的思想和方法,掌握结构化程序设计的基本结构 理解面向对象程序设计的基本概念及程序设计思想 了解软件工程的基本概念及软件开发方法与软件测试,学习目标,4,学习纲要,程序设计概述 算法 数据结构 结构化程序设计 面向对象程序设

2、计,5,程序设计概述语言是人们交流思想、传达信息的工具。人类在长期的历史发展过程中,为了交流思想、表达感情和交换信息,逐步形成了语言。这类语言,如汉语和英语,通常称为自然语言。另一方面,人们为了某种专门用途,创造出种种不同的语言,例如旗语和哑语,这类语言通常称为人工语言。专门用于人与计算机之间交流信息的各种人工语言称为计算机语言或程序设计语言。,程序设计概述,6,程序设计语言的分类 根据程序设计语言发展的历程,可将其大致分为4类。 1机器语言 2汇编语言 3高级语言 44GL语言,7,程序设计语言的选择在选择程序设计语言时,既要考虑程序设计语言的特性,又要考虑是否能满足需求分析和设计阶段所产生

3、的模型的需要。一般而言,衡量某种程序设计语言是否适合特定的项目,应考虑下面的一些因素:应用领域。算法和计算复杂性。软件运行环境。用户需求中关于性能方面的需要。数据结构的复杂性。软件开发人员的知识水平和心理因素等。,8,程序设计的基本过程程序设计就是使用某种程序设计语言编写程序代码来驱动计算机完成特定功能的过程。程序设计的基本过程一般由分析所求解的问题、抽象数学模型、选择合适算法、编写程序、调试通过直至得到正确结果等几个阶段所组成。,9,程序设计方法与风格 程序设计是一门技术,需要相应的理论、技术、方法和工具来支持。程序设计方法和技术的发展,主要经过了结构化程序设计阶段和面向对象程序设计阶段。除

4、了好的程序设计方法和技术之外,程序设计风格也是很重要的。良好的程序设计风格可以使程序结构清晰合理,使程序代码便于测试和维护。程序设计风格是指编写程序时所表现出的特点、习惯和逻辑思路,为了测试和维护程序,往往还要阅读和跟踪程序,因此程序设计的风格总体而言应该强调简单和清晰,著名的“清晰第一,效率第二”论点已成为当今主导的程序设计风格。,10,算法的概念算法是对解决某一特定问题的操作步骤的具体描述。简单地说,算法就是解决一个问题而采取的方法和步骤。如打电话,要拨号、接通后通话、结束通话,这就是“通话算法”;植树的过程,是挖坑、栽树苗、培土、浇水,这就是“植树算法”。,算法,11,在计算机科学中,算

5、法是描述计算机解决给定问题的有明确意义操作步骤的有限集合。计算机算法一般可分为数值计算算法和非数值计算算法。数值计算算法就是对所给的问题求数值解,如求函数的极限、求方程的根等;非数值计算算法主要是指对数据的处理,如对数据的排序、分类、查找及文字处理、图形图像处理等。,12,算法的特征 可行性:算法中描述的操作必须是可执行的,通过有限次基本操作可以实现。 确定性:算法的每一步操作,必须有确切的含义,不能有二义性和多义性。 有穷性:一个算法必须保证执行有限步骤之后结束。 输入:一个算法有零个或多个输入,以描述运算对象的初始情况,所谓零个输入是指算法本身定出了初始条件。 输出:一个算法有一个或多个输

6、出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的。,13,算法的表示算法的描述应直观、清晰、易懂,便于维护和修改。描述算法的方法有多种,常用的表示方法有自然语言、传统流程图、N-S图、伪代码和计算机语言等。其中最常用的是传统流程图和N-S图。,14,算法的表示 1.自然语言 自然语言是人们日常所用的语言,如汉语、英语、德语等。 2.传统流程图 流程图是描述算法的常用工具,可以很方便地表示顺序、选择和循环结构,因此流程图可以表示任何程序的逻辑结构。,15,例1: 用自然语言描述将两个变量X和Y的值互换。 例2: 用自然语言描述求1+2+3+100之和的算法。,16,例3: 用传统流程

7、图描述求1+2+3+100之 和的算法。,传统流程图,17,3.N-S图 主要特点是不带有流向线,整个算法完全写在一个大矩形框中,这种流程图被称为N-S图。N-S图特别适合于结构化程序设计。 N-S图中各种基本的结构图框,其中(a)表示顺序结构,(b)表示选择结构,(c)表示当型循环结构,(d)表示直到型循环结构。,18,19,例4: 用N-S图描述求1+2+3+ +100之和的算法。,20,4.伪代码 伪代码介于自然语言和计算机语言之间的工具。 例5: 用伪代码描述求1+2+3+ +100之和的算法。 Begin /*算法开始*/ X=1 Y=2 while (Y=100)do/*循环执行,

8、直到条件不成立为止*/ XX+Y YY+1 Print X /*输出结果*/ End /*算法结束*/,21,5.计算机程序设计语言 算法和程序是有区别的。 算法是对解题步骤(过 程)的描述,可以与计算 机无关;而程序是利用某 种计算机语言对算法的具 体实现。,main( ) int i=1 ,sum=0;while(i=10) sum=sum+i;i+;printf(“%dn“,sum);,22,算法设计的基本方法 1.列举法 列举法又称为穷举法或枚举法,其基本思想是:根据提出的问题,列举所有可能的情况,并用问题中给定的条件检验哪些是需要的,哪些是不需要的。 2.归纳法 归纳法的基本思想是,

9、通过列举少量的特殊情况,经过分析,最后找出一般的关系。 3.递推法 所谓递推,是指从已知的初始条件出发,逐次推出所要求的各中间结果和最后结果。,23,例6: 求100-200之间的全部素数。 #include “math.h“main( )int m,i,j,n=0;for (m=101; m=j+1) printf (“%6d “,m);n=n+1;if (n%10=0) printf(“ n “); printf(“ n “); ,24,例7: 求fibonacci数列的前40个数。 分析:设当前项为f,前一项为f1,前二项为f2。首先根据f1和f2推出f,再将f2作为f1,f作为f2,再

10、推出f,如此一直递推下去: 1 1 2 3 5 第一次 f1 + f2 f 第二次 f1 + f2 f 第三次 f1 + f2 f,25,递推法:是指在一个数的序列值中,下一项的值是在前一项的基础上推算出来的,即下一项对前一项有某种依赖关系。f1=1;f2=1;n=2;printf(“%12ld %12ld”,f1,f2);for (i=3;i=40;i+)f=f1+f2;if (n%4 =0) printf (“n“);printf (“%12ld“,f);f1=f2; f2=f;n+; ,26,4.递归法 将问题逐层分解的过程,实际上并没有对问题进行求解,而只是当解决了最后那些最简单的问题

11、后,再沿着原来分解的逆过程逐步进行综合,直至最终解决原问题,这就是递归的基本思想。 递归分为直接递归与间接递归两种。 递推与递归的实现方法是大不一样的,递推是从初始条件出发,逐次推出所需求的结果;而递归则是从算法本身到达递归边界而后进行回归的。,27,例8: 用递归方法求n!。1 n=0,1n!= n*(n-1)! n1 float fac(int n) float f;if(n=0|n=1) f=1;else f=fac(n-1)*n;return(f); main() int n; float y; scanf(“%d”, ,28,5.分治法 所谓分治法,就是对问题分而治之。尽可能地把复杂

12、问题分解为若干较小的问题,找出各个较小问题的解之后,再组合成整个问题的解。 6.回溯法 通过对问题的分析,找出一个解决问题的线索,然后沿着这个线索逐步试探,对于每一步的试探,若试探成功,就得到了问题的解,若试探失败,就逐步回退,换别的路线再进行试探。这种方法称为回溯法。,29,算法的评价 1.正确性 是指算法的执行结果应该满足预先规定的功能和性能要求。 2.可读性 一个算法应该思路清晰、层次分明、简单明了、易读易懂。 3.健壮性 算法的健壮性指的是,算法应对非法输入的数据做出恰当反映或进行相应处理。 4.复杂性 是算法效率的度量,是评价算法优劣的重要依据。 算法的复杂性有时间复杂性和空间复杂性

13、之分。,30,数据结构是指相互之间存在着一定关系的数据元素的集合以及定义在其上的操作。 数据结构主要研究和讨论以下3个方面的问题: 数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构。 在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构。 对各种数据结构进行的运算。,31,数据结构的基本概念1.数据 数据是描述客观事物的所有能输入到计算机中并被计算机程序处理的符号的总称。 2.数据元素 数据元素是数据的基本单位,在计算机中通常作为一个整体加以考虑和处理。 作为某种处理,其中的数据元素一般具有某种共同特征。,32,3.数据对象 数据对象是性质相同的数据元素的集合,是数据

14、的一个子集。 4.数据类型 数据类型是一个值的集合和定义在这个值的集合上的一组操作的总称。,33,5.数据结构 (1)数据的逻辑结构 是指反映数据元素之间逻辑关系的数据结构。 在具有相同特征的数据元素集合中,各个数据元素之间存在有某种关系,在数据处理领域中,通常把数据元素之间这种固有的关系简单地用前件与后件关系来描述。 在数据结构中,没有前件的结点称为根结点;没有后件的结点称为终端结点。,34,一个数据结构可以用二元组表示,例8:S=(D,R)D=春,夏,秋,冬 R=, 例9:S=(D,R) D=父亲,儿子,女儿 R=, 也可以直观地用图形表示。在数据结构的图形表示中,对于数据集合D中的每一个

15、数据元素用中间标有元素值的圆表示,一般称之为数据结点,简称为结点。,图6-6 一年四季数据结构的图形表示,图6-7 家庭成员关系数据结构的图形表示,35,(2)数据的存储结构 数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构。 为了表示存放在计算机存储空间中的各数据元素之间的逻辑关系,在数据的存储结构中,不仅要存放各数据元素的信息,还需要存放各数据元素之间的前后件关系的信息。一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接和索引等。,36,(3)对数据结构中数据元素的操作 为了在计算机上解决具体问题,数据结构的研究内容为如何表示数据、如何组织数据,以及如

16、何对它们进行操作。 以下给出对数据结构中数据元素的几个基本操作: 插入 删除 更新 查找 排序 遍历,37,6.线性结构与非线性结构 根据数据结构中各数据元素之间前后件关系,一般将数据结构分为两大类型:线性结构与非线性结构。,38,线性结构 1.线性表 (1)线性表的概念例如: 某商场2008年每月的销售额(368,500,400,625,592)(单位:万元)就是一个线性表,其中的每一个数值就是一个数据元素。数据元素之间除了在表中的排列次序即先后次序不同外,没有其他的联系,这一类的表属于线性表。,39,学生基本情况表也是一个线性表,表中的数据元素是一条记录,由学号、姓名、性别等六个数据项组成

17、。,学生基本情况表,40,线性结构 1.线性表 (1)线性表的概念 线性表是由n(n0)个数据元素组成的有限序列 表中有且仅有一个第一个结点,它没有前驱只有一个后继 有且仅有一个最后一个结点,它没有后继只有一个前驱 其余结点都有一个前驱和一个后继 可以写成如下序列:(a1,a2,an) n为0时称为空表。,41,线性表的主要操作: 插入:在给定的线性表的第i个元素之前插入一个新数据元素,线性表长度加1; 删除:删除线性表中第i个元素,线性表的长度减1; 查找:在线性表中查找满足某种条件的元素,需要时还可对元素的值进行更新。 线性表的存储结构可分为顺序表和链表,42,顺序表:用一组地址连续的存储

18、单元依次存储线性表的各数据元素,称作线性表的顺序存储结构。,逻辑上相邻的元素在内存中的存储位置也相邻 由于线性表的所有数据元素属于同一数据类型,所以每个元素在存储器中占用的空间大小相同,因此,要在该线性表中查找某一个元素是很方便的。假设线性表中的第一个数据元素的存储地址为b,每一个数据元素占L字节,则线性表中第i个元素ai在计算机存储空间中的存储地址为:Loc(ai)= b+(i-1)*L 线性表的顺序存储结构是一种随机存取的存储结构,43,线性表的顺序存储结构,44,1. 顺序表的插入操作,基本思想: 在长度为n (0nMAXNUM-1)的顺序表L的第i(1in+1)个数据元素之前插入一个新

19、的数据元素x时,需将最后一个即第n个至第i个元素(共n-i+1个元素)依次向后移动一个位置,空出第i个位置,然后把x插入到第i个存储位置,插入结束后顺序表的长度增加1;,在顺序存储结构的线性表中插入一个元素时,平均要移动表中大约一半的数据元素(n/2) 。,45,序号 元素,序号 元素,46,.顺序表的删除操作,基本思想: 在长度为n(0nMAXNUM-1)的顺序表L中删除第i(1in)个数据元素,需将第i+1至第n个数据元素(共n-i个)的存储位置依次前移,并使顺序表的长度减1。,在顺序存储结构的线性表中删除一个元素时,平均要移动表中大约一半的数据元素(n-1)/2),47,序号 元素,序号

20、 元素,48,线性表的链式存储结构就是用一组任意的存储单元(可以是不连续的)存储线性表的数据元素。对线性表中的每一个数据元素,都需用两部分来存储:一部分用于存放数据元素值,称为数据域;另一部分用于存放直接前驱或直接后继结点的地址(指针),称为指针域,这种存储单元称为结点。 在链式存储结构方式下,存储数据元素的结点空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系由指针域来确定。链式存储方式可用于表示线性结构,也可用于表示非线性结构。,49,线性表的链式存储结构,是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次

21、序实现的。此种形式的链表因只含有一个指针域,又称为单向链表,简称单链表。,数据元素的逻辑次序靠结点的指针来指示,插入、删除操作不需要移动数据元素,50,51,p0-next=p1; head=p0;,第一种情况,插入位置在第一个结点之前:,52,p0-next=p1; p2-next=p0;,第二种情况,插入位置在中间某结点之前:,53,p0-next=null; p2-next=p0;,第三种情况,插入位置在最后结点之后:,54,循环链表 将单链表的表中最后一个结点指针指向链表的表头结点,整个链表形成一个环。 从表中任一结点出发都可找到表中其他的结点。,55,2.栈 栈(stack)是一种只

22、允许在一端进行插入和删除的线性表,它是一种操作受限的线性表。 在表中允许进行插入和删除的一端称为栈顶(top),另一端称为栈底(bottom)。栈的插入操作通常称为入栈或进栈(push),而栈的删除操作则称为出栈或退栈(pop)。当栈中无数据元素时,称为空栈。 根据栈的定义可知,栈顶元素总是最后入栈的,因而是最先出栈;栈底元素总是最先入栈的,因而也是最后出栈。这种表是按照后进先出(LIFO,last in first out )的原则组织数据的,因此,栈也被称为“后进先出”的线性表。,56,3.队列 队列(queue)是一种只允许在一端进行插入,而在另一端进行删除的线性表,它是一种操作受限的线

23、性表。在表中只允许进行插入的一端称为队尾(rear),只允许进行删除的一端称为队头(front)。队列的插入操作通常称为入队列或进队列,而队列的删除操作则称为出队列或退队列。当队列中无数据元素时,称为空队列。 队头元素总是最先进队列的,也总是最先出队列;队尾元素总是最后进队列,因而也是最后出队列。这种表是按照先进先出(FIFO,first in first out )的原则组织数据的,因此,队列也被称为“先进先出”表。 假若队列q=a0,a1,a2,an-1,进队列的顺序为a0,a1,a2,an-1,则队头元素为a0,队尾元素为an-1,57,非线性结构 1.树形结构 树(Tree)是一种重要

24、的非线性数据结构,在这类结构中,元素之间存在着明显的分支和层次关系。,图6-13 学校行政关系结构树,58,树形结构树是由n (n0)个结点构成的有限集合,n=0的树称为空树;当n0时,树中的结点应该满足以下三个条件(1)有且仅有一个结点没有直接前驱,该结点称之为根; (2)除根结点外,其余每个结点有且仅有一个直接前驱; (3)每个结点(包括根)可有任意多个(包括0)直接后继。,59,在树中采用线段连接两个相关联的结点,如A和B;其中A是上端结点,B是下端结点。称A是B的双亲(或父母或前驱),B为A的子女(或孩子或后继)。显然,双亲和子女的关系是相对而言的。上图中,B是A的子女,但又是E和F的

25、双亲。 由于E和F的双亲为同一结点,称E和F互为兄弟。 在任何一棵树中,除根结点外,其它任何一个结点有且仅有一个双亲,有0个或多个子女,且它的子女恰巧为其子树的根结点。我们将一结点拥有的子女数称为该结点的度,树中所有结点度的最大值称为树的度。上图中,A的度为3,B的度为2,而C的度为0,整棵树的度为3。称度为0的结点为终端结点或叶子结点,称度不为0的结点为非终端结点或分支结点。,60,二叉树的基本概念 二叉树的定义为:二叉树是一个由结点构成的有限集合,这个集合或者为空,或者由一个根结点及两棵互不相交的分别称作这个根的左子树和右子树的二叉树组成。当二叉树的结点集合为空时,称为空二叉树 。,61,

26、二叉树有以下五种基本形态:,(a) 空二叉树 (b) 根和空的左、右子树 (c) 根和非空左子树、空右子树,(d) 根和空左子树、非空右子树 (e) 根和非空的左、右子树,62,树型结构中使用的术语如父母(双亲或前驱)、子女(后继)、祖先、子孙、兄弟和路径等在二叉树中仍然可以沿用,但值得注意的是,二叉树并非一般树型结构的特殊形式,它们为两种不同的数据结构。 二叉树与一般树型结构的主要区别在于: (1)二叉树中每个非空结点最多只有两个子女,而 一般的树型结构中每个非空结点可以有0到多 个子女; (2)二叉树中结点的子树要区分左子树和右子树, 即使在结点只有一棵子树的情况下也要明确指 出是左子树还

27、是右子树。,63,二叉树的遍历 所谓二叉树的遍历,是指按一定的顺序对二叉树中的每个结点均访问一次,且仅访问一次。按照根结点访问位置的不同,通常把二叉树的遍历分为三种:前序遍历、中序遍历和后序遍历。 (1)二叉树的前序遍历 首先访问根结点; 然后按照前序遍历的顺序访问根结点的左子树; 再按照前序遍历的顺序访问根结点的右子树。,64,(2)二叉树的中序遍历 首先按照中序遍历的顺序访问根结点的左子树; 然后访问根结点; 最后按照中序遍历的顺序访问根结点的右子树。 (3)二叉树的后序遍历 首先按照后序遍历的顺序访问根结点的左子树; 然后按照后序遍历的顺序访问根结点的右子树; 最后访问根结点。,前序遍历

28、:a b d e f g c 中序遍历: d e b g f a c 后序遍历: e d g f b c a,65,结构化程序设计由于软件危机的出现,人们开始研究程序设计方法,其中最受关注的是结构化程序设计方法。20世纪70年代提出了“结构化程序设计”(Structured Programming)的思想和方法,该方法引入了工程思想和结构化思想,使大型软件的开发和编程都得到了极大的改善。,结构化程序设计,66,结构化程序的基本结构与设计思想(1)顺序结构 (2)选择结构(3)循环结构 结构化程序设计的基本原则(1)自顶向下(2)逐步求精(3)模块化(4)限制使用goto语句,67,面向对象程序设计面向对象程序设计,是当前程序设计的主流方向,是程序设计方式在思维上和方法上的一次飞跃。面向对象程序设计方式是一种模仿人们建立现实世界模型的程序设计方式,是对程序设计的一种全新的认识。,面向对象程序设计,68,面向对象程序设计的基本概念 1对象 2类 3消息 4继承 5多态性,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > 软件工程

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报