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

题目连接

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

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

运行结果:

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

posted @ 2017-05-31 21:19  Linese  阅读(419)  评论(0编辑  收藏  举报