- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
表达式计算
1、问题描述与分析
算数表达式一般都写成中缀形式,即运算符总是出现在两个操作数之间(单目运算符除外),称为中缀表达式。编译系统对中缀表达式的处理方法是先把它转换为后缀表达式。在后缀表达式中,运算符位于两个操作数的后面,并且没有括号,其运算符次序就是其执行计算的次序。后缀表达式计算过程的规则非常简单:从左到右依次扫描,当读到运算符时,就对该运算符前面的两个操作数执行相应的运算,直至得到表达式的结果。
本程序主要模拟编译系统计算中缀表达式的过程,先将中缀表达式转换成相应的后缀表达式,再根据后缀表达式计算出表达式的值。这个问题的解决主要是栈的一个应用。
因为本程序仅是模拟,没有判断输入的中缀表达式是否合法,容错性不强,另外也仅能对一位数的中缀表达式进行转换和计算,功能上还有许多局限性,本程序处理的中缀表达式中仅允许出现六种运算符,且都是双目运算符。
2、数据结构设计和基本算法设计方法的选择
2.1 中缀表达式转换成后缀表达式
为完成中缀表达式转换成相应的后缀表达式,设计了infix2postfix类。为了方便用户使用,它只有4个接口函数,包括两个构造函数,一个设置中缀表达式的函数setInfixExp和一个返回后缀表达式的函数postfixExp。所有表达式均采用string来存储,运算符用堆栈来临时存储,并用map的数据结构来定义优先级。下面给出了infix2posfix类的声明和部分定义。
class infix2postfix
{
public:
infix2postfix(){};
infix2postfix(const string infixExp):infix(infixExp){};
void setInfixExp(const string infixExp){infix=infixExp;};
string postfixExp();
private:
string infix; //用于转换的中缀表达式
string postfix; //后缀表达式
stackstring stk;//用于存储运算符的堆栈
mapstring,int oper_prio;//用于存储运算符的优先级
void set_priority();
//设置运算符(+,-,*,/,%,^)的优先级
};
中缀表达式转换成后缀表达式功能的实现是栈的一个典型应用,主要应用栈的“后进先出”的特性及预先设计好的运算符优先级。在转换过程中设置了下运算符栈。本程序的栈直接使用了C++标准模板库STL提供的stack容器。
2.2 根据后缀表达式计算出表达式的值
设计了postfixEval类来实现后缀表达的计算,它只有3个接口函数以方便用户调用。这3个公有函数分别为默认的构造函数、设置后缀表达式的函数setPostfixExp,计算后缀表达式的函数evaluate。下面给出了postfixEval类的声明和部分定义。
/*postfixEval类的声明*/
class postfixEval
{
public:
postfixEval(){};
//设置后缀表达式
void setPostfixExp(const string postfixExp){postfix=postfixExp;};
//计算后缀表达式并返回其值
int evaluate();
private:
string postfix;//待求值的后缀表达式
stackintstk;
void getOperands(intleft,intright);//从堆栈中取得左右操作数
int compute(int left,int right,char op) const;
bool isOperator(char ch) const;//判断是否为运算符
};
后缀表达式的计算也是栈的典型应用,在计算过程中需要设置一个操作数栈。
3、软件结构设计
由于本程序主要是实现模拟表达式的计算,因此主要有两个功能模块:中缀表达式转换成后缀表达式和根据后缀表达式计算出表达式的值。
4、算法设计与实现
4.1 中缀表达式转换成后缀表达式的算法设计
中缀表达式转换成后缀表达式的步骤为:
1)设置一个运算符栈,初始时效地栈顶运算符置为#。
2)按顺序扫描中缀表达式,当输入为操作数时就将其输出到后缀表达式中。
3)当输入为运算符时,则比较输入运算符和栈顶运算符的优先级。若输入运算符的优先级高于栈顶运算符的优先级,则将输入运算符入栈;否则,栈顶运算符的优先级高于或等于输入运算符的优先级,弹出栈顶运
您可能关注的文档
- 《贵州情教程》二版平时册.doc
- 最短路径算法物流配送中心选址模型.doc
- 软件测试工程师管理系统详细设计.(00003).doc
- 社会资本视角高新技术企业核心竞争力形成机理研究.doc
- 《数据结构》本科课程教学时学大纲.doc
- 银行考试模拟题(00002).docx
- 线切割操作与常见问题文档.doc
- 创建“分钟大课堂”回归体育育人本质垣曲中学张燕利论文.doc
- Aeruour中学英语学习策略研究.doc
- 需求响应微电网优化运行研究(..).doc
- 人教版四年级上册数学期末测试卷带答案(名师推荐).docx
- 2024广播影视职业技能鉴定经典例题含完整答案详解(各地真题).docx
- 2024教育硕士高频难、易错点题含完整答案详解(全优).docx
- 2024教育硕士综合提升测试卷(原创题)附答案详解.docx
- 2024广播影视职业技能鉴定真题(真题汇编)附答案详解.docx
- 2024民航职业技能鉴定通关题库含完整答案详解(全优).docx
- 2024教育硕士高频难、易错点题及答案详解【全国通用】.docx
- 2024教育硕士模拟试题附答案详解【培优A卷】.docx
- 人教版四年级上册数学期末测试卷含答案【培优a卷】.docx
- 2024民航职业技能鉴定题库含答案详解(预热题).docx
最近下载
- 牛津自然拼读oxfordphonicsLevel2Unit4Lesson2课件.pptx VIP
- 《梅花易数》预测实战方法.pdf VIP
- 医院地震应急演练脚本.docx VIP
- EPLAN笔记-EPLAN笔记-EPLAN笔记-EPLAN笔记.pdf VIP
- 污水处理厂应急预案.doc VIP
- 防火封堵工程施工与验收记录表(附件8)模板.pdf VIP
- 公路工程高程横坡计算程序(2011表格版).xls VIP
- BS EN 1822-1-2019 高效空气过滤器(EPA,HEPA和ULPA).第1部分:分类性能试验标记.pdf VIP
- 皇极经世预言未来的原理.pdf VIP
- 牛津自然拼读课件OPW PPT L2 U4 Lesson1.pptx VIP
文档评论(0)