⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calculator.cpp

📁 利用堆栈实现算数表达式求值(运算过程为个位数)
💻 CPP
字号:
#include"stack.h"
char Precede(char t1,char t2) 
{ /* 根据教科书表3.1,判断两符号的优先关系 */
	char f;
	switch(t2)
	{
		case '+':
		case '-':if(t1=='('||t1=='#')
					 f='<';
				 else
					 f='>';
			break;
		case '*':
		case '/':if(t1=='+'||t1=='-'||t1=='('||t1=='#')
					 f='<';
				 else
					 f='>';
		case '(':if(t1==')'){
					 cout<<"输入代数式错误,请重新输入!";
					 return 
				 }
			f='<';
		case ')':if(t1==')')
					 f='=';
				 else
					 f='>';
		case '#':if(t1=='#')
					 f='=';
				 else
					 f='>';
     //......补充完整
	}
	return f;
}
int In(char c) 
{ /* 判断c是否为运算符 */
	switch(c)
	{
	case '+':
	case '-':
	case '*':
	case '/':
	case '(':
	case ')':
	case '#':return 1;
	}
	return 0;
}
char Operate(char a,char theta,char b) //进行运算的函数
{
	char c;
	a=a-48;
	b=b-48;
	switch(theta)
	{
	case '+':c=a+b+48;break;
	case '-':c=a-b+48;break;
	case '*':c=a*b+48;break;
	case '/':c=a/b+48;break;
	//......补充完整
	}
	return c;
 }
 char EvaluateExpression() 
{ /* 算术表达式求值的算符优先算法。设OPTR和OPND分别为运算符栈和运算数栈 */
	 //......补充完整
	InitStack(OPTR);Push(OPTR,'#');
	InitStack(OPND);c=getchar();
	while(c!='#'||GetTop(OPTR)!='ch'){
    if(!In(c,OP){ Push(OPND,c); c=getchar();} //非运算符,则进栈
	else
		switch(Precede(GetTop(OPTR,c){
		case  '>':  //栈顶元素优先权低
			Push(OPTR,c);	c=getchar();	break;
		case  '=': //脱括号
			Pop(OPTR,x);	c=getchar();	break;
		case  '<': //退栈,并将运算结果入栈
			Pop(OPTR,theta); 
			Pop(OPND,b);	Pop(OPND,a);
			Push(OPND,Operate(a,theta,b));	break;
       }//switch
  }//while
  return GetTop(OPND);
}//EvaluateExpression
 void main() 
{
	cout<<"请输入算术表达式,并以#结束,中间计算过程要是个位数."<<endl;
	char n;
	n=EvaluateExpression();
	cout<<n<<endl;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -