软件工程第6章 课后作业参考答案.
- 格式:doc
- 大小:911.50 KB
- 文档页数:5
软件工程导论(第六版)部分课后习题-答案软件工程导论(第六版)部分课后习题-答案一、选择题1. 答案:B解析:选择题解析2. 答案:A解析:选择题解析二、判断题1. 答案:对解析:判断题解析2. 答案:错解析:判断题解析三、填空题1. 答案:软件工程解析:填空题解析2. 答案:开发、维护解析:填空题解析四、简答题1. 答案:软件需求分析是软件工程的第一步,它主要是通过对用户需求的调查和分析,确定软件系统需要具备的功能和性能以及相关约束条件。
解析:简答题解析2. 答案:软件开发过程中的质量保证主要包括软件测试和代码评审两个方面。
软件测试是通过运行和验证软件系统的过程,以确定其是否满足预期的需求和标准。
代码评审则是对软件代码进行审查和评估,在开发过程中发现和修复潜在的问题和错误。
解析:简答题解析五、计算题1. 答案:20解析:计算题解析2. 答案:1000解析:计算题解析六、案例分析题1. 答案:软件项目管理是指对软件项目进行规划、组织、分配和控制的过程。
它包括项目范围管理、时间管理、成本管理、质量管理、风险管理等方面。
在一个项目中,软件项目经理负责整体的项目管理工作,包括资源的分配、进度的控制、风险的管理等。
解析:案例分析题解析2. 答案:敏捷开发是一种迭代、逐步增量的软件开发方法。
它强调快速、灵活地响应用户需求的变化,通过频繁的迭代和持续的反馈来逐步完善软件系统。
敏捷开发方法注重团队合作、交流和高效的沟通,通过直接面对面的沟通取代冗长的文档和繁琐的流程,提高软件开发的效率和质量。
解析:案例分析题解析总结:本文主要针对《软件工程导论(第六版)》部分课后习题提供了答案和解析。
其中包括选择题、判断题、填空题、简答题、计算题和案例分析题等多个题型。
通过解答这些习题,读者可以进一步加深对软件工程的理解和掌握。
希望本文对读者有所帮助,谢谢阅读。
软件⼯程第6章-课后作业参考(附答案)第六章作业题参考答案3.画出下列伪码程序的程序流程图和盒图: STARTIF p THENWHILE q DO f END DO ELSEBLOCK g nEND BLOCK END IF STOP 答:(1)流程图如图6-1所⽰:图6-1从伪码变成的程序流程图(2)该程序的盒图如图6-2所⽰:图6-2 从伪码变成的程序盒图4.下图给出的程序流程图代表⼀个⾮结构化的程序,请问:(1)为什么说它是⾮结构化的?(2)设计⼀个等价的结构化程序。
(3)在(2)题的设计中你使⽤附加的标志变量flag吗?若没⽤,请再设计⼀个使⽤flag 的程序;若⽤了,再设计⼀个不⽤flag 的程序。
答:(1)通常所说的结构化程序,是按照狭义的结构程序的定义衡量,符合定义规定的程序。
图⽰的程序的循环控制结构有两个出⼝,显然不符合狭义的结构程序的定义,因此是⾮结构化的程序。
(2)使⽤附加的标志变量flag,⾄少有两种⽅法可以把该程序改造为等价的结构化程序,图6-3描绘了等价的结构化程序的盒图。
(a)解法1(b)解法2图6-3 与该图等价的结构化程序(⽤flag)(3)不使⽤flag把该程序改造为等价的结构化程序的⽅法如图6-4所⽰。
图6-4 与该图等价的结构化程序(不⽤flag)8.画出下列伪码程序的流图,计算它的环形复杂度。
你觉得这个程序的逻辑有什么问题吗?C EXAMPLELOOP:DO WHILE X>0A=B+1IF A>10THEN X=AELSE Y=ZEND IFIF Y<5THEN PRINT X,YELSE IF Y=2THEN GOTO LOOPELSE C=3END IFEND IFG=H+REND DOIF F>0THEN PRINT GELSE PRINT KEND IFSTOP答:(1)该伪码的流程图如图6-8所⽰:图6-8 程序流程图根据该程序流程图,可得该程序流图如图6-9所⽰:图6-9 程序流图环形复杂度V(G)=流图中的区域数=流图中判定结点数⽬+1=6+1=7 (判定结点为:1、3、6、8、10、11)(2)该算法问题在于控制最外层循环的变量Z不仅没有经过初始化,并且在该循环内部没有任何有可能该变Z的语句。
第一章练习题一、填空题1、软件工程三要素是:方法、工具、过程。
2、软件开发方法是指软件开发过程中所应遵循的方法和步骤。
二、名词(术语)解释:1、可靠性---是指在给定的时间间隔内,程序成功运行的概率。
可靠性是衡量软件质量的一个重要目标。
2、可理解性---指系统具有清晰的结构,能直接反映问题的需求。
可理解性有助于控制软件系统的复杂性,并支持软件的维护、移植和重用。
三、问答题1、面向对象方法的优点是什么?答:(1)将现实世界问题向面向对象解空间直接映射,实现对现实世界的直接模拟。
(2)以数据为中心,而不是基于对功能的分解,使得软件结构相对稳定,软件的重用性、可靠性、可维护等特性都较好。
2、可视化开发方法的优点有哪些?答:(1)简化了图形用户界面的设计和编码工作,将开发的注意力主要集中在程序的执行逻辑和工作流程上。
(2)软件开发简单,易学、易上手。
(3)专业或非专业人员都能参与软件开发活动。
第二章练习题一、填空题:1、软件工程过程是:为获得软件产品,在软件工具支持下由软件人员完成的一系列软件工程活动。
2、一个软件从定义、开发、使用和维护,直到最终被废弃,所经历的生存过程经历的生存过程称为软件生存期或叫生命期。
3、软件生命周期的阶段划分为3个时期是:定义时期、开发时期、维护时期。
4、软件工程标准的5个层次是:国际标准、国家标准、行业标准、企业规范、项目规范。
二、简答题:1、瀑布模型的优点有哪些?答:1、强迫开发人员采用规范的技术方法;2、严格地规定了每个阶段必须提交的文档;3、每个阶段结束前必须正式进行严格的技术审查和管理复审。
2、瀑布模型的缺点是什么?答:1、在软件开发的初期阶段就要求做出正确、全面、完整的需求分析对许多应用软件来说是极其困难的。
2、在需求分析阶段,当需求确定后,无法及时验证需求是否正确、完整。
3、作为整体开发的瀑布模型,由于不支持产品的演化,缺乏灵活性,对开发过程中很难发现的错误,只有在最终产品运行时才能暴露出来,从而使软件产品难以维护。
软件工程课后习题参考答案软件工程课后习题参考答案1.简答题1.1 什么是软件工程?软件工程是一门研究和应用如何以系统化、规范化、可量化的方式开发和维护软件的学科,涉及到软件的设计、构建、测试、部署和维护等全生命周期的过程。
1.2 软件工程的目标是什么?软件工程的目标是提高软件开发过程的效率和质量,确保软件项目按时、按需求交付,并且能够满足用户的期望。
1.3 软件生命周期有哪些阶段?常见的软件生命周期包括需求分析、系统设计、详细设计、编码、测试、部署和维护等阶段。
1.4 什么是软件需求?软件需求是指对于软件系统所需满足的问题或需求的描述,包括功能需求、性能需求、接口需求等。
1.5 软件开发过程有哪些模型?常见的软件开发过程模型包括瀑布模型、迭代模型、螺旋模型、敏捷开发等。
2.客观题2.1 软件测试的目的是什么?a) 发现软件中的错误和缺陷b) 验证软件是否符合需求和规格c) 提高软件的可靠性和质量d) 以上皆是答案:d) 以上皆是2.2 瀑布模型的特点是什么?a) 瀑布模型是一种线性顺序的软件开发过程模型b) 各个开发阶段是相互独立的c) 开发过程按照需求分析、设计、编码、测试等顺序进行d) 以上皆是答案:d) 以上皆是2.3 敏捷开发的原则是什么?a) 个体和交互胜过流程和工具b) 可工作的软件胜过详尽的文档c) 客户合作胜过合同谈判d) 响应变化胜过遵循计划e) 以上皆是答案:e) 以上皆是3.计算题3.1 请计算以下代码的覆盖率:(假设代码行数为100行,已执行代码行数为80行)覆盖率 = 已执行代码行数 / 代码行数 100% = 80 / 100 100% = 80%3.2 请计算以下缺陷密度的值:(假设代码行数为1000行,代码中的缺陷数为10个)缺陷密度 = 缺陷数 / 代码行数 1000 = 10 / 1000 1000 = 103.3 请计算以下代码的复杂度:(假设代码中包含的判断语句有20个,循环语句有5个)复杂度 = 判断语句数 2 + 循环语句数 3 = 20 2 + 5 3 = 40 + 15 = 554.附件本文档涉及附件:无5.法律名词及注释本文涉及的法律名词及注释:无。
软件工程课后习题参考答案一、概述软件工程作为一门跨学科的学科,涉及到软件开发的各个方面,对培养软件工程师的能力具有重要意义。
课后习题是巩固和深化学生对课程知识的理解和应用的重要途径。
本文将为软件工程课后习题提供一些参考答案,供学生参考和自我评估。
二、需求分析与规格说明1. 什么是软件需求?软件需求分析的目的是什么?软件需求是对问题域中用户对软件所期望的功能和性能的描述。
软件需求分析的目的是识别、理解、规范和管理软件系统开发的需求。
2. 软件需求分析的基本步骤是什么?软件需求分析的基本步骤包括需求获取、需求建模、需求验证和需求管理。
3. 什么是功能需求?什么是非功能需求?功能需求描述的是软件系统应具备的具体功能和行为。
非功能需求则描述了软件系统的其他属性,例如性能、安全性、可靠性等。
4. 举例说明一些常见的软件需求验证方法。
常见的软件需求验证方法包括需求审查、原型验证、测试和模型检查等。
三、软件设计与架构1. 什么是软件架构?软件架构的重要性是什么?软件架构是软件系统的基础结构和组织方式,决定了软件系统的可扩展性、可维护性和可演化性。
软件架构的合理设计能够降低开发和维护的难度。
2. 请简要介绍常见的软件架构模式。
常见的软件架构模式包括分层架构、客户-服务器架构、面向对象架构和微服务架构等。
3. 什么是设计模式?列举几个常见的设计模式。
设计模式是针对软件设计中的常见问题所提出的解决方案。
常见的设计模式包括单例模式、观察者模式、工厂模式和策略模式等。
4. 请简要介绍面向对象设计的原则。
面向对象设计的原则包括单一职责原则、开放封闭原则、里氏替换原则、依赖倒置原则和接口隔离原则等。
四、软件测试与质量保证1. 软件测试的目的是什么?请简要介绍测试驱动开发(TDD)。
软件测试的目的是发现软件产品中的错误和缺陷。
测试驱动开发是先编写测试用例,再根据用例编写代码的开发模式。
2. 请简要介绍黑盒测试和白盒测试。
黑盒测试是基于软件外部行为和需求的测试,不考虑软件的内部实现。
软件工程(第五版)-习题及答案---第六章-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII一、选择题1、UML的主要特点不正确的是(C)。
A、面对对象,表达能力强B、可视化建模C、面对过程,表达能力强D、统一标准2、静态建模图不包括(B)。
A、用例图B、协作图C、类图D、对象图3、用例图的模型元素不包括(D)。
A、用例B、系统C、行为者D、软件开发者4、类图的要素不包括(D)。
A、类名称B、操作C、属性D、对象5、时序图中的要素不包括(A)。
A、执行者B、对象C、对象生命线D、消息6、对象模型的描述工具是(C)。
A、状态图B、数据流图C、对象图D、结构图7、协作图的要素不包括(A)。
A、用例B、对象C、链D、消息8、类图反映了系统中对象之间的抽象关系,不包括(D)。
A、关联B、聚合C、泛化D、内聚9、下面(D)不是状态图的图符。
A、圆角的矩形B、实心圆点C、实心圆环D、椭圆10、描述类中某个对象的行为,反映了状态与事件关系的是(A)。
A、状态图B、数据流图C、对象图D、结构图11、动态模型的描述工具(C)。
A、对象图B、设计图C、状态图D、结构图12、表示对象的相互行为的模型是(A)模型。
A、对象B、动态C、结构D、静态13、有关类和对象的描述中,错误的是(A)。
A、一个类只能有一个对象B、对象是类的具体实例C、类是某一类对象的抽象D、类和对象的关系是一种数据类型和变量的关系14、用例图中用例之间的关系通常有关联关系、依赖关系和(C)关系。
A、协作B、聚合C、泛化D、内聚15、动态模型图包括:时序图、协作图、状态图和(C)图。
A、对象图B、设计图C、活动图D、结构图二、简答题1.简要介绍用例图的三个要素。
答:用例图主要包括以下三个元素:①用例(Use Case):用例是系统的使用过程或要执行的动作序列,用来描述某个参与者使用系统所完成的功能。
在图中用椭圆来表示,用例名称可写在椭圆中或椭圆下面。
软件工程课后习题参考答案软件工程课后习题参考答案1·软件工程概述1·1 软件工程的定义和特点软件工程是一门研究和应用如何以系统化、规范化、可量化的方法开发和维护软件的学科。
其特点包括软件开发的目标性、可度量性、可管理性和可预测性。
1·2 软件生命周期模型常见的软件生命周期模型包括瀑布模型、迭代模型、螺旋模型和敏捷模型等。
每个生命周期模型都有其适用的场景和优缺点。
2·软件需求工程2·1 软件需求获取软件需求获取方法包括面谈、问卷调查、用户场景模拟等。
需求获取的目的是明确软件系统的功能、性能和约束条件。
2·2 软件需求分析与规格说明软件需求分析的目标是识别和定义系统的需求,包括功能需求、非功能需求和约束条件。
规格说明是将需求转化为精确、清晰和易于验证的文档。
3·软件设计3·1 结构化设计结构化设计将系统分解为模块,确定模块之间的接口和关系,实现模块化、高内聚、低耦合的设计原则。
3·2 面向对象设计面向对象设计将系统抽象为对象,定义对象的属性和方法,并确定对象之间的关系。
常用的面向对象设计方法有UML(统一建模语言)。
4·软件测试4·1 测试基本概念软件测试是通过运行软件来发现错误和缺陷的过程。
测试的基本概念包括测试用例、测试套件、测试目标和测试覆盖度等。
4·2 测试方法和技术常见的软件测试方法和技术有黑盒测试、白盒测试、灰盒测试、单元测试、集成测试和系统测试等。
每种方法和技术都有其适用的场景和优缺点。
5·软件维护与配置管理5·1 软件维护软件维护是指对已有的软件进行修改、优化、修复错误和适应环境变化的过程。
维护活动包括需求分析、设计、实现、测试和文档更新等。
5·2 软件配置管理软件配置管理是指在软件开发和维护过程中,对软件配置项进行识别、控制、追踪和审查,确保软件可以按需发布、升级和回溯。
软件工程课后习题参考答案1.简述软件开发的本质。
答:软件开发的本质就是实现问题空间的概念和处理逻辑到解空间的概念和处理逻辑之间的映射。
P192.简述实施软件开发的基本途径。
答:实施软件开发的基本途径是系统建模。
所谓系统建模,是指运用所掌握的知识,通过抽象,给出该系统的一个结构——系统模型。
P193.简述何谓模型以及软件开发中所涉及的模型。
答:模型是一个抽象。
该抽象是在意图所确定的角度和抽象层次对物理系统的一个描述,描述其中的成分和成分之间所具有的特定语义的关系,还包括对该系统边界的描述。
软件开发中所涉及的模型可分为两大类,一类称为概念模型,描述了系统是什么;另一类统称为软件模型,描述了实现概念模型的软件解决方案。
4.简述软件开发所涉及的两大类技术。
答:软件开发所涉及的两大类技术为:一是求解软件的开发逻辑,二是求解软件的开发手段。
5、简述需求与需求规约的基本性质。
答:需求的基本性质:1) 必要的,该需求是用户所要求的。
2)无歧义的,该需求只能用一种方式解释。
3)可测的,该需求是可进行测试的。
4)可跟踪的,该需求可从一个开发阶段跟踪到另一个阶段。
5)可测量的,该需求是可测量的。
需求规约的基本性质:1)重要性和稳定性程度:按需求的重要性和稳定性,对需求进行分级。
2)可修改的:在不过多地影响其他需求的前提下,可以容易地修改一个单一需求。
3)完整的:没有被遗漏的需求。
4)一致的:不存在互斥的需求。
6、简述软件需求的分类。
答:软件需求可以分为两大类:一类是功能需求,一类是非公能需求,而非公能需求可分为性能需求,外部接口需求、设计约束和质量属性需求。
P23 Array 7、举例说明功能需求和非功能需求之间的基本关系。
答:非功能需求可作用于一个或多个功能需求,例如非功能需求可作用于一个或多个功能需求其中,非功能需求1作用于功能需求1和功能需求38、有哪几种常用的初始需求发现技术?答:有5种常用的需求发现技术:自悟、交谈、观察、小组会和提炼。
1-1、选择题1.B2.C3.C、B4.C5.D1-2、简答题(1)软件的定义。
答:软件是一系列按照特定顺序组织的计算机数据和指令的集合。
一般来讲软件被划分为编程语言、系统软件、应用软件和介于这两者之间的中间件。
软件并不只是包括可以在计算机(这里的计算机是指广义的计算机)上运行的电脑程序,与这些电脑程序相关的文档一般也被认为是软件的一部分。
简单的说软件就是程序加文档的集合体。
另也泛指社会结构中的管理系统、思想意识形态、思想政治觉悟、法律法规等等。
(2)为什么说软件与硬件结合在一起组成计算机完整系统?答:计算机系统由计算机硬件和软件两部分组成。
硬件包括中央处理机、存储器和外部设备等;软件是计算机的运行程序和相应的文档。
计算机系统具有接收和存储信息、按程序快速计算和判断并输出处理结果等功能。
硬件系统主要由中央处理器、存储器、输入输出控制系统和各种外部设备组成。
中央处理器是对信息进行高速运算处理的主要部件,其处理速度最高可达每秒几亿次操作。
存储器用于存储程序、数据和文件,常由快速的主存储器(容量可达数百兆字节)和慢速海量辅助存储器(容量可达1011字节以上)组成。
各种输入输出外部设备是人机间的信息转换器,由输入-输出控制系统管理外部设备与主存储器(中央处理器)之间的信息交换。
软件系统的最内层是系统软件,它由操作系统、实用程序、编译程序等组成。
操作系统实施对各种软硬件资源的管理控制。
实用程序是为方便用户所设,如文本编辑等。
编译程序的功能是把用户用汇编语言或某种高级语言所编写的程序,翻译成机器可执行的机器语言程序。
支援软件有接口软件、工具软件、环境数据库等,它能支持用机的环境,提供软件研制工具。
支援软件也可认为是系统软件的一部分。
应用软件是用户按其需要自行编写的专用程序,它借助系统软件和支援软件来运行,是软件系统的最外层。
(3)为什么说软件工程可以在一定程度上解决软件危机的各种弊端?答:软件工程诞生于60年代末期,它作为一个新兴的工程学科,主要研究软件生产的客观规律性,建立与系统化软件生产有关的概念、原则、方法、技术和工具,指导和支持软件系统的生产活动,以期达到降低软件生产成本、改进软件产品质量、提高软件生产率水平的目标。
软件工程课后习题答案习题1 略。
习题2 略。
习题3 略。
习题42.在什么情况下应该使用形式化说明技术?使用形式化说明技术时应遵守哪些准则?人们在理解用自然语言描述的规格说明时,容易产生二义性。
为了克服非形式化方法的缺点,人们把数学引入软件开发工程,创造了基于数学的形式化说明技术。
应用形式化方法的准则:(1)应该选用释放的表示方法;(2)应该形式化,但不要过分形式化;(3)应该估算成本;(4)应该有形式化方法顾问随时提供咨询;(5)不应该放弃传统的开发方法;(6)应该建立详尽的文档;(7)不应该放弃质量标准;(8)不应该盲目依赖形式化方法;(9)应该测试、测试再测试;(10)应该重用。
4.用有穷状态机说明自动化图书馆流通系统习题5 略。
习题6 略。
习题7 略。
习题8 略。
习题91.什么是面向对象方法学?它有哪些优点?面向对象方法学,是尽可能模拟人类习惯的思维方式,使开发软件的方法和过程尽可能接近人类认识世界解决问题的方法和过程,从而使得实现解法的解空间(也称为求解域)与描述问题的问题空间(也称为问题域)在结构上尽可能一致。
优点:1.与人类习惯的思维方法一致;2.稳定性好;3.可重用性好;4.较易开发大型软件产品;5.可维护性好10.建立订货系统的用例模型。
分析如下:从对这个订货系统的需求可以知道,仓库管理员通过放在仓库中的终端把零件入库/出库市事务报告给订货系统,系统接受到事务信息之后应该处理事务;采购员需要使用订货系统提供的产生报表功能,以获取订货报表。
综上所述,用例如下:习题101.用面向对象方法分析研究本书习题2第2题中描述的储蓄系统,试建立它的对象模型、动态模型和功能模型。
对象模型参考:以上还需将关联关系说明补全。
动态模型参考:(1)脚本正常情况脚本:储户有存款要求,填写存款单,包含储户个人信息,存款金额和存款类型;业务员查收存款,审核存款与存款单存款金额吻合;存款单生效;储户有取款要求,填写取款单,包含个人账号、密码(待定)和存款金额;业务员审核存款,验证储户身份,确定储户存款金额> = 取款金额;审核通过,取款单生效;系统打印利息清单,业务员把本金和利息返回储户。
第一章课后参考答案1.什么是软件危机?它们有哪些典型表现?为什么会出现软件危机?“软件危机”是指计算机软件的“开发”和“维护”过程中所遇到的一系列“严重问题”。
这些问题决不仅仅是不能正常运行的软件才具有的,实际上,几乎“所有软件”都不同程度地存在这些问题。
它们有以下表现:(1)对软件开发成本和进度的估计常常很不准确;(2)用户对“已完成的”软件系统不满意的现象经常发生;(3)软件产品的质量往往靠不住;(4)软件常常是不可维护的;(5)软件通常没有适当的文档资料;(6)软件成本在计算机系统总成本中所占的比例逐年上升;(7)软件开发生产率提高的速度,远远跟不上计算机应用普及深入的趋势。
出现软件危机的主要原因(1)与软件本身的特点有关(2)与软件开发和维护过程中使用的方法不正确有关2.假设自己是一家软件公司的总工程师,当把图1.1给手下的软件工程师们观看,告诉他们及时发现并改正错误的重要性时,有人不同意这个观点,认为要求在错误进入软件之前就清楚它们是不现实的,并举例说:“如果一个故障是编码错误造成的,那么,一个人怎么能在设计阶段清除它呢?”应该怎么反驳他?答:在软件开发的不同阶段进行修改付出的代价是很不相同的,在早期引入变动,涉及的面较少,因而代价也比较低;在开发的中期,软件配置的许多成分已经完成,引入一个变动要对所有已完成的配置成分都做相应的修改,不仅工作量大,而且逻辑上也更复杂,因此付出的代价剧增;在软件“已经完成”时在引入变动,当然付出的代价更高。
一个故障是代码错误造成的,有时这种错误是不可避免的,但要修改的成本是很小的,因为这不是整体构架的错误。
3.什么是软件工程?它有哪些本质特征?怎么用软件工程消除软件危机?软件工程是指导知道计算机软件开发和维护的一门工程学科。
采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。
第六章 作业题参考答案
3.画出下列伪码程序的程序流程图和盒图: START
IF p THEN
WHILE q DO f END DO ELSE
BLOCK g n
END BLOCK END IF STOP 答:(1)流程图如图6-1所示:
图6-1
从伪码变成的程序流程图 (2)该程序的盒图如图6-2所示:
图6-2 从伪码变成的程序盒图
4.下图给出的程序流程图代表一个非结构化的程序,请问:
(1)为什么说它是非结构化的?
(2)设计一个等价的结构化程序。
(3)在(2)题的设计中你使用附加的标志变量flag吗?若没用,请再设计一个使用flag 的程序;若用了,再设计一个不用flag的程序。
答:(1)通常所说的结构化程序,是按照狭义的结构程序的定义衡量,符合定义规定的程序。
图示的程序的循环控制结构有两个出口,显然不符合狭义的结构程序的定义,因此是非结构化的程序。
(2)使用附加的标志变量flag,至少有两种方法可以把该程序改造为等价的结构化程序,图6-3描绘了等价的结构化程序的盒图。
(a)解法1
(b)解法2
图6-3 与该图等价的结构化程序(用flag)
(3)不使用flag把该程序改造为等价的结构化程序的方法如图6-4所示。
图6-4 与该图等价的结构化程序(不用flag)
8.画出下列伪码程序的流图,计算它的环形复杂度。
你觉得这个程序的逻辑有什么问题吗?
C EXAMPLE
LOOP:DO WHILE X>0
A=B+1
IF A>10
THEN X=A
ELSE Y=Z
END IF
IF Y<5
THEN PRINT X,Y
ELSE IF Y=2
THEN GOTO LOOP
ELSE C=3
END IF
END IF
G=H+R
END DO
IF F>0
THEN PRINT G
ELSE PRINT K
END IF
STOP
答:(1)该伪码的流程图如图6-8所示:
图6-8 程序流程图
根据该程序流程图,可得该程序流图如图6-9所示:
图6-9 程序流图
环形复杂度V(G)=流图中的区域数
=流图中判定结点数目+1=6+1=7 (判定结点为:1、3、6、8、10、11)(2)该算法问题在于控制最外层循环的变量Z不仅没有经过初始化,并且在该循环内部没有任何有可能该变Z的语句。
因此,该段代码中的WHILE循环部分代码要么不会执行,要么可能出现死循环。
【补充题】用Jackson图描述下述一列火车的构成:
一列火车最多有两个车头。
一列火车最多有两个车头。
只有一个火车头时则位于列车最前面,若还有第二个车头时,则第二个车头位于列车最后面。
火车头既可能是内燃机车也可能是电气机车。
车厢分为硬座车厢、硬卧车厢和软卧车厢等三种。
硬座车厢在所有车厢的前面部分,软卧车厢在所有车厢的后面部分。
此外,在硬卧车厢和软卧车厢之间还有一节餐车。