前缀表达式

进阶实验3-3.1 求前缀表达式的值 (25分)

旧城冷巷雨未停 提交于 2020-04-07 21:57:37
进阶实验3-3.1 求前缀表达式的值 (25分) 算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。前缀表达式指二元运算符位于两个运算数之前,例如 2+3*(7-4)+8/4 的前缀表达式是: + + 2 * 3 - 7 4 / 8 4 。请设计程序计算前缀表达式的结果值。 输入格式: 输入在一行内给出不超过30个字符的前缀表达式,只包含 + 、 - 、 * 、 / 以及运算数,不同对象(运算数、运算符号)之间以空格分隔。 输出格式: 输出前缀表达式的运算结果,保留小数点后1位,或错误信息 ERROR 。 输入样例: + + 2 * 3 - 7 4 / 8 4 输出样例: 13.0思路很简单,就是从后往前遍历,用栈维护。主要注意一下怎么字符串转double和int。挂一下大佬博客:http://www.luyixian.cn/news_show_235099.aspx 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<stack> 5 #include<cstdlib> 6 #include<algorithm> 7 using namespace std; 8 const int maxn=50; 9 string c[maxn]; 10 int cnt; 11 stack

蓝桥杯——算法训练——前缀表达式

时光怂恿深爱的人放手 提交于 2020-02-13 03:34:41
蓝桥杯——算法训练——前缀表达式 —————————————————————————————— 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 编写一个程序,以字符串方式输入一个前缀表达式,然后计算它的值。输入格式为:“运算符 对象1 对象2”,其中,运算符为“+”(加法)、“-”(减法)、“*”(乘法)或“/”(除法),运算对象为不超过10的整数,它们之间用一个空格隔开。要求:对于加、减、乘、除这四种运算,分别设计相应的函数来实现。 输入格式 输入只有一行,即一个前缀表达式字符串。 输出格式 输出相应的计算结果(如果是除法,直接采用c语言的“/”运算符,结果为整数)。 样例输入 + 5 2 样例输出 7 —————————————————————————————— 思路分析:这道题其实没什么思路,注意是不大于10的整数,因此做好字符串的转换,以及学会如何输入带空格字符串(这里使用的是 cin.get() )即可,直接看代码: # include <iostream> # include <string> # include <string.h> using namespace std ; int pl ( int a , int b ) { return a + b ; } int mi ( int a , int b ) { return a - b ; }

算术表达式-前缀式-后缀式

China☆狼群 提交于 2020-02-05 02:08:52
今天学习到了栈的一道题:数据结构实验之栈与队列二:一般算术表达式转换成后缀式 所以要了解前缀式和后缀式及其的转换。 表达式的转换,前缀式(波兰式)后缀式(逆波兰式)和和我们正常的表达式(中缀表达式) a+b 相比较,+ab 或 ab+ 是一种不同的方式。 例如: a×b+(c-d/e)×f 中缀表达式: 我们把它转前缀或者后缀,以前缀式为例(把一个整体看成两个表达式的一个运算,把运算符放到两个表达式的前面),后缀式是相似的原理,把运算符放到两个表达式的后面。 首先举个例子; 中缀式转后缀式:a×b+(c-d/e) ×f 优先级是 括号 乘除 加减 首先优先括号;括号里优先除法,然后减法。 所以为(除法): a×b+(c-de/)×f 然后(加法):a×b+(cde/-)×f 括号运算完 然后 括号外 优先乘法 然后 加法 所以 (1)ab×+cde/-f× (2) ab×cde/-f×+ 这里只是介绍,简单的理论。 具体代码实现还没有想好。 __________________________________________________________________________________________ 下划线 ———————— 看到大佬方法。https://blog.csdn.net/qq_34392662/article/details/82055239

前缀表达式 与 后缀表达式

我只是一个虾纸丫 提交于 2020-02-01 12:50:00
在计算机编程中,我们使用前缀或后缀表达式进行运算往往比中缀简单 举例示范 中缀表达式:1 + (2 + 3) × 4 - 5 前缀表达式:- + 1 × + 2 3 4 5 后缀表达式:1 2 3 + 4 × + 5 - 对于前缀表达式 - + 1 × + 2 3 4 5 ,这里的前缀指的是运算符号前缀, - + 1 × + 2 3 4 5 = (2+3)*4+1-5 可见连括号都省了。 运算过程 编程运算前缀表达式的值时,只需要用到一个栈,这个栈主要用来保存操作数。 且编程时,往往从末尾开始读取前缀表达式,如果读到的是数值,均入栈;读到的是操作符,则取2个操作数进行运算即可。 计算前缀表达式的值:- + 1 × + 2 3 4 5 1) 从右至左扫描,将5,4,3,2压入堆栈; 2)遇到+运算符,弹出2和3(2为栈顶元素,3为次顶元素),计算2+3的值,得到5,将5压入栈; 3)遇到×运算符,弹出5和4,计算5×4的值,得到20,将20压入栈; 4)遇到1,将1压入栈; 5)遇到+运算符,弹出1和20,计算1+20的值,得到21,将21压入栈; 6)遇到-运算符,弹出21和5,计算21-5的值,得到16为最终结果 后缀表达式只需要反着来,从左到右读取即可,其他步骤类似 来源: https://www.cnblogs.com/friedCoder/p/12247973.html

Java千问:学透Java自增(++)自减(--)运算符,看这一篇就够了!

删除回忆录丶 提交于 2020-01-19 13:28:17
同很多高级编程语言一样,Java语言的运算符系统当中也有自增(++)和自减(--)这两个运算符。很多小伙伴对这两个运算符都深感头疼,并且很多公司在面试的时候也经常会问到与之相关的问题,今天我们就通过一篇文章来深度解析一下这两个运算符,相信在看过这篇文章之后,你再也不会被自增(++)和自减(--)运算符难住。由于自增和自减运算符的原理完全相同,所以我们在讲解的时候仅以自增运算符举例。(预警:本文举例较多,篇幅较长,请耐心看完) 一、基本运算规则介绍 自增(++)和自减(--)运算符是对变量在原始值的基础上进行加1或减1的操作。它们都有前缀和后缀两种形式。前缀形式的运算规则可以概括为:”先自增(减),后引用”,而后缀形式的运算规则可以概括为:”先引用,后自增(减)”。这里所说的”引用”,指的是使用变量的值。另外,我们还要强调一个细节: 无论是前缀形式还是后缀形式,自增自减运算符的优先级要高于赋值运算符 。大家要记清楚这个细节,后文还会针对这个细节进行论述。下面我们就分为几种情况来研究++和--在不同场合下的运算效果。 二、语句中仅有++或-- 请看代码: 我们可以看到,这段代码中总共有3条语句,其中第2条语句中仅有一个后缀形式++操作,程序的输出结果是3。那么我们再来看另外一段代码: 这段代码与之前的那段代码基本一样,只是第2条语句中,后缀形式的++操作被换成了前缀形式

02-线性结构3. 求前缀表达式的值(25)

妖精的绣舞 提交于 2019-12-18 18:33:46
02-线性结构3. 求前缀表达式的值(25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。前缀表达式指二元运算符位于两个运算数之前,比如2+3*(7-4)+8/4的前缀表达式是:+ + 2 * 3 - 7 4 / 8 4。请设计程序计算前缀表达式的结果值。 输入格式说明: 输入在一行内给出不超过30个字符的前缀表达式,仅仅包括+、-、*、\以及运算数,不同对象(运算数、运算符号)之间以空格分隔。 输出格式说明: 输出前缀表达式的运算结果。精确到小数点后1位。或错误信息“ERROR”。 例子输入与输出: 序号 输入 输出 1 + + 2 * 3 - 7 4 / 8 4 13.0 2 / -25 + * - 2 3 4 / 8 4 12.5 3 / 5 + * - 2 3 4 / 8 2 ERROR 4 +10.23 10.2 #include <stdio.h> #include <string.h> #include <ctype.h> double parseNum(char *s, int head, int rear) { //分析字符串。返回相应数值 double ret = 0; double flag = 1; //标记数值正负号 if (s[head]

算法训练 前缀表达式

与世无争的帅哥 提交于 2019-12-12 00:05:18
问题描述 编写一个程序,以字符串方式输入一个前缀表达式,然后计算它的值。输入格式为:“运算符 对象1 对象2”,其中,运算符为“+”(加法)、“-”(减法)、“*”(乘法)或“/”(除法),运算对象为不超过10的整数,它们之间用一个空格隔开。要求:对于加、减、乘、除这四种运算,分别设计相应的函数来实现。   输入格式:输入只有一行,即一个前缀表达式字符串。   输出格式:输出相应的计算结果(如果是除法,直接采用c语言的“/”运算符,结果为整数)。 样例输入 + 5 2 样例输出 7 思路 前缀表达式求值方法: 1.逆序扫描前缀表达式 2.扫描到数字就压入栈中 3.扫描到运算符就弹出栈顶的两个元素运算后将结果入栈 4.循环直到表达式扫描完毕 程序实现方法: 1.将输入的前缀表达式以字符串形式保存 2.因为有两位运算数,所以将字符串以空格分隔开存入数组 3.创建一个栈类存放操作数 4.逆序遍历数组,遇到数字就压入栈 5.遇到运算符就对栈顶的两个元素进行出栈操作并将结果入栈 6.当数组遍历完毕后栈顶元素即为结果 代码 import java . util . Scanner ; import java . util . Stack ; public class Prefix { public static void main ( String [ ] args ) { Scanner

深入理解前缀、中缀、后缀表达式

我是研究僧i 提交于 2019-12-05 19:36:31
1.我们首先来看一下,什么是前缀、中缀、后缀表达式: 中缀表达式: 2 - 3 * 4 后缀表达式:2 3 4 * - 前缀表达式:- 2 * 3 4 简单介绍下,前中后的划分依据为两个数字的操作符处于两个数字的前面,中间还是后面,其中中缀表达式为我们日常生活中常见的表达形式。 2.重要操作过程 后缀表达式求值过程: 从左到右扫描后缀表达式:遇到数字就将其压入栈中;遇到操作符,则取出栈顶的两个元素(栈顶元素为a, 另一个为b),并计算b 操作符 a的取值,并将结果重新压入栈中。扫描整个表达式结束后,栈中数值即为整个表达式的结果。 前缀表达式求值过程: 从右向左扫描前缀表达式:其他操作除了(栈顶元素为b, 另一个为a)与后缀表达式求值,不再赘述。 中缀表达式转换为后缀表达式过程: 从左到右扫描中缀表达式,遇到数字 中缀表达式转换为前缀表达式过程 来源: oschina 链接: https://my.oschina.net/u/1261015/blog/506660