【教学课件】第十三章编码.ppt

上传人:小飞机 文档编号:5664183 上传时间:2023-08-07 格式:PPT 页数:44 大小:464.97KB
返回 下载 相关 举报
【教学课件】第十三章编码.ppt_第1页
第1页 / 共44页
【教学课件】第十三章编码.ppt_第2页
第2页 / 共44页
【教学课件】第十三章编码.ppt_第3页
第3页 / 共44页
【教学课件】第十三章编码.ppt_第4页
第4页 / 共44页
【教学课件】第十三章编码.ppt_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《【教学课件】第十三章编码.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第十三章编码.ppt(44页珍藏版)》请在三一办公上搜索。

1、第十三章 编码,软件编码是将详细设计产生的算法,用某种程序设计语言编写成程序的过程。本章的重点:语言的分类结构化程序编码编码风格编码效率,第一节 语言的分类,第一代语言:第一代语言是指与机器紧密相关的机器语言和汇编语言,由于其与硬件操作一一对应,所以有多少种计算机主机就有多少种机器语言和汇编语言。第二代语言:第二代语言应用面广,为人们所熟悉和接受,而且有大量成熟的程序库,是第三代程序设计语言的基础和前身,包括FORTRAN、COBOL、BASIC等。,第三代语言:也称为结构化程序设计语言,其特点是直接支持结构化构件,且具有很强的过程能力和数据结构能力。它们又可细分为三类:通用高级语言、面向对象

2、的语言和专用语言。,第二节 结构化程序编码,一、结构化程序设计主要包括两方面:(1)在编写程序时,强调使用几种基本控制结构,通过组合嵌套,形成程序的控制结构。尽可能避免使用GOTO语句。,严格控制GOTO语句,仅在下列情形才可使用:用一个非结构化的程序设计语言去实现一个结构化的构造。若不使用GOTO语句就会使程序功能模糊。在某种可以改善而不是损害程序可读性的情况下。,例子 打印A,B,C三数中最小者的程序,(1),(2),(3),(4),程序1if(A B)goto 120;if(B C)goto 110;100 write(C);goto 140;110 write(B);goto 140;

3、120 if(A C)goto 130;goto 100;130 write(A);140 end,程序2if(A=B)and(B C)then write(B)else write(C)endifendif,(2)在程序设计过程中,尽量采用自顶向下和逐步细化的原则,由粗到细,一步步展开。自顶向下,逐步求精 在详细设计和编码阶段,应当采取自顶向下,逐步求精的方法。把一个模块的功能逐步分解,细化为一系列具体的步骤,进而翻译成一系列用某种程序设计语言写成的程序。,例,用筛选法求100以内的素数 筛选法就是从2到100中去掉2,3,9,10的倍数,剩下的就是100以内的素数。先按程序功能写出一个框架

4、。main()/程序框架建立2到100的数组A,其中Aii;建立2到10的素数表 B,其中存放2到10以内的素数;若Aii是B 中任一数的倍数,则剔除Ai;输出A 中所有没有被剔除的数;,(1),(2),(3),(4),main()/*建立2到100的数组A,其中Aii*/for(i=2;i=100;i+)Ai=i;/*建立2到10的素数表B,其中存放2到10以内的素数*/B1=2;B2=3;B3=5;B4=7;/*若Aii是B 中任一数的倍数,则剔除Ai*/for(j=1;j=4;j+)/*检查A 所有的数能否被Bj整除并将能被整除的数从A 中剔除;*/*输出A 中所有没有被剔除的数*/fo

5、r(i=2;i=100;i+)/*若Ai没有被剔除,则输出之*/,(1),(2),(3),(4),第三节 编码风格,编码风格又称程序设计风格或编程风格。风格原指作家、画家在创作时喜欢和习惯使用的表达自己作品题材的方式,而编码风格实际上指编程的基本原则。良好的编码风格有助于编写出可靠而又容易维护的程序,编码的风格在很大程度上决定着程序的质量。,一、代码文档化“软件=程序+文档”源程序文档化包括选择标识符(变量和标号)的名字、安排注释以及程序的视觉组织等。,1符号名的命名 符号名又称标识符,包括模块名、变量名、常量名、标号名、子程序名以及数据区名、缓冲 区名等。这些名字应能反映它所代表的实际东西,

6、应有一定实际意义,使其能够见名知意,有助于程序功能的理解和增强程序的可读性。如:平均值用Average表示,和用Sum表示,总量用Total表示。,2程序的注释 在程序中的注释是程序员与程序阅读者之间通信的重要手段。注释能够帮助读者理解程序,并为后续进行测试和维护提供明确的指导信息。注释分为序言性注释和功能性注释。,2.1序言性注释 通常置于每个程序模块的开头部分,它应当给出程序的整体说明,对于理解程序本身具有引导作用。它的内容如下:程序标题:有关本模块功能和目的的说明;接口说明:包括调用形式,参数描述,子程序清单;有关数据描述:重要的变量及其用途,约束或限制条件,以及其它有关信息;开发简历:

7、模块设计者,复审者,复审日期,修改日期及有关说明等。模块位置:在哪一个源文件中,或隶属于哪一个软件包;,2.2功能性注释 功能性注释嵌在源程序体中,用以描述其后的语句或程序段是在做什么工作,或是执行了下面的语句会怎么样。它的内容如下:描述一段程序,而不是每一个语句;用缩进和空行,使程序与注释容易区别;注释要正确。,3视觉组织 空格、空行和移行 3.1空格 恰当地利用空格,可以突出运算的优先性,避免发生运算的错误。例如,将表达式(A17)ANDNOT(B49)ORC写成(A17)AND NOT(B49)OR C 3.2空行自然的程序段之间可用空行隔开;,3.3移行 移行也叫做向右缩格。它是指程序

8、中的各行不必都在左端对齐,都从第一格起排列。这样做使程序完全分不清层次关系。对于选择语句和循环语句,把其中的程序段语句向右做阶梯式移行。使程序的逻辑结构更加清晰。,IF()THEN IF()THEN ELSE ENDIF ELSE ENDIF,例如,两重选择结构嵌套,写成下面的移行形式,层次就清楚得多。,IF()THENIF()THEN ELSE ENDIF ELSE ENDIF,二、数据说明 在设计阶段已经确定了数据结构的组织及其复杂性。在编写程序时,则需要注意数据说明的风格。为了使程序中数据说明更易于理解和维护,必须注意以下几点:,1.数据说明的次序应当规范化 数据说明次序规范化,使数据属

9、性容易查找,也有利于测试,排错和维护。原则上,数据说明的次序与语法无关,其次序是任意的。但出于阅读、理解和维护的需要,最好使其规范化,使说明的先后次序固定。例如,在FORTRAN程序中数据说明次序 常量说明 简单变量类型说明 数组说明 公用数据块说明 所有的文件说明,在类型说明中还可进一步要求。例如,可按如下顺序排列:整型量说明 实型量说明 字符量说明 逻辑量说明,2.说明语句中变量安排有序化 当多个变量名在一个说明语句中说明时,应当对这些变量按字母的顺序排列。带标号的全程数据(如FORTRAN的公用块)也应当按字母的顺序排列。例如,把 integer:size,length,width,co

10、st,price写成integer:cost,length,price,size,width,3.使用注释说明复杂数据结构 如果设计了一个复杂的数据结构,应当使用注释来说明在程序实现时这个数据结构的固有特点。例如,对链表结构和Pascal中用户自定义的数据类型,都应当在注释中做必要的补充说明。定义一个集合week=Monday,Sunday/*这是一个星期的集合*/,三、语句构造1使用标准的控制结构 在编码阶段,要继续遵循模块逻辑中采用单入口、单出口标准结构的原则,以确保源程序清晰可读。在尽量使用标准结构的同时,还要避免使用容易引起混淆的结构和语句。避免使用空的ELSE语句和IFTHEN IF

11、的语句。在早期使用ALGOL语言时就发现这种结构容易使读者产生误解。另外,在一行内只写一条语句,并采取适当的缩进格式,使程序的逻辑和功能变得更加明确。,2.单条源代码的简化方法避免使用复杂的条件测试排除测试条件的“非”避免多重循环嵌套或条件嵌套用括号的方法使逻辑表达式或算术表达式更加清晰用空格或可读性符号使语句内容更加清晰只使用国家标准要时刻为用户着想,3.其他需要注意的方面数据结构要有利于程序的简化。要模块化,使模块功能尽可能单一化,模块间的耦合能够清晰可见。对递归定义的数据结构尽量使用递归过程。不要修补不好的程序,要重新编写,也不要一味地追求代码的复用,要重新组织。利用信息隐蔽,确保每一个

12、模块的独立性。对太大的程序,要分块编写、测试,然后再集成。,四、输入输出 输入输出信息是与用户的使用直接相关的。输入输出的方式和格式应当尽量作到对用户友好,尽可能方便用户的使用。一定要避免因设计不当给用户带来的麻烦。,在设计和程序编码时都应考虑下列原则:(1)对所有的输入数据都进行检验,从而识别错误的输入,以保证每个数据的有效性;(2)检查输入项的各种重要组合的合理性,必要时报告输入状态信息;(3)使得输入的步骤和操作尽可能简单,并保持简单的输入格式;(4)输入数据时,应允许使用自由格式输入;(5)应允许缺省值;,(6)输入一批数据时,最好使用输入结束标志,而不要由用户指定输入数据数目;(7)

13、在以交互式输入输出方式进行输入时,要在屏幕上使用提示符明确提示交互输入的请求,指明可使用选择项的种类和取值范围。同时,在数据输入的过程中和输入结束时,也要在屏幕上给出状态信息;(8)当程序语言对输入格式有严格要求时,应保持输入格式与输入语句要求的一致性;(9)给所有的输出加注解,并设计输出报表格式。,第四节 效率,程序效率是指程序的执行速度及程序占用的存储空间。程序编码是最后提高运行速度和节省存储的重要阶段,因此在此阶段必须考虑程序的效率。有关程序效率的几条准则:(1)效率是一个性能要求,目标值应当在需求分析阶段给出。软件效率以需求为准,不应以人力所及为准。(2)好的设计可以提高效率。(3)程

14、序的效率与程序的简单性相关。,一、代码效率 源程序的效率与详细设计阶段确定的算法的效率直接有关。在详细设计翻译转换成源程序代码后,算法效率反映为程序的执行速度和存储容量的要求。转换过程中的指导原则是:(1)在编程序前,尽可能化简有关的算术表达式和逻辑表达式;(2)仔细检查算法中的嵌套的循环,尽可能将某些语句或表达式移到循环外面;(3)尽量避免使用多维数组;,(4)尽量避免使用指针和复杂的表达式;(5)采用快速的算术运算;(6)不要混淆数据类型,避免在表达式中出现类型混杂;(7)尽量采用整数算术表达式和布尔表达式。,代码效率举例:,考虑问题1:已知不重复且已经按从小到大排好的m个整数的数组A1.

15、m(为简单起见。还设m=2 k,k是一个确定的非负整数)。对于给定的整数c,要求寻找一个下标i,使得Ai=c;若找不到,则返回一个0。问题1的一个简单的算法是:从头到尾扫描数组A。照此,或者扫到A的第i个分量,经检测满足Ai=c;或者扫到A的最后一个分量,经检测仍不满足Ai=c。我们用一个函数Search来表达这个算法:,Function Search(c:integer):integer;Var J:integer;Begin J:=1;初始化 在还没有到达A的最后一个分量且等于c的分量还没有找到时,查找下一个分量并且进行检测 While(Aic)and(jm)do j:=j+1;If Aj

16、=c then search:=j 在数组A中找到等于c的分量,且此分量的下标为j else Search:=0;在数组中找不到等于c的分量 End,解决问题1的另一个算法利用到已知条件中A已排好序的性质。它首先拿A的中间分量Am/2与c比较,如果Am/2=c则解已找到。如果Am/2c,则c只可能在A1,A2,.,Am/2-1之中,因而下一步只要在A1,A2,.,Am/2-1中继续查找;如果Am/2c,则c只可能在Am/2+1,Am/2+2,.,Am之中,因而下一步只要在Am/2+1,Am/2+2,.,Am中继续查找。不管哪一种情形,都把下一步需要继续查找的范围缩小了一半。再拿这一半的子数组的

17、中间分量与c比较,重复上述步骤。照此重复下去,总有一个时候,或者找到一个i使得Ai=c,或者子数组为空(即子数组下界大于上界)。前一种情况找到了等于c的分量,后一种情况则找不到。这个新算法因为有反复把供查找的数组分成两半,然后在其中一半继续查找的特征,我们称为二分查找算法。它可以用函数B_Search来表达:,Function B_Search(c:integer):integer;Var L,U,I:integer;U和L分别是要查找的数组的下标的上界和下界 Found:boolean;Begin L:=1;U:=m;初始化数组下标的上下界 Found:=false;当前要查找的范围是AL.

18、AU。当等于c的分量还没有找到且U=L时,继续查找 While(not Found)and(U=L)do Begin I:=(U+L)div 2;找数组的中间分量 If c=AI then Found:=Ture else if cAI then L:=I+1 else U:=I-1;End;If Found then B_Search:=1 else B_Search:=0;End;,算法Search和B_Search解决的是同一个问题,但在最坏的情况下(所给定的c不在A中),两个算法所需要检测的分量个数却大不相同,前者要m=2 k个,后者只要k+1个。可见算法B_Search比算法Sear

19、ch高效得多。,下图是运行这两种算法的时间曲线。该图表明,当m适当大(mm0)时,算法B_Search比算法Search省时,而且当m更大时,节省的时间急剧增加。,二、内存效率三、输入输出效率 输入输出可分为两种类型:一种是面向人(操作员)的输入输出;一种是面向设备的输入输出。,提高输入输出的简单原则:(1)对所有的输入输出操作,安排适当的缓冲区,以减少频繁的信息交换。(2)对辅助存储(例如磁盘),选择尽可能简单的,可接受的存取方法;(3)对辅助存储的输入输出,应当成块传送;(4)对终端或打印机的输入输出,应考虑设备特性,改善输入输出的质量和速度;,(5)任何不易理解的,对改善输入输出效果关系不大的措施都是不可取的;(6)不应该为追求所谓超高效的输入输出,进而损害程序的可理解性;(7)良好的输入输出程序设计风格对提高输入输出效率会有明显的效果。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号