答案:Float expr( )//从键盘输入逆波兰表达式,以‘$’表示输入结束,本算法求逆波兰式表达式的值。{float OPND30]; // OPND是操作数栈。Init(OPND); //两栈初始化。Float num=0.0; //数字初始化。Cin>>x;//x是字符型变量。While(x!=’$’) {switch {case‘0’<=x<=’9’:While((x>=’0’&&x<=’9’)||x==’.’) //拼数If(x!=’.’) //处理整数{num=num*10+(ord(x)-ord(‘0’)); cin>>x;}Else //处理小数部分。{scale=10.0; cin>>x;While(x>=’0’&&x<=’9’){num=num+(ord(x)-ord(‘0’)/scale;Scale=scale*10; cin>>x; }}//elsePush(OPND,num); num=0.0;//数压入栈,下个数初始化 case x=‘ ’:break; //遇空格,继续读下一个字符。 case x=‘+’:push(OPND,pop(OPND)+pop(OPND));break; case x=‘-’:x1=pop(OPND);x2=pop(OPND);push(OPND,x2-x1);break; case x=‘*’:push(OPND,pop(OPND)*pop(OPND));break; case x=‘/’:x1=pop(OPND);x2=pop(OPND);push(OPND,x2/x1);break; default: //其它符号不作处理。 }//结束switch cin>>x;//读入表达式中下一个字符。 }//结束while(x!=‘$’)Cout<<“后缀表达式的值为”<<pop(OPND);}//算法结束。算法讨论]假设输入的后缀表达式是正确的,未作错误检查。算法中拼数部分是核心。若遇到大于等于‘0’且小于等于‘9’的字符,认为是数。这种字符的序号减去字符‘0’的序号得出数。对于整数,每读入一个数字字符,前面得到的部分数要乘上10再加新读入的数得到新的部分数。当读到小数点,认为数的整数部分已完,要接着处理小数部分。小数部分的数要除以10(或10的幂数)变成十分位,百分位,千分位数等等,与前面部分数相加。在拼数过程中,若遇非数字字符,表示数已拼完,将数压入栈中,并且将变量num恢复为0,准备下一个数。这时对新读入的字符进入‘+’、‘-’、‘*’、‘/’及空格的判断,因此在结束处理数字字符的case后,不能加入break语句。