输入一个算术表达式(以“=”结束),求其值。要求表达式以“=”结束,操作数为多位实数,对错误表达式要进行检测。
1.设置两个栈:optr算符栈和opnd操作数栈。初始置opnd为空栈;起始符“=”为optr的栈底元素;
2.自左向右扫描表达式中的每个字符c:
1)若c为操作数,则进opnd栈;
2)若c为算符,则让optr栈的栈顶元素与c比较优先级:
a.若栈顶算符优先级低于刚读入的运算符c,则让刚读入的运算符c进optr栈。
b.若栈顶算符优先级高于刚读入的运算符c,则将栈顶算符退栈,送入;同时将操作数栈opnd退栈两次,得到两个操作数b、a,对a、b进行ab运算后,将运算结果作为中间结果推入opnd栈。
c.若栈顶运算符的优先级与刚读入的运算符c相同,说明左右括号相遇,只需将栈顶运算符(左括号)退栈即可。
3.直到扫描到c为定界符,即optr栈的栈顶元素和当前读入的字符均为“=”,则整个表达式求值完毕。