7-21 求前缀表达式的值 (25 分)
算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。前缀表达式指二元运算符位于两个运算数之前,例如2+3*(7-4)+8/4
的前缀表达式是:+ + 2 * 3 - 7 4 / 8 4
。请设计程序计算前缀表达式的结果值。
输入格式:
输入在一行内给出不超过30个字符的前缀表达式,只包含+
、-
、*
、/
以及运算数,不同对象(运算数、运算符号)之间以空格分隔。
输出格式:
输出前缀表达式的运算结果,保留小数点后1位,或错误信息ERROR
。
输入样例:
输出样例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| #include<stdio.h> #include<stdlib.h> #include<string.h> double exp();
int main() { printf("%.1f",exp()); return 0; }
double exp() { char a[10]; scanf("%s",a);
if( !a[1]) { switch( a[0]) { case '+' : return exp()+exp(); case '-' : return exp()-exp(); case '*' : return exp()*exp(); case '/' : { double fenzi = exp(); double fenmu = exp(); if(fenmu !=0) return fenzi/fenmu; else { printf("ERROR"); exit(0); } } default : return atof(a); } } else { if( a[0]=='-' || a[0]=='+') { char flag = a[0]; int i =0 ; while(a[i]) { a[i] = a[i+1]; i++; } if(flag=='-') return 0-atof(a); else return atof(a); } else return atof(a); } }
|