0001 double calcu(Stack<double>& opnd, char optr) { 0002 if ('!' == optr) // 一元运算 0003 return (double) facI((int) opnd.pop()); 0004 double b = opnd.pop(), a = opnd.pop(); //二元运算 0005 switch (optr) { 0006 case '+' : return a + b; 0007 case '-' : return a - b; 0008 case '*' : return a * b; 0009 case '/' : if (0 == b) exit(-1); return a/b; //如此判浮点数为零并不可靠 0010 case '^' : return pow(a, b); 0011 default : exit(-1); 0012 } //switch 0013 } //calcu