前言:题干描述有问题

题干明明是前缀表达式呀,前缀表达式就是波兰表达式,怎么能叫逆波兰表达式呢?所以题目描述有问题!

逆波兰表达式,也叫后缀表达式 :

举例:a+b  ——> a b +。

波兰表达式,也叫前缀表达式:

举例:a+b——> + a b 。


学到的知识点:

  1. cin和scanf("%s")都忽略空白符。遇到空白符就终止。
  2. 一个字符串处理函数:atof(),是C++语言标准库中的一个字符串处理函数,功能是把字符串转换成浮点数。所使用的头文件为<stdlib.h>。
  3. 前缀表达式求值方法(见下)

求值方法(来自百度百科)

对前缀表达式求值,要从右至左扫描表达式,首先从右边第一个字符开始判断,若当前字符是数字则一直到数字串的末尾再记录下来,若为运算符,则将右边离得最近的两个“数字串”作相应运算,然后以此作为一个新的“数字串”并记录下来;扫描到表达式最左端时扫描结束,最后运算的值即为表达式的值。

例如:对前缀表达式“- 1 + 2 3”求值,扫描到3时,记录下这个数字串,扫描到2时,记录下这个数字串,当扫描到+时,将+右移做相邻两数字串的运算符,记为2+3,结果为5,记录下5这个新数字串,然后继续向左扫描,扫描到1时,记录下这个数字串,扫描到-时,将-右移做相邻两数字串的运算符,记为1-5,结果为-4,此时关于这个表达式的全部运算已完成,故表达式的值为-4。

代码:

一:

#include<cstdio>
#include<iostream>
#include<cstdlib>
double Calculation() //读入一个波兰表达式,并计算其值 (注意是读入并计算)
{char a[10];//注意这个字符数组用于存放读入的表达式,表达式可能是一串数字,暂时把它作为字符串存放,当输入为运算符时,只会占用第一个字符。scanf("%s",a);switch (a[0]){case '+':return Calculation()+Calculation();case '-':return Calculation()-Calculation();case '*':return Calculation()*Calculation();case '/':return Calculation()/Calculation();default:return atof(a);//atof(),是C++语言标准库中的一个字符串处理函数,功能是把字符串转换成浮点数,//所使用的头文件为<stdlib.h>。该函数名是 “ascii to floating point numbers” 的缩写。语法格式为:double atof(const char *nptr)。}
}int main()
{double ans;ans =Calculation();printf("%f\n",ans);return 0;
}

二:

#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
char a[55];
double calculate()
{scanf("%s",a);if(a[0]=='+')return calculate()+calculate();else if(a[0]=='-')return calculate()-calculate();else if(a[0]=='*')return calculate()*calculate();else if(a[0]=='/')return calculate()/calculate();elsereturn atof(a);
}
int main()
{printf("%f\n",calculate());return 0;
}

1198:逆波兰表达式(递归,前缀表达式,波兰表达式)相关推荐

  1. 中缀表达式转换为前缀及后缀表达式并求值【摘】

    它们都是对表达式的记法,因此也被称为前缀记法.中缀记法和后缀记法.它们之间的区别在于运算符相对与操作数的位置不同:前缀表达式的运算符位于与其相关的操作数之前:中缀和后缀同理. 举例: (3 + 4) ...

  2. 表达式树前缀中缀后缀表达式

    表达式树( expression tree ), 表达式树的树叶是操作数( operand ),比如常数或变量,而其他的节点为操作符( operator )如: 由于这里所有的操作都是二元的,因此这棵 ...

  3. 中缀表达式转换为前缀或后缀表达式的手工做法

    以 a/b + ( c*d - e*f) / g 为例: 步骤1:按照运算符的优先级对所有的运算单元加括号. ((a/b) + (( (c*d) - (e*f)) / g)) 步骤2:转换为前缀或后缀 ...

  4. 算术表达式的前缀式、中缀式、后缀式相互转换

    中缀表达式(中缀记法) 中缀表达式是一种通用的算术或逻辑公式表示方法,操作符以中缀形式处于操作数的中间.中缀表达式是人们常用的算术表示方法. 虽然人的大脑很容易理解与分析中缀表达式,但对计算机来说中缀 ...

  5. 前缀、中缀和后缀表达式详解,中缀表达式到后缀表达式的转换规则,以及后缀表达式的计算规则,附计算代码

    1. 中缀.前缀和后缀表达式 1.1 中缀表达式 首先,中缀表达式的这个"缀"指运算符在两个操作数的位置.中缀表达式其实就是我们常用的算术表达式,比如 2 + 9 - (32 * ...

  6. 数据结构:前缀,中缀,后缀表达式(逆波兰表达式)

    前缀表达式(波兰表达式) 前缀表达式的运算符位于操作数之前. 比如 (1+2)*3-4  对应的前缀表达式就是: - * + 1 2 3 4 前缀表达式的计算机求值 从右至左扫描表达式,遇到数字时,就 ...

  7. 使用栈解决的一类经典问题:表达式转换及求值;中缀表达式;前缀表达式,后缀表达式,中缀转前缀;中缀转后缀;后缀表达式求值;波兰式,逆波兰式

    文章目录 背景知识 表达式转换问题(考研经典) 一:手工转换 (1)中缀转前缀和中缀转后缀 (2)前缀转中缀和后缀转中缀 二:用栈实现表达式转换 (1)中缀转后缀 (2)中缀转前缀 表达式计算问题(使 ...

  8. 前缀表达式后缀表达式_你知道波兰表达式和逆波兰表达式吗

    什么是波兰表达式 我们日常的运算表达式通常是如下形式,这种成为中缀表达式,也就是运算符在运算数的中间.这种表达式人类很容易识别,并根据其进行计算,但计算机识别这种表达式非常困难. a + b * (c ...

  9. 前缀(波兰表达式) 中缀 后缀(逆波兰表达式)

    前缀.中缀.后缀表达式(逆波兰表达式) 本文转自https://www.cnblogs.com/chensongxian/p/7059802.html 介绍 前缀表达式.中缀表达式.后缀表达式都是四则 ...

  10. java逆波兰式求值_波兰式、逆波兰式与表达式求值

    波兰式.逆波兰式是<数据结构>课程中讲解关于栈的时候提到的,栈是很简单的一种数据结构.但是这些理论的提出却是计算机早期发展领域的重大突破,值得仔细回味. 1. 中缀表达式 我们在数学中学到 ...

最新文章

  1. linux多用户怎么表示,Linux如何建立多用户
  2. Spring4.X系列之IOC
  3. win10家庭版安装docker(DockerToolbox)及问题解决
  4. DCMTK:列出dicom文件的内容
  5. Cloud for Customer动态控制任意UI element的visibility
  6. SAP CRM和Cloud for Customer的Account merge
  7. 基于知识图谱的直升机飞行指挥模型研究
  8. 有三角形的即时通讯源码?
  9. Jexl表达式引擎-根据字符串动态执行JAVA
  10. select、poll、epoll的区别
  11. java商城管理系统_java商场信息管理系统
  12. LintCode 52: Next Permutation
  13. php 字符串 strpos,PHP字符串处理函数:strpos() -- 内置函数
  14. 线性光耦原理与电路设计
  15. Redis复制:部分同步PSYNC详解
  16. QQ和微信止步不前,意味着即时通讯社交应用创业的第2春已来?
  17. K8S中的cordon、uncordon和drain node标签 节点标签
  18. Hello,你好JAVA
  19. MFC中操作Word文档
  20. Warning: This Python interpreter is in a conda environment, but the environment has not been activat

热门文章

  1. 【材料-化学】专题合集:CP2k、gaussian、lammps、reaxff
  2. Power Designer:正向构建数据库数据库逆向工程SQL生成数据库报表
  3. SurfaceView及TextureView区别
  4. 基于Java办公自动化系统(OA)的设计技术及开发环境
  5. 静态网站与动态网站的区别
  6. C语言实现Floyd算法
  7. 无法定位序数 354 于动态链接库LIB
  8. 305页18万字智慧三甲医院弱电系统设计方案完整版
  9. 设置NTFS磁盘文件夹的可写权限(转自:http://doc.spacebuilder.cn/Default.aspx?Page=setNTFSAspxAutoDetectCookieSuppor)
  10. 17python实操案例四