版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 12 23 34 45 56 67 7 汇编语言也称面向机器的语言,它依赖于计算机的硬件结构,不同的计算机有不同的汇编语言。汇编语言的指令系统随机器而异,生产效率低,难学难用,容易出错,难于维护。但运行效率高,易于与系统接口,在一些实时应用场合和底层控制过程的小规模程序设计中仍在使用,在复杂软件开发中较少使用。8 8 高级语言是当前使用最广泛的语言,高级程序设计语言中使用的符号与人们通常使用的概念和符号较接近,一般不依赖单一类型的计算机,一条语句的作用顶得上多条汇编指令,通用性强,易于移植。因此,开发复杂的软件系统,均选用高级程序设计语言作为编码的主要设计工具。 9 9选择程序设计语言有以
2、下标准: (1)选用的程序设计语言应该有理想的模块化机制,具有较好的可读性控制结构和数据结构,能减少程序错误,结构清晰; (2)选用的程序设计语言所对应的开发环境能够尽可能多的自动发现程序中的错误,便于测试和调试,提高软件的可靠性;1010 (3)选用的程序设计语言有良好的机制,具有符号表达的一致性和语义上的一致性,表达方式简洁,语法简单,便于记忆,易于学习掌握,以降低软件开发和维护成本; (4)选用的程序设计语言能够满足应用领域功能和性能的要求; (5)选用的程序设计语言能够满足描述程序模块算法复杂性的要求;1111 (6)选用的程序设计语言具有配套的软件工具,有利于提高软件开发的生产率;
3、(7)选用的程序设计语言有较好的移植性、兼容性和适应性; (8)结合程序设计人员的知识水平和用户要求,标准化程度、系统开发规模,现有设计人员对语言的熟悉程度等因素进行选择。 1212 如果与其它标准不发生矛盾时,应选择开发人员熟悉的并在以前的项目中成功应用过的语言。当一种语言不能满足要求时,可选用一种语言为主,其他几种语言为辅助语言,进行混合编程,满足软件设计的总目标。1313 高级语言中又可按其特性分为过程性语言和非过程性语言,过程性语言需要描述算法实现的细节,而非过程性语言不需规定具体实现的细节。一般传统的程序设计语言(如标准C和标准PASCAL等)属于过程性语言,现代的高级语言有些是非过
4、程性语言(如数据库管理系统中的国际标准SQL语言等),有些高级语言具有以上两种特性。1414 不同的应用领域需要有与之相适应的语言的特性,科学计算需要使用计算能力强,运算速度快的高级语言,如多种传统的C、Pascal等语言;商业管理和一般的信息管理需要具有较强的数据管理和多种查询能力的高级语言,如各种数据库管理语言;而实时处理和控制需要具有处理速度快,有能方便的与系统进行接口的程序设计语言,如汇编语言、C语言等;1515 智能系统和知识表达系统需要使用具有表达较强逻辑推理能力的语言,如Lisp、Prolog等语言,根据具体应用领域的情况、用户要求、设计人员的背景、经验知识和应用环境的具体要求选
5、用。因为对于设计人员来说,掌握一种新的设计工具是要花费一定的学习时间的,达到熟练程度才能灵活应用。 1616 当前广泛使用的方法是结构化程序设计方法SP(Structured Programming),它是与结构化分析SA和结构化设计SD方法相衔接的。SP方法是围绕着GOTO语句的争论,首先由E.Dijkstra提出的,是用于软件编码的基本技术,目的在于写出结构清晰、易于理解也易于验证的程序。1717 人们已经证明:顺序结构、IF_THEN_ELSE选择结构、DO_WHILE(含FOR_DO)或REPEAT_UNTIL重复结构,这三种基本结构,就足以表示所有形式的程序控制结构。这三种基本结构有
6、着一个共同的特征:每种结构严格地只有一个入口和一个出口单入单出结构。这三种基本结构又可以层层嵌套,形成复杂的程序,多年的软件设计经验表明,具有这种结构的程序是具有良好结构的程序。1818 使用结构化程序设计技术,用遵循下列结构化程序设计的主要原则: (1)使用语言中顺序、选择、重复等有限的基本控制结构表示程序的逻辑结构; (2)严格选用单入单出的程序控制结构; (3)由程序语句组成的程序块,也应该具有单入单出的形式;1919 (4)复杂的程序结构也应该用基本控制结构的组合、嵌套来实现; (5)语言中没有的控制结构,可用一段等价的程序段来模拟,该段程序在整个系统中应保持前后一致;2020 (6)
7、严格控制GOTO语句的使用,仅在下列情况下才使用它: 用一个非结构化的程序设计语言去实现一个结构化的构造; 在某种可以改善而不是损害程序可读性的情况下;2121 大量采用GOTO语句实现程序的路径控制,会使程序的路径变得复杂而混乱,使程序变得不易阅读,给程序的测试和维护带来困难,还会增加程序出错的机会,降低程序的可靠性,因此,要控制GOTO语句的使用。但也有例外的情况,有时完全不用GOTO语句进行编码,比用GOTO语句编出的程序可读性还差。例如,在查找结束、文件访问结束、出现错误情况时要从循2222环中转出,使用布尔变量和条件选择结构来实现就不如用GOTO语句来得简洁易懂。如果教条性地套用固定
8、结构形式,就会降低效率,而新增的控制逻辑测试又增加了软件的复杂性,使控制流含混不清,增加出错的可能性,对软件的可靠性和易维护性反而产生不利影响。为解决此问题,可采用两种方法:2323 一种是重新设计过程,避免中间出口,但这种方法可能会增加程序的复杂性,难度加大;另一种是有限度地超越结构化的约束,设计一个从嵌套中转移出来的有约束的分支,提高程序的易读性、灵活性和效率。 例如:设在闭区间a,b上函数f(x)有唯一一个零点,如图5-1所示,用二分法求方程f(x)=0在区间a,b中的根。2424图5-1 函数f (x)曲线 ab2525 下面给出用C语言写出的求解方程的程序段:其中,x0、x1是当前求
9、根区间的上下界,xm是该区间的中点,n为迭代的最大次数,用于限制循环计算时的迭代次数,epslon是给定的一个很小的正数,用于判断迭代的收敛条件。程序段1中采用了GOTO语句和对应的转移入口标号finish ,用于控制在循环中途求得方程解时转出循环。 2626【程序段1】f0=f(a);f1=f(b);if (f0*f1=0) x0=a; x1=b; for(i=1; i=n; i+) xm=(x0+x1)/2;fm=f(xm); if (fabs(fm)epslon|fabs(x1-x0)0) x0=xm; f0=fm; else x1=xm; finish: printf(“n The r
10、oot is %fn”,xm); 2727 在程序段1中,出现了两个循环出口:一个是for循环的正常出口,当循环控制变量i超出循环终值时退出循环;另一个是for循环的非正常出口,当满足条件时,从循环中间某处转出循环,执行循环后面的语句。它不满足结构化的要求。 2828【程序段2】f0=f(a);f1=f(b); /计算初始区间两端的函数值if (f0*f1=0) /区间中有根存在才继续计算 x0=a; x1=b; /设置当前求根区间的两个端点 for(i=1; i=n; i+) 2929 xm=(x0+x1)/2;fm=f(xm); /利用中点,二分区间 if(fabs(fm)epslon|f
11、abs(x1-x0)0) /未得到根,缩小当前求根区间 x0=xm; f0=fm; else x1=xm;f1=fm; printf(“n The root is %fn”,xm); /输出求得的根值 3030 这段程序仍然不是结构化程序,它利用了C语言中的break语句,将控制转移到它所在循环后面的第一个后续语句处。它完成的功能与上一个程序段相同,转移语句与转出条件直接联系在一起,可读性较好。 3131【程序段3】f0=f(a);f1=f(b);if (f0*f1=0) x0=a; x1=b; i=1; finished=0; while(i=n&finished=0) xm=(x0
12、+x1)/2;fm=f(xm); 3232 If (fabs(fm)epslon|fabs(x1-x0)0) x0=xm; f0=fm; else x1=xm; f1=fm; i+; printf(“n The root is %fn”,xm); 3333 这段程序中的各种结构均为单入单出口,且没有GOTO语句,是结构化程序,结构简单,仅有一重循环,它完成的功能与上一个程序段相同,但由于引入一个布尔变量来控制循环的结束,将布尔变量的赋值设置语句与结束判断条件分在不同的位置,可读性不如前两个程序段好。如果在多重循环中可读性就差了。3434 除了在一些特殊情况下用 GOTO语句外,一般情况下尽量不
13、用,可以保持较好的程序设计风格。 一个好的程序结构,在保证程序功能正确的前提下,应能做到:程序质量高,具有一致性、可移植的程序代码,易于测试、维护和调试,易于修改,设计结构简单,程序执行效率高。 3535 从程序设计技术启蒙时期开始,过去有很长一段时间,人们认为,程序是给机器执行的,只要程序逻辑正确,机器能执行,完成指定的功能就行了,将程序风格看得无关紧要。 随着软件规模的增加,复杂性增加,人们才认识到程序的易读性和程序设计风格的重要性,人们在维护、调试、测试程序时经常需要反复地阅读程序,甚至阅读程序的时间比编写程序的时间还要多。3636 程序不仅设计者本人要多次阅读,开发小组的其它设计人员和
14、维护人员也要反复阅读,阅读程序是软件开发和维护过程中的一个重要组成部分。 程序员在编写程序时,应当意识到今后会有人反复阅读这个程序,并沿着自己的思路去理解程序的功能。3737 在编写程序时多花些工夫,讲求程序设计的风格,这将大大减少人们阅读程序的时间,从整体上看,提高了效率。 因此,良好而规范地表示程序的逻辑结构是软件设计人员应具有的程序设计风格。 3838 从阅读的角度来看,程序实际上也是一种供人阅读的文章。有些文章优雅、整洁,引人入胜,有些文章晦涩难懂,无法过目。这就是文章的风格所起的作用。在程序编写中也存在程序设计风格的问题,我们应编写具有良好风格的程序。 3939 主要有四个方面影响着
15、程序设计的风格:源程序的文档化;数据说明的方法;语句表现的结构形式;输入输出的方式和格式。 (1)源程序的文档化包括选择标识符名称,对源程序合理安排注释,源程序具有良好的视觉组织等;4040 一般对变量和标识符的命名采用匈牙利命名规则(变量名用类型加限定词构成),如Windows程序设计中,使用了这种合理的命名规则,现在已经开始流行起来了。标识符名称(包含模块名、变量名、常量名、标号名、子程序名、数据区名、缓冲区名等)应该选用容易理解的、与特定应用含义相关的、有明确意义的名称,避免引起混淆,同一名称不应有多种含义,对使用的一切变量都要显式地说明,并做出注释,说明其确切含义。4141 对源程序的
16、注释分为序言性注释、功能性注释和状态性注释。大多数高级程序设计语言允许用自然语言进行注释。序言性注释一般放在模块的最前面,给出模块的整体说明,引导人们理解程序,包括标题、模块功能分类说明、目的,使用的主要算法,接口说明(调用形式、参数描述、子程序清单等),数据描述(重要变量及用途、约束与限制条件等),模块位置,开发简历、设计者、复审者、复审日期、设计日期、修改日期等有关说明。4242 功能性注释一般放在实现该功能的程序段的前面,状态性注释一般紧跟在引起状态变化语句的后面,描述功能的注释应解释程序段,而不是解释每一条语句;使用空格、括号、空行、间隔标志使注释与代码容易区分。注释要正确,错误或有歧
17、义的注释容易引起误解。4343【程序段2】/求函数在两点之间的根,运用的算法:中点法f0=f(a);f1=f(b); /计算初始区间两端的函数值if (f0*f1=0) /区间中有根存在才继续计算 x0=a; x1=b; /设置当前求根区间的两个端点 for(i=1; i=n; i+) 4444 xm=(x0+x1)/2;fm=f(xm); /利用中点,二分区间 if(fabs(fm)epslon|fabs(x1-x0)0) /未得到根,缩小当前求根区间 x0=xm; f0=fm; else x1=xm;f1=fm; printf(“n The root is %fn”,xm); /输出求得的
18、根值 4545 (2)程序的视觉组织主要利用空格、空行、缩进格式和分层结构表达来实现。如果一个程序写得凌乱,分不出层次来,是很难让人看懂的。具有良好的程序设计风格的程序,看起来层次分明,结构清楚错落有致,一般利用缩进(向右缩格或移行)格式,呈现出程序语句的阶梯方式,使程序逻辑结构更加清晰,层次更加分明。 46464747484849495050 (4)输入/输出格式:输入输出信息是与用户的使用密切相关的,应尽可能方便用户的使用,让用户乐于接受。5151 对所有的输入数据都进行检查,识别错误的输入,确保输入数据的有效性,检查输入数据各种重要组合的合理性,必要时报告输入状态信息,保持简单的输入格式,简单的输入步骤,允许使用自由格式输入,允许使用缺省值,尽量利用结束标
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 全员安全培训开场白课件
- 牙科医患关系现状分析
- 职业发展规划反思
- 卷宗目录模板讲解
- 人工智能选股策略
- 面试技巧与简历制作
- 光电技术应用
- 村寨消防安全整治报告
- 光传输与光纤技术
- 青岛单招考试题库及答案
- 云南省2023年秋季学期期末普通高中学业水平考试信息技术
- 消化系统常见疾病课件(完美版)
- 旅游经济学多选试题(含答案)
- 2021自然资源分等定级通则
- 新疆金奇鼎盛矿业有限责任公司新疆奇台县黄羊山饰面石材用花岗岩矿5号区矿山地质环境保护与土地复垦方案
- 项目招标评标方案
- 水利工程项目基本建设程序-水利水电工程建设基本程序
- 贵州省安顺市安顺经济技术开发区2023-2024学年上学期七年级期末英语试题
- 2022-2023学年北京市东城区高二(上)期末生物试卷(含答案解析)
- GB/T 43327.6-2023石油天然气工业海洋结构物特殊要求第6部分:海上作业
- GB/T 42131-2022人工智能知识图谱技术框架
评论
0/150
提交评论