版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2022-3-8第六章第六章 程序编码程序编码 编码的目的 是使用选定的程序设计语言,把模块的过程性描述翻译为用该语言书写的源程序(源代码)模块的过程性描述 (不可执行的) 源程序(可执行的)编码6.1 编码的目的2022-3-8清晰性效率开发时间程序输出内存数语句数程序可读性最佳输出可读性最佳占内存最小语句数最少开发时间最短1-21-245321433351243521442-352-31编码要求结果 名次评判 项目Winberg 的程序实验结果2022-3-8 结构化程序设计是一种设计程序的技术,它采用自顶向下逐步细化的设计方法和单入口(Single entry)单出口(Single ex
2、it)的控制结构。 这种控制结构包括有: 顺序、选择和循环。 6.2 结构化程序设计 (Structured Programming)2022-3-8 for(a=1,b=1;a=20) break; if (b%3=1) b+=3; continue; b-=5; a=20b%3=1 b+=3 a+ b-=5TFFT a=0,b=1单入口 M1单出口2022-3-8ABA,B,CBCAC打印BFTFTTF打印C打印A If (A.LT.B) goto 120 If (B.LT.C) goto 110100 write(6,*) C goto 140 110 write(6,*) B goto
3、 140 120 If(A.LT.C) goto 130 goto 100 130 write(6,*) A 140 continue - 单入口多出口结构 M22022-3-8无节制地使用了GOTO语句所产生的程序流程 M 2022-3-8 一、结构化程序设计的原则1 1、使用语言中的顺序、选择、重复等有限的基本控制结构表示程序2、选用的控制结构只准许有一个入口和一个出口 3、程序语句组成容易识别的块(Block),每块只有一个入口和一个 出口4、复杂结构应该用基本控制结构进行组合嵌套来实现 5、严格控制GOTO语句2022-3-8 F0=F(a); F1=F(b); if(F0*F1=0)
4、 X0=a; X1=b; for(i=1;i=n;i+) Xm=(X0+X1)/2; Fm=F(Xm); if(abs(Fm)eps|abs(X1-X0)0) X0=Xm; F0=Fm; else X1=Xm; finish: printf(“%dn”,Xm); 2022-3-8Begin(F0*F1)0 X0=Xm X1=Xm F0=Fm TTXmFTFF F0=F(a) F1=F(b)11End22 i=n Q=abs(Fm)eps|abs(X1-X0)eps)2022-3-8 F0=F(a); F1=F(b); if(F0*F1=0) X0=a; X1=b; for(i=1;i=n;i+
5、) Xm=(X0+X1)/2; Fm=F(Xm); if(abs(Fm)eps|abs(X1-X0)0) X0=Xm; F0=Fm; else X1=Xm; printf(“%dn”,Xm); 2022-3-8 F0=F(a); F1=F(b); if(F0*F1=0) X0=a; X1=b; i=1; finish=0; while(i=n & finish=0) Xm=(X0+X1)/2; Fm=F(Xm); if(abs(Fm)eps|abs(X1-X0)0) X0=Xm; F0=Fm; else X1=Xm; i+; printf(“%dn”,Xm); 2022-3-8二、程序
6、设计自顶向下,逐步求精1、程序设计是一个由粗到细的 “渐进” 的过程 2、程序设计不仅包括对控制结构的设计,也包括对数据结构的设计。 二者都要一步一步地细化。 采用逐步细化方法设计程序的步骤列出问题的初步解分解主要问题继续细化利用图形工具或伪代码描述程序的详细逻辑2022-3-8用逐步细化方法设计一个程序,其功能为“从一组数中找出最大的数 ” 第一步:列出问题的初步解1:输入一组数2:找出其中最大的数3:输出最大的数2022-3-8第二步:分解主要问题2.1:首先读入一个数并设其为最大的数2.2:将该数逐次与其它数进行比较2.3:若有大于该数的则将其保存2022-3-8第三步:确定数据结构3.
7、1:定义一数组 A3.2:max=A(1)3.3:从A(2)至A(n)开始比较3.4:若当前数大于max, 则令:max=A(i)2022-3-8第四步:用PDL描述Input array ASet Max=A(1)DO for i=2 to N IF MaxA(i) Set Max=A(i) ENDIFENDDOPrint Max2022-3-8 请用逐步细化方法设计一由下列描述的程序结构 读入一段任意长度的英语课文,将其分解为单字,然后输出一张单词表(list of words),并指出每种单词在课文中的出现次数。2022-3-8三、程序复杂性的度量 程序复杂性主要是指模块内部程序的复杂性
8、。它 直接关系到软件开发费用的多少,开发周期的长短和 软件和软件内部潜伏错误的多少。同时它也是软件可 理解性的另一种度量。2022-3-8 它可以用来计算任何一个程序的复杂性; 对于不合理的程序,例如对于长度动态增长的程序, 或者对于原则上无法排错的程序,不应当使用它进行 复杂性计算;为了度量程序复杂性,要求复杂性度量应满足以下假设:2022-3-8 如果设每行代码的出错率为每100行源程序中可能的错误数目。例如,每行代码的出错率为 1%,也就是说,每 100 行源程序中就可能有一个错误。 1、代码行度量法 :统计程序中的源代码的行数较小的程序 -1.3%1.8%/行较大的程序 -2.7%3.
9、2%/行2022-3-8 该方法是利用程序模块的程序图中环路的个数,来计算程序的复杂性的。为此,该方法也称为环路复杂度计算法。 2、McCabe 度量法利用程序的控制流来度量程序的复杂性 它是一种退化了的程序流程图。即:把程序流程图中每个处理符号都退化成一个结点,而原来流程图中的流程线,则变成连接不同结点的有向弧。2022-3-8(1)程序图符号2022-3-82022-3-8TC1C2CABED(2)从流程图导出程序图 A开始C1BCED结束C2TF2022-3-8(3)环路复杂性的计算方法 V(G)=m-n+2p 说明: V(G) 是有向图G中环路数; m: 为图G中弧数; n: 为图G中
10、节点数; p: 为图G中强连通分量个数; A B C D E F G H K L I McCabe 的环路复杂性度量值为 42022-3-8请将右侧给出的程序流程图转换为程序图并计算其环路值。a=20b%3=1 b+=3 a+ b-=5TFFT a=0,b=12022-3-8 程序的环路复杂度则取决于程序控制流的复杂度,也就 是取决于程序结构的复杂程度。当程序内分支或循环个数增 加时,则相应地环域复杂度也随之增加。因此,它是对测试 难度的一种定量度量,也能对软件最终的可靠性给出某种预 测。(4)、环路复杂度的用途2022-3-8 请用程序流程图描述下列问题的算法,再将其转换为程序图并计算其环路
11、值。 请定义一个数组 ,要求找出数组中最大数和最小 数,并把最大数和 中的数对调、最小数和 中的数对调。 2022-3-8 请画出下列伪代码程序的流程图、程序图并计算它的环路复杂度。 LOOP : Do While Z0 A=A+1 IF A10 THEN X=A ELSE Y=Z END IF IF Y0 THEN PRINT G E LSE PRINT K END IF STOP 2022-3-8四、程序效率 程序效率是指程序的执行速度及程序占用的存储空间。程序编码是最后提高运行速度和节省存储机会,因此在此阶段不能不考虑程序的效率。2022-3-81、算法对效率的影响源程序的效率与详细设计
12、阶段确定的算法的效率有着直接的关系。当我们把详细设计翻译并转换成源代码之后,那么算法效率就会反映为程序的执行速度和存储容量的要求2022-3-8(1)在编程序前,尽可能化简有关的算术表达式和逻辑表达式(2)仔细检查算法中的嵌套的循环,尽可能将某些语句或表达 式移到循环外面(3)尽量避免使用多维数组(4)尽量避免使用指针和复杂的表(5)不要混淆数据类型,避免在表达式中出现类型混杂(6)尽量采用整数算术表达式和布尔表达式(7)选用等效的高效率算法转换过程中的指导原则是:2022-3-8请设计求解下列问题的算法2022-3-8 (i+1) (j+2) 20 3 i=1 j=1 内循环次数 20*4=
13、80 外循环次数 21 总循环次数 101 2022-3-8应把变化范围大的循环变量放在内层。 内循环次数 3*21=63 外循环次数 4 总循环次数 672022-3-8 j+2 共计执行了 3*20=60次 重复执行57次2022-3-8 j+2 共计执行了 3次 减少了57次应尽量把与循环变量无关的运算移到循环外去。2022-3-8 i+1 共计执行了 60+60=120次 2022-3-8 i+1 共计执行了 60次 2022-3-8 从键盘输入 10个整数,要求按有小到大的顺序将它们输出。 请采用比较交换法和选择法对上述10条数据进行排序,然后分别对这两种方法进行比较,并从程序的运行
14、了效率的角度对两个程序进行比较。2022-3-82022-3-82022-3-8五、程序设计风格 Coding style 1、保持控制流的直线性 (1)、对多入口和多出口的控制结构 要作适当的处理要作适当的处理 C1S1S2C2SnTT多入口循环结构多入口循环结构2022-3-8C1S1C2SnTTS2S2改进后的循环结构改进后的循环结构重复环节法2022-3-8多出口循环结构多出口循环结构C1S2TTC2S12022-3-8经过处理后的单出口循环结构C1 and C2S2TC1S1SnT逻辑分析法2022-3-8 while (C1) do Begin S1 If C2 then goto
15、 10 else S2End 10 Sn EXIT:=false while (C1 and (not EXIT) do Begin S1 If then EXIT:=true else S2 End 10 Sn 标志变量法标志变量2022-3-8使用 Ture Basic 语言中的专用语句退出循环上面程序的功能是:从键盘输入一个数,并累加到总和中。当总和超过1000或输入为 0时则停止输入,并打印出总和。2022-3-8if (N=0) then if (N能被能被2整除)整除)then print “正偶数正偶数” else print “负数负数” 导致二义性的 then-if 结构(2
16、)、避免使用模糊或费解的结构 if (N0) then print “负数负数” else if (N能被能被2整除)整除) then print “正偶数正偶数” 2022-3-8 While C1 If C2 then While C3 If C4 then Repeat S Until C5 Loop Loop . 费解的 深层嵌套 结构嵌套层最好不要超过 层2022-3-8 二、保持控制流的局部性 局部性是程序设计的一条准则。像应用甚广的 模块化设计,可看成是局部化原理在总体设计中的 具体体现。其实,在编码时也要遵守局部化的原则 ,这就是保持控制流的局部性,其目的不仅是为了 提高程序的
17、清晰度,也有利于防止错误的扩散,提 高程序的可修改性。 2022-3-8 1、GOTO 语句的使用准则 向前不向后的规则 2022-3-8 goto的目的地最好在同一控制结构内部,或者离本结构出口相近的地方。2022-3-8TTTF 2、GOTO 语句的常见用法 请将右侧的具有多个循环出口的结构改写为单出口结构2022-3-8TTTF(用GOTO语句提前退出循环) 方法一:EXIT2=false; EXIT3=false; while(C1) and (not (EXIT2) and (not( EXIT3) do begin if C2 then EXIT2:=true; if C3 the
18、n EXIT3:=true; end if(EXIT2) then goto 20; if(EXIT3) then goto 30; goto 40; 20: C2为真时执行的语句 gotot 40; 30: C3为真时的语句 40: Sn 后续语句标志变量2022-3-8 while C1 do begin if C2 then goto 20; if C3 then goto 30; end goto 40; 20: 从e2退出前执行的语句 gotot 40; 30: e3 退出前执行的语句 40: Sn 后续语句 (用GOTO语句提前退出循环) 方法二:2022-3-8IF (X .LT. Y) GOTO 30IF (Y .LT. Z) GOTO 50SMALL=Z GOTO 70 30 IF (X .LT. Z ) GOTO 60 SMALL=Z GOTO 70 50 SMALL=Y GOTO 70 60 SMALL=X 70 CONTINUE 请将右侧用FORTRAN语言编写的源程序改用C语言编写,要求程序的清晰度要好small=x; if (ysmall) sma
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 绿色酶催化合成-洞察与解读
- 2025年消费品经理岗位招聘面试参考试题及参考答案
- 2025年公寓管理员岗位招聘面试参考试题及参考答案
- 2025年生产主管岗位招聘面试参考题库及参考答案
- 2025年飞行员岗位招聘面试参考题库及参考答案
- 2025年环境监测员岗位招聘面试参考试题及参考答案
- 2025年车险理赔专员岗位招聘面试参考试题及参考答案
- 2025年内容创意策划岗位招聘面试参考题库及参考答案
- 2025年社会医学例题题库及答案
- 2025年AI训练师岗位招聘面试参考试题及参考答案
- 字节跳动绩效管理制度
- 2026年海南省五指山市房地产市场现状调研报告
- 2025贵州黔西南州政协机关面向全州考聘事业单位工作人员2人考试笔试备考试题及答案解析
- 2025年度黑龙江鹤城农业发展投资有限公司招聘工作人员13人笔试考试参考试题附答案解析
- 2025摄影工作室员工合同模板
- 湖南省长沙市长郡教育集团2024-2025学年八年级上学期期中英语试题(含答案)
- GB/T 30341-2025机动车驾驶员培训教练场技术要求
- 雨课堂在线学堂《现代美学》单元考核测试答案
- 物业管理公司财务审计实施方案
- 钢板桩围堰施工质量通病、原因分析及应对措施
- 机场安全考试题库及答案解析
评论
0/150
提交评论