简单计算器
实验内容:
(1) 学习图形界面的设计,利用 MFC 应用程序(Java swing 或 QT 框架,或 C#)创
建基于对话框的应用程序,添加按钮、编辑框等控件;
(2) 能通过设计的按钮控件输入并实现简单算术运算,要求表达式在编辑框中显示,
能将运算结果,输出在编辑框内显示;并保存历史的表达式运算记录。
(3) 也能够实现混合运算的算术表达式求解,算术表达式中包括加、减、乘、除、
括号等运算符;并且能够识别括号,优先级正确。
实验目标:
1、能通过设计的按钮控件输入并实现简单算术运算,要求表达式在编辑框中显示,能将运算结 果,输出在编辑框内显示
2、能够实现混合运算的求解,算术表达式中包括加、减、乘、除、括号等运算符;并且能够识别括号,优先级正确。
3、能够保存历史的表达式运算记录以及三角函数的运算、对数运算、指数运算、进制转换等科学计数。
编程语言和开发环境
本次开发采用C++与QT结合的形式
实验原理
1.后缀表达式计算法
前缀表达式
即是所有运算符在操作数前面。
中缀表达式
中缀表达式就是常见的运算表达式
中缀表达式对人来说是最熟悉的,但是对应计算机来说,是比较难算的,因为要比较运算符的优先级,所以一般将中缀表达式转化为后缀表达式。
后缀表达式
运算符在操作数后面
中缀表达式转换为后缀表达式
从左向右依次读取算术表达式的元素X,分以下情况进行不同的处理:
(1)如果X是操作数,直接入队
(2)如果X是运算符,再分以下情况:
(a)如果栈为空,直接入栈。
(b)如果X==”(“,直接入栈。
(c)如果X==”)“,则将栈里的元素逐个出栈,并入队到后缀表达式队列中,直到第一个配对的”(”出栈。(注:“(”和“)”都不 入队)
(d)如果是其他操作符(+ - * /),则和栈顶元素进行比较优先级。 如果栈顶元素的优先级大于等于X,则出栈并把栈中弹出的元素入队,直到栈顶元素的优先级小于X或者栈为空。弹出完这些元素后,才将遇到的操作符压入到栈中。
(3)最后将栈中剩余的操作符全部入队。
后缀表达式的计算
首先准备一个栈Res_Stack.
1、从左开始向右遍历后缀表达式的元素。
2、如果取到的元素是操作数,直接入栈Res_Stack,如果是运算符,从栈中弹出2个数进行运算,然后把运算结果入栈
3、当遍历完后缀表达式时,计算结果就保存在栈里了。
流程图
参考资料
【CSDN】栈的三种表达式(前缀、中缀、后缀)(12条消息) 计算机软件技术实习项目一(一) 简易计算器项目准备_杰克·奈皮尔的博客-CSDN博客
开发心得:
此次简单计算机的开发是基于visual c++6.0的MFC实现。由于是第一次使用MFC,在熟练度上较为欠缺。在功能上目前仅实现简单的四则运算以及结果的显示,因为开发进度较慢,后续的多项式及符号优先级还未完全设置。当然,就目前开发而言,还是收获了许多,例如MFC的图形设计以及对一些控件的使用。