第5章 函数与模块化编程.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第5章 函数与模块化编程.ppt》由用户(最好的沉淀)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第5章 函数与模块化编程 函数 模块化 编程
- 资源描述:
-
1、第第5章章程序设计方法学基础程序设计方法学基础结构化与模块化结构化与模块化哈尔滨工业大学哈尔滨工业大学5.1结构化程序设计结构化程序设计像搭积木一样写代码像搭积木一样写代码n5.1.1自底向上的程序设计方法自底向上的程序设计方法n5.1.2 自顶向下、逐步求精的结构化程序设计方法自顶向下、逐步求精的结构化程序设计方法5.1.1自底向上的程序设计方法自底向上的程序设计方法n自底向上(自底向上(Down-top)的程序设计方法)的程序设计方法先编写出基础程序段先编写出基础程序段然后再逐步扩大规模、补充和升级某些功能然后再逐步扩大规模、补充和升级某些功能实际上是一种自底向上构造程序的过程实际上是一种
2、自底向上构造程序的过程CBCCAB功能增加、规模增大功能增加、规模增大功能简单、规模较小功能简单、规模较小5.1.1自底向上的程序设计方法自底向上的程序设计方法n【例【例5.15.1】任务任务1 1:只猜一次。:只猜一次。设计一个只能猜一次的猜数游戏:设计一个只能猜一次的猜数游戏:先由计算机先由计算机“想想”一个数,然后请用户猜,如果用户猜对了,则一个数,然后请用户猜,如果用户猜对了,则计算机给出提示计算机给出提示“正确!正确!”,否则提示,否则提示“错误!错误!”,并告诉用户,并告诉用户所猜的数是大还是小。所猜的数是大还是小。5.1.1自底向上的程序设计方法自底向上的程序设计方法n【例【例5
3、.15.1】任务任务1 1:只猜一次。:只猜一次。#include#include /包含函数包含函数rand()所需的头文件所需的头文件#include /包含函数包含函数time()所需的头文件所需的头文件int main(void)int magic;/计算机计算机“想想”的数的数int guess;/用户猜的数用户猜的数 srand(time(NULL);/为函数为函数rand()设置随机数种子设置随机数种子magic=rand()%100+1;/计算机计算机“想想”一个随机数一个随机数printf(Guess a number:);scanf(%d,&guess);/输入用户猜的数输
4、入用户猜的数if(guess magic)printf(Wrong!Too big!n);else if(guess magic)printf(Wrong!Too small!n);else printf(Right!n);return 0;5.1.1自底向上的程序设计方法自底向上的程序设计方法n【例【例5.25.2】任务任务2 2:直到猜对为止。在例:直到猜对为止。在例5.15.1的猜数游戏基础上,将的猜数游戏基础上,将游戏改为:直到猜对为止,同时记录用户猜的次数,以此来反映游戏改为:直到猜对为止,同时记录用户猜的次数,以此来反映用户用户“猜猜”数的水平数的水平。5.1.1自底向上的程序设计
5、方法自底向上的程序设计方法n【例【例5.25.2】任务任务2 2:直到猜对为止。直到猜对为止。#include#include /包含函数包含函数rand()所需的头文件所需的头文件#include /包含函数包含函数time()所需的头文件所需的头文件int main(void)int magic;/计算机计算机“想想”的数的数 int guess;/用户猜的数用户猜的数 srand(time(NULL);/为函数为函数rand()设置随机数种子设置随机数种子 magic=rand()%100+1;int counter=0;/记录用户猜数次数的计数器记录用户猜数次数的计数器 do prin
6、tf(Try%d:,counter+1);scanf(%d,&guess);/输入用户猜的数输入用户猜的数 counter+;/计数器变量加计数器变量加1 if(guess magic)printf(Wrong!Too big!n);else if(guess magic)printf(Wrong!Too big!n);else if(guess magic)printf(Wrong!Too small!n);else printf(Right!n);while(guess!=magic&counter magic)printf(Wrong!Too big!n);else if(guess m
7、agic)printf(Wrong!Too small!n);else printf(Right!n);while(guess!=magic&counter magic,则输出提示信息“错误!太大!”step2.4.2:若guess magic,则输出提示信息,则输出提示信息“错误!太大!错误!太大!”step2.4.2:若:若guess magic,则输出提示信息,则输出提示信息“错误!太小!错误!太小!”step2.4.3:若:若guess=magic,则输出提示信息,则输出提示信息“正确!正确!”step2.5:判断用户是否猜对且猜的次数是否小于:判断用户是否猜对且猜的次数是否小于10次
8、次step2.6:若用户未猜对且猜的次数小于:若用户未猜对且猜的次数小于10次,则返回次,则返回step2.2 否则输出用户猜的次数否则输出用户猜的次数counterstep3:判断用户是否继续猜下一个数:判断用户是否继续猜下一个数step4:若是,则返回:若是,则返回step1,否则算法结束,否则算法结束5.1.2自顶向下、逐步求精的程序设计方法自顶向下、逐步求精的程序设计方法n完整的流程图5.2模块化程序设计模块化程序设计分工与合作的艺术分工与合作的艺术n5.2.1 模块分解的基本原则模块分解的基本原则n5.2.2 如如“活字印刷活字印刷”般的函数般的函数n5.2.3 函数调用和参数传递函
9、数调用和参数传递n5.2.4 最佳编码原则最佳编码原则防御式编程防御式编程n5.2.5 多文件编程多文件编程n5.2.6 最佳编码原则最佳编码原则正确运用变量的作用域和存储类型正确运用变量的作用域和存储类型5.2.1 模块分解的基本原则模块分解的基本原则n“诸葛亮诸葛亮”式的领导方式式的领导方式n事无巨细、事必躬亲事无巨细、事必躬亲n分工分工+协作协作n分而治之(分而治之(Divide and Conquer)n各司其职各司其职5.2.1 模块分解的基本原则模块分解的基本原则n模块分解应遵循的基本原则是保证每个模块的相对独立性模块分解应遵循的基本原则是保证每个模块的相对独立性(Module I
10、ndependence),衡量模块独立性程度的标准主要是),衡量模块独立性程度的标准主要是看如下两个标准:看如下两个标准:n(1)内聚度()内聚度(Cohesion):内聚度,也称聚合度或聚合性,是指每个模):内聚度,也称聚合度或聚合性,是指每个模块内各个元素(例如语句、程序段等)之间联系的紧密程度,它是模块内块内各个元素(例如语句、程序段等)之间联系的紧密程度,它是模块内的元素之间的关联程度或聚合能力的度量。模块内各个元素之间的联系越的元素之间的关联程度或聚合能力的度量。模块内各个元素之间的联系越紧密,则其内聚度越大,模块独立性就越强,系统就越容易理解和维护。紧密,则其内聚度越大,模块独立性
11、就越强,系统就越容易理解和维护。n(2)耦合度()耦合度(Coupling):耦合度,也称关联度或耦合性,是指不同模):耦合度,也称关联度或耦合性,是指不同模块之间相互联系的紧密程度,它是模块之间关联程度(即依赖关系,或者块之间相互联系的紧密程度,它是模块之间关联程度(即依赖关系,或者说接口复杂性)的一种度量。模块之间的依赖关系包括控制关系、调用关说接口复杂性)的一种度量。模块之间的依赖关系包括控制关系、调用关系、数据传递关系。耦合度是从模块外部考察模块的独立性程度。耦合度系、数据传递关系。耦合度是从模块外部考察模块的独立性程度。耦合度的强弱取决于模块间接口的复杂性、调用模块的方式以及通过接口
12、传送数的强弱取决于模块间接口的复杂性、调用模块的方式以及通过接口传送数据的多少。据的多少。5.2.1 模块分解的基本原则模块分解的基本原则n【例例5.6】按照模块化程序设计方法重新设计猜数游戏,游戏的要按照模块化程序设计方法重新设计猜数游戏,游戏的要求为:求为:n显示一个菜单,让用户选择游戏的方式:显示一个菜单,让用户选择游戏的方式:n(1)选择)选择1,则猜一个数;,则猜一个数;n(2)选择)选择2,则猜多个数,直到用户选择,则猜多个数,直到用户选择0退出为止;退出为止;n(3)选择)选择0,退出游戏。其中,猜每一个数的方式有三种:只,退出游戏。其中,猜每一个数的方式有三种:只猜一次,直到猜
13、对为止,最多猜猜一次,直到猜对为止,最多猜10次。次。5.2.1 模块分解的基本原则模块分解的基本原则n【例例5.6】按照模块化程序设计方法重新设计猜数游戏。按照模块化程序设计方法重新设计猜数游戏。5.2.1 模块分解的基本原则模块分解的基本原则n【例例5.6】按照模块化程序设计方法重新设计猜数游戏。按照模块化程序设计方法重新设计猜数游戏。5.2.1 模块分解的基本原则模块分解的基本原则n【例例5.6】按照模块化程序设计方法重新设计猜数游戏。按照模块化程序设计方法重新设计猜数游戏。int main(void)int magic;/计算机计算机“想想”的数的数 char choice=0;/将保
14、存用户选择的变量初始化为将保存用户选择的变量初始化为ASCII码值为码值为0的空字符的空字符 while(choice!=0)/只要用户不选只要用户不选0,就继续猜下一个数,就继续猜下一个数 计算机生成一个随机数计算机生成一个随机数 显示一个固定式菜单并返回用户的选择显示一个固定式菜单并返回用户的选择 switch(choice)/判断用户选择的是何种操作判断用户选择的是何种操作 case 1:用户猜数,只猜一次用户猜数,只猜一次 break;case 2:用户猜数,直到猜对为止用户猜数,直到猜对为止 break;case 3:用户猜数,最多猜用户猜数,最多猜10次次 break;case 0
15、:提示游戏结束提示游戏结束 break;default:提示输入数据错误提示输入数据错误 清空输入缓冲区清空输入缓冲区 return 0;5.2.1 模块分解的基本原则模块分解的基本原则n【例例5.6】按照模块化程序设计方法重新设计猜数游戏。按照模块化程序设计方法重新设计猜数游戏。int main(void)int magic;/计算机计算机“想想”的数的数 char choice;/用户的选择用户的选择 do 计算机生成一个随机数计算机生成一个随机数 显示一个固定式菜单并返回用户的选择显示一个固定式菜单并返回用户的选择 switch(choice)/判断用户选择的是何种操作判断用户选择的是何
16、种操作 case 1:输入用户猜的数,只猜一次输入用户猜的数,只猜一次 break;case 2:输入用户猜的数,直到猜对为止输入用户猜的数,直到猜对为止 break;case 3:输入用户猜的数,最多猜输入用户猜的数,最多猜10次次 break;case 0:提示游戏结束提示游戏结束 break;default:提示输入数据错误提示输入数据错误 清空输入缓冲区清空输入缓冲区 while(choice!=0);/只要用户不选只要用户不选0,就继续猜下一个数,就继续猜下一个数 return 0;5.2.1 模块分解的基本原则模块分解的基本原则n【例例5.6】按照模块化程序设计方法重新设计猜数游戏
17、。按照模块化程序设计方法重新设计猜数游戏。n根据上面的主函数框架,至少需要设计下面根据上面的主函数框架,至少需要设计下面4个子模块:个子模块:n(1)显示一个固定式菜单并返回用户的选择)显示一个固定式菜单并返回用户的选择n(2)用户猜数,只猜一次)用户猜数,只猜一次n(3)用户猜数,直到猜对为止)用户猜数,直到猜对为止n(4)用户猜数,最多猜)用户猜数,最多猜10次次n从上述对应三种游戏方式的三个模块中进一步提炼出从上述对应三种游戏方式的三个模块中进一步提炼出4个公共子任务,按执个公共子任务,按执行顺序划分再抽象出行顺序划分再抽象出4个子模块:个子模块:n(1)计算机生成一个随机数)计算机生成
18、一个随机数n(2)输入用户猜的数)输入用户猜的数n(3)测试用户输入数据的合法性和有效性)测试用户输入数据的合法性和有效性n(4)对猜对与否做出决策)对猜对与否做出决策5.2.2如如“活字印刷活字印刷”般的函数般的函数n用户自定义函数的基本语法格式为:用户自定义函数的基本语法格式为:5.2.2如如“活字印刷活字印刷”般的函数般的函数n【例例5.7】将例将例5.6猜数游戏实例中设计的如下猜数游戏实例中设计的如下3个子模块定义为函个子模块定义为函数。数。n(1)显示一个固定式菜单并返回用户的选择)显示一个固定式菜单并返回用户的选择n(2)计算机生成一个随机数)计算机生成一个随机数n(3)对用户猜对
19、与否做出决策)对用户猜对与否做出决策5.2.2如如“活字印刷活字印刷”般的函数般的函数5.2.2如如“活字印刷活字印刷”般的函数般的函数/函数功能:显示菜单并返回用户的选择函数功能:显示菜单并返回用户的选择char MenuSelection(void)char choice;/用户的选项用户的选项 printf(1.Guess Oncen);printf(2.Guess until rightn);printf(3.Guess up to ten timesn);printf(0.Exitn);printf(Input your choice:);scanf(%c,&choice);/注意这
20、里注意这里%c前面有个空格,避免读入前面的回车前面有个空格,避免读入前面的回车 return choice;5.2.2如如“活字印刷活字印刷”般的函数般的函数#include /调用调用srandtime()所需包含的头文件所需包含的头文件#include /调用调用rand()所需包含的头文件所需包含的头文件#define MAX_NUMBER 100 /计算机生成的随机数的上限计算机生成的随机数的上限#define MIN_NUMBER 1 /计算机生成的随机数的下限计算机生成的随机数的下限/函数功能:计算机生成并返回一个随机数函数功能:计算机生成并返回一个随机数int MakeNumbe
21、r(void)int magic;srand(time(NULL);/为函数为函数rand()设置随机数种子设置随机数种子 magic=(rand()%(MAX_NUMBER-MIN_NUMBER+1)+MIN_NUMBER;return magic;5.2.2如如“活字印刷活字印刷”般的函数般的函数int IsRight(int magic,int guess)if(guess magic)printf(Wrong!Too big!n);return 0;else return 1;5.2.2如如“活字印刷活字印刷”般的函数般的函数int IsRight(int magic,int gues
22、s)int flag;if(guess magic)printf(Wrong!Too big!n);flag=0;else flag=1;return flag;n【例例5.85.8】将例将例5.65.6猜数游戏实例中设计的如下猜数游戏实例中设计的如下3 3个子模块定义为个子模块定义为函数。函数。n(1 1)用户猜数,只猜一次)用户猜数,只猜一次n(2 2)用户猜数,直到猜对为止)用户猜数,直到猜对为止n(3 3)用户猜数,最多猜)用户猜数,最多猜1010次次5.2.3 函数调用和参数传递函数调用和参数传递5.2.3 函数调用和参数传递函数调用和参数传递5.2.3 函数调用和参数传递函数调用和
23、参数传递/函数功能:只猜一次函数功能:只猜一次void GuessOnce(int magic)int guess;/用户猜的数用户猜的数 printf(Guess a number:);scanf(%d,&guess);/读入用户猜的数读入用户猜的数 if(IsRight(magic,guess)printf(Right!n);printf(The magic number is%dn,magic);5.2.3 函数调用和参数传递函数调用和参数传递/函数功能:直到猜对为止函数功能:直到猜对为止void GuessUntilRight(int magic)int guess;/用户猜的数用户猜
24、的数 int counter=0;/记录用户猜数次数的计数器变量初始化为记录用户猜数次数的计数器变量初始化为0 do printf(Try%d:,counter+1);scanf(%d,&guess);/读入用户猜的数读入用户猜的数 counter+;/记录用户猜的次数记录用户猜的次数 while(!IsRight(magic,guess);/调用调用IsRight()进行猜数决策进行猜数决策 printf(The magic number is%dn,magic);printf(counter=%dn,counter);/输出用户猜数的次数输出用户猜数的次数5.2.3 函数调用和参数传递函数
25、调用和参数传递#define MAX_TIMES 10/函数功能:最多猜函数功能:最多猜10次次void GuessUpToTen(int magic)int guess;/用户猜的数用户猜的数 int counter=0;/用户猜的次数用户猜的次数 do printf(Try%d:,counter+1);scanf(%d,&guess);/读入用户猜的数读入用户猜的数 counter+;/记录用户猜的次数记录用户猜的次数 while(!IsRight(magic,guess)&counter=MIN_NUMBER&number=MAX_NUMBER)?1:0;5.2.4最佳编码原则最佳编码原
展开阅读全文