c 源代码 (85)分析和总结.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
//9_9.h #include iostream #include cmath #include cstdlib #include cstring using namespace std; enum Boolean {False, True}; #include 9_8.h // 包含栈类模板定义文件 class Calculator //计算器类 { private: Stackint S; // 操作数栈 void Enter(int num); //将操作数num 压入栈 //连续将两个操作数弹出栈,放在opnd1 和opnd2 中Boolean GetTwoOperands(int opnd1, int opnd2); void Compute(char op); //执行由操作符op 指定的运算public: Calculator(void); //构造函数 void Run(void); //运行计算器程序void Clear(void); //清空操作数栈 }; void Calculator::Enter(int num) // 将操作数num 压入栈 { S.Push(num); } // 连续将两个操作数弹出栈,放在opnd1 和 opnd2 中 // 如果栈中没有两个操作数,则返回False 并输出相关信息 Boolean Calculator::GetTwoOperands(int opnd1, int opnd2) { if (S.StackEmpty()) // 检查栈是否空 { cerr Missing operand! endl; return False; } opnd1 = S.Pop(); // 将右操作数弹出栈 if (S.StackEmpty()) // 检查栈是否空 { cerr Missing operand! endl; return False; } opnd2 = S.Pop(); // 将左操作数弹出栈 return True; } void Calculator::Compute(char op) // 执行运算 { Boolean result; int operand1, operand2; result = GetTwoOperands(operand1, operand2); // 将两个操作数弹出栈 if (result == True) // 如果成功,执行运算并将运算结果压入栈 { switch(op) { case +: S.Push(operand2+operand1); break; case -: S.Push(operand2-operand1); break; case *: S.Push(operand2*operand1); break; case /: if (operand1 == 0) //检查除数是否为 0 { cerr Divide by 0! endl; S.ClearStack(); //除数为 0 时清空栈 } else S.Push(operand2/operand1); break; case ^: S.Push(pow(operand2,operand1)); break; } cout=S.Peek() ; //输出本次运算结果 } else S.ClearStack(); // 操作数不够,清空栈 } Calculator::Calculator(void) //构造函数 {} void Calculator::Run(void) // 读入并处理后缀表达式 { char c[20]; while(cin c, *c != q) // 读入表达式,遇q结束 switch(*c) { case c: S.ClearStack(); //遇c清空操作数栈break; case -: //遇-需判断是减号还是负号 if (strlen(c)1) //若字符串长度1,说明读到的是负数的负号Enter(atoi(c)); //将字符串转换为整数,压入栈 else Compute(*c); //若是减号则执行计算break; case +: // 遇到其它操作符时 case *: case /: case ^: Compute(*c); //执行计算break; default: // 若读入的是操作数,转换为整型后压入栈 Enter(atoi(c)); break; } } void Calculator::Clear(void) // 清空操作数栈 { S.ClearStack(); }

文档评论(0)

hao187 + 关注
官方认证
文档贡献者

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

认证主体武汉豪锦宏商务信息咨询服务有限公司
IP属地上海
统一社会信用代码/组织机构代码
91420100MA4F3KHG8Q

1亿VIP精品文档

相关文档