当前位置:文档之家› 程序设计语言与编码

程序设计语言与编码

第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. PROLOGB. CC. 4GLD. SQL5. 提高程序效率的根本途径并非在于( )。

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. PASCALB. VISUAL BASICC. C++D. 汇编语言(2) 下列语言中哪个语言是高级语言( )A. 机器B. 汇编语言C. FORTRAND. OS/2(3) ( )语言是描述性(说明性)语言A. PASCALB. CC. FORTRAND. SQL(4) ( )是面向对象的语言A. FORTRANB. SQLC. SMALLTALKD. COBOL12. 在商业系统的开发中应用最广的语言是( )A. PROLOG语言B. SMALLTALK语言C. FORTRAN语言D. COBOL语言13. 使用高级程序设计语言编程时,首先可通过编译程序发现源程序中的全部(1)及部分(2),然后可采用(3)来发现程序中的运行错误和采用(4)来确定错误的位置,(5)是泛指用户在验收中发现的结果与需求不符的错误。

(1)、(2)、(5)的可选答案:A. 符号错误B. 逻辑错误C. 语法错误D. 通路错误E. 语义错误F. 溢出错误G. 设计错误(3)、(4)的可选答案:A. 诊断B. 测试C. 校验D. 排错E. 普查F. 试探14. 在高级语言中,子程序调用语句中的(1)在个数、类型、顺序方面都要与子程序说明中给出的(2)相一致。

用高级语言编写的程序经编译后产生的程序叫(3)。

用不同语言编写的程序产生(3)后,可用(4)连接在一起生成机器可执行的程序。

在机器里真正执行的是(5)。

(1)、(2)的选择答案:A. 实际参数B. 条件参数C. 形式参数D. 局部参数E. 全局参数(3)、(4)、(5)的选择答案:A. 源程序幕B. 目标程序C. 函数D. 过程E. 机器指令代码F. 模块G. 连接程序H. 程序库三、选择题1. 从下列关于模块化程序设计的叙述中选出5条正确的叙述。

(1) 程序设计比较方便,但比较难以维护。

(2) 便于由多个人分工编制大型程序。

(3) 软件的功能便于扩充。

(4) 程序易于理解,也便于排错。

(5) 在主存储器能够容纳得下的前提下,应使模块尽可能大,以便减少模块的个数。

(6) 模块之间的接口叫做数据文件。

(7) 只要模块之间的接口关系不变,各模块内部实现细节的修改将不会影响别的模块。

(8) 模块间的单向调用关系叫做模块的层次结构。

(9) 模块越小,模块化的优点越明显。

一般来说,模块的大小都在10行以下。

2. 从下列叙述中选出5条符合程序设计风格指导原则的叙述。

(1) 嵌套的重数应加以限制。

(2) 尽量多使用临时变量。

(3) 不滥用语言特色。

(4) 不用可以省略的括号。

(5) 使用有意义的变量名。

(6) 应尽可能把程序编得短些。

(7) 把常见的局部优化工作留给编译程序去做。

(8) 注解越少越好。

(9) 程序的格式应有助于读者理解程序。

(10) 应尽可能多用GOTO语句。

3. 从下面关于程序编制的叙述中,选出三条正确的叙述。

(1) 在编制程序之前,首先必须仔细阅读给定的程序说明书。

然后,必须如实地依照说明书编写程序。

说明书中常会有含糊不清或难以理解的地方。

程序员在作业时应该对这些地方作出适当的解释。

(2) 在着手编制程序时,重要的是采用既能使程序正确地按设计说明书进行处理,又易于出错的编写方法。

(3) 在编制程序时,首先应该对程序的结构充分考虑,不要急于开始编码,而要象写软件文档那样,很好地琢磨程序具有什么样的功能,这些功能如何安排等等。

(4) 考虑到以后的程序变更,为程序编写完整的说明书是一项很重要的工作。

只要有了完整的程序说明书,即使程序的编写形式难以让他人看懂也没有什么关系。

(5) 编制程序时不可缺少的条件是,程序的输入和输出数据的格式都应确定。

其他各项规定都是附带的,无足轻重。

(6) 作为一个好的程序,不仅处理速度要快,而且易读易修改等等也都是重要的条件。

为了能得到这样的程序,不仅要熟悉程序设计语言的语法,还要注意采用适当的规程和单纯的表现方法,注意使整个程序的结构简洁。

4. 从供选择的答案中选出应该填入下面( )中的正确答案。

A. 汇编程序是指( )。

①用汇编语言写的程序②符号程序③汇编语言的处理程序B. 为了实现递归子程序的正确调用,人们必须用( )来保存( )及有关信息。

相关主题