您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:146 来源:vckbase.com

本文章共3017字,分2页,当前第2页,快速翻页:
 

主程序,这里完成了计算,以及对表达式检验的全部过程:


void CB05031126Dlg::OnCalculate() 

{

	// TODO: Add your control notification handler code here

	UpdateData(TRUE);

	m_expression.TrimLeft();

	m_expression.TrimRight();

	m_expression=trimblank(m_expression);

	CStack s;

	int i=0;

	int j,k;

	int ntemp;//临时操作数

	int ntemp1;//临时操作数

	int ntemp2;//临时操作数

	int result;//运算结果

	//int opNum=getop(m_expression);

	if(check(m_expression)==1)//检验非法字符

	{

		while((i<m_expression.GetLength())&&(s.getflag()!=0))

		{

			if((m_expression[i]=='' '')||

				(m_expression[i]==''-'')||

				(m_expression[i]==''*'')||

				(m_expression[i]==''/''))

			{

				if(m_expression[i]=='' '')//完成加法运算

				{

					ntemp1=s.Top();

					s.Pop();

					ntemp2=s.Top();

					s.Pop();

					ntemp=ntemp1 ntemp2;

					s.Push(ntemp);

				}

				

				if(m_expression[i]==''-'')//完成减法运算

				{

					ntemp1=s.Top();

					s.Pop();

					ntemp2=s.Top();	

					s.Pop();

					ntemp=ntemp2-ntemp1;

					s.Push(ntemp);

				}

				

				if(m_expression[i]==''*'')//完成乘法运算

				{

					ntemp1=s.Top();

					s.Pop();

					ntemp2=s.Top();

					s.Pop();

					ntemp=ntemp1*ntemp2;

					s.Push(ntemp);

				}

				

				if(m_expression[i]==''/'')//完成除法运算

				{

					ntemp1=s.Top();	

					s.Pop();

					ntemp2=s.Top();

					s.Pop();

					if(ntemp1!=0)

					{

						ntemp=ntemp2/ntemp1;

						s.Push(ntemp);

					}

					else

					{

						s.setflag(0);

					}

				}

				

				k=k 2;

			}

			else

			{

				ntemp=m_expression[i]-48;

				k=i 1;

				while((k<m_expression.GetLength())&&

							(m_expression[k]!='' '')&&

							(m_expression[k]!='' '')&&

							(m_expression[k]!=''-'')&&

							(m_expression[k]!=''*'')&&

							(m_expression[k]!=''/''))

				{

					k  ;

				}

				for(j=i 1;j<k;j  )

					//讲表达式中的数字字符转换为整型

					ntemp=ntemp*10 (m_expression[j]-''0'');

				s.Push(ntemp);

			}

			

			i=k 1;

		}

		

		if((s.getflag()!=0)&&(s.getcount()-getop(m_expression)==1)&&(s.getsum()==1))

		{

			result=s.Top();

			m_result.Format("%d",result);

			UpdateData(FALSE);

		}

		else

		{

			MessageBox("表达式错误!请重新输入!");

		}

	}

	else

	{

		MessageBox("表达式错误!请重新输入!");

	}

}

逆风者

附言

本程序为南京邮电大学软件工程专业程序设计实验,我在做的时候附加实现了对表达式的校验,理论上应该可以检测出任何错误的表达式。
 

本文章更多内容<<上一页 - 1 - 2
相关文章

浅谈PDFlib中文输出(四)PDFlib 接收的几种
事件编程(二)
用鼠标手势动作来发送命令
在VC中使用 Flash 美化你的程序
更改屏幕显示数据的作弊程序
通过串口收发短消息(上)
C 程序的外部变量与函数
如何用代码动态添加控件
一个关于#include的问题
使用免费界面换肤软件 USkin
用ATL开发复合控件
关于 IDispatch 接口的 LPDispatch 属性的实
获得 Win32 窗口句柄的更好的方法
从 ADO 迁移到 ADO.NET(一)
利用VC++开发ASP图像处理组件(二)
可设置单元格颜色的ClistCtrl类
IP Messenger 详细分析
C :使用 Visual C 2005 的现代语言特色
毫秒定时器
类似于FlashGet的悬浮框的制作

相关评论


本文章所属分类:首页 VC++

  热门关键字: