多项式运算e
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
int s1[31];//数值栈
char s2[31];//算符栈
int t1,t2;
void calcu()//退栈作运算
{ int x1,x2,x;
char p;
p=s2[t2--];//从s2栈退栈算符送给p
x2=s1[t1--]; x1=s1[t1--];//从s1中退出两个运算数switch(p)//根据p对x1,x2作相应运算
{
case '+':x=x1+x2;break;
case '-':x=x1-x2;break;
case '*':x=x1*x2;break;
case '/':x=x1/x2;
}
s1[++t1]=x;//运算结果送入s1栈
}
void qz()//表达式求值
{
char c; int v;
t1=t2=0;
cin>>c;
while(c!='=')// 输入表达式各字符'='为结束符switch(c) //根据c作相应处理
{ case'+':case'-'://c为+ 或-
while(t2&&(s2[t2]!='('))
calcu(); //算符栈中有算符,退栈作运算
s2[++t2]=c; // c入栈
cin>>c; break;//继续输入
case'*':case'/'://c为* 或/
if(t2&&((s2[t2]=='*')||(s2[t2]=='/')))
calcu();//栈顶算符为*或/,退栈作运算
s2[++t2]=c;cin>>c;break;
case'('://c为(,直接入栈
s2[++t2]=c; cin>>c; break;
case')'://c为),
while(s2[t2]!='(') //栈顶算符为(,退栈作运算calcu(); t2--; cin>>c; break;
default://c为数字字符,将其转化为数值v
v=0;
do
{v=10*v+c-'0';cin>>c;}while((c>='0')&&(c<='9')); s1[++t1]=v;//数值v入数值栈s1
};
while(t2) calcu();//算符栈中有算符,退栈作运算cout< } main() { qz(); cout< }