使用Qt实现计算器功能
之前培训要求我们使用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实现计算器功能相关推荐
- Qt计算器——功能完整的计算器
一.功能介绍 参考windows 10系统自带的计算器,进一步完善实验1的计算器功能,基本要求(必须要具备的): 支持四种计算模式:标准型.科学型.程序员.日期计算模式 ; 支持货币与容量转换 ; 支 ...
- android实现计算器功能吗,利用Android实现一个简单的计算器功能
利用Android实现一个简单的计算器功能 发布时间:2020-11-20 16:25:01 来源:亿速云 阅读:90 作者:Leah 今天就跟大家聊聊有关利用Android实现一个简单的计算器功能, ...
- python表达式计算器_Python正则表达式实现简易计算器功能示例
本文实例讲述了Python正则表达式实现简易计算器功能.分享给大家供大家参考,具体如下: 需求:使用正则表达式完成一个简易计算器. 功能:能够计算简单的表达式. 如:1*2*((1+2)/(2+3)+ ...
- 使用jquery实现的计算器功能
晚上做了一个jQuery的项目,使用jQuery实现了一个简单的计算器功能,可以实现连加,连减,混合计算,括号内优先计算,代码如下: css部分: 1 <style> 2 .main{ 3 ...
- python实现简单计算器功能键介绍_Python实现的简单计算器功能详解
本文实例讲述了Python实现的简单计算器功能.分享给大家供大家参考,具体如下: 使用python编写一款简易的计算器 计算器效果图 首先搭建计算器的面板: 计算器面板结构 建造一个继承于wx.Fra ...
- java swing实现计算器_Java swing实现的计算器功能完整实例
本文实例讲述了Java swing实现的计算器功能.分享给大家供大家参考,具体如下: package awtDemo; import java.awt.*; import java.awt.event ...
- Qt 2D绘图功能简单总结
文章目录 Qt 2D绘图功能简单总结 Qt 2D绘图功能简单总结 Qt 的绘图功能非常强大,它可以绘制一切想要的图形,从最简单的一条直线到其他任何复杂的图形,还可以用来绘制文本和图片. Qt的绘图系统 ...
- 【Qt】简单Qt文本查找功能
00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 程序设计 04. 执行结果 05. 附录 01. 概述 以前都用设计器设计界面,而这次我们用代码实现一个简单的查找对话框. ...
- python调用计算器卡死_Python+tkinter使用40行代码实现计算器功能
本文实例为大家分享了40行Python代码实现计算器功能,供大家参考,具体内容如下 偶尔用脚本写点东西也是不错的. 效果图 代码 from tkinter import * reset=True de ...
最新文章
- 做为前端开发者,你应该要懂的 http协议
- OSGi介绍及OSGi的Bundle应用
- 不同服务器怎么响应ajax,如何从服务器获得响应而无需刷新和使用JQuery/AJAX?
- Today's my MDX...
- String.IsNullOrEmpty()方法以及C#中的示例
- Java面试之线程池详细
- html 格式化 vim,代码格式化插件
- 你都有哪些丢人的经历?
- 7大编程误区,你避开了吗?
- 如何在 Apple TV 上更快地打开您喜爱的应用?
- (13)数据结构-先序中序还原二叉树
- 国军标--Gjb软件需求规格说明书模板
- 特征点法光流法直接法
- 手机通讯录分组名称_个人通讯录如何批量导入/导出
- 申论(写作篇)之花木体申论写作法
- java开发MVC 前端
- 8. python str( )函数
- 非易失内存技术NVDIMM
- 华为鸿蒙系统推升级应用名称,华为哪些手机可以用鸿蒙系统?华为手机鸿蒙系统升级名单公布...
- 解决 `Failed to connect to github.com port 443: Connection refused`