《程序设计语言与编码.pptx》由会员分享,可在线阅读,更多相关《程序设计语言与编码.pptx(90页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、16.1.1 6.1.1 程序设计语言的分类大体上,程序设计语言分为以下几类:(1 1)机器语言(2 2)汇编语言(3 3)高级语言(4 4)4GL4GL由于高级语言种类繁多,我们可以从应用特点、语言内在特点和对客观系统的描述三个不同的角度来对高级语言进行分类。第1页/共90页2(1 1)基础语言(例:FORTRANFORTRAN,BASICBASIC,COBOLCOBOL和ALGOLALGOL)(2 2)结构化语言(例:ALGOLALGOL,PL/1PL/1,PASCALPASCAL,C C,AdaAda)(3 3)专用语言(例:APLAPL,LISPLISP,PROLOGPROLOG,BL
2、ISSBLISS,FORTHFORTH)1 1、从应用特点的角度来分第2页/共90页3(1 1)系统实现语言(例:C C语言)(2 2)静态高级语言(例:FORTRANFORTRAN、COBOLCOBOL)(3 3)块结构高级语言(例:PASCALPASCAL,ALGOLALGOL)(4 4)动态高级语言2 2、从语言内在特点的角度来分第3页/共90页4(2 2)面向对象语言对象+消息(1 1)面向过程语言数据结构+算法3 3、从描述客观系统的角度来分例:DelphiDelphi、Visual Visual BasicBasic、JAVAJAVA、C+C+。第4页/共90页5 6.1.2 程序
3、设计语言的选择 为开发一个特定项目选择程序设计语言时,必须从技术特性、工程特性和心理特性几方面考虑。在选择语言时,从问题入手,确定它的要求是什么,以及这些要求的相对重要性。由于一种语言不可能同时满足它的各种需求,所以要对各种要求进行权衡,比较各种可用语言的适用程度,最后选择认为是最适用的语言。第5页/共90页6 1.项目的应用领域 项目应用领域是选择语言的关键因素,有下列几种类型。1)1)科学工程计算 该计算需要大量的标准库函数,以便处理复杂的数值计算,可供选用的语言有:第6页/共90页7(1)(1)FORTRANFORTRAN语言:是世界上第一个被正式推广应用的计算机语言,产生于195419
4、54年,经过FORTRAN FORTRAN 0 0到FORTRAN FORTRAN,又相继扩展为FORTRAN FORTRAN 7777,FORTRAN FORTRAN 9090,通过几个版本不断的更新,使它不仅面向科学计算,数据处理能力也极强。(2)(2)PascalPascal语言:产生于6060年代末,具有很强的数据和过程结构化的能力,它是第一个体现结构化编程思想的语言,由于它语言简明、数据类型丰富、程序结构严谨,许多算法都用类PascalPascal来概括。用PascalPascal语言写程序,也有助于培养良好的编程风格。第7页/共90页8(3)(3)C C语言:产生于7070年代初,
5、最初用于描述UNIXUNIX操作系统及其上层软件,后来发展成具有很强功能的语言,支持复杂的数据结构,可大量运用指针,具有丰富灵活的操作运算符及数据处理操作符。此外还具有汇编语言的某些特性,使程序运行效率高。(4)(4)PL/1PL/1语言:是一个适用性非常广泛的语言,能够适用于多种不同的应用领域,但由于太庞大,难以推广使用,目前一些PL/1PL/1的子集被广泛使用。第8页/共90页92)2)数据处理与数据库应用数据处理与数据库应用可供选用的语言如下:(1)(1)CobolCobol语言:产生于 50 50 年代末,是广泛用于商业数据处理的语言,它具有极强的数据定义能力,程序说明与硬件环境说明分
6、开,数据描述与算法描述分开,结构严谨层次分明,说明采用类英语的语法结构,可读性强。第9页/共90页10(2)(2)SQLSQL语言:最初是为IBMIBM公司开发的数据库查询语言,目前不同的软件开发公司有了不同的扩充版本,如 80 80 年代后期我国引入Informix-SQL,Informix-SQL,Microsoft-SQLMicrosoft-SQL可以方便地对数据库进行存取管理。第10页/共90页11(3)(3)4GL4GL语言:称为第4 4代语言,随着信息系统的飞速发展,原来的第2 2代语言(如FORTRANFORTRAN,Cobol)Cobol)第3 3代语言(如Pascal,Pas
7、cal,C C等)受硬件和操作系统的局限,其开发工具不能满足新技术发展的需求,因此,在7070年代末,提出了第4 4代语言的概念,4GL4GL的主要特征是:第11页/共90页12 友好的用户界面:指操作简单,使非计算机专业人员也能方便地使用它。兼有过程性和非过程性双重特性:非过程性指语言的抽象层次又提高到一个新的高度,只需告诉计算机“做什么”,而不必描述“怎么做”,“怎么做”的工作由语言系统运用它的专门领域的知识来填充过程细节。高效的程序代码:指能缩短开发周期,并减少维护的代价。完备的数据库:指在4GL4GL中实现数据库功能,不再把DBMS(DBMS(数据库管理系统)看成是语言以外的成分。第1
8、2页/共90页13 应用程序生成器:能提供一些常用的程序来完成文件维护、屏幕管理、报表生成和查询等任务,从而有效提高软件生产率。目前流行的FoxFox公司的FoxProFoxPro,UnifaceUniface公司的UnifaceUniface,PowersoftPowersoft公司的Power Power BuilderBuilder,InformixInformix公司的Informix-Informix-4GL4GL以及各种扩充版本的SQLSQL等都不同程度地具有上述特征。第13页/共90页143)3)实时处理 实时处理软件一般对性能的要求很高,可选用的语言有:(1)(1)汇编语言:是
9、面向机器的,它可以完成高级语言无法满足要求的特殊功能,如与外部设备之间的一些接口操作。第14页/共90页15(2)(2)AdaAda语言:是美国国防部出资开发的,主要用于适时、并发和嵌入系统的语言。AdaAda语言是在PascalPascal基础上开发出来的,但其功能更强、更复杂。它提供了一组丰富的实时特性,包括多任务处理、中断处理、任务间同步与通信等,它还提供了许多程序包供程序员选择。通过修订,已成为安全、高效和灵活的面向对象的编程语言。第15页/共90页164)4)系统软件 如果编写操作系统、编译系统等系统软件时,可选用汇编语言、C C语言、PascalPascal语言和AdaAda语言。
10、5)5)人工智能 如果要完成知识库系统、专家系统、决策支持系统、推理工程、语言识别、模式识别、机器人视角及自然语言处理等人工智能领域内的系统,应选择的语言如下:第16页/共90页17(1)(1)Lisp:Lisp:是一种函数型语言,产生于6060年代初,它特别适用于组合问题中的符号运算和表处理,因此用于定理证明、树的搜索和其他问题的求解。近年来LispLisp广泛应用于专家系统的开发,对于定义知识库系统中的事实、规则和相应的推理相对要容易一些。第17页/共90页18(2)(2)Prolog:Prolog:是一种逻辑型语言,产生于7070年代初,它提供了支持知识表示的特性,每一个程序由一组表示事
11、实、规则和推理的子句组成,比较接近于自然语言,符合人的思维方式。以上讨论的语言,一般适用于相应的应用领域,但要根据具体情况灵活掌握。有的语言功能强,适用的范围较广,但比较庞大。第18页/共90页192.2.软件开发的方法 有时编程语言的选择依赖于开发的方法,如果要用快速原型模型来开发,要求能快速实现原型,因此宜采用4GL4GL。如果是面向对象方法,宜采用面向对象的语言编程。近年来,推出了许多面向对象的语言,这里主要介绍以下几种:第19页/共90页20(1)(1)C+C+:是由美国AT&TAT&T公司的BellBell实验室最先设计和实现的语言,它提供了面向对象类的定义、继承、封装和消息传递等概
12、念实现的手段,又与C C语言兼容,保留了C C语言的许多特性,维护了大量已开发的C C库、C C工具以及C C源程序的完整性,使编程人员不必放弃自己熟悉的C C语言,只需补充学习C+C+提供的那些面向对象的概念,因而从C C过渡到C+C+比较容易,加之它的运行性能较高,成为当今最受欢迎的对象语言之一。第20页/共90页21 目前,除了常用的AT&T AT&T C+,C+,Turbo Turbo C+,C+,Borland Borland C+C+及Microsoft Microsoft C+C+等版本外,又推出了Microsoft Microsoft Visual Visual C+,C+,充
13、分发挥WindowsWindows和WebWeb的功能。第21页/共90页22(2)(2)Java:Java:是由SunSun公司开发的一种面向对象的、分布式的、安全的、高效的及易移植的语言,它的基本功能类似于C+C+,但做了重大修改,不再支持运算符重载、多继承及许多易于混淆和较少使用的特性,增加了内存空间自动垃圾收集的功能,使程序员不必考虑内存管理问题。JavaJava应用程序可利用语言提供的例程库,能够自由地打开和访问网络上的对象。第22页/共90页233.3.软件执行的环境 良好的编程环境不但有效提高软件生产率,同时能减少错误,有效提高软件质量。近几年推出了许多可视化的软件开发环境,如V
14、isual Visual BASIC,BASIC,Visual Visual C,C,Visual Visual FoxProFoxPro及Delphi(Delphi(面向对象的Pascal)Pascal)等,都提供了强有力的调试工具,帮助你快速形成高质量的软件。第23页/共90页244.4.算法和数据结构的复杂性 科学计算、实时处理和人工智能领域中的问题算法较复杂,而数据处理、数据库应用和系统软件领域内的问题,数据结构比较复杂,因此选择语言时可考虑是否有完成复杂算法的能力,或者有构造复杂数据结构的能力。第24页/共90页255.5.软件开发人员的知识 有时编程语言的选择与软件开发人员的知识水
15、平及心理因素有关,新的语言虽然有吸引力,但软件开发人员若熟悉某种语言,而且有类似项目的开发经验,往往愿选择原有的语言。开发人员应仔细地分析软件项目的类型,敢于学习新知识,掌握新技术。第25页/共90页266.2 6.2 程序设计风格程序设计风格 随着计算机技术的发展,软件的规模增大了,软件的复杂性也增强了。为了保证软件的质量,要加强软件测试。为了延长软件的生存期,就要经常进行软件维护。不论测试与维护,都必须要阅读程序。因此,读程序是软件维护和开发过程中的一个重要组成部分。有时读程序的时间比写程序的时间还要多。第26页/共90页27 同样一个题目,为什么有人编的程序容易读懂,而有人编的程序不易读
16、懂呢?这就存在一个程序设计的风格问题。程序设计风格指一个人编制程序时所表现出来的特点、习惯及逻辑思路等。良好的编程风格可以减少编码的错误,减少读程序的时间,从而提高软件的开发效率。因此本节主要讨论与编程风格有关的因素。第27页/共90页281.1.源程序文档化编写源程序文档化的原则为:(1)(1)标识符应按意取名。若是几个单词组成的标识符,每个单词第一个字母用大写,或者之间用下划线分开,这便于理解。如某个标识符取名为rowofscreen,rowofscreen,若写成RowOfScreenRowOfScreen或rowrow-of-of-screen-screen就容易理解了。但名字也不是越
17、长越好,太长了,书写与输入都易出错,必要时用缩写名字,但缩写规则要一致。第28页/共90页29(2)(2)程序应加注释。注释是程序员与读者之间通信的重要工具,用自然语言或伪码描述。它说明了程序的功能,特别在维护阶段,对理解程序提供了明确指导。注释分序言性注释和功能性注释。第29页/共90页30序言性注释应置于每个模块起始部分,主要内容有:说明每个模块的用途、功能。说明模块的接口即调用形式、参数描述及从属模块的清单。数据描述:指重要数据的名称、用途、限制、约束及其他信息。开发历史:指设计者、审阅者姓名及日期,修改说明及日期。第30页/共90页31功能性注释嵌入在源程序内部,说明程序段或语句的功能
18、以及数据的状态。注意以下几点:注释用来说明程序段,而不是每一行程序都要加注释。使用空行或缩进或括号,以便很容易区分注释和程序。修改程序也应修改注释。第31页/共90页322.2.数据说明为了使数据定义更易于理解维护,有以下指导原则:(1)(1)数据说明顺序应规范,使数据的属性更易于查找,从而有利于测试、纠错与维护。例如按常量说明、类型说明、全程量说明及局部量说明顺序。(2)(2)一个语句说明多个变量时,各变量名按字典序排列。(3)(3)对于复杂的数据结构,要加注释,说明在程序实现时的特点。第32页/共90页333.3.语句构造 语句构造的原则为:简单直接,不能为了追求效率而使代码复杂化。为了便
19、于阅读和理解,不要一行多个语句。不同层次的语句采用缩进形式,使程序的逻辑结构和功能特征更加清晰。要避免复杂的判定条件,避免多重的循环嵌套。表达式中使用括号以提高运算次序的清晰度等。第33页/共90页344.4.输入和输出在编写输入和输出程序时考虑以下原则:(1)(1)输入操作步骤和输入格式尽量简单。(2)(2)应检查输入数据的合法性、有效性,报告必要的输入状态信息及错误信息。(3)(3)输入一批数据时,使用数据或文件结束标志,而不要用计数来控制。(4)(4)交互式输入时,提供可用的选择和边界值。第34页/共90页35(5)(5)当程序设计语言有严格的格式要求时,应保持输入格式的一致性。(6)(
20、6)输出数据表格化、图形化。输入、输出风格还受其他因素的影响,如输入、输出设备,用户经验及通信环境等。第35页/共90页365.5.效率效率指处理机时间和存储空间的使用,对效率的追求明确以下几点:(1)1)效率是一个性能要求,目标在需求分析给出。(2)(2)追求效率建立在不损害程序可读性或可靠性基础之上,要先使程序正确,再提高程序效率;先使程序清晰,再提高程序效率。第36页/共90页37(3)(3)提高程序效率的根本途径在于选择良好的设计方法、良好的数据结构与算法,而不是靠编程时对程序语句做调整。总之,在编码阶段,要善于积累编程经验,培养和学习良好的编程风格,使编出的程序清晰易懂,易于测试与维
21、护,从而提高软件的质量。第37页/共90页38程序实际上也是一种供人阅读的文章,有程序实际上也是一种供人阅读的文章,有程序实际上也是一种供人阅读的文章,有程序实际上也是一种供人阅读的文章,有一个一个一个一个文章的风格文章的风格文章的风格文章的风格问题。应该使程序具有良问题。应该使程序具有良问题。应该使程序具有良问题。应该使程序具有良好的风格,详细说明以下内容:好的风格,详细说明以下内容:好的风格,详细说明以下内容:好的风格,详细说明以下内容:1 1 1 1 源程序文档化源程序文档化源程序文档化源程序文档化 2 2 2 2 数据说明数据说明数据说明数据说明 3 3 3 3 语句结构语句结构语句结
22、构语句结构 4 4 4 4 输入输出方法输入输出方法输入输出方法输入输出方法第38页/共90页391 1 源程序文档化源程序文档化源程序文档化源程序文档化 标识符的命名标识符的命名标识符的命名标识符的命名 安排注释安排注释安排注释安排注释 程序的视觉组织程序的视觉组织程序的视觉组织程序的视觉组织第39页/共90页40符号名的命名符号名的命名符号名的命名符号名的命名符号名即标识符,包括符号名即标识符,包括模块名、变量模块名、变量名、常量名、标号名、子程序名、数名、常量名、标号名、子程序名、数据区名以及缓冲区名据区名以及缓冲区名等。等。这些名字应能反映它所代表的实际东这些名字应能反映它所代表的实际
23、东西,西,应有一定实际意义应有一定实际意义。例如,表示次数的量用例如,表示次数的量用Times,表示,表示总量的用总量的用Total,表示平均值的用,表示平均值的用Average,表示和的量用,表示和的量用Sum等。等。第40页/共90页41名字不是越长越好名字不是越长越好,应当选择精炼的意,应当选择精炼的意义明确的名字。义明确的名字。必要时可使用缩写名字必要时可使用缩写名字,但这时要注意缩写规则要一致,并且要但这时要注意缩写规则要一致,并且要给每一个名字加注释给每一个名字加注释。同时,在一个程。同时,在一个程序中,一个变量只应用于一种用途。序中,一个变量只应用于一种用途。NEW.BALANC
24、E.ACCOUNTS.PAYABLENEW.BALANCE.ACCOUNTS.PAYABLE NBALAPNBALAP N N 第41页/共90页42程序的注释程序的注释程序的注释程序的注释 夹在程序中的注释是程序员与日后的夹在程序中的注释是程序员与日后的程序读者之间通信的重要手段。程序读者之间通信的重要手段。注释决不是可有可无的。注释决不是可有可无的。一些正规的程序文本中,注释行的数一些正规的程序文本中,注释行的数量占到整个源程序的量占到整个源程序的13到到12,甚,甚至更多。至更多。注释分为序言性注释和功能性注释。注释分为序言性注释和功能性注释。第42页/共90页43序言性注释序言性注释序
25、言性注释序言性注释通常置于每个程序模块的开头部分,通常置于每个程序模块的开头部分,它应当给出程序的整体说明它应当给出程序的整体说明,对于理,对于理解程序本身具有引导作用。有些软件解程序本身具有引导作用。有些软件开发部门对序言性注释做了明确而严开发部门对序言性注释做了明确而严格的规定,要求程序编制者逐项列出。格的规定,要求程序编制者逐项列出。有关项目包括:有关项目包括:程序标题程序标题;第43页/共90页44 有关本模块有关本模块功能和目的的说明功能和目的的说明;主要算法主要算法;接口说明接口说明:包括调用形式,参数描述,:包括调用形式,参数描述,子程序清单;子程序清单;有关数据描述有关数据描述
26、:重要的变量及其用途,:重要的变量及其用途,约束或限制条件,以及其它有关信息;约束或限制条件,以及其它有关信息;模块位置模块位置:在哪一个源文件中,或隶属:在哪一个源文件中,或隶属于哪一个软件包;于哪一个软件包;开发简历开发简历:模块设计者,复审者,复审:模块设计者,复审者,复审日期,修改日期及有关说明等。日期,修改日期及有关说明等。第44页/共90页45功能性注释功能性注释功能性注释功能性注释功能性注释嵌在源程序体中,用以描功能性注释嵌在源程序体中,用以描述其后的语句或程序段是在做什么工述其后的语句或程序段是在做什么工作,或是执行了下面的语句会怎么样。作,或是执行了下面的语句会怎么样。而不要
27、解释下面怎么做。而不要解释下面怎么做。例如,例如,/*ADD AMOUNT TO TOTAL*/*ADD AMOUNT TO TOTAL*/TOTAL=AMOUNT TOTAL=AMOUNTTOTALTOTAL不好。不好。第45页/共90页46如果注明把月销售额计入年度总额,便如果注明把月销售额计入年度总额,便使读者理解了下面语句的意图:使读者理解了下面语句的意图:/*ADD MONTHLY-SALES TO ANNUAL-TOTAL*/TOTAL=AMOUNTTOTAL要点要点 描述一段程序,而不是每一个语句;描述一段程序,而不是每一个语句;用缩进和空行,使程序与注释容易区用缩进和空行,使程
28、序与注释容易区别;别;注释要正确。注释要正确。第46页/共90页47视觉组织视觉组织视觉组织视觉组织 空格、空行和移行空格、空行和移行空格、空行和移行空格、空行和移行恰当地利用恰当地利用空格空格,可以,可以突出运算的优突出运算的优先性先性,避免发生运算的错误。,避免发生运算的错误。例如例如,将表达式,将表达式(A17)ANDNOT(B49)ORC写成写成(A17)AND NOT(B49)OR C自然的程序段之间可用自然的程序段之间可用空行空行隔开;隔开;第47页/共90页48移行移行也叫做也叫做向右缩格向右缩格。它是指程序中的。它是指程序中的各行不必都在左端对齐,都从第一格起各行不必都在左端对
29、齐,都从第一格起排列。这样做使程序完全分不清层次关排列。这样做使程序完全分不清层次关系。系。对于对于选择语句选择语句和和循环语句循环语句,把其中的程,把其中的程序段语句向右做序段语句向右做阶梯式移行阶梯式移行。使程序的。使程序的逻辑结构更加清晰。逻辑结构更加清晰。例如,两重选择结构嵌套,写成下面的例如,两重选择结构嵌套,写成下面的移行形式,层次就清楚得多。移行形式,层次就清楚得多。第48页/共90页49 IF()THEN IF()THEN ELSE ENDIF ELSE ENDIF第49页/共90页50数据说明数据说明数据说明数据说明在设计阶段已经确定了数据结构的组在设计阶段已经确定了数据结构
30、的组织及其复杂性。在编写程序时,则需织及其复杂性。在编写程序时,则需要注意数据说明的风格。要注意数据说明的风格。为了使程序中数据说明更易于理解和为了使程序中数据说明更易于理解和维护,必须注意以下几点。维护,必须注意以下几点。1.数据说明的次序应当规范化数据说明的次序应当规范化 2.说明语句中变量安排有序化说明语句中变量安排有序化 3.使用注释说明复杂数据结构使用注释说明复杂数据结构第50页/共90页51数据说明的次序应当规范化数据说明的次序应当规范化数据说明的次序应当规范化数据说明的次序应当规范化数据说明次序规范化,使数据属性容数据说明次序规范化,使数据属性容易查找,也有利于测试,排错和维护。
31、易查找,也有利于测试,排错和维护。原则上,数据说明的次序与语法无关,原则上,数据说明的次序与语法无关,其次序是任意的。但出于阅读、理解其次序是任意的。但出于阅读、理解和维护的需要,最好使其规范化,使和维护的需要,最好使其规范化,使说明的先后次序固定。说明的先后次序固定。第51页/共90页52例如,在例如,在例如,在例如,在FORTRANFORTRAN程序中数据说明次序程序中数据说明次序程序中数据说明次序程序中数据说明次序 常量说明常量说明常量说明常量说明 简单变量类型说明简单变量类型说明简单变量类型说明简单变量类型说明 数组说明数组说明数组说明数组说明 公用数据块说明公用数据块说明公用数据块说
32、明公用数据块说明 所有的文件说明所有的文件说明所有的文件说明所有的文件说明在类型说明中还可进一步要求。例如,在类型说明中还可进一步要求。例如,在类型说明中还可进一步要求。例如,在类型说明中还可进一步要求。例如,可按如下顺序排列:可按如下顺序排列:可按如下顺序排列:可按如下顺序排列:整型量说明整型量说明整型量说明整型量说明 实型量说明实型量说明实型量说明实型量说明 字符量说明字符量说明字符量说明字符量说明 逻辑量说明逻辑量说明逻辑量说明逻辑量说明第52页/共90页53说明语句中变量安排有序化说明语句中变量安排有序化说明语句中变量安排有序化说明语句中变量安排有序化当当多个变量名在一个说明语句中说明
33、多个变量名在一个说明语句中说明时,时,应当对这些变量应当对这些变量按字母的顺序排列按字母的顺序排列。带。带标号的全程数据标号的全程数据(如如FORTRAN的公用块的公用块)也应当按字母的顺序排列。也应当按字母的顺序排列。例如,把例如,把 integer size,length,width,cost,price写成写成 integer cost,length,price,size,width 第53页/共90页54使用注释说明复杂数据结构使用注释说明复杂数据结构使用注释说明复杂数据结构使用注释说明复杂数据结构如果设计了一个复杂的数据结构,应如果设计了一个复杂的数据结构,应当使用注释来说明在程序实
34、现时这个当使用注释来说明在程序实现时这个数据结构的固有特点。数据结构的固有特点。例如例如,对对PL/1的链表结构和的链表结构和Pascal中用中用户自定义的数据类型,都应当在注释户自定义的数据类型,都应当在注释中做必要的补充说明。中做必要的补充说明。第54页/共90页55语句结构语句结构语句结构语句结构在设计阶段确定了软件的逻辑流结构,在设计阶段确定了软件的逻辑流结构,但构造单个语句则是编码阶段的任务。但构造单个语句则是编码阶段的任务。语句构造力求简单,直接,不能为了片语句构造力求简单,直接,不能为了片面追求效率而使语句复杂化。面追求效率而使语句复杂化。第55页/共90页561.1.在一行内只
35、写一条语句在一行内只写一条语句在一行内只写一条语句在一行内只写一条语句在一行内只写一条语句,并且采取适当在一行内只写一条语句,并且采取适当的移行格式,使程序的逻辑和功能变得的移行格式,使程序的逻辑和功能变得更加明确。更加明确。许多程序设计语言允许许多程序设计语言允许在一行内写多个在一行内写多个语句语句。但这种方式。但这种方式会使程序可读性变差会使程序可读性变差。因而不可取。因而不可取。第56页/共90页57例如,有一段排序程序例如,有一段排序程序FOR I:=1 TO N1 DO BEGIN T:=I;FOR J:=I1 TO N DO IF AJAT THEN T:=J;IF TI THEN
36、 BEGIN WORK:=AT;AT:=AI;AI:=WORK;END END;由于一行中包括了多个语句,掩盖了程由于一行中包括了多个语句,掩盖了程序的循环结构和条件结构,使其可读性序的循环结构和条件结构,使其可读性变得很差。变得很差。第57页/共90页58FOR I:=1 TO NFOR I:=1 TO N-1 DO /1 DO /改进布局改进布局 BEGIN BEGIN T:=I T:=I;FOR J:=I FOR J:=I1 TO N DO1 TO N DO IF AJ IF AJAT THEN T:=JAT THEN T:=J;IF TI THEN IF TI THEN BEGIN B
37、EGIN WORK:=AT WORK:=AT;AT:=AI AT:=AI;AI:=WORK AI:=WORK;END END END END;第58页/共90页592.2.程序编写首先应当考虑清晰性程序编写首先应当考虑清晰性程序编写首先应当考虑清晰性程序编写首先应当考虑清晰性程序编写首先应当考虑清晰性,不要刻程序编写首先应当考虑清晰性,不要刻意追求技巧性,使程序编写得过于紧凑。意追求技巧性,使程序编写得过于紧凑。例如,有一个用例如,有一个用 C 语句写出的程序段:语句写出的程序段:AI=AIAT;AT=AIAT;AI=AIAT;第59页/共90页60 此段程序可能不易看懂,有时还需用实此段程序
38、可能不易看懂,有时还需用实际数据试验一下。际数据试验一下。实际上,这段程序的功能就是交换实际上,这段程序的功能就是交换AI和和AT中的内容。目的是为了节省一个中的内容。目的是为了节省一个工作单元。如果改一下:工作单元。如果改一下:WORK=AT;AT=AI;AI=WORK;就能让读者一目了然了。就能让读者一目了然了。第60页/共90页613.3.程序要能直截了当地说明程序员的用意。程序要能直截了当地说明程序员的用意。程序要能直截了当地说明程序员的用意。程序要能直截了当地说明程序员的用意。程序编写得要简单,写清楚,直截了程序编写得要简单,写清楚,直截了当地说明程序员的用意。例如,当地说明程序员的
39、用意。例如,for(i=1;i=n;i+)for(j=1;j=n;j+)Vij (ij)*(ji)除法运算()在除数和被除数都是除法运算()在除数和被除数都是整型量时,其结果只取整数部分,而整型量时,其结果只取整数部分,而得到整型量。得到整型量。第61页/共90页62 当当 ij 时时,i/j=0 当当 ji 时时,j/i=0 得到的数组得到的数组 当当ij时时 Vij=(ij)*(ji)=0 当当ij时时 Vij=(ij)*(ji)=1这样得到的结果这样得到的结果 V 是一个单位矩阵。是一个单位矩阵。第62页/共90页63写成以下的形式,就能让读者直接了解写成以下的形式,就能让读者直接了解程
40、序编写者的意图。程序编写者的意图。for(i1;i=n;i+)for(j1;j=n;j+)if(i=j)Vij 1.0;ELSE Vij 0.0;第63页/共90页64第64页/共90页654.除非对效率有特殊的要求除非对效率有特殊的要求,程序编写程序编写要做到清晰第一,效率第二。要做到清晰第一,效率第二。不要为了不要为了追求效率而丧失了清晰性。事实上,程追求效率而丧失了清晰性。事实上,程序效率的提高主要应通过选择高效的算序效率的提高主要应通过选择高效的算法来实现。法来实现。5.首先要保证程序正确首先要保证程序正确,然后才要求提然后才要求提高速度。高速度。反过来说,在使程序高速运行反过来说,在
41、使程序高速运行时,首先要保证它是正确的时,首先要保证它是正确的。第65页/共90页666.避免使用临时变量而使可读性下降。避免使用临时变量而使可读性下降。例如,有的程序员为了追求效率,往例如,有的程序员为了追求效率,往往喜欢把表达式往喜欢把表达式 AI1AI;写成写成 AIAI;XAI1AI;这样将一句分成两句写,会产生意想这样将一句分成两句写,会产生意想不到的问题。不到的问题。第66页/共90页677.让编译程序做简单的优化。让编译程序做简单的优化。8.尽可能使用库函数尽可能使用库函数9.避免不必要的转移。避免不必要的转移。同时如果能保持同时如果能保持程序可读性,则不必用程序可读性,则不必用
42、 GO TO语句。语句。例如,有一个求三个数中最小值的程例如,有一个求三个数中最小值的程序:序:第67页/共90页68 IF(X Y)GOTO 30 IF(Y Z)GOTO 50 SMALLZ GOTO 7030 IF(X Z)GOTO 60 SMALLZ GOTO 7050 SMALLY GOTO 7060 SMALLX70 CONTINUE第68页/共90页69 程序只需编写成:程序只需编写成:smallx;if(y small)smally;if(z=a)if(char=z)cout “This is a letter。”;else cout=0&char=9)不要让读者绕弯子想。不要让
43、读者绕弯子想。第71页/共90页7214.尽可能用通俗易懂的伪码来描述程尽可能用通俗易懂的伪码来描述程序的流程,然后再翻译成必须使用的序的流程,然后再翻译成必须使用的语言。语言。15.数据结构要有利于程序的简化。数据结构要有利于程序的简化。16.要模块化,使模块功能尽可能单一要模块化,使模块功能尽可能单一化,模块间的耦合能够清晰可见。化,模块间的耦合能够清晰可见。17.利用信息隐蔽,确保每一个模块的利用信息隐蔽,确保每一个模块的独立性。独立性。第72页/共90页7318.从数据出发去构造程序。从数据出发去构造程序。19.不要修补不好的程序,要重新编写。不要修补不好的程序,要重新编写。也不要一味
44、地追求代码的复用,要重新也不要一味地追求代码的复用,要重新组织。组织。20.对太大的程序,要分块编写、测试,对太大的程序,要分块编写、测试,然后再集成。然后再集成。21.对递归定义的数据结构尽量使用递归对递归定义的数据结构尽量使用递归过程。过程。第73页/共90页74输入和输出输入和输出输入和输出输入和输出输入和输出信息是与用户的使用直接相输入和输出信息是与用户的使用直接相关的。输入和输出的方式和格式应当尽关的。输入和输出的方式和格式应当尽可能方便用户的使用。一定要避免因设可能方便用户的使用。一定要避免因设计不当给用户带来的麻烦。计不当给用户带来的麻烦。因此,在软件需求分析阶段和设计阶段,因此
45、,在软件需求分析阶段和设计阶段,就应基本确定输入和输出的风格。系统就应基本确定输入和输出的风格。系统能否被用户接受,有时就取决于输入和能否被用户接受,有时就取决于输入和输出的风格。输出的风格。第74页/共90页75不论是不论是批处理的输入输出方式批处理的输入输出方式,还,还是是交互式的输入输出方式交互式的输入输出方式,在设计,在设计和编码时都应考虑下列原则:和编码时都应考虑下列原则:1.对所有的输入数据都要进行检验,对所有的输入数据都要进行检验,识别错误的输入,以保证每个数据的识别错误的输入,以保证每个数据的有效性;有效性;2.检查输入项的各种重要组合的合理检查输入项的各种重要组合的合理性,必
46、要时报告输入状态信息;性,必要时报告输入状态信息;3.使得输入的步骤和操作尽可能简单,使得输入的步骤和操作尽可能简单,并保持简单的输入格式;并保持简单的输入格式;第75页/共90页76 4.输入数据时,应允许使用自由格式输入数据时,应允许使用自由格式输入;输入;5.应允许缺省值;应允许缺省值;6.输入一批数据时,最好使用输入结输入一批数据时,最好使用输入结束标志,而不要由用户指定输入数据束标志,而不要由用户指定输入数据数目;数目;7.在交互式输入输入时,要在屏幕上在交互式输入输入时,要在屏幕上使用提示符明确提示交互输入的请求,使用提示符明确提示交互输入的请求,指明可使用选择项的种类和取值范围。
47、指明可使用选择项的种类和取值范围。同时,在数据输入的过程中和输入结同时,在数据输入的过程中和输入结束时,也要在屏幕上给出状态信息;束时,也要在屏幕上给出状态信息;第76页/共90页77 8.当程序设计语言对输入输出格式有当程序设计语言对输入输出格式有严格要求时,应保持输入格式与输入语严格要求时,应保持输入格式与输入语句的要求的一致性;句的要求的一致性;9.给所有的输出加注解,并设计输出报给所有的输出加注解,并设计输出报表格式。表格式。输入输出风格还受到许多其它因素的输入输出风格还受到许多其它因素的影响。如输入输出设备(例如终端的影响。如输入输出设备(例如终端的类型,图形设备,数字化转换设备等)
48、、类型,图形设备,数字化转换设备等)、用户的熟练程度、以及通信环境等。用户的熟练程度、以及通信环境等。第77页/共90页786.3 6.3 结构化程序设计结构化程序设计结构化程序设计结构化程序设计结构化程序设计主要包括两方面:结构化程序设计主要包括两方面:结构化程序设计主要包括两方面:结构化程序设计主要包括两方面:在编写程序时,强调在编写程序时,强调在编写程序时,强调在编写程序时,强调使用几种基本控制结使用几种基本控制结使用几种基本控制结使用几种基本控制结构构构构,通过组合嵌套,形成程序的控制结构。,通过组合嵌套,形成程序的控制结构。,通过组合嵌套,形成程序的控制结构。,通过组合嵌套,形成程序
49、的控制结构。尽可能避免使用尽可能避免使用尽可能避免使用尽可能避免使用GOTOGOTOGOTOGOTO语句。语句。语句。语句。在程序设计过程中,尽量采用自顶向下和在程序设计过程中,尽量采用自顶向下和在程序设计过程中,尽量采用自顶向下和在程序设计过程中,尽量采用自顶向下和逐步细化的原则,逐步细化的原则,逐步细化的原则,逐步细化的原则,由粗到细,一步步展开由粗到细,一步步展开由粗到细,一步步展开由粗到细,一步步展开。第78页/共90页79结构化程序设计的主要原则结构化程序设计的主要原则结构化程序设计的主要原则结构化程序设计的主要原则使用语言中的使用语言中的使用语言中的使用语言中的顺序、选择、重复顺序
50、、选择、重复顺序、选择、重复顺序、选择、重复等有限的等有限的等有限的等有限的基本控制结构表示程序逻辑。基本控制结构表示程序逻辑。基本控制结构表示程序逻辑。基本控制结构表示程序逻辑。选用的控制结构只准许有选用的控制结构只准许有选用的控制结构只准许有选用的控制结构只准许有一个入口和一个一个入口和一个一个入口和一个一个入口和一个出口出口出口出口。程序语句组成程序语句组成程序语句组成程序语句组成容易识别的块容易识别的块容易识别的块容易识别的块,每块只有,每块只有,每块只有,每块只有一一一一个入口和一个出口个入口和一个出口个入口和一个出口个入口和一个出口。复杂结构应该用基本控制结构进行组合嵌复杂结构应该