200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 使用Qt实现计算器功能

使用Qt实现计算器功能

时间:2020-03-09 23:33:48

相关推荐

使用Qt实现计算器功能

之前培训要求我们使用Qt实现计算器的功能,我利用单链表实现了计算器的功能,下面将源码分享给大家。

我们先将其实现方法以及基本功能给大家列出

源码链接:/download/Groot_Lee/11991924或者公众号"爱玩嵌入式"内回复qita0001获取

一、实现方法

因为我是利用链表来实现的功能,所以我接下来要使用链表的知识来讲解这一部分。但是本教程不再介绍链表的基本知识。

1、将每个数据存入链表

这部分很简单,就是我每次键入的值在遇到运算符号之前(+、-、*、/、()),都会存入我的一个全局变量中,当遇到运算符时,创建两个链表的内存,将我之前键入的数字以及运算符分别存入两个内存之中。当等号出现时,开始读链表中内容,这就涉及到减减乘除的运算以及其优先级的判别。

2、加减乘除以及括号的运算以及优先级的判别

关于优先级。我们首先检测优先级别高的运算符,在这个例子中,我们就是首先检测有没有括号,有括号首先对括号内的内容进行运算,没有括号继续往下走,检测乘和除,有则运算,没有继续往下走计算加和减。

关于运算符的运算。

(1)我们来介绍加减乘除的运算,由于加减乘除的原理是一样的,所以我们选择一样介绍就好了。

图中就是我键入的2+3的内容,当我输入等号之后,程序找到了+号这个节点,他的上一个节点和下一个节点必然是我们需要运算的数字,所以我们找+号的上一个节点和下一个节点也就是2和3。因为我们判断到是加号,所以调用“加”这个函数,将3和2加起来,得到的新值为5

将5赋值给2所在的节点位置,注意此时3和加的节点是没有变的。那么接下来我们的操作就是将+和3删除掉,并将5所在的节点的下一个地址指向3的下一个地址,我们这个例子中只有两位数的运算,所以下一个地址应当是指向等号所在的节点。

此时程序判断到等号的下一个节点是NULL,所以本次的运算结束,输出到屏幕上为5。

(2)接下来介绍括号内是怎样运算的。括号内优先级别判断方法跟括号外是一样的,所以不再介绍了。

此图中就是一个带括号的计算式子3*(5+3)。我们检测到有括号,所以首先运算括号中的内容。我们首先检测到的是右括号,此时我们把右括号设置为一种我们自己定义的头节点,然后检测左括号,检测到左括号把左括号设置成为我们认为的尾节点。然后进行我们自己定义的括号头节点到尾节点的循环。当我们找到加号之后,他的上一个和下一个节点必然是我们所要运算的数据,我们将运算好的5+3=8替换掉5所在节点的内容。

此时运算式子就变成了这样,然后我们将8所在的节点下一个地址指向右括号,将+和3内存删除。

此时式子很简化,变成了这样。接下来将左右括号去掉,此时的操作应当是,将*号的下一个地址指向8所在的地址,8所在节点的下一个地址指向右括号的下一个地址,将左右括号所在的节点删除。

式子就简化成了这个样子,此时的运算和上面的3+5所进行的是一样的操作,就不再赘述。

二、基本功能以及注意事项

功能

1、加减乘除

2、小括号运算,并且小括号优先级最高

3、一键清零

4、小数点运算

快捷键

1、0-9和小数点分别对应键盘上0-9和小数点

2、回删 : backspace

3、清零 : delete

4、左右括号对应键盘上左右括号

5、等于 : 数字键盘enter

6、加减乘除对应数字键盘加减乘除

规则

1、不允许嵌套小括号,只允许一层,但允许有多个

例如 : 1+(2*(3+2))不允许;1+3*(2+3)+4*(2+2)允许。

2、乘法必须加括号,不允许省略

3、首先输入符号则在首端补0

4、如果以符号结尾则默认符号与等于之间为0

错误提示

1、符号书写错误1 : 连续出现两个或者以上运算符

2、括号错误1 : 左右括号总数是奇数

2、括号错误2 : 左右括号写反

3、括号错误3 : 连续出现两个左括号

4、括号错误4 : 出现类似n(x+x)

5、括号错误5 : 出现类似(x+x)n

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。