一、求前缀表达式的值
1.实验目的
熟练掌握递归方法和表达式求解方法。
2.实验内容
算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。前缀表达式指二元运算符位于两个运算数之前,例如2 + 3 * (7 - 4) + 8 / 4的前缀表达式是: + + 2 * 3 – 7 4 / 8 4。请设计程序计算前缀表达式的结果值。
3.实验要求
(1)输入说明:输入在一行内给出不超过30个字符的前缀表达式,只包含+、-、*、/ 以及运算数,不同对象(运算数、运算符号)之间以空格分隔。
(2)输出说明:输岀前缀表达式的运算结果(精确到小数点后1位), 或输出错误信息”ERROR”。
(3)测试用例:
4.实验分析
前缀表达式的基本形式是:“运算符号(空格)子前缀表达式(空格)子前缀表达式”,其中“子前缀表达式”可能是一个包含运算符号的前缀表达式,也可能只是一个单纯的运算数。例如:前缀表达式“+ + 2 * 3 – 7 4 / 8 4”就是由运算符号“+”和子前缀表达式“ + 2 * 3 – 7 4"以及子前缀表达式“/ 8 4”组成。“/ 8 4”也是由运算符号“/”和子前缀表达式“8”和“4"组成。由此,可以看到前缀表达式形式上的递归关系,利用递归关系设计相应的递归求解的大致思路如下。
①用GetOp()从输入序列中获得当前对象obj。
②如果obj为运算数,递归结束,返回obj。
③如果obj为运算符号op,则连续两次递归调用分别获得两个子前缀表达式结果a和b;对a和b应用op进行运算,返回运算结果。