多项式运算e

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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<

}

相关文档
最新文档