计算机软件实习之计算器的实现

基于MFC的简单计算器的实现

对于实验项目的实现,采用MFC做计算器的图形界面,然后将求解表达式的方法封装成类,放到MFC中进行调用最终呈现出最后的效果展示。

求解算数表达式解题思路

对于算数表达式的求解,最快也是最准确的求解方式就是借助计算器。当然我们也很容易联想到,计算机的内部是怎么实现的,使用了什么数据结构,采用了什么比较新颖的算法。这些问题都是很容易联想到的。接下来我们就对拿到一个算数表达式该怎么解决进行分析。
1.首先,判断该算数表达式是不是合法的。比如出现运算符是连续出现的、表达式是以小数点开头、小数点和运算符一起相继出现等等这些都是不合法的。
2. 其次,对于求解表达式采用什么数据结构,很容易能想得到的就是借助于堆栈队列进行,也可以借助于二叉树进行
3. 还有就是如何处理运算符优先级的问题
4. 最后就是是否存在数据类型的转换,如整型转换为string或者double类型等等。

求值表达式代码的实现

1.表达式合法性的判断

  • 思路
    为了将在编写程序的过程中更加的简洁迅速,故将字符型单词符号转换成int型数据,其对应的转化关系如下表所示。
    单词符号 对应数字
    + 1
    2
    * 3
    / 4
    数字 5
    6
    ) 7

    我们用这样的表示方式进行转换,故此我们需要新的数据结构即的方式vector>此结构类似于int,只不过这个数据类型里面包含两个数据,即string和int两种数据类型。用这种数据类型将单词符号依次转换为对应的数字序号,存储到其中。在依次转换的过程中来判断表达式是否是合法的。参考博客.

  • 代码

运行结果展示:

计算机软件实习之计算器的实现

2.表达存储过程及计算过程

  • 思路
    对于合法表达式,我们采用将中缀表达式转换成后缀表达式,此过程接触堆栈和队列进行,然后将后缀表达式通过堆栈进行求值。
  • 实现代码
    1)中缀转后缀
#include #include #include using namespace std;// 获取运算符的优先级int is_prior(char c){	switch (c)	{	case '+':	case '-':		return 1;	case '*':	case '/':		return 2;	default:		return 0;	}}// 判断是否是运算符bool is_Operator(char c){	switch (c)	{	case '+':	case '-':	case '*':	case '/':		return true;	default:		return false来源:梦年
                                                        

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年11月9日
下一篇 2020年11月9日

相关推荐