求值

php简单实现算术表达式转换成逆波兰式,并求解

旧街凉风 提交于 2020-02-29 13:27:36
最近一直在学习C/C++,可学的都是原理语法之类的,没有实战成绩甚是令人不爽。想用C/C++写个计算器一直是我的夙愿,刚敲键盘,就不知可否了,想来想去还是对计算器的算法不是很清楚。由于本人是学php出身,所以先使用php将计算器算法给实现了 一下 ,以便更好的学习C/C++。这个简单的计算器采用的是逆波兰式来做的,仅支持加减乘除四种运算,纯粹个人练习记录一下,还望多多支持。 将算术表达式转换成逆波兰式 建立运算符栈stackOperator用于运算符的存储,压入'@';建立逆波兰式存储栈stackOut,并置空 。 预处理表达式,正、负号前加0(如果一个加号(减号)出现在最前面或左括号后面,则该加号(减号)为正负号) 。 顺序扫描表达式,如果当前字符是数字(优先级为0的符号),则直接 入栈 stackOut ;如果当前字符为运算符或括号(优先级不为0的符号),则判断第4点 。 若当前运算符为'(',直接入栈 stackOperator ; 若为')',出栈( stackOperator )并顺序输出运算符直到遇到第一个'(',遇到的第一个'(' 出栈 ( stackOperator ) 但不输出; 若为四则运算符,比较栈顶元素与当前元素的优先级: 如果栈顶元素运算符优先级 >= 当前元素的优先级, 出栈并顺序输出运算符直到栈顶元素优先级<当前元素优先级,然后将当前元素入栈 (

【讲古堂】表达式求值

流过昼夜 提交于 2019-12-04 22:05:07
【讲古堂】表达式求值 ( dubenju@126.com 2015/12/27) 什么是表达式 表达式是由数字,操作符,变量,常量等有意义地组合而成并能求得结果的式子。 例如: 32 + ( ( 9 * Celsius ) / 5 ) 4 + 2 * 55 / 2.5 组成表达式的信息种类繁多,这里只讨论数字表达式,即表达式由以下要素构成: 数字、操作符、变量、常量。 数字 不考虑进制的话,通常指十进制数,小数的时候是有小数点的。数字通常是以被操作对象的身分出现在表达式中的,叫做操作数。 操作符 表示对操作数进行哪种操作的符号叫做操作符,被操作的值叫做操作数,对操作数进行操作的过程称为表达式求值。根据操作对象的个数分为一元操作符和二元操作符。 一元操作符,操作只应用于单一操作数。例如:23!-n。 操作应用于两个操作数的叫二元操作符。例如:6*21、29/11、6.9+19.8、21.1-2.8 优先级 相对其他操作符,每个操作符都有一个优先级,优先级高的操作符比优先级低的操作符优先应用。一般的优先级是这样设置的: 分组操作符()具有最高优先级。 一元操作符-+比乘除模的优先级高。 次方乘除模比加减法的高。 操作数的类型变换 类型变换是指操作的过程中操作数的类型发生变化的现象。 比如: 1/3 1.5/0.3 变量与常量 变量是指值可以变化的量。比如x+5中的x。