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

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

源码链接:https://download.csdn.net/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

使用Qt实现计算器功能相关推荐

  1. Qt计算器——功能完整的计算器

    一.功能介绍 参考windows 10系统自带的计算器,进一步完善实验1的计算器功能,基本要求(必须要具备的): 支持四种计算模式:标准型.科学型.程序员.日期计算模式 ; 支持货币与容量转换 ; 支 ...

  2. android实现计算器功能吗,利用Android实现一个简单的计算器功能

    利用Android实现一个简单的计算器功能 发布时间:2020-11-20 16:25:01 来源:亿速云 阅读:90 作者:Leah 今天就跟大家聊聊有关利用Android实现一个简单的计算器功能, ...

  3. python表达式计算器_Python正则表达式实现简易计算器功能示例

    本文实例讲述了Python正则表达式实现简易计算器功能.分享给大家供大家参考,具体如下: 需求:使用正则表达式完成一个简易计算器. 功能:能够计算简单的表达式. 如:1*2*((1+2)/(2+3)+ ...

  4. 使用jquery实现的计算器功能

    晚上做了一个jQuery的项目,使用jQuery实现了一个简单的计算器功能,可以实现连加,连减,混合计算,括号内优先计算,代码如下: css部分: 1 <style> 2 .main{ 3 ...

  5. python实现简单计算器功能键介绍_Python实现的简单计算器功能详解

    本文实例讲述了Python实现的简单计算器功能.分享给大家供大家参考,具体如下: 使用python编写一款简易的计算器 计算器效果图 首先搭建计算器的面板: 计算器面板结构 建造一个继承于wx.Fra ...

  6. java swing实现计算器_Java swing实现的计算器功能完整实例

    本文实例讲述了Java swing实现的计算器功能.分享给大家供大家参考,具体如下: package awtDemo; import java.awt.*; import java.awt.event ...

  7. Qt 2D绘图功能简单总结

    文章目录 Qt 2D绘图功能简单总结 Qt 2D绘图功能简单总结 Qt 的绘图功能非常强大,它可以绘制一切想要的图形,从最简单的一条直线到其他任何复杂的图形,还可以用来绘制文本和图片. Qt的绘图系统 ...

  8. 【Qt】简单Qt文本查找功能

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 程序设计 04. 执行结果 05. 附录 01. 概述 以前都用设计器设计界面,而这次我们用代码实现一个简单的查找对话框. ...

  9. python调用计算器卡死_Python+tkinter使用40行代码实现计算器功能

    本文实例为大家分享了40行Python代码实现计算器功能,供大家参考,具体内容如下 偶尔用脚本写点东西也是不错的. 效果图 代码 from tkinter import * reset=True de ...

最新文章

  1. 做为前端开发者,你应该要懂的 http协议
  2. OSGi介绍及OSGi的Bundle应用
  3. 不同服务器怎么响应ajax,如何从服务器获得响应而无需刷新和使用JQuery/AJAX?
  4. Today's my MDX...
  5. String.IsNullOrEmpty()方法以及C#中的示例
  6. Java面试之线程池详细
  7. html 格式化 vim,代码格式化插件
  8. 你都有哪些丢人的经历?
  9. 7大编程误区,你避开了吗?
  10. 如何在 Apple TV 上更快地打开您喜爱的应用?
  11. (13)数据结构-先序中序还原二叉树
  12. 国军标--Gjb软件需求规格说明书模板
  13. 特征点法光流法直接法
  14. 手机通讯录分组名称_个人通讯录如何批量导入/导出
  15. 申论(写作篇)之花木体申论写作法
  16. java开发MVC 前端
  17. 8. python str( )函数
  18. 非易失内存技术NVDIMM
  19. 华为鸿蒙系统推升级应用名称,华为哪些手机可以用鸿蒙系统?华为手机鸿蒙系统升级名单公布...
  20. 解决 `Failed to connect to github.com port 443: Connection refused`

热门文章

  1. 稠密集和疏朗集_稠密,可析点集,可析空间和疏朗集等概念的辨析
  2. SQL Server-------安全机制1
  3. 什么叫克隆人_什么叫克隆人?克隆技术有什么好处,快来涨姿
  4. 基于遗传算法(GA)进化的小游戏
  5. Android性能优化之网络优化
  6. 21世纪发展最快的数据科学的总结
  7. 将塑造未来世界的十大web3技术
  8. 协同办公系统运用的PHP框架,Thinkphp5 开发 OA 办公系统 - 项目管理
  9. 功能最全的浏览器是什么
  10. java treeview使用详解_Javafx Treeview项目操作事件