实现支持算数表达式计算机的实验准备

实验内容

1、 学习图形界面的设计,利用 MFC 应用程序(Java swing 或 QT 框架,或 C#)创建基于对话框的应用程序,添加按钮、编辑框等控件;
2、 能通过设计的按钮控件输入并实现简单算术运算,要求表达式在编辑框中显示,能将运算结果,输出在编辑框内显示;并保存历史的表达式运算记录。
3、也能够实现混合运算的算术表达式求解,算术表达式中包括加、减、乘、除、括号等运算符;并且能够识别括号,优先级正确。

项目目标
1、能通过设计的按钮控件输入并实现简单算术运算,要求表达式在编辑框中显示,能将运算结果,输出在编辑框内显示;
2、能够实现混合运算的求解,算术表达式中包括加、减、乘、除、括号等运算符;并且能够识别括号,优先级正确。
3、并保存历史的表达式运算记录。

技术准备:图形界面的开发;
难点:中缀表达式->后缀表达式,后缀表达式的计算。

编程语言以及开发环境的选择
由于对IntelliJ IDEA Community Edition 较为熟悉,所以开发环境选用IntelliJ IDEA Community Edition ,编程语言选用JAVA。

实现方法
1、中缀转后缀,后缀表达式求解
2、双栈算符优先级法
3、二叉树方法

这里我选择的是方法1。

实验思路
1、中缀表达式到后缀表达式的转换
理论准备
中缀表达式
中缀表达式是一个通用的算术或逻辑公式表示方法, 操作符是以中缀形式处于操作数的中间(例:3 + 4),中缀表达式是人们常用的算术表示方法。在中缀表达式中,运算符具有不同的优先级,并且还可以使用括号改变运算的次序,因此运算规律比较复杂,不适于计算机求解表达式。

后缀表达式
后缀表达式,即逆波兰式。
我们平时写的a+b是中缀表达式,写成后缀表达式就是:ab+
特点:
1)后缀表达式的操作数与中缀表达式的操作数先后次序相同,而运算符的先后次序不同;
2)后缀表达式中没有括号,而且运算符没有优先级;
3)后缀表达式计算过程严格按照从左到右的顺序进行。

算法思路
1、设置一个运算符栈,用来存放运算符。
2、定义一个字典,保存优先级。

priority = {"#": 0, "+": 1, "-": 1, "*": 2, "/": 2,  "(": 3}

3、从左向右扫描表达式:

若是操作数:直接输出到后缀表达式中。
若是运算符:
① 栈为空:直接入栈。
② 运算符为“)”:依次出栈,直到遇到“(”,“(”出栈并舍弃。
③ 优先级低于或等于栈顶运算符:在遇到“(”和比自己优先级小的运算符之前,将栈顶依次出栈,并输出到后缀表达式中,最后再将该运算符压入栈。
④ 优先级高于栈顶运算符:直接入栈。
4、表达式遍历结束,栈中剩余字符依次出栈,并输出到后缀表达式
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值