📄 calculator.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 + -