zoukankan      html  css  js  c++  java
  • 课程作业六

    课程作业六

    题目描述

    • 本次作业要求将四则运算的核心部分采取栈的知识进行解决。即表达式生成的合法性检验、表达式结果计算。
    • 学习C++界面编程,可以学QT、MFC或者VS,选择其一即可,用博客记录学习到的知识以及心得体会。

    作业要求

    • 本次作业要求实现核心算法,请将表达式生成的代码及相关的检验、计算表达式结果的代码贴在博客中,并对代码进行必要的解释。
    • 发表一篇博客,博客内容为:提供本次作业的github链接,本次程序运行的截图,对界面编程的探索。

    对于前几点要求,我在设计计算器的时候就用栈进行了实现。下面是我的思路和代码链接。

    • 出题的思路

    先由最基本的两个数运算开始,设定两个string变量number1,number2来存储随机数,一个string变量operator来存储随机运算符。由随机生成函数随机生成两个数字和一个随机运算符,比如生成了“a”,“b”和“+”。那么就组合成了“a+b”,在进行随机判断是否添加括号。如果判断为true那么算式就变成了“(a+b)”。把这个新生成的算式赋值给number1.在如此循环,用number1和新的number2,operator结合。获得新的算式之后赋值给number1。如此下去将最后的number1+‘=’,就得到了随机题目。

    • 计算的思路

    用3个变量,分别记录操作数1,操作数2和运算符。一个循环从左向右读取字符。当读到第一个操作符时,意味着操作数1已经读取完毕,记录下读到的这个操作符,设置往后读的是操作数2的内容。当读到第二个操作符时,意味着操作数2已经读取完毕,这时满足了之前运算符的计算条件:已经有了操作数1,运算符,操作符2。进行计算,并且把计算的结果赋予操作数1变量。从此后,操作数1变量就永远只是存放计算结果了,只有操作数2是从表达式中读取的,不断循环反复,最终计算出表达式的值。

    • 先定义运算符比较优先级:
    • 加减比较时,左边的运算符优先级高。
    •   乘除比较时,左边的运算符优先级高。
    •   乘除优先级高于加减。
    •   “(“左括号的优先级高于乘除,是最高优先级的运算符。
    •   “)”右括号的优先级低于加减,是最低优先级的运算符。
    •   “(”和“)”优先级相等。相等的含义是,括号被消除。

    代码实现

    程序实现截图

    C++界面编程

    因为QT没有发布QTforVS2017,所以我选择了MFC界面编程,

    博客学习链接

    看了博客教学之后对四则运算器添加一个能看得过去的界面。

    贴上代码

    void CMFCApplication1Dlg::OnBnClickedButton1()
    {
    	srand(time(0));
    	UpdateData();
    	for (int i = 0; i < 50; i++)
    	{
    		pr[i] = '';
    	}
    	msuanshi = " ";
    	creatmachine cr;
    	problem = cr.generateExpression();
    	for (int i = 0; i < problem.length(); i++)
    	{
    		pr[i] = problem[i];
    	}
    	msuanshi += pr;
    	UpdateData(FALSE);
    }
    
    void CMFCApplication1Dlg::OnBnClickedButton2()
    {
    	UpdateData();
    	calculator cr;
    	mresult = cr.calculateResult(problem);
    	if (manswer == mresult)
    	{
    		cright++;
    	}
    	else
    	{
    		cwrong++;
    	}
    	UpdateData(FALSE);
    }
    

    遇到的问题

    • 创建MFC项目的时候找不到MFC选项。

    原因是VS2017没有安装与MFC相关的组件。

    • 创建mfc应用程序的时候,出现 “无法找到资源编译器dll,请确保路径正确”。

    解决方法

    • 最最最最最需要注意的就是要在你的头文件中加上
    #include“stdafx.h”
    

    而且必须要加在第一个!!!否则会报错。

    本次作业心得

    • 通过两张程序实现图的对比,就可以看出来,有了界面的程序,更加直观和方便使用(终于能写出一个能给别人用的程序了)虽然学习了很久,但是能写出这个四则运算器还是很开心。
    • 同时也要感谢周政演同学的帮助!在学习终于到问题,一点点的解决,不懂的和同学一起讨论,享受解决问题的快乐。
    • 虽然对MFC编程只是粗浅的了解,但是在今后的博客作业中,我会对界面进行美化。
    • 在对按钮函数进行编程时,发现没有主函数的存在。每个按钮都是一个独立的函数,通过互相的联系输出算式并显示结果,也体现了面向对象的思想。
  • 相关阅读:
    Maven
    Dubbo系列之 (一)SPI扩展
    AQS之Condition
    Dubbo系列之 (七)网络层那些事(2)
    Dubbo系列之 (七)网络层那些事(1)
    Dubbo系列之 (六)服务订阅(3)
    Dubbo系列之 (五)服务订阅(2)
    Dubbo系列之 (四)服务订阅(1)
    Dubbo系列之 (三)Registry注册中心-注册(2)
    Dubbo系列之 (二)Registry注册中心-注册(1)
  • 原文地址:https://www.cnblogs.com/031602523liu/p/6923687.html
Copyright © 2011-2022 走看看