c++程序设计课程介绍-第9章 模块化开发课件

上传人:aa****6 文档编号:54721788 上传时间:2018-09-18 格式:PPT 页数:55 大小:99.50KB
返回 下载 相关 举报
c++程序设计课程介绍-第9章 模块化开发课件_第1页
第1页 / 共55页
c++程序设计课程介绍-第9章 模块化开发课件_第2页
第2页 / 共55页
c++程序设计课程介绍-第9章 模块化开发课件_第3页
第3页 / 共55页
c++程序设计课程介绍-第9章 模块化开发课件_第4页
第4页 / 共55页
c++程序设计课程介绍-第9章 模块化开发课件_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《c++程序设计课程介绍-第9章 模块化开发课件》由会员分享,可在线阅读,更多相关《c++程序设计课程介绍-第9章 模块化开发课件(55页珍藏版)》请在金锄头文库上搜索。

1、第9章 模块化开发,自顶向下的分解 模块划分 库的设计与实现 库的应用,猜硬币的游戏,功能: 提供游戏指南; 计算机随机产生正反面,让用户猜,报告对错结果。 重复此过程,直到用户不想玩了为止。,顶层分解,程序要做两件事:显示程序指南;模拟玩游戏的过程。,main( ) 显示游戏介绍;玩游戏; ,主程序的两个步骤是相互独立的两个,没有什么联系,因此可设计成两个函数: void prn_instruction() void play(),int main() prn_instruction();play();return 0; ,prn_instruction的实现,prn_instruction

2、函数的实现非常简单,只要一系列的输出语句把程序指南显示一下就可以了,void prn_instruction() cout “这是一个猜硬币正反面的游戏.n“;cout “我会扔一个硬币,你来猜.n“;cout flag;,get_call_from_user的实现,该函数接收用户输入的一个整型数。如果输入的数不是0或1,则重新输入,否则返回输入的值,int get_call_from_user() int guess; / 0 = head, 1 = taildo cout guess; while (guess !=0 ,这是一个猜硬币正反面的游戏. 我会扔一个硬币,你来猜. 如果猜对了,

3、你赢,否则我赢。输入你的选择(0表示正面,1表示反面):1 我赢了 继续玩吗(Y或y)?y 输入你的选择(0表示正面,1表示反面):6 输入你的选择(0表示正面,1表示反面):1 你赢了 继续玩吗(Y或y)?n Press any key to continue,运行实例,第9章 模块化开发,自顶向下的分解 模块划分 库的设计与实现 库的应用,模块划分,当程序变得更长的时候,要在一个单独的源文件中处理如此众多的函数会变得困难 把程序再分成几个小的源文件。每个源文件都包含一组相关的函数。一个源文件被称为一个模块。 模块划分标准:块内联系尽可能大,块间联系尽可能小,石头、剪刀、布游戏,游戏规则 布

4、覆盖石头 石头砸坏剪刀 剪刀剪碎布 游戏的过程为:游戏者选择出石头、剪子或布,计算机也随机选择一个,输出结果,继续游戏,直到游戏者选择结束为止。在此过程中,游戏者也可以阅读游戏指南或看看当前战况。,第一层的分解,While (用户输入 != quit)switch(用户的选择) case paper, rock, scissor: 机器选择;评判结果;报告结果;case game: 显示目前的战况;case help: 显示帮助信息;default: 报告错误; 显示战况;,函数抽取,获取用户输入selection_by_player 获取机器输入selection_by_machine 评判

5、结果compare 报告结果并记录结果信息report 显示目前战况prn_game_status 显示帮助信息prn_help六个函数,枚举类型的定义,为了提高程序的可读性,我们定义两个枚举类型 :enum p_r_s paper, rock, scissor, game, help, quit ;enum outcome win, lose, tie, error ;,模块划分,分成四个模块: 主模块: main函数 获取选择的模块: selection_by_player和 selection_by_machine 比较模块: compare 输出模块: report、prn_game_

6、status和prn_help函数,Select模块的设计,selection_by_player从键盘接收用户的输入并返回此输入值。因此,原型为p_r_s selection_by_player(); selection_by_machine函数由机器产生一个石头、剪子、布的值,并返回。因此,原型为p_r_s selection_by_machine();,Compare模块的设计,compare函数比较用户输入的值和机器产生的值,确定输赢。 它要有两个参数,都是p_r_s类型的,它也应该有一个返回值,就是判断的结果 。 原型为:outcome compare(p_r_s, p_r_s);,

7、print模块的设计,prn_help显示一个用户输入的指南,告诉用户如何输入他的选择。因此,它没有参数也没有返回值。 Report函数报告输赢结果,并记录输赢的次数。因此它必须有四个参数:输赢结果、输的次数、赢的次数和平局的次数,但没有返回值。 prn_game_status函数报告至今为止的战况,因此需要三个参数:输的次数、赢的次数和平的次数,但没有返回值。,print模块的进一步考虑,输的次数、赢的次数和平局的次数在Report和prn_game_status两个函数中都出现。 Report函数修改这些变量的值,prn_game_status函数显示这些变量的值。 这三个函数的原型和用户

8、期望的原型不一致,用户不希望原型中有参数。 输的次数、赢的次数和平局的次数和其他模块的函数无任何关系,因此可作为该模块的内部状态。 内部状态可以作为该模块的全局变量 这样report和prn_game_status函数中都不需要这三个参数了。,头文件的设计,为方便起见,我们把所有的符号常量定义、类型定义和函数原型声明写在一个头文件中,让每个模块都include这个头文件。 那么,每个模块就不必要再写那些函数的原型声明了 但这样做又会引起另一个问题,当把这些模块连接起来时,编译器会发现这些类型定义、符号常量和函数原型的声明在程序中反复出现多次, 解决方法:需要用到一个新的编译预处理命令: #if

9、ndef 标识符 #endif,头文件的格式,#ifndef _name_h #define _name_h头文件真正需要写的内容 #endif,石头、剪子、布游戏的头文件,/ 文件:p_r_s.h / 本文件定义了两个枚举类型,声明了本程序包括的所有函数原型#ifndef P_R_S #define P_R_S#include #include #include using namespace std;enum p_r_s paper, rock, scissor, game, help, quit ;enum outcome win, lose, tie, error ;outcome c

10、ompare(p_r_s player_choice, p_r_s machine_choice);void prn_final_status();void prn_game_status();void prn_help();void report(outcome result);p_r_s selection_by_machine();p_r_s selection_by_player(); #endif,主模块的实现,/文件:main.cpp / 石头、剪子、布游戏的主模块#include “p_r_s.h“int main(void) outcome result;p_r_s playe

11、r_choice, machine_choice;/ seed the random number generator srand(time(NULL);,while(player_choice = selection_by_player() != quit)switch(player_choice) case paper: case rock: case scissor:machine_choice = selection_by_machine();result = compare(player_choice, machine_choice);report(result); break;ca

12、se game: prn_game_status(); break;case help: prn_help(); break;default:cout “ PROGRAMMER ERROR!nn“; exit(1);prn_game_status(); return 0; ,select模块的实现,/文件:select.cpp /包括机器选择selection_by_machine和 /玩家选择selection_by_player函数的实现#include “p_r_s.h“p_r_s selection_by_machine( ) int select = (rand( ) * 3 / (

13、RAND_MAX + 1); cout “ I am “;switch(select)case 0: cout “paper. “; break;case 1: cout “rock. “; break;case 2: cout c;switch(c) case p: player_choice = paper; cout “you are paper. “; break;case r: player_choice = rock; cout “you are rock. “; break;case s: player_choice = scissor; cout “you are scisso

14、r. “;break;case g: player_choice = game; break;case q: player_choice = quit; break;default : player_choice = help; break;return player_choice; ,Compare模块的实现,/文件:compare.cpp /包括compare函数的实现#include “p_r_s.h“outcome compare(p_r_s player_choice, p_r_s machine_choice) outcome result;if (player_choice =

15、machine_choice) return tie;switch(player_choice) case paper: result = (machine_choice = rock) ? win : lose; break; case rock: result = (machine_choice = scissor) ? win : lose; break;case scissor: result = (machine_choice = paper) ? win : lose; break;default: cout “ PROGRAMMER ERROR:Unexpected choice!nn“;exit(1); return result; ,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号