一、 实验任务(实验题目、目的)
搞个图形化的代括号的计算器

二、 任务分析

  1. 假设已经有了计算器,实现按下等号的计算算法
  2. 学习qt
  3. 设置各按钮槽函数
  4. 将算法缝合进qt内
  5. 设计实现负数、小数
  6. 优化代码计算步骤
  7. Debug
  8. 添加计算器图标ico
  9. 准备发csdn和GitHub

三、 实验设计(实验环境、算法、步骤、核心代码等)
环境:QT5 使用QT CREATOR编程(内置帮助快速查询,很方便)
核心代码如下(等号按钮)

//等号 核心代码 从input框中取出待运算的字符串 运算后输出至output,此处input为待运算的中缀表达式
void MainWindow::on_pushButton_Op_equal_clicked()
{QString input = ui->textEdit_Input->toPlainText();QStack <QChar> op;QStack <QString> postTemp;
//    QString p;int numIdxStart=-1;//中缀转为后缀表达式计算for (int i = 0; i < input.length(); ++i) {//数字开始  记录下标if(priority(input[i])==1&&numIdxStart==-1){numIdxStart=i;}else if(priority(input[i])==1){//数字}else {//此处input[i]为运算符//目前为止的是数字 push入后缀栈 此if防止连续运算符出现导致的bugif(numIdxStart!=-1){QString n = input.mid(numIdxStart,i-numIdxStart);postTemp.push(n);}numIdxStart = -1;if(op.isEmpty()){op.push(input[i]);}else if(priority(input[i])==1){op.push(input[i]);}else if(input[i]=='('){op.push(input[i]);}else if(priority(input[i])>=priority(op.top())){op.push(input[i]);}else if(input[i]==')'){//遇到右括号则弹栈中运算符直到遇到左括号while(op.top()!='(')postTemp.push(op.pop());op.pop();}else if(priority(input[i])<priority(op.top())){//若当前运算符优先级小于栈中 则弹 直到运算符高于等于栈中元素//并将当前运算符push入栈while(!op.isEmpty()&&priority(input[i])<=priority(op.top()))postTemp.push(op.pop());op.push(input[i]);}else{printLog("else");}}} //end for//将最后的数字push入栈if(numIdxStart!=-1)postTemp.push(input.mid(numIdxStart));//将op栈里残存的运算符push入栈while(!op.isEmpty()){postTemp.push(op.pop());}QVector<QString> post;while(!postTemp.isEmpty()){//        p = postTemp.top() + p;post.append(postTemp.pop());}
//    //post为后缀表达式vector(反向) 不是字符串是因为有多位数的运算 字符串仍需分析数字的位数
//    //post不带括号 每个元素为一个操作符(数字或运算符)
//    printLog("p:"+p);QStack <double> ans;for (int i = post.length()-1; i >= 0; --i) {printLog("for:"+QString::number(i)+" post[i]:"+post[i],1000);if(isDigits(post[i])){ans.push(post[i].toDouble());continue;}double a = ans.pop();double b = ans.pop();double c=66666;if(post[i]=='+'){c = b + a;}else if(post[i]=='-'){c = b - a;}else if(post[i]=='*'){c = b * a;}else if(post[i]=='/'){c = b / a;}else {printLog("shit");}ans.push(c);}
//    printLog("sleep",100000);
//将结果输出到output文本框ui->textEdit_Output->setText(QString::number(ans.pop()));

四、 实验结果


左边为我的计算器,右边是win10自带的计算器

完整的代码和项目文件在我github里 可以star下载下来,用qt5打开可以直接跑
https://github.com/gongfpp

【程序】[Qt\C++] 图形化计算器——用QT5实现带括号优先级的GUI编程计算器相关推荐

  1. java soot_soot的java程序控制流分析及图形化输出-计算机系统应用.pdf

    soot的java程序控制流分析及图形化输出-计算机系统应用 计 算 机 系 统 应 用 2009 年 第 10 期 ① Soot 的Java 程序控制流分析及图形化输出 Java Program C ...

  2. python 可视化编程不友好_为什么大多数程序员不看好图形化编程?

    图形化更优还是语言更优,个人认为本质上只取决于一个操作中概念分支(信息密度)的多少. 信息密度低信息量少不代表低端,即使简单的分支也可以组成复杂的逻辑和排列,它可以复杂在逻辑和组合而不是分支与信息的绝 ...

  3. 零代码入门GitHub,图形化交互让你轻松存代码 | 附Git GUI推荐

    鱼羊 发自 凹非寺  量子位 报道 | 公众号 QbitAI 传说,程序员遇到火灾时有三个注意事项: 真的不能直接跑路吗? Git是目前世界上最流行的分布式版本控制系统,用上了它,就不必再面对这样的惨 ...

  4. java gui编程 计算器_Matlab-GUI编程:简单计算器的实现

    前言:任何编程语言到了GUI这一块都逃不了要模仿做一个计算器来证明已经入门了.上个学期学java的时候GUI着实不好整,一个计算器硬是没整出来.这学期接触了matlab,虽然他号称是面向对象的编程语言 ...

  5. java计算器程序代码,图形化界面

    实现了加减乘除,平方立方开根号以及小数点运算,代码如下: package test1;import java.awt.*;import java.awt.event.WindowAdapter; im ...

  6. java反编译微信小程序_教你如何一键反编译获取任何微信小程序源代码(图形化界面,傻瓜式操作)...

    一键获取微信小程序源代码 1 Tips:2 一键获取微信小程序源码, 使用了C#加nodejs制作 直接解压在D盘根目录下后就可以使用 将小程序文件放到 wxapkg目录下 3 这个目录下有一些dem ...

  7. 基于linux的qt五子棋小游戏下载,课内资源 - 基于Qt的图形化界面网络在线对战五子棋游戏...

    一 需求分析 本软件是一款跨平台的网络实时五子棋对战软件,实现建立主机和连接主机.实时对战.判断输赢和危险提示等功能.支持Windows . Linux和OSX平台. 程序主要功能如下: 建立服务器 ...

  8. c 语言计算器带括号优先级,C++结合QT实现带有优先级的计算器功能

    代码 MyCalculator.h #pragma once #include #include #include #include "ui_MyCalculator.h" cla ...

  9. python 图形化开发用什么模块_用python进行GUI开发的选择/python的GUI模块(图形界面开发库)...

    Python最大的特点就在于她的快速开发功能.作为一种胶水型语言,python几乎可以渗透在我们编程过程中的各个领域.这里我简单介绍一下用python进行gui开发的一些选择. 1.Tkinter T ...

最新文章

  1. mysql的学习总结
  2. OK,让我们开始吧!
  3. linux内核实验平台搭建,搭建自己的Linux实验系统(一)
  4. 武汉国家光电实验室计算机考研,2018年华中科技大学武汉国家光电实验室408计算机学科专业基础综合之计算机操作系统考研基础五套测试题...
  5. TensorBoard使用
  6. Web前端知识体系精简
  7. linux 几个文件夹作用,linux下每一个文件夹的作用.docx
  8. 猪场管理网站php,某养猪场网站整站 v1.1
  9. oracle中获取列的值,oracle - Oracle-SQL从具有特定列和值的所有表中获取数据 - SO中文参考 - www.soinside.com...
  10. Spark:windows下配置spark开发环境
  11. 计算机上缺少vsix安装程序,VSIX安装程序在Visual Studio 2017年(15.3)
  12. 这个世界上人真的分三六九等,你信吗?
  13. win10计算机怎么拨号上网,Win10怎么设置自动连接宽带_Win10怎么设置自动拨号连接上网-192路由网...
  14. win764位loadrunner安装问题:提示:少了Microsoft Visual c++2005 sp1运行时组件,安装时会提示命令行选项语法错误,键入“命令/?”可获取帮肋信息,无法正常安装;
  15. 产品调研,如何避免「浮于表面」?
  16. Linux网卡丢包分类整理(1)——网卡篇
  17. 机器人控制系统的主要功能和特点
  18. Learning a Discriminative Feature Network for Semantic Segmentation
  19. 文献综述-家装风格自动分类技术综述
  20. 如何下载 MySQL安装包

热门文章

  1. ChatGPT技术报告
  2. 基础篇:ios开发概述
  3. 为什么结婚戒指要带在无名指上?
  4. Oracle变量定义的三种方式(define,variable,declare)学习笔记
  5. JAVA大学实用教程(第四版)课后习题一、二章答案及解析(自整理)
  6. C语言0x6c等于多少,6个变态的C语言Hello World程序——更好的理解C
  7. 红旗桌面版本最新运用举措和成绩解答100例-6
  8. 红旗桌面版本最新行使流动和结果解答100例-6
  9. 【mcuclub】PM2.5粉尘浓度检测模块GP2Y10
  10. 【1404】我家的门牌号