制作简易计算器——计算机软件技术实习

学习日志 - 制作简易计算器

日期:2023年9月6日
今天我开始学习QT的相关操作,并尝试制作一个简易计算器。在这个过程中,我遇到了一些挑战,但也取得了一些进展和收获。

一、需求分析
  概括来说简单计算器所要实现的主要功能为计算用户输入的算数表达式。主要有如下几点需要实现:

能够实现混合运算的求解,能够正确识别并处理"+"、"-"、"*"、"/"、"("、")" 等运算符,比较判断它们的优先级,按照正确的顺序对操作数进行运算,得出正确的计算结果。
设计并制作一个友好的GUI图形用户界面,用户能通过图形界面对表达式进行输入、修改、求值等操作,并且界面上能够显示出表达式的计算结果。
保存历史表达式的计算结果,供用户查看。


二、基本概念
中缀表达式

定义 一般我们生活中常见的表达式都为中缀表达式,例如:3 + 4 * 2 (a + b * c), 它是一个通用的算术或逻辑公式表示方法, 主要特点为操作符以中缀的形式处于操作数的中间,是人们常用的算术表示方法。

优点 符合人们的普遍用法,被许多程序语言使用。

缺点 中缀表达式不容易被计算机解析,这是由于中缀与前缀或后缀记法不同,中缀记法中括号是必需的。计算过程中必须用括号将操作符和对应的操作数括起来,用于指示运算的次序。


后缀表达式(逆波兰表达式)

定义 运算符放在运算项后面的逻辑表达式,主要特点为操作符以后缀的形式处于操作数之后,例如:3 4 2 * + (a + b * c)。

优点 符合人们的普遍用法,被许多程序语言使用。

缺点 中缀表达式不容易被计算机解析,这是由于中缀与前缀或后缀记法不同,中缀记法中括号是必需的。计算过程中必须用括号将操作符和对应的操作数括起来,用于指示运算的次序。

三.  确立方法(双栈算符优先级法)

双栈算符优先级法为了实现表达式求值,需要设置两个栈:

一个是运算符栈op,用于寄存运算符;

另一个成为操作数栈Opnd,用于寄存运算数和运算结果。

运算符的优先级


求值的处理过程
1、当扫描到的是运算数,则将其压入栈OPND,
2、当扫描到的是运算符时:
如这个运算符比OP栈顶运算符的优先级高,则入栈;
如这个运算符比OP栈顶运算符优先级低,则从OPND栈中弹出两个运算符,从栈OP中弹出栈顶运算符进行运算,并将运算结果压入栈OPND。
3、继续处理当前字符,直到遇到结束符为止。

四.制作心得

   在开始编写代码之前,我先设计了计算器的界面布局。通过QT的可视化设计工具,我简单地拖拽和调整控件的位置和大小,布置出了一个经典的计算器界面,包括数字按钮、运算符按钮和一个显示屏。

  接下来,我编写了与界面交互的逻辑代码。通过信号与槽机制,我实现了按钮的点击事件响应。例如,当用户点击某个数字按钮时,程序会根据当前输入状态更新显示屏上的数字。当用户点击运算符按钮时,程序会根据当前输入状态进行相应计算。

  在实现计算逻辑时,我遇到了一些难题。例如,如何处理多个连续的运算符,如何实现运算符的优先级,以及如何处理小数点运算等。这些我还没完成,后面的日子里我会不断锻炼自己的能力。不过我发现,QT提供了丰富的调试工具和可视化辅助工具,这些工具帮助我快速定位并修复了一些问题。

  总的来说,今天的学习收获颇丰。通过自己努力实践制作简易计算器,我加深了对QT的理解和掌握,学会了如何使用QT开发GUI应用程序。同时,在解决问题和调试过程中,我也培养了自己的逻辑思维和问题解决能力。我相信这个经验对我今后的学习和开发工作都会有很大帮助。
 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值