程序设计语言与编码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第9章程序设计语言与编码
9.1 典型问题分析和解答
【例1】设下图给出的程序流程图代表一个非结构化的程序,试问:
(1) 为什么说它是一个非结构化的?
(2) 设计一个等价的使用附加标志变量flag的结构化程序;
(3) 设计一个使用break(用于代替goto)的程序。
答:(1) 它是一个单入口、两出口的结构,所以是一个非结构化的程序;
(2) 等价的结构化程序:
{
do G;
(3) 使用break的程序
{
do G;
if ( !Q ) break;
【例 2】下面给出一个求实函数方程F(x)在自变量区间 [a, b] 中的全部实根的算法。首先阅读此程序,然后
(1) 画出消去全部goto语句的结构化程序流程图;
(2) 将它改成N_S图;
(3) 计算该程序的McCabe复杂性度量。
在算法中,a与b是区间[a, b]的两端点值;eps1与eps2是用户要求的求解精度。如果区间中
点的函数值的绝对值小于eps1或新的小区间的长度小于eps2,就认为这个中点为根;
float BinRoot ( float a,float b, float eps1, float eps2 )
{
float low= a, high = b,mid,fmid;
float flow = Func(low), fhigh := Func(high);
label L1, L2, L3;//标号说明,给定某些程序地址
if ( flow * fhigh > 0.0 ) { BinRoot = 0;goto L3; }//无实根
L1:mid = (low + high) / 2;fmid = Func(mid);
if ( abs ( fmid ) <= eps1 )
{
L2: BinRoot = mid; goto L3;
}
else if ( high - mid <= eps2 ) goto L2;
else if (flow * fmid > 0.0 ) { low = mid;flow = fmid; goto L1; }
else { high = mid; goto L1 };
L3:
}
答:(1) 结构化的程序流程图:
(2) N-S图:
(3) 环路复杂性度量 V(G) = 6。
【例3】有一种循环结构,叫做N+1/2循环。其流程图如下所示。这种控制结构不属于基本控制结构:它既不是先判断型循环,又不是后判断型循环。试修改此流程图,将它改为用基本控制结构表示的等效的流程图。
答:等效的控制流程图如下图中(a)所示。先判断型循环,要求在进入循环体之前,先判断是否要继续执行此循环。因此,在这种控制结构的入口处应是一个判断语句。这种循环的循环体可能一次也不执行。参看图(b)、(c);图(d)是另一种等效方案。
【例4】用某种软件复杂性度量算法来度量不同类型的程序时,得出的度量值是否真正反映了它们的复杂性? 如果对同类型的程序进行度量,其结果是否就比较有价值?
答:开发规模相同,但复杂性不同的软件,花费的成本和时间会有很大的差异。因此到目前为止,还没有一个软件复杂性度量的方法能够全面、系统地度量任一软件的复杂性,某一种度量方法只偏重于某一方面。所以,用某一种软件复杂性来度量不同类型的程序,所得到的度量值不一定真正反映它们的复杂性。但对同一类型的程序,按某种视点来度量它们的复杂性,其结果还是比较有价值的。
【例5】从供选择的答案中选出适当的字句填入下面关于程序生产率的描述中的( )内:
(1) 1960年底Dijkstra提倡的(A)是一种有效的提高程序设计效率的方法;
(2) Dijkstra为了使程序结构易于理解,把基本结构限于顺序、(B)、(C)3种,应避免使用(D);
(3) (A)不仅提高程序设计的生产率,同时也容易进行程序的(E)。
供选择的答案:
A.①标准化程序设计②模块化程序设计③多道程序设计④宏语言
⑤结构化程序设计⑥汇编语言⑦表格处理语言
B~C. ①分支②选择③重复④计算⑤输入输出
① GOTO语句② DO语句③ IF语句④ REPEAT语句
①设计②调试③维护④编码
答:A.⑤, B.②, C.③, D.①, E.③
9.2 习题
一、填空题
1. 软件需求分析之后,软件的设计、编码、测试与语言的特性有很大的关系,这个特性主要是
语言的______特性。
2. 为了提高程序的易读性,同时减少错误,提高软件开发效率,编码时注意养成良好的_____。
3. 源程序中加注释是帮助理解程序的重要手段,注释分为_______两类。
4. 程序设计语言的特性主要有_______三方面。
5. 程序设计语言的心理特性在语言中的表现形式为_______。
6. 程序设计语言的工程特性主要表现为_____。
7. 项目的应用领域一般有_____几种类型。
8. 与编码风格有关的因素有数据说明、语句构造、输入输出、效率等,其中还有一个重要的因素是_______。
二、单选题
1. 在结构化程序设计之前,在程序设计中曾强调程序的效率,现在人们更重视程序的( )。
A. 技巧性
B. 保密性
C. 一致性
D. 可理解性
2. 与选择编程语言无关的因素是( )。
A. 软件开发的方法
B. 软件执行的环境
C. 程序设计风格
D. 软件开发人员的知识
3. 源程序文档化要求在每个模块之前加序言性注释。该注释内容不应有( )。
A. 模块的功能
B. 语句的功能
C. 模块的接口
D. 开发历史
4. 不适合作为数据处理的语言是( )。
A. PROLOG
B. C
C. 4GL
D. SQL
5. 提高程序效率的根本途径并非在于( )。
A. 选择良好的设计方法
B. 选择良好的数据结构
C. 选择良好的算法
D. 对程序语句作调整
6. 项目的应用领域是选择编程语言关键的因素之一,不适合作为项目应用领域的类型是( )。
A. 系统软件
B. 数据处理与数据库应用
C. 实时处理
D. UNIX操作系统
7. 为了提高易读性,源程序内部应加功能性注释,用于说明( )。
A. 模块总的功能
B. 程序段或语句的功能
C. 模块参数的用途
D. 数据的用途
8. 程序设计语言的心理特性在语言中表现不应包括( )。
A. 歧义性
B. 简洁性
C. 保密性
D. 传统性
9. 程序设计语言的工程特性其中之一表现在( )。
A. 软件的可重用性
B. 数据结构的描述性
C. 抽象类型的描述性
D. 数据库的易操作性
10. 程序设计语言的技术特性不应包括( )。
A. 数据结构的描述性
B. 抽象类型的描述性
C. 数据库的易操作性
D. 软件的可移植性
11. 请回答下列有关计算机语言的问题:
(1) 下列语言中哪个语言是低级语言( )
A. PASCAL
B. VISUAL BASIC
C. C++
D. 汇编语言
(2) 下列语言中哪个语言是高级语言( )
A. 机器
B. 汇编语言
C. FORTRAN
D. OS/2
(3) ( )语言是描述性(说明性)语言
A. PASCAL
B. C
C. FORTRAN
D. SQL
(4) ( )是面向对象的语言
A. FORTRAN
B. SQL
C. SMALLTALK
D. COBOL
12. 在商业系统的开发中应用最广的语言是( )
A. PROLOG语言
B. SMALLTALK语言
C. FORTRAN语言
D. COBOL语言
13. 使用高级程序设计语言编程时,首先可通过编译程序发现源程序中的全部(1)及部分(2),然后可采用(3)来发现程序中的运行错误和采用(4)来确定错误的位置,(5)是泛指用户在验收中发现的结果与需求不符的错误。
(1)、(2)、(5)的可选答案: