7-2 求前缀表达式的值

7-2 求前缀表达式的值 (25 分)
算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。前缀表达式指二元运算符位于两个运算数之前,例如2+3*(7-4)+8/4的前缀表达式是:+ + 2 * 3 - 7 4 / 8 4。请设计程序计算前缀表达式的结果值。

输入格式:
输入在一行内给出不超过30个字符的前缀表达式,只包含+、-、*、/以及运算数,不同对象(运算数、运算符号)之间以空格分隔。

输出格式:
输出前缀表达式的运算结果,保留小数点后1位,或错误信息ERROR。

输入样例:

    • 2 * 3 - 7 4 / 8 4
      输出样例:
      13.0

注:题目测试点在这里插入图片描述
#include<bits/stdc++.h>
using namespace std;
double exp()
{
char s[30]; //存储第一个非空格字符
cin>>s;
if(!s[1]) //s[1]为空,只有一位
{
switch(s[0]){
case ‘+’:return exp()+exp();
case ‘-’:return exp()-exp();
case ‘*’:return exp()*exp();
case ‘/’:{
double m=exp(); //分子的值
double n=exp(); //分母的值
if(n!=0) return m/n; //分母不为0的情况下返回的值
else{
printf(“ERROR”); //代表分母为0,不符合要求
exit(0); //退出结束
}
}
default:return atof(s); //atof()函数将字符串转换为浮点型
}
}
else{
//只有一个符号和一个数字组成的字符串,不带有空格 例如:+0.25,-0.24等等
if(s[0]’-’||s[0]’+’)
{
char flag=s[0]; //记录第一个符号
int i=0;
while(s[i])
{
s[i]=s[i+1];
i++;
}
if(flag==’-’) return 0-atof(s); //负数的时候 -0.679
else return atof(s); //正数的时候 +0.234
}
else return atof(s); //只有一个数字的情况下直接返回其值
}
}
int main()
{
printf("%.1f",exp());
return 0;
}

猜你喜欢

转载自blog.csdn.net/weisiyu_liang/article/details/88218923