• 作业六-界面初步探索与四则运算核心算法


    题目连接

    四则运算--利用栈实现的核心算法

    • 四则运算一开始我就是使用栈而实现算法(寒假期间参照网上的一些写法写的)
    • 因此在这次作业中对于代码没有做修改
    • github

    以下为使用栈的核心算法:

    double expresses::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小于等于前一运算符x
    				opera = 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;	//返回数字栈栈顶元素,即为计算结果
    }
    

    主要思想:

    (发现讲话讲不清楚--还是画图好了)

    (这应该是史上最丑的图了吧[捂脸])

    写一下步骤:

    1.运算符与数字先后入栈
    2.判断运算符为 + 入栈,数字(可以不入栈),与数字栈栈顶元素按运算符相加,得到答案后入栈。
    3.4.运算符判断是否与栈顶元素匹配,清栈。
    5.6.7.8. 运算符入栈与数字栈出栈与读入数字进行运算
    9.等号入栈判断结束,返回结果。

    界面编程的初步探索

    附上学习的网址

    通过网上初步的学习,对MFC有初步的了解了。
    在vs软件下,创建MFC

    选择对话框形式,然后点击完成

    添加编辑器和按钮,并且命名,给输入框添加变量,给按钮添加信息函数

    添加变量:

    按钮函数:

    void CcalDlg::OnBnClickedButton1()
    {
    	UpdateData(TRUE);
    	m_c= m_a + m_b;
    	UpdateData(FALSE);
    }
    
    
    
    void CcalDlg::OnBnClickedButton2()
    {
    	UpdateData(TRUE);
    	m_c1 = m_a1 - m_b1;
    	UpdateData(FALSE);
    
    }
    
    
    void CcalDlg::OnBnClickedButton3()
    {
    	UpdateData(TRUE);
    	m_c2 = m_a2 * m_b2;
    	UpdateData(FALSE);
    
    }
    
    
    void CcalDlg::OnBnClickedButton4()
    {
    	UpdateData(TRUE);
    	m_c3 = m_a3 / m_b3;
    	UpdateData(FALSE);
    }
    
    

    运行结果:

    (大概的初步了解就是这样子的吧,感觉做的很粗暴,很简单)

  • 相关阅读:
    SEO在网页制作中的应用
    日期控件选2016-01-01却变为2015-01-01问题
    IE8兼容placeholder的方案
    各种乱码,编码问题设置方法整理(UTF-8)
    JQuery简单实现图片轮播效果
    解决 jsp eclipse异常 【The import javax.servlet cannot be resolved】
    tomcat加载不了spring-webjar终极解决办法
    MyEclipse Web Project导入Eclipse Dynamic Web Project,无法部署到tomcat问 题
    2020-11-01助教一周总结(第九周)
    2020-10-25助教一周总结(第八周)
  • 原文地址:https://www.cnblogs.com/q1076452761/p/6925966.html
Copyright © 2020-2023  润新知