第一部分公共基础知识
过对相邻元素进行比较,并根据比较的结果交换位置,从而逐步由任意序列变为有序序列。
过程是:先从头往后扫描、然后从后往头 扫描、再重复上述过程
(2)快速排序
快速排序就是一种可以通过一次交换而消除多个逆序的排序方法,因此相对冒泡排序法而言,速度要快。 2.插入类排序
插入排序,就是将无序序列中的各个元素依次插入到已经排好序的线性表中。常用的插入排序的方法有简单插入排序和希尔排序。
(1)简单插入排序
简单插入排序的方法是:在初始序列中,将只包含第1 个元素的子序列看成是一个有序序列,然后从第2 个元素起,依次将每个元素插入到前1 个有序子序列中。
(2)希尔排序
希尔排序的基本思想是:将整个无序序列分割成若干个子序列,对每个子序列分别进行简单插入排序,最后再对全体元素进行一次简单插入排序。与简单插入排序的子序列构成方式不同,希尔排序是将原序列中相隔某个增量 h 的元素构成一个子序列。在排序过程中逐步减少这个增量,最后当h 减到1 时,进行一次插入排序,排序就完成了。增量序列一般取hi = n/2k (k=1,2,?,[log2n]),其中n 为待排序序列的长度。希尔排序的效率与所选取的增量序列有关。通过希尔排序法对长度为n 的线性表进行排序,如果选取了上述增量序列,最坏情况下,需要比较的次数为O(n1.5)。 3.选择类排序
常用的选择排序有两种,简单选择排序和堆排序。
(1)简单选择排序
简单选择排序的基本步骤是:
①在一组n 个数据中选择出最小值;②若它不是这组数据中的第1 个数据,则将它与这组数据中的第1 个数据互换位置;③对剩下的子表采用同样的方法,直到子表空为止。
(2)堆排序法
在学习堆排序之前,我们先来看一下堆的定义,堆的定义如下:
具有n个元素的序列(h1,h2,…,hn),
当且仅当满足
或
(i=1,2,…,n/2)时称之为堆。
第2 章程序设计基础
考点1 程序设计方法与风格
程序是一组计算机指令的集合,是程序设计的最终成果。程序设计方法所要做的工作是,如何对实际问题进行抽象和归纳以及对程序进行编排,才能使程序的可读性、稳定性、可维护性、效率等更好。目前,主要有两种程序设计方法:结构化程序设计和面向对象程序设计。
1.源程序文档化
①符号名的命名:符号名的命名应尽量表达一些实际意义,以增强程序的可读性。②程序注释:良好的注释能够帮助读者理解程序。注释一般分为序言性注释和功能性注释,以给出程序的整体说明和程序的主要功能。序言性注释一般位于每一个程序的开头部分,它给出程序的整体说明;功能性注释一般嵌在原程序之中。③视觉组织:为使程序的结构清晰明了,可以在程序中利用空行、空格、缩进等技巧使程序层次清晰。
2.数据说明的方法
在编写程序时,一定要注意数据说明的方法。为使程序中的数据说明易于理解和维护。
3.语句的结构
程序的语句应该简单易懂,在编写程序时,应注重:每一行只写一条语句。程序编写优先考虑清晰性。一般情况下,在编写程序时,要做到清晰第一,效率第二。首先要保证程序的正确性,然后再提高速度。避免使用临时变量而使程序的可读性下降。尽可能使用库函数。避免不必要的转移。利用信息隐蔽,保证每一个模块的独立性。避免使用复杂的条件嵌套语句。避免使用无条件转移语句。尽量做到模块功能单一化。不要修补不好的程序,要重新编写。
4.输入和输出
输入和输出的方式应尽可能方便用户的使用。系统能否让用户接受,往往取决于输入和输出的风格。
- 4 -
选择题考点秘籍—二级C 语言
考点2 结构化程序设计 1.结构化程序设计的原则
结构化程序设计必须遵守模块化、自顶向下、逐步求精、限制使用goto 语句的原则。 2.结构化程序设计的基本结构与特点
结构化程序设计方法是一种程序设计的先进方法。实事证明,在程序设计时,只要使用3 种程序结构就可以实现所有的结构形式,它们是顺序结构、选择结构和循环结构。 3.结构化程序设计原则和方法的应用
结构化程序设计的效率较高,但是在实际设计程序时,应要注意:使用程序设计语言中的顺序、选择、循环等有限的控制结构表示程序的控制逻辑。选用的控制结构只允许有一个入口和一个出口。程序语句组成容易识别的语句序列块,每块只允许有一个入口和一个出口。复杂结构的程序设计时,仅用嵌套的基本控制结构进行组合嵌套来实现。语言中所没有的控制结构,应采用前后一致的方法来模拟。严格控制goto 语句的使用,但不是完全不能用。 考点3 面向对象的程序设计
面向对象方法,现在已经发展为一种主流的软件开发方法。它历经了多年的研究和发展,已经日益成熟和完善,应用也越来越深入和广泛。
1.面向对象方法的特点
面向对象的程序设计,是在结构化程序设计的基础上,以更接近人们通常思维的方式来解决问题的一种全新的软件开发技术。
面向对象的程序设计以对象为核心,强调对象的“封装性”“继承性”“抽象性”和“多态性”。其本质就是主张从客观世界固有的事物出发来构造系统,提倡用人类在现实生活中常用的思维方法来认识、理解和描述客观事物。 2.面向对象方法的基本概念
(1)对象(object)
面向对象方法认为:现实世界是由一系列的对象组成的。对象是现实世界中彼此相关并互通信息的实体。每个对象都包含了两部分的内容:描述对象状态的数据和描述对象行为。对象是面向对象方法中最基本的概念。因此,面向对象方法中的对象是由描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的整体。对象可以做的操作表示它
的动态行为,在面向对象分析和面向对象设计中,通常把对象的操作也称为方法或服务。
(2)类和实例
类是具有共同属性、共同方法的对象的集合,是关于对象的抽象描述,反应属于该对象类型的所有对象的性质。
(3)消息(Message)
消息传递是对象间通信的手段,一个对象通过向另一对象发送信息来请求其服务。消息机制统一了数据流和控制流,一个消息由下述 3 部分组成:接收消息的对象名称、消息名、零个或多个参数。
(4)继承(Inheritance)
①类的继承:继承广义地说,是指能够直接获得已有的属性和特征,而不必重复地定义。②继承的传递性:继承具有传递性,如果类A 继承类B,类B 继承类C,则类A 继承类 C。因此,一个类实际上继承了它上层的全部基类特性,也就是说,属于某类的对象除了具 有该类定义的特性外,还具有该类上层全部基类定义的特性。单继承:一个子类只有唯一的一个父类,这种继承称为单继承。多重继承: 一个子类也可以有多个父类,它可以从多个父类中继承特性。③继承的优点:相似的对象可以共享程序代码和数据,从而大大减少了程序 中的冗余信息,提高软件的可重用性,便于软件修改维护。
(5)多态性(Polymorphism)
多态性:对象根据所接收的消息而做出动作,同样的消息被不同的对象接收时可导致完全不同的行为,该现象称为多态性。
第3章 软件工程基础
考点1 软件工程基本概念 1.软件的定义与特点
(1)软件的定义
一般认为计算机软件是计算机系统中与硬件相互依存的另一部分,包括程序、数据及相关文档的完整集合。可见软件可分为两个部分:一是机器可执行的程序和数据;二是机器不可执行的,与软件开发、运行、维护、使用相关的文档。
(2)软件的特点
计算机软件具有如下的几个特点:软件是一种逻辑实体,而不是物理实体,具有抽象性;
- 5 -
第一部分公共基础知识
与硬件的生产不同,软件没有明显的制作过程;软件在使用期间不存在磨损、老化问题;对硬件和环境具有依赖性;软件复杂度高,成本昂贵;软件开发涉及诸多的社会因素。
(3)软件的分类
计算机软件按功能可分为3 类:应用软件、系统软件、支撑软件(或称为工具软件)。 2.软件危机和软件工程
软件工程概念的出现源自软件危机。 (1)软件危机
“软件危机”是20 世纪60 年代末以后出现的,其泛指在计算机软件的开发和维护过程中所遇到的一系列严重问题。实际上,几乎所有的软件都不同程度地存在这些问题。
随着计算机技术的发展和应用领域的扩大,软件已经成为计算机科学发展的“瓶颈”。
(2)软件工程
为了消除软件危机,通过认真研究软件危机的方法,认识到软件工程是使计算机软件走向工程科学的途径,逐步形成了软件工程概念,开辟了工程学的新兴领域——软件工程学。它是采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术与当前能够得到的最好的技术方法结合起来,经济地开发出高质量的软件并有效地维护它。
3.软件工程过程与软件生命周期
(1)软件工程过程
ISO 9000 定义:软件工程过程是指把输入转化为输出的一组彼此相关的资源和活动。
(2)软件生命周期
软件生命周期是指软件产品从提出、实现、使用维护到停止使用退役的整个过程。也就是说,软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。一般包括可行性研究与需求分析、设计、实现、测试、交付使用以及维护等活动。这些阶段可以有重复,执行时也可以有迭代。
4.软件工程的目标与原则
(1)软件工程的目标
软件工程的目标是:在给定成本、进度的前提下,开发出具有有效性、可靠性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性且满足用户需求的产品。
为实现软件工程的目标,软件工程的理论和技术性研究的内容主要包括软件开发技术和软件工程管理两个方面。
(2)软件工程的原则
为了达到上述的软件工程目标,在软件开发过程中,必须遵循以下软件工程的基本原则:抽象、确定性、模块化、信息隐蔽、局部化、完备性、一致性、可验证性。 5.软件开发工具与软件开发环境
软件工程技术鼓励研制和采用各种先进的软件开发方法、工具和环境。工具和环境的使用进一步提高了软件的开发效率、维护效率和软件质量。
(1)软件开发工具
软件开发工具的发展是从单项工具的开发逐步向集成工具发展的,软件开发工具为软件工程方法提供了自动的或半自动的软件支撑环境。
(2)软件开发环境
软件开发环境或称软件工程环境是指全面支持软件开发全过程的软件工具的集合。计算机辅助软件工程(CASE)是当前软件开发环境中富有特色的研究工作和发展方向。 考点2 软件分析方法
软件开发方法是指软件开发过程所遵循的方法和步骤,其目的在于有效地得到一些工作产品,即满足质量要求的程序和文档。软件开发方法包括分析方法、设计方法和程序设计方法。 1.需求分析与需求分析方法
软件需求是指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。需求分析的任务是发现需求、求精、建模和定义需求的过程。需求分析的目标是创建所需的数据模型、功能模型和控制模型。
(1)需求分析的定义
1997 年IEEE 软件工程标准词汇表对需求分析定义如下:
①用户解决问题或达到目标所需的条件或 功能;②系统或系统部件要满足合同、标准、规范或其他正式规定文档所需具有的条件或功能;③一种反映①或②所描述的条件或功能的文档说明。
(2)需求分析阶段的工作
需求分析阶段的工作主要分为4 个方面:需求获取、需求分析、编写需求规格说明书、
- 6 -
选择题考点秘籍—二级C 语言
需求评审。 表示的过程,是软件工程的重要阶段。软件设
计的基本目标是用比较抽象、概括的方式确定(3)需求分析方法
目标系统如何完成预定的任务,即软件设计是常用的需求分析方法有两种:①结构化分
析方法。主要包括:面向数据结构的Jackson 确定系统的物理模型。 方法(JSD),面向数据流的结构化分析方法 (2)软件设计的基本原理 (SA),面向数据结构的结构化数据系统开发软件设计应遵循软件工程的基本目标和原方法(DSSD)。②面向对象的分析方法(OOA)。则,建立适用于在软件设计中应该遵守的基本从需求分析建立的模型的特性来分,需求分析原理和软件设计中的有关概念。 方法又分为静态分析方法和动态分析方法。 模块化、抽象、信息隐藏和局部化、模块2.结构化分析方法 独立性。
(1)结构化分析方法的基本概念 (3)结构化设计方法 结构化分析方法是面向数据流、自顶向下、逐步结构化设计方法是目前采用最为广泛的一求精、进行需求分析的方法。该方法使用简单易读符种软件设计方法,其基本思想是将软件设计成号,根据软件内部数据传递、变换的关系,自顶向下、由相对独立、单一功能的模块组成的结构 逐层分解,描绘出满足要求的软件模型。 2.概要设计
(2)结构化分析的常用工具 概要设计又称为总体设计或初步设计。软结构化分析方法利用图形等结构化的描件概要设计的基本任务是: 述方式表达需求,简明易懂,用它们形成需求说①设计软件的系统结构。在需求分析阶段,已明书中的主要部分。这种方法所用的常用工具有:经把系统分解成层次结构,而在概要设计阶段,需数据流图、数据字典、判定树和判定表。 要进一步分解,划分为模块以及模块的层次结构。3.软件需求规格说明书 ②数据结构及数据库设计。数据设计是实现需求定
软件需求规格说明书(SRS)是需求分析义和规格说明过程中提出的数据对象的逻辑表示。阶段得出的最主要的文档。它通常用自然语言③编写概要设计文档。在概要设计阶段,需要编写完整、准确、具体地描述系统的数据要求、功的文档有:概要设计说明书、数据库设计说明书、能需求、性能需求、可靠性和可用性要求、出集中测试计划等。 错处理需求、接口需求、约束、逆向需求以及④概要设计文档评审。在概要设计中,对将来可能提出的要求。 设计部分是否完整地实现了需求中规定的功能、
①软件需求规格说明书的作用 性能等要求,设计方案的可行性,关键的处理软件需求规格说明书具有几个作用:便于及内外部接口定义正确性、有效性,各部分之用户、开发人员进行理解和交流;反映出用户间的一致性等都要进行评审,以免在以后的设问题的结构,可以作为软件开发工作的基础和计中出现大的问题而返工。 依据;作为确认测试和验收的依据。 2.概要设计工具
②软件需求规格说明书的内容 结构图(SC),也称程序结构图,是描述软件需求规格说明书是作为需求分析的一部软件结构的图形工具,是常用的软件结构设计分而制定的可交付文档。 工具。模块用一个矩形表示,矩形内注明模块
③软件需求规格说明书的特点 的功能和名字;箭头或直线表示模块间的调用软件需求规格说明书是确保软件质量的关系。在结构图中还可以用带注释的箭头表示有力措施,衡量软件需求规格说明书质量的标模块调用过程中来回传递的信息。常用的结构准:正确性、无歧义性、完整性、一致性、可图有4 种模块类型:传入模块、传出模块、变理解性、可验证性、可修改性和可追踪性。考换模块和协调模块。 点3 结构化设计方法 3.面向数据流的设计方法 1.软件设计的基本概念 在需求分析阶段,主要是分析信息在系统
(1)软件设计的基础 中的加工和流动情况。面向数据流的设计方法软件设计是一个把软件需求转化为软件 的目标是给出设计软件结构的一个系统化的
- 7 -
第一部分公共基础知识
途径。
(1)数据流类型。典型的数据流类型有两种:变换型和事务型。
(2)面向数据流设计方法的实施要点与 设计过程。
4.设计的准则
通过大量设计实践证明,以下设计准则可以借鉴为设计的指导和对软件结构图进行优化。
提高模块独立性、模块规模适中、深度、宽度、扇出和扇入适当、使模块的作用域在该模块的控制域内、应减少模块的接口和界面的复杂性、设计成单入口、单出口的模块和设计功能可预测的模块。 3.详细设计
详细设计的任务就是为软件结构图中的每一个模块确定实现算法和局部数据结构,用某种选定的表达工具表示算法和数据结构的细节。
常用的设计工具有以下几种: (1)图形工具
①程序流程图:程序流程图是软件过程的设计表示工具,表达直观、清晰,易于学习和掌握。②N-S 图:N-S 图是用方框图来代替传统的程序流程图的技术。基本图形有5 种。③ PAD 图:PAD 图即问题分析图(Problem AnalysisDiagram)。它是继程序流程图和方框图之后,提出的又一种描述软件详细设计的图形工具。基本图形有5 种。
(2)表格工具
用表格来描述处理动作及相应的各种条件或描述输入、处理、输出的过程。
(3)语言工具
用与程序设计语言很相近的伪码描述处理过程的细节。过程设计语言(PDL)也称为结构化的英语和伪码,它是一种混合语言,采用英语的词汇和结构化程序设计语言的语法,类似编程语言。考点4 软件测试
软件测试就是在软件投入运行之前,尽可能多地发现软件中的错误。它是对软件规格说明、设计和编码的最后复审。通常,软件测试的工作量往往占软件开发总工作量的40%以上。 1.软件测试的目的
软测试的目的:测试是为了发现错误而执行程序的过程;一个好的测试用例是指很可能
找到迄今为止尚未发现的错误的用例;一个成功的测试是发现了至今尚未发现的错误的测试;测试是要以查找错误为中心,而不是为了演示软件的正确功能。 2.软件测试的准则
要作好软件测试,必须设计有效的测试方案和好的测试用例。 3.软件测试技术和方法
软件测试的方法是多种多样的。若从是否需要执行被测软件的角度划分,可以分为静态测试和动态测试;若按照功能划分,可以分为白盒测试和黑盒测试。
(1)静态测试与动态测试
①静态测试:静态测试包括代码检查、静态结构分析、代码质量度量等。静态测试主要由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行。②动态测试:动态测试是基于计算机的测试,是为了发现错误而执行程序的过程。
(2)白盒测试与测试用例设计
白盒测试的方法也称结构测试或逻辑测试。它是根据软件的内部工作过程,检查内部成分,以确认每种内部操作是否符合设计要求。白盒测试允许测试人员利用程序内部的逻辑结构及有关信息来设计和选择测试用例,对程序所有的逻辑路径进行测试。
①逻辑覆盖测试。逻辑覆盖测试泛指以程序内部的逻辑结构为基础的测试用例设计书。从覆盖源程序语句的详尽程度分析,大致有以下一些不同的覆盖标准:语句覆盖、判定覆盖、条件覆盖、判断-条件覆盖。
②基本路径测试。基本路径测试的思想和步骤是,根据软件过程性描述中的控制流程确定程序的环路复杂性度量,用此度量定义基本路径集合,并由此导出一组测试用例对每一条独立执行路径进行测试。
(3)黑盒测试与测试用例设计
黑盒测试也称功能测试或数据驱动测试,是对软件已经实现的功能是否满足需求进行测试和验证。所以,黑盒测试的测试用例是根据程序的外部功能进行设计的,在软件接口处进行,完成功能验证。 4.软件测试的实施
软件测试是保证软件质量的重要手段。为
- 8 -