实验1:支持算术表达式求解的计算器

本文介绍了一个使用QT开发的计算器软件,能处理合法的算术表达式,支持混合运算,包括加、减、乘、除、括号。计算器能显示运算过程、保存和查看历史记录,采用中缀转后缀算法进行计算。文章详细讨论了项目设计、关键算法和程序流程,强调了中缀到后缀转换和后缀表达式求解在实现中的重要性。
摘要由CSDN通过智能技术生成

1、 项目概述

1.1 项目目标和主要内容

  1. 实现一个计算器软件。
  2. 能通过设计的按钮控件输入并实现算术表达式,表达式在文本框中显示,运算结果输出显示;保存和浏览历史运算记录;
  3. 能够检验算术表达式的合法性;
  4. 能够实现混合运算的求解,算术表达式中包括加、减、乘、除、括号等运算符;
  5. 要求交互界面友好,程序健壮。
    简述本项目实现的主要内容和目标,使用的开发平台,采用的主要工具。
    1.2 项目的主要功能
  6. 检验算术表达式的合法性;
  7. 能够实现混合运算的求解,算术表达式中包括加、减、乘、除、括号等运算符;
  8. 运算结果输出显示;
  9. 保存和浏览历史运算记录。

2、 项目设计
2.1 项目总体框架
设计思想:
使用QT进行图形化开发设计。UI中的控件和具体的槽函数或 Lamda表达式进行绑定。在本项目中与用户交互的按钮控件主要分为三类, 一类是触发后在可编辑文本框的末尾 添加一个字符,例如数字和操作符; 一类是触发后在可编辑文本框的末尾减少一个字符,例如Backspace键; 一类是触发后清除可编辑文本框,例如Clear键。

系统框架图:
在这里插入图片描述

层次逻辑图:
在这里插入图片描述
2.2 系统详细设计
【1】 模块划分图及描述
逻辑设计部分主要又包括两个部分:一是保证输入正确的表达式。二是计算正确的表达式。
(1)保证输入正确的表达式。这里既包括输入数字和运算符,也包括正确输入他们的关系。
其中,前者,主要是利用按钮的信号和槽,即按下一个数字,将会触发一个槽,在这个槽中输入这个数字。具体的,在本程序中为了程序的简洁化,中间又加了一个公共的信号,这样按下任意一个数字都会触发同样的信号SendNum(int num)。这个信号有一个参数,就是对应的数字值。同理,符号也是一样。
(2)、计算正确输入的表达式:本程序采用的过程是先把中序表达式转化为后续表达式,然后利用后续表达式进行计算。其中的原理网上很多,在此就不赘述了。
在这里插入图片描述

【2】 类关系图及描述
在这里插入图片描述

QCalculatorUI Class里面封装了GUI图形界面设计,QCalculatorDec Class里面封装了运算函数,将中缀表达式转换为后缀表达式,分3个函数具体来实现。
【3】 程序流程图及描述
在这里插入图片描述

【4】 存储结构、内存分配
后缀表达式求解,需要用到一个结果栈Res_Stack :用于存放计算的中间过程的值和最终结果。 上述内容也可以按照函数或模块划分分别设计。
2.3 关键算法分析
算法 1:QQueue Split(const QString& exp);
【1】 算法功能
分离前缀。
【2】 算法基本思想
通过遍历字符串,每扫描到数字,就把它放到队列里面。
【3】 算法空间、时间复杂度分析
时间复杂度O(n),空间复杂度O(n)。

QQueue<QString> QCalculatorDec::Split(const QString& exp)          //分离前缀
{
   
    QQueue<QString> ret;
    QString num="";

    for(int i=0;i<exp.length();i++)
    {
   
        if( (exp[i]=='.') || ( (exp[i]>='0') && (exp[i]<='9') ))    //判断小数点和数字
        {
   
            num += exp[i];
        }
        else if(exp[i]== '(' || exp[i]==
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值