第4章结构化程序设计
- 格式:ppt
- 大小:281.01 KB
- 文档页数:79


第4章 结构化设计方法
4.1 当你“编写”程序时你设计软件吗?软件设计和编码有什么不同吗?
在“编写”程序时并没有设计软件。软件设计包括概要设计和详细设计,编码是将详细设计中的过程描述转换成用程序设计语言来描述。
4.2 举出3个数据抽象的例子和可以用来操作这些数据抽象的过程抽象的一个例子。
抽象是忽略事物的细节,获取其本质特征的过程。抽象是一种重要的机制,使人们能够对复杂系统能够很好地理解、交流和推理。在软件领域,可以将抽象分为两类,即数据抽象和过程抽象。
在传统的结构化程序设计语言中,就提供了这两种抽象机制。
(1) 数据抽象:在所有的结构化程序设计语言中,用户都可以自定义抽象数据类型。如定义抽象数据类型Student(学生)、Course(课程)、ClassScoreList(班级成绩单)。
(2) 过程抽象:过程抽象也称为是基于方法的抽象。过程抽象使我们关心处理过程的名字和它能做什么,而无需知道如何完成所有实现细节。如求班级总平均分average(ClassScoreList)就是一个过程抽象。
在面向对象的程序设计语言中,抽象与封装的概念密切相关,数据抽象和相关的过程抽象被封装在类中,不同类中相似的过程抽象(方法)又可以进一步抽象,放在接口中。封装是保证事物有明确内外界限的机制。内部是受保护的,与外部事物相隔离。
4.3 应在什么时候把模块设计实现为单块集成软件?如何实现?性能是实现单块集成软件的唯一理由吗?
由于模块之间的调用降低了系统的运行速度,可能会导致满足不了用户的性能要求,这时就需要将软件设计为单块集成软件。但是在设计时,最好按照模块化的原则进行设计,只是没有显式的模块定义而已。这样的程序也具有模块化的优点。性能是实现单块集成软件的唯一理由。
4.4 是否存在一种情况:复杂问题需要较少的工作去解决?这样的情况对模块化观点有什么影响?
通过对复杂的问题进行合理分解,分解为若干个相对简单及独立的子问题,就可以用较少的工作去解决。这种情况能够较好地支持模块化的观点,每个子问题用单独的模块去解决,模块之间应该是高内聚、低耦合的,这样才能减少工作量,否则,虽然每个模块的工作简单了,但模块之间的联系很复杂,也增加了问题解决的难度和工作量。 4.5 使用数据流程图和处理叙述,描述一个具有明显事务流特性的计算机系统。使用本章所介绍的技术定义数据流的边界,并将DFD映射成软件结构。
第4章 选择结构程序设计
通过本章实验作业应达目标
1.练习并熟练掌握if、switch语句使用,实现二路与多路选择结构;
本章必须上交作业
程序4_2.c、4_3.c、4_4.c、4_5.c上传至http://121.251.227.27:8080/c
实验一 大小写转换
【实验目的】
熟悉关系与逻辑运算,了解if-else的顺序与嵌套层次关系。
【实验内容】
下面程序希望完成大小写字母转换功能。若输入一个大写字母,则转化为小写输出;若输入小写字母则转化为大写输出;对其他字母则原样不变输出。程序以4_1.c命名,运行程序,分别输入一次大写、一次小写字母、一次‘#’进行验证。如果程序有错,请改正。
#include
void main()
{char ch;
ch=getchar();
if('a'<=ch<='z') ch-=32;
if('A'<=ch<='Z') ch+=32;
putchar(ch);putchar('\n');
}
实验二 算术运算
【实验目的】
学习if~else、switch语句的使用。
【实验内容】
键盘输入一个算术的运算式子,输出运算结果。这里我们规定可以接收五个算术运算的符号:+、-、*、/、^(乘方)。输入这五个符号以外的运算符号则提醒出错。程序以4_2.c命名并上交。
下图是输入输出的示意图:
输入一个加法的算术式:
输入一个除法的算术式:
输入一个乘方的算术式:
求3的平方根:
【实验提示】
本程序需要从键盘接收一个表达式,根据表达式中的运算符号实现相应的运算并将结果保存下来并输出。
C语言本身是没有乘方运算符的,可以调用数学函数pow(x,y)求x的y次方。注意一定要包含。
【思考】
输入的表达式实质是按多个不同类型的数据来获取数据的。程序中需要定义多个变量来接收表达式中包含的数据与运算符,并设计相应的输入/输出函数实现。
实验三 金额计算
第3章 程序设计语言
习 题
一、选择题
1. A 2. A 3. D 4. A 5. AB
6. C 7.D 8.C 9.D 10. D
11.ABCD 12.B 13.A 14.A
二、简答题
1.简述程序的概念。
答:一个程序就是能够实现特定功能的一组指令序列的集合。或者程序=算法+数据结构。
2. 简述程序设计语言的发展阶段。
经历了机器语言、汇编语言和高级语言三个发展阶段。
机器语言又称面向机器的语言,是特定的计算机硬件系统所固有的语言,是CPU唯一能够真正不经过翻译而直接识别和执行的语言。相比而言,其他任何语言编写的程序都必须最终转换成机器语言以后才能在CPU上执行。
由于二进制编码形式的机器指令不便于记忆和使用,人们很快引入了便于记忆、易于阅读和理解、由英文单词或其缩写符号表示的指令,称为汇编指令,又称符号指令或助记符。利用汇编指令编写得到的程序称为汇编语言程序。
通过引入汇编语言,在一定程度上解决了低级语言程序设计的问题,之后又出现了程序的“可移植性”问题,即程序员编写的源程序如何从一台计算机方便地转移到另一台计算机上执行。为了解决这个问题,人们引入了高级语言。
高级语言是一种利用意义比较直观的各种“单词”和“公式”,按照一定的“语法规则”来编写程序的语言,又称为程序设计语言或算法语言。高级语言之所以“高级”,是因为高级语言把很多硬件上复杂费解的概念抽象化了,从而使得程序员可以绕开复杂的计算机硬件的问题、无需了解计算机的指令系统,就能完成程序设计的工作。
3. 简述程序设计过程的一般步骤。
程序设计的过程一般有四个步骤。
(1)分析问题
在着手解决问题之前,应该通过分析,充分理解问题,明确原始数据、解题要求、需要输出的数据及形式等。
(2)设计算法
算法是解题的过程。首先集中精力于算法的总体规划,然后逐层降低问题的抽象性,逐步充实细节,直到最终把抽象的问题具体化成可用程序语句表达的算法。这是一个自上而下、逐步细化的过程。
2012/9/22
1软件工程
第四章结构化设计方法
软件设计的概念及原则
结构化设计
体系结构设计
接口设计
数据设计
过程设计
软件设计规格说明4.1 4.1 软件设计的概念与原则软件设计的概念与原则
软件设计的基本目标是用比较抽象概括的方
式确定目标系统如何完成预定的任务,即软
件设计是确定系统的物理模型件设计是确定系统的物理模型。。
设计编码测试维护
测试
编码维护
有软件设计没有软件设计
(1) 分而治之
将大型复杂的问题分解为许多容易解决的小问题
尽管模块分解可以简化要解决的问题尽管模块分解可以简化要解决的问题,,但模块分
解并不是越小越好解并不是越小越好。。
当模块数目增加时当模块数目增加时,,每个模块的规模将减小每个模块的规模将减小,,开
发单个模块的成本确实减少了发单个模块的成本确实减少了;;但是但是,,随着模块
数目增加数目增加,,模块之间关系的复杂程度也会增加模块之间关系的复杂程度也会增加,,
设计模块间接口所需要的工作量也将增加设计模块间接口所需要的工作量也将增加。。4.1 4.1 软件设计的概念与原则软件设计的概念与原则
4.1 4.1 软件设计的概念及原则软件设计的概念及原则
(2) 模块独立性
每个模块可独立地开发每个模块可独立地开发、、测试测试,,最后组装成完整
的程序的程序。。
目的是使程序的结构清晰目的是使程序的结构清晰,,容易阅读容易阅读、、理解理解、、测
试、修改修改。。
一般采用两个准则度量模块独立性一般采用两个准则度量模块独立性。。
a)模块间的耦合模块之间互相连接的紧密程度;
b)模块的内聚模块的功能强度模块的功能强度,,模块内部各个
元素彼此结合的紧密程度元素彼此结合的紧密程度。。
4.1 4.1 软件设计的概念及原则软件设计的概念及原则
(3) 提高抽象层次
设计应遵循抽象化的原则的原则,,自顶向下自顶向下、、逐步细化逐步细化。。
(4) 复用性设计
将软件的重用部分称为软构件将软件的重用部分称为软构件。。在构造新的软件