网站大量收购独家精品文档,联系QQ:2885784924

简单计算器要点讲解.ppt

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
简单计算器 王飞雄 题目: 设计一个简单的计算器类(类型),要求: (1) 从键盘读入算式。 (2) 可以进行加、减、乘、除运算。 (3) 运算要有优先级。 (4) 用户可以按任何的运算符出现顺序进行输入。 (5) 不限定用户输入的计算式的长度。 (6) 有排错功能,当用户输入错误的算式时提示用户。 例如,如果用户输入:3 + 4 * 5 – 7,计算结果应为16。 程序功能: 输入一个算术式,程序会帮你算出结果,程序还能识别输入的错误算式,如输入 1+2*3-4/2 则结果输出 1+2*3-4/2=5 1、程序支持整型的四则运算 2、支持四则运算优先级 3、具有对错误算式输入(如连续输入两个运算符,输 入字母等)的排错功能 4、不支持浮点数的输入 5、不支持第一个数是负数的算式 6、不支持大小括号优先级 问题的分析 1、算式的输入 2、算式的具体运算 算式的输入功能分析 运算符与数字是混合输入的,要想办法分清它们并读取数据。 算式是混合连续输入的,简单的使用 Int k;cink; 是不能达到想要的效果的 如果是这样将无法混合输入。所以采用 取每个字符的方法,选择用cin流的get()函数。 读取输入的每一个字符,然后用程序控制整理得到我们想要的数据,也就是从输入的一个字符串中读出每个数据和4个运算符。 算式的计算功能分析 识别四个运算符+ - * / 考虑优化级运算 数据结构的选择 采用顺序表,两个数组,一个存放运算的数据,另一个存放运算符。 不断地从两个数组中读出数据与运算符进行分析计算 类的设计 class counter(基类)把算式的结果计算封装到一个类中,这个类只负责计算算式的结果,比如对象是 2+3*4, 通过调用成员函数可算出结果,但成员数据并不是表示成一个字符串的,它有特定的数据结构,下面会说到。 class moreCount:public counter(派生类) moreCount类继承了counter,moreCount类多了接收输入算式的功能,也就是在输入流的字符串中读取出4个运算符和运算需要的数据,读完数据就可以用基类的成员函数进行算式运算。 问题流程图 为什么把counter作为基类 Counter是负责计算结果的,把它作为基类是为以后有更高级功能的继承,比如说括号优先级。moreCount派生了Counter就增加了另一个功能,从流字符串中读出算式。如果这些工作都在一个类里面完成也可以,但那样做就会失去良好的扩展性。 类的声明(基类) const int biggest=100; //算式的最大长度 class counter { public: counter(int k){n=k;}; void set(int k,double *a,char *ch); //为 num、opera 两数组赋值 void compute(); //计算结果 void s(double d,char c); //辅助计算 void show(); //输出算式 double get_result(){return result;} private: double *num; //数据数组(算式中的数据) char *opera; //运算符数组(算式中的运算符) int n; //数组容量 double result; //整个运算结果 }; 类的声明(派生类) class moreCount:public counter { public: moreCount(int i):counter(i),allNum(i){} void init(); //初始化 void input(); //接收正确的算术式输入 int lastReckon(); //调用基类 set,compute 两个函数完成计算 void comfor(); //整体调用 private: double a[biggest]; //算式中的数据 char b[biggest]; //算式中的运算符 int allNum; //数据个数 bool SUC; //输入是否成功 }; Counter基类的两个成员数据 程序运行机构流程图 主函数 Int main() { while(true) { cout \n输入一个算术式:; moreCount mycount(0); for(); //comfor() 是一个类里一个作整体控制的接口 } return 0; } 基类中主要的函数 //计算算式结果(重要函数) void counter::compute() { double thissum=num

文档评论(0)

高考学子 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档