ch09-程序开发和结构化程序设计.ppt





《ch09-程序开发和结构化程序设计.ppt》由会员分享,可在线阅读,更多相关《ch09-程序开发和结构化程序设计.ppt(125页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第九章第九章 程序开发和结构化程序设计程序开发和结构化程序设计ngoto和标号和标号n空语句空语句n结构化程序设计原则结构化程序设计原则n程序风格程序风格n程序的正确性程序的正确性n可移植性可移植性n文档文档n自顶向下逐步求精的自顶向下逐步求精的程序设计技术程序设计技术n受限排列组合受限排列组合穷举法与试探法穷举法与试探法n本章小结本章小结goto和标号和标号ngoto 语句是强制改变程序正常执行顺序的手段。但语句是强制改变程序正常执行顺序的手段。但是我们事先声明是我们事先声明频繁使用频繁使用goto语句不是好的程序设计习惯,不符合结构语句不是好的程序设计习惯,不符合结构化程序设计原则化程序设
2、计原则除有特殊需要外,尽量不要使用除有特殊需要外,尽量不要使用goto语句和标号语句和标号n标号的语句标号的语句标号标号:语句语句label1:statement;ngoto 语句语句goto 标号标号 goto label1;l标号就是带标号语句中用的标号,是一个标识符;标号就是带标号语句中用的标号,是一个标识符;lgoto 是保留字,表示转向。是保留字,表示转向。goto 语句的意义是中断正常的程序执行顺序,转语句的意义是中断正常的程序执行顺序,转到本函数内标号标出的语句处,并从其开始继续向到本函数内标号标出的语句处,并从其开始继续向下执行下执行goto 语句与带标号语句配合使用,达到改变
3、程序语句与带标号语句配合使用,达到改变程序正常执行顺序的目的。正常执行顺序的目的。【例例9-1】前述第前述第5章例章例5-8中迭代法求解方程根的问题中迭代法求解方程根的问题,不改造流程图不改造流程图,可以用如下右端的程序片段表示可以用如下右端的程序片段表示 开始开始X0=初值初值X1=f(X0)X0X1结束结束x0=x1TF x0=0.9;/*1*/r1:x1=f(x0);/*2*/if(abs(x1-x0)1e-5)/*3*/goto r2;/*4*/x0=x1;/*5*/goto r1;/*6*/r2:;/*7*/n虽然虽然C允许使用允许使用 goto 语句转向语句转向本函数本函数内任何语
4、句,但内任何语句,但是下述转向是极其不好的程序设计习惯。它使程序逻辑是下述转向是极其不好的程序设计习惯。它使程序逻辑混乱,同时也给编译优化带来麻烦。混乱,同时也给编译优化带来麻烦。从从if语句外转入语句外转入if语句的语句的“then”或或“else”子句之子句之中;中;在在if语句的语句的“then”或或“else”子句之间转向;子句之间转向;从从switch语句之外转入语句之外转入switch语句之内;语句之内;从循环语句之外转入循环语句之内;从循环语句之外转入循环语句之内;从复合语句之外转入复合语句之内。从复合语句之外转入复合语句之内。空语句空语句n空语句(空语句(empty-state
5、ment)只由一个分号)只由一个分号“;”组成,表记没有任何操作动作。其语法是:组成,表记没有任何操作动作。其语法是:空语句空语句 ;空语句也是一种语句。只不过在程序正文上看空语句也是一种语句。只不过在程序正文上看它只有一个分号。在语义上看它没有任何操作动作,它只有一个分号。在语义上看它没有任何操作动作,其作用只是占据一个语句的位置。其作用只是占据一个语句的位置。空语句有时起很大作用空语句有时起很大作用,例例:for(.).goto r0;.r0:;结构化程序设计原则结构化程序设计原则n由于计算机硬件技术的不断发展,以及计算机的广泛应由于计算机硬件技术的不断发展,以及计算机的广泛应用,计算机软
6、件系统也日益发展用,计算机软件系统也日益发展n软件在计算机系统中所占比重也越来越大软件在计算机系统中所占比重也越来越大n使得作为软件主要组成部分的程序系统越来越庞大,复使得作为软件主要组成部分的程序系统越来越庞大,复杂度越来越高,造价也越来越昂贵,同时出错率也不断杂度越来越高,造价也越来越昂贵,同时出错率也不断增加,系统的可靠性越来越难以保证,维护也越来越困增加,系统的可靠性越来越难以保证,维护也越来越困难。难。n最后终于在最后终于在20世纪世纪60年代中期引起了一场所谓的软件年代中期引起了一场所谓的软件危机。在该背景下,危机。在该背景下,1968 年年 Dijkstra 提出了结构化提出了结
7、构化程序设计思想。这种思想的基点是:程序设计思想。这种思想的基点是:“清晰,易懂地书写程序逻辑,使程序结构表现得简单、清晰,易懂地书写程序逻辑,使程序结构表现得简单、明快明快”n从这点出发,人们经过艰苦实践,总结出了从这点出发,人们经过艰苦实践,总结出了一套结构化程序设计原则。这套原则要求程一套结构化程序设计原则。这套原则要求程序员写出的程序应该是结构良好的,即序员写出的程序应该是结构良好的,即:易于保证和验证程序的正确性易于保证和验证程序的正确性易于阅读、维护和调试。易于阅读、维护和调试。n这种良好结构的程序具体体现在:对任意程这种良好结构的程序具体体现在:对任意程序段来讲序段来讲仅有一个入
8、口,一个出口仅有一个入口,一个出口没有死循环没有死循环没有死码区。没有死码区。n为了达到上述目的,强调程序员在写程序时为了达到上述目的,强调程序员在写程序时应该应该:利用自顶向下、逐步求精的技术设计程序利用自顶向下、逐步求精的技术设计程序具有良好的程序设计风格具有良好的程序设计风格尽量利用标准的顺序、分支、重复控制结构。尽量利用标准的顺序、分支、重复控制结构。保证程序仅有一个入口、一个出口。保证程序仅有一个入口、一个出口。限制使用限制使用 GOTO 语句。可能一个坏程序的缺点语句。可能一个坏程序的缺点都是由都是由 GOTO 语句引起的。语句引起的。n结构化程序设计的发展,使程序设计从技艺走结构
9、化程序设计的发展,使程序设计从技艺走向工程,为软件工程学发展奠定了有力基础。向工程,为软件工程学发展奠定了有力基础。使软件生产由个体作坊式的艺术创作方式发展使软件生产由个体作坊式的艺术创作方式发展成为千千万万人参加的工程方式,达到了成为千千万万人参加的工程方式,达到了“系系列化、产品化列化、产品化、工程化、工程化、标准化、标准化”。“软件软件工程工程”也从这一时期开始逐步发展起来。也从这一时期开始逐步发展起来。n能够反映结构化程序设计要求,便于书写结构能够反映结构化程序设计要求,便于书写结构化程序的程序设计语言,称结构化程序设计语化程序的程序设计语言,称结构化程序设计语言。可以认为言。可以认为
10、C是结构化程序设计语言。是结构化程序设计语言。n结构化程序设计方法是结构化程序设计方法是20世纪世纪60年代末年代末70年代初年代初逐渐发展起来的,目前程序设计领域的热点是逐渐发展起来的,目前程序设计领域的热点是“面面向对象程序设计向对象程序设计”和和“基于构件的程序设计基于构件的程序设计”等。等。但是它们的主要特长在于程序的组织、信息封装、但是它们的主要特长在于程序的组织、信息封装、软件重用等,而最终对于足够小程序模块的编码,软件重用等,而最终对于足够小程序模块的编码,它们没有给人们带来益处。它们没有给人们带来益处。n 结构化程序设计方法针对每个小模块的设计起着结构化程序设计方法针对每个小模
11、块的设计起着十分关键的作用。所以尽管目前面向对象程序设计十分关键的作用。所以尽管目前面向对象程序设计技术和基于构件的程序开发技术受到人们广泛关注技术和基于构件的程序开发技术受到人们广泛关注与重视,但是结构化程序设计技术仍然是十分重要与重视,但是结构化程序设计技术仍然是十分重要和不可缺少的。可以说结构化程序设计是一切程序和不可缺少的。可以说结构化程序设计是一切程序设计技术的基础,是任何软件工作者必须掌握的技设计技术的基础,是任何软件工作者必须掌握的技术。术。程序风格程序风格n程序风格是指程序的书写格式等与易读性、清晰程序风格是指程序的书写格式等与易读性、清晰性、互相交流有关的,而与程序执行无关或
12、关系性、互相交流有关的,而与程序执行无关或关系不大的一些的问题。不大的一些的问题。n写程序不仅仅是为了与计算机进行交流,而且也写程序不仅仅是为了与计算机进行交流,而且也是为了与人进行交流,进一步还为了给自己或别是为了与人进行交流,进一步还为了给自己或别人阅读,同时程序员自己也需要不断地查阅自己人阅读,同时程序员自己也需要不断地查阅自己编出的程序,更何况程序的维护很可能由别人来编出的程序,更何况程序的维护很可能由别人来做。做。n在写程序时要考虑到:程序既是为了在计算机上在写程序时要考虑到:程序既是为了在计算机上运行,也是为了今后的交流和阅读,同时还是为运行,也是为了今后的交流和阅读,同时还是为了
13、留下有用的参考文件。了留下有用的参考文件。n为此,程序必须是宜于阅读的,也就是必须是结构良为此,程序必须是宜于阅读的,也就是必须是结构良好或风格优美的。好或风格优美的。n程序设计风格不好不利于产生正确、高效、易读、易程序设计风格不好不利于产生正确、高效、易读、易维护的程序。风格不好的程序会使程序维护费用与时维护的程序。风格不好的程序会使程序维护费用与时间增加,甚至导致整个编程过程失败。间增加,甚至导致整个编程过程失败。n程序设计风格是程序员必须的修养。良好的程序设计程序设计风格是程序员必须的修养。良好的程序设计风格是程序员在长期的编程实践中逐步发展,积累和风格是程序员在长期的编程实践中逐步发展
14、,积累和提炼出来的。它是产生正确、高效、易读、易维护程提炼出来的。它是产生正确、高效、易读、易维护程序的一种重要的手段。序的一种重要的手段。n程序风格主要涉及程序的行文格式、注释和空白的合程序风格主要涉及程序的行文格式、注释和空白的合适用法、尽量使用合适的助记名来命名标识符、明白适用法、尽量使用合适的助记名来命名标识符、明白地表示出程序结构和数据结构等。地表示出程序结构和数据结构等。良好的行文格式良好的行文格式n程序的行文格式不好直接影响程序的可读程序的行文格式不好直接影响程序的可读性、清晰性和外观。如下完全相同的程序性、清晰性和外观。如下完全相同的程序写成写成 A 和和 B 的格式显然都没有
15、写成的格式显然都没有写成 C 的格的格式好。因为式好。因为C的格式层次分明,格式清晰,的格式层次分明,格式清晰,意义明确。意义明确。/*A*/#include stdio.h int i;main()i=25+38;printf(“25+38=%d”,i);/*B*/#include stdio.h int i;main()i=25+38;printf(“25+38=%d”,i );/*C*/#include stdio.h int i;/*声明整型变量声明整型变量i*/int main(void)/*主函数主函数*/i=25+38;/*求和运算求和运算*/printf(“25+38=%d”,
16、i);/*打印打印*/n下面给出下面给出“适当使用空行、空格适当使用空行、空格”一般方法的一般方法的建议建议:在在#编译预处理命令、编译预处理命令、typedef类型定义、变量声类型定义、变量声明之前加一个空行,并把这些部分分别集中写在一明之前加一个空行,并把这些部分分别集中写在一起;起;在运算符的两边、赋值运算符在运算符的两边、赋值运算符“=”的两边,可以的两边,可以各加一个空格。各加一个空格。在函数定义之前加两个或更多的空行。在函数定义之前加两个或更多的空行。每个常量定义占一行。每个常量定义占一行。每个类型声明均另起一新行。每个类型声明均另起一新行。每个变量声明均另起一新行。并注意一个变量
17、每个变量声明均另起一新行。并注意一个变量声明中的每个变量说明符之间的排列。声明中的每个变量说明符之间的排列。在结构和联合声明中,各成员声明向右缩进几在结构和联合声明中,各成员声明向右缩进几列。列。复合语句的复合语句的左花括号左花括号“”放在函数定义说明符、放在函数定义说明符、if、else、switch、while、for、do、struct、union的起始的起始行末尾行末尾;右花括号右花括号“”与相应语句或声明引导词的第一个字与相应语句或声明引导词的第一个字符对齐,并以注释标明,例:符对齐,并以注释标明,例:“/*if*/”;各成分语句或声明向右缩进几列并对齐各成分语句或声明向右缩进几列并
18、对齐函数定义中,函数定义说明符另起一行,函数体部分各个函数定义中,函数定义说明符另起一行,函数体部分各个语句和声明向右缩进几列。呈图语句和声明向右缩进几列。呈图1格式。格式。IF语句把语句把if、else对齐,并且内含的子语句向右缩进几列。对齐,并且内含的子语句向右缩进几列。呈图呈图2格式。格式。SWITCH语句内部各个语句内部各个case标号分别占一行,标号分别占一行,“:”互相互相对齐,并比对齐,并比switch缩进几列;缩进几列;“:”后的语句开始符对齐。后的语句开始符对齐。呈图呈图3格式。格式。if if(b b)S S1 1 else else S S2 2 switch(switc
19、h(exprexpr)case a case a1 1:S;:S;case a case a2 2:S:S2 2 .case a case an n:s sn n /*switch*/*switch*/图图1 1 函数定义函数定义 图图2 IF2 IF语句语句 图图3 SWITCH3 SWITCH语句语句 intint main(main(vidovido)DS DS DS DS ./*main*/*main*/WHILE语句把语句把while、条件、条件b写在一行上,而把循环写在一行上,而把循环体体S另起一行并相对于另起一行并相对于while 缩进几列。呈图缩进几列。呈图4格式。格式。FOR
20、 语句把循环描述部分的语句把循环描述部分的for表达式写在一行上,表达式写在一行上,而把循环体而把循环体S另起一行另起一行,并相对于并相对于 for缩进几列。呈图缩进几列。呈图5格式。格式。DO语句把语句把do和和while对齐,循环体中的各个成分语对齐,循环体中的各个成分语句向右缩进几列并对齐。呈图句向右缩进几列并对齐。呈图6格式。格式。dodo S S while(b)while(b)for(expr1;expr2;expe3)for(expr1;expr2;expe3)S S/*for*/*for*/while(b)while(b)S S /*while*/*while*/图图4 WHI
21、LE4 WHILE语句语句 图图5 FOR5 FOR语句语句 图图6 DO6 DO语句语句用合适的助记名来命名标识符用合适的助记名来命名标识符n标识符是程序员给自己引进的常量、类型、变量、标识符是程序员给自己引进的常量、类型、变量、函数等起的名字。程序设计语言对如何命名标识符函数等起的名字。程序设计语言对如何命名标识符没有限制,标识符也没有固定的含义。没有限制,标识符也没有固定的含义。n但是从使用角度看,标识符表记的每个对象都有具但是从使用角度看,标识符表记的每个对象都有具体的含义。为了提高可读性和有助于记忆,应该使体的含义。为了提高可读性和有助于记忆,应该使标识符在拼写上尽量和它所标记对象的
22、物理、数学标识符在拼写上尽量和它所标记对象的物理、数学等含义相一致,并且要避免与系统预定义的标准标等含义相一致,并且要避免与系统预定义的标准标识符重名。识符重名。n例如,例如,表示圆周率表示圆周率用用 pai 就比用一个一般的就比用一个一般的 a 要好要好表示面积用表示面积用 area 就比用就比用 s 要好要好表示长度用表示长度用 length 就比用就比用 l 要好要好表示某一角度表示某一角度 a 的正弦值用的正弦值用 sin_of_a 就比用就比用 sin 要好要好 .注释注释n注释是间隔符的一种,在程序中的作用相注释是间隔符的一种,在程序中的作用相当于一个空格。注释的存在不影响程序的当
23、于一个空格。注释的存在不影响程序的意义,但是它有助于人们阅读和理解程序意义,但是它有助于人们阅读和理解程序,使原来模糊的、意义不清的部分变得清晰使原来模糊的、意义不清的部分变得清晰明了。明了。n在程序中适当加入注释是一个好的程序设在程序中适当加入注释是一个好的程序设计习惯。但是也不要在不需要加注释、意计习惯。但是也不要在不需要加注释、意义十分明显的地方加注释。通常义十分明显的地方加注释。通常:n所有程序都应该从注释开始,该注释至少应所有程序都应该从注释开始,该注释至少应该包含如下一些信息:该包含如下一些信息:程序的名称程序的名称编写和调试人员的姓名编写和调试人员的姓名版本编号版本编号完成时间或
24、最后一次修改时间完成时间或最后一次修改时间程序所做工作描述程序所做工作描述使用注意事项使用注意事项要求的输入数据及其数据格式要求的输入数据及其数据格式产生的输出数据及其格式产生的输出数据及其格式.n所有函数都从注释开始,该注释至少应该包所有函数都从注释开始,该注释至少应该包含如下一些信息:含如下一些信息:函数的名称函数的名称每个形式参数的名称、作用、特性、及其对实每个形式参数的名称、作用、特性、及其对实在参数的要求在参数的要求编写和调试人员的姓名编写和调试人员的姓名版本编号版本编号完成时间或最后一次修改时间完成时间或最后一次修改时间该函数功能,用到的主要算法该函数功能,用到的主要算法该函数产生
25、的结果、及该结果对主程序的影响该函数产生的结果、及该结果对主程序的影响使用注意事项使用注意事项.n可以对一个程序段、一个语句、一个声明等可以对一个程序段、一个语句、一个声明等加注释,以注明某程序段的功能、一个语句加注释,以注明某程序段的功能、一个语句的作用、一个常量或变量的意义等。的作用、一个常量或变量的意义等。n当修改有注释的程序时,当修改有注释的程序时,若程序内容被修改,若程序内容被修改,则相应的注释也必须作修改则相应的注释也必须作修改。错误的注释往。错误的注释往往比没有注释效果更坏。往比没有注释效果更坏。对程序说明的建议对程序说明的建议n程序中使用的全部程序中使用的全部常量常量都要引进一
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ch09 程序 开发 结构 程序设计

限制150内