作业六 栈的使用和界面编程探索

github链接

栈在计算部分的使用

在最开始写四则运算器的时候,想的就是随机生成不同的部分,然后每一部分分别计算,最后算出结果,但是生成不同的类型也要判断所以实现的过程会相当麻烦要不断的判断,所以就在想有没有其他的思路。通过百度和对学长的请教,得到了利用栈来计算表达式的思路。但是对于栈有没有接触过,所以也就是照猫画虎写出了一个能实现功能的代码。后来通过学习,有对原代码进行改进,最后就得到了这个(详解见注释)

double CalculateResult(char express[])
{double a,b;             //两个操作数char opera;             //运算符char c;                 //字符变量char x;                 //x用来获取运算符栈栈顶的运算符stack<char> oper;stack<double> data; //运算符栈栈顶的运算符,操作数栈int j=0;int i=0;oper.push('=');         //先将定界符(=)推入操作符栈c = express[i++];double num=0;while(c!='=' || x!='=')         //循环处理表达式中的每个字符{if(IsOperator(c))   //若是运算符{num = 0;                //入栈之后清空某一个操作数的暂存值switch(Priority(x,c)){case -1:    //当前运算符c大于前一运算符x//cout << "o----" << c << endl;oper.push(c);       //当前运算符进栈c=express[i++];     //取表达式下一字符break;case 0:                 //括号(等号)配对oper.pop();     //运算符左半部分出栈(抛弃)c=express[i++];     //取表达式下一字符break;case 1:                     //当前运算符c小于等于前一运算符xopera = oper.top();     //出栈之前取得栈顶元素oper.pop();             //运算符出栈b = data.top();data.pop();a = data.top();data.pop();             //两个操作数出栈double t = calculate(a,opera,b);    //计算结果if(t!=(int)t)       //解决除0再乘零的情况 return 0.1;else data.push(t);       //将结算结果入栈break;}}else if(c>='0' && c<='9')   //若输入的是数字字符 入栈{num=c-'0';data.push(num);c=express[i++];}x = oper.top();     //获取运算符栈顶的元素}num = data.top();   StackClear(oper);StackClear(data);       //清空两个栈return  num;    //返回数字栈栈顶元素,即为计算结果
}

界面编程探索

刚开始看到这个要求也是蛮好奇的,开启了新世界的大门。我们之前写的程序在运行时出现的黑框DOS窗口是界面的一种。作为最基础的一种运行窗口,黑黑的界面不是很美观。后来通过对界面编程的研究之后,其实这就是通过编程设计出自己想要的操作界面。参考教程有一些,其中比较全面的请看

C++“窗口”程序设计启蒙

看了之后有了大致的概念之后,想着要是直接改四则运算器可能不太现实,那就先写一个最简单的两个数的运算吧……虽然只是照猫画虎,但是还是出现了一些问题。

我是用的是VS的MFC程序,按照步骤来应该没有什么问题,但是其中出现了不少问题,问了很多同学之后慢慢找到了解决方法,现在正在摸索,我会继续更新这次的关于界面编程的内容的。

posted on 2017-05-31 21:43 huabei_li 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/031602418matt/p/6926052.html

作业六 栈的使用和界面编程探索相关推荐

  1. 2017《面向对象程序设计》课程作业六

    Github链接 表达式用栈的实现 表达式的生成过程用流程图来展示 我们通过生成一个个a+b型的小表达式,来获得最终符合用户要求的表达式. 首先由用户决定(输入y/n): 表达式中出现数字的绝对值范围 ...

  2. UG编程,简单六步让你学会三坐标编程

    UG编程,简单六步让你学会三坐标编程 简 单 编 程 测 量 方 法 1.意图 :进步检测能力,以满足公司质量操控要求,保证零件的品质. 2.规模 :适用于批量性或作业量大的零件丈量. 3.支撑 :R ...

  3. python中的gui界面编程_python应用系列教程——python的GUI界面编程Tkinter全解

    全栈工程师开发手册 (作者:栾鹏) python的GUI界面编程,常用的几个python库包含如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包 ...

  4. 【转】linux图形界面编程基本知识

    原文:https://blogs.gnome.org/raywang/2007/10/11/linux%E5%9B%BE%E5%BD%A2%E7%95%8C%E9%9D%A2%E7%BC%96%E7% ...

  5. python应用系列教程——python的GUI界面编程Tkinter全解

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python的GUI界面编程,常用的几个python库包含如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 ...

  6. JAVA Swing 图形化界面编程

    JAVA Swing 图形化界面编程 目录 1.组件 1.1 基本组件 1.2. 组件边框 1.3. JToolBar 工具条 1.4 JColorChooser 颜色选择器 1.5 JFileCho ...

  7. Python界面编程第八课:Pyside2 (Qt For Python)打开关于窗口

    先上代码: from PySide2.QtWidgets import QApplication, QWidget, QMessageBox, QPushButton import sys from ...

  8. MFC界面编程基础(00):基本概念

    下一篇:MFC界面编程基础(01):Windows 编程模型 MFC:微软基础类库(英语:Microsoft Foundation Classes,简称MFC) 如果你是在windows平台上做GUI ...

  9. MATLAB GUI界面编程——一些细节问题

    写在前面的话: 本篇博文主要对自己在进行MATLAB GUI设计时遇到的一些细节问题进行总结,点击下面目录中的相关问题,可以直接跳转至相应位置.另外,需要声明的是,我所使用的MATLAB版本--MAT ...

  10. C语言控制台窗口图形界面编程

    一:设置句柄与窗口信息 在Windows操作系统下用C语言编写控制台的窗口界面首先要获取当前标准输入和标准输出设备的句柄.通过调用函数GetStdHandle可以获取当前标准输入以及输出设备的句柄.函 ...

最新文章

  1. 转:读AD里特殊的属性in C#
  2. python自动化测试报告_python自动化测试报告(excel篇)
  3. Innovation Factory Open Day
  4. python中的特殊成员
  5. 【JS】变量、作用域和内存问题
  6. 我想批量删除专题内最古老的100篇文章
  7. 推荐一个app,收纳杭州最全登山地图!附亲测过的亲子徒步路线推荐
  8. ntp版本导致时间同步不成功问题
  9. 【集合论】集合概念与关系 ( 集族 | 集族示例 | 多重集 )
  10. 为什么阿里巴巴的企业Logo是它?
  11. iphone各个系列手机最新的尺寸资料(更新到iphone6s)
  12. 学习第1天:认识Linux系统和红帽认证
  13. 工业智能网关BL110应用之59:如何实现智能楼宇控制BACnet 接入MQTT Client One云平台
  14. 数据挖掘期末-图注意力模型
  15. 证明实力的时候到了,国际黄金多头爆发大涨逾20美元
  16. 在职场,如何克服拖延症?
  17. HTML、CSS、JS实现轮播图效果:包含分页按钮及切换箭头
  18. 《网管员必读——网络组建》(第2版)试读样章下载
  19. c语言判断语句案例,c语言判断语句怎么写
  20. Python上下文管理器的魔力

热门文章

  1. Linux Rsync服务详解(二)——Rsync服务实战
  2. Linux SSHD服务安装与维护详解(一)——SSHD安装、启动与密钥认证实现
  3. Linux常用命令介绍(三)——基础操作命令
  4. AI智能人脸识别很难?30行Python代码完美打造
  5. 农业农村部:非洲猪瘟对猪肉市场价格影响有限
  6. 【树状数组】【P3608】平衡的照片
  7. Linux中断 - GIC代码分析
  8. CART算法原理及实现
  9. [知识库:python-tornado]异步调用中的上下文控制Tornado stack context
  10. C#中如何生成矢量图