运算符优先级

表达式计算(蓝桥杯)

北慕城南 提交于 2020-01-27 05:37:36
问题描述   输入一个只包含加减乖除和括号的合法表达式,求表达式的值。其中除表示整除。 输入格式   输入一行,包含一个表达式。 输出格式   输出这个表达式的值。 样例输入 1-2+3*(4-5) 样例输出 -4 数据规模和约定   表达式长度不超过100,表达式运算合法且运算过程都在int内进行。 分析(起初不会做,在网上找的题解,分析的很详细,讲了先转换为 中缀表达式,在转换为后缀表达式,主要是入栈和出栈): 1.将中缀表达式转换为后缀表达式的方法: (1) 初始化两个栈:运算符栈S1和储存中间结果的栈S2; (2) 从左至右扫描中缀表达式; (3) 遇到操作数时,将其压入S2,这里由于运算数可能大于10,所以如果数字后面一个符号是运算符,则将‘#’入S2栈充当分割线; (4) 遇到运算符时有三种情况: (4-1) 三种情况下直接入S1栈①S1为空②运算符为‘(’③运算符优先级比S1栈顶运算符的高; (4-2)如果右括号“)”,则依次弹出S1栈顶的运算符,并压入S2,直到遇到左括号为止,此时将这一对括号丢弃; (4-3) 若运算符优先级小于或等于S1栈顶运算符的优先级,则依次弹出S1栈顶元素,直到运算符的优先级大于S1栈顶运算符优先级; (6) 重复步骤(2)至(5),直到表达式的最右边; (7) 将S1中剩余的运算符依次弹出并压入S2; (8) 依次弹出S2中的元素并输出

运算符

徘徊边缘 提交于 2020-01-27 03:49:50
算数运算符 计算机 ,顾名思义就是负责进行 数学计算 并且 存储计算结果 的电子设备 目标 算术运算符的基本使用 01. 算数运算符 算数运算符是 运算符的一种 是完成基本的算术运算使用的符号,用来处理四则运算 运算符 描述 实例 + 加 10 + 20 = 30 - 减 10 - 20 = -10 * 乘 10 * 20 = 200 / 除 10 / 20 = 0.5 // 取整除 返回除法的整数部分(商) 9 // 2 输出结果 4 % 取余数 返回除法的余数 9 % 2 = 1 ** 幂 又称次方、乘方,2 ** 3 = 8 在 Python 中 * 运算符还可以用于字符串,计算结果就是字符串重复指定次数的结果 In [1]: "-" * 50 Out[1]: '----------------------------------------' 02. 算数运算符的优先级 和数学中的运算符的优先级一致,在 Python 中进行数学计算时,同样也是: 先乘除后加减 同级运算符是 从左至右 计算 可以使用 () 调整计算的优先级 以下表格的算数优先级由高到最低顺序排列 运算符 描述 ** 幂 (最高优先级) * / % // 乘、除、取余数、取整除 + - 加法、减法 例如: 2 + 3 * 5 = 17 (2 + 3) * 5 = 25 2 * 3 + 5 = 11 2 *

表达式和运算符

孤街醉人 提交于 2020-01-27 00:05:16
表达式和运算符 表达式 具有一个或多个操作数, 零个或多个运算符, 可以计算且结果为单个值、对象、方法或命名空间的代码片段。 如 i++; 其中 i 为操作数, ++ 为运算符 运算符 按操作数可以分为 一元运算符(++, new) 二元运算符(+, -, *, /) 三元运算符(条件运算符?:, 唯一一个三元运算符) 按操作类型可以分为 类型 符号表示 基本运算符 X.y, f(x), a[x], x++, x--, new, typeof, checked, unchecked, default, delegate 一元运算符 +, -, !, ~, ++x, --x, (T)x 乘除运算符 *, /, % 加减运算符 +, - 移位运算符 <<, >> 关系和类型检测运算符 <, >, <=, >=, is, as 相等运算符 ==, != 逻辑运算符 &, ^, | 条件运算符 &&, ||, ?: 赋值运算符 =, +=, -=, *=, /=, %=, &=, 其优先级从上到下依次增强, 相同优先级情况下, 左结合运算符从左到右顺序计算, 右结合运算符从右到从顺序计算. 在所有运算符当中, 赋值运算符和三元运算符是右结合运算符, 其他所有二元运算符都是左结合运算符. 建议多用括号进行优先级标记. 另一点需要注意的是,相等运算符对于值类型数据的判断

04 位运算符、运算符优先级

家住魔仙堡 提交于 2020-01-26 14:11:18
# ###(7)位运算符: & | ~ ^ << >> var1 = 19 var2 = 15 # & 按位与 res = var1 & var2 print(res) ''' 10011 01111 00011 ''' # | 按位或 res = var1 | var2 print(res) ''' 10011 01111 11111 ''' # << 左移 """ n<<m n乘以2的m次幂 """ res = 5 << 2 # 相当于5 * 2的2次幂 """ 00000101 00010100 4+16 = 20 """ # >> 右移 '''n>>m n除以2的m次幂''' res = 5 >> 1 """ 00000101 00000010 """ print(res) # ^ 按位异或 """两个值[不相同]方为真,两个值[相同]方为假""" res = var1 ^ var2 ''' 10011 01111 11100 ''' print(res) # ~ 按位非 - ( n+1 ) res = ~19 res = ~-21 print(res) # 运算符的优先级 ''' 一元运算符: 同一时间只操作一个数字运算的 ( ~ - ) ~19 二元运算符: 同一时间只操作两个数字运算的 (+ - * /) 5 + 3 整体一元运算符优先级 > 二元运算符

js 运算符优先级

杀马特。学长 韩版系。学妹 提交于 2020-01-26 14:09:27
在看jquery源码,仔细看入口函数的时候,有点懵了。看到与或、多重三目,傻傻的分不清,就代码仔细的区分下运算符优先级,以前都是呼呼的飘过。看来任何一个细节都不能忽略,不然效率极低。。 !function(a, b) { "object" == typeof module && "object" == typeof module.exports ? module.exports = a.document ? b(a, !0) : function(a) { if (!a.document) throw new Error("jQuery requires a window with a document"); return b(a) } : b(a) }("undefined" != typeof window ? window : this, function(a, b) { //代码 n = function(a, b) { return new n.fn.init(a,b) }; A = n.fn.init = function(a,b){ //代码}; A.prototypt = n.fn; return n })(); 由于优先级 == 高于 && 、|| 高于 ?: 高于 =, 所以里面的函数体 相当于 `(` object" == typeof module &&

09 - 逆波兰计算器

China☆狼群 提交于 2020-01-26 11:55:03
1. 前缀表达式 (波兰表达式) 前缀表达式的 运算符位于操作数之前 【举例说明】 (3+4)×5-6 对应的前缀表达式就是 - × + 3 4 5 6 前缀表达式的计算机求值 从右至左 扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素 和 次顶元素),并将结果入栈;重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果 【举例说明】针对上例的前缀表达式求值步骤如下 (栈顶 ▢ 次顶) : 从右至左扫描,将6、5、4、3压入堆栈 遇到 + 运算符,因此弹出3和4(3为栈顶元素,4为次顶元素),计算出3+4的值,得7,再将7入栈 接下来是 × 运算符,因此弹出7和5,计算出7×5=35,将35入栈 最后是 - 运算符,计算出 35-6 的值,即29,由此得出最终结果 2. 中缀表达式 中缀表达式就是 常见的运算表达式 ,如(3+4)×5-6 中缀表达式的求值是我们人最熟悉的,但是对计算机来说却不好操作(08-案例就能看的这个问题),因此,在计算结果时,往往会将中缀表达式转成其它表达式来操作(一般转成后缀表达式) 3. 后缀表达式 (逆波兰表达式) 后缀表达式又称逆波兰表达式,与前缀表达式相似,只是 运算符位于操作数之后 【举例说明】 (3+4)×5-6 对应的后缀表达式就是 3 4 + 5 × 6 –

错题改错及分析

孤街浪徒 提交于 2020-01-26 03:46:44
选择题部分 (1)下述程序的输出结果是( ) main() { int x=-1,y=4,k; k=x++<=0&&!(y–<=0); printf("%d,%d,%d",k,x,y); } A: 0,0,3 B: 0,1,2 C: 1,0,3 D: 1,1,2 正确答案:C 我的选择:D 解析: j=++i;(i的值先加1,再赋给j,j在输出) j=i++;(先将i的值赋给j,j的值不变,i的值加一) 所以x++<=0;是真的所以k=1; x=0;y=3; 故结果选C. (2)设有:int a=1,b=2,c=3,d=4,m=2,n=2; 执行(m=a>b)&&(n=c>d)后n的值是( )。 A: 0 B: 2 C: 3 D: 4 正确答案:B 我的选择:A 解析:有运算符的优先来看,>比=要先进行,又因为c<d所以为假 故可以得出n=0 (3)执行语句for(i=1;i++<4;) ;后变量i的值是( )。 A: 3 B: 4 C: 5 D: 不定 正确答案:C 我的选择:A 解析:明确i++的含义,然后再利用循环求出执行完语句最后的变量的值。 (4)若有定义:int a=7; float x=2.5,y=4.7; 则表达式x+a%3*(int)(x+y)%2/4的值是( )。 A: 2.500000 B: 2.750000 C: 3.500000 D: 0.000000

C++课程学习笔记第四周:运算符的重载

六眼飞鱼酱① 提交于 2020-01-25 17:55:12
1 运算符重载基本概念和形式 1.1 运算符重载基本概念 在数学上,两个复数可以直接进行+、-等运算。但在C++中,直接将+或-用于复数对象是不允许的,因为C++中预定义的运算符并未提供这种功能。 为了让对象也能通过运算符进行运算(这样代码更简洁,容易理解),C++提供了运算符重载的机制。 运算符重载的含义:对已有的运算符(C++中预定义的运算符)赋予多重的含义,使同一运算符作用于不同类型的数据时导致不同类型的行为。比如 5 + 4 = 9; complex_a + complex_b 生成新的复数对象。 运算符重载的目的:扩展C++中提供的运算符的适用范围,使之能作用于对象。 1.2 运算符重载的形式 返回值类型 operator 运算符(形参表){ …… } 运算符重载的实质是函数重载; 把含运算符的表达式转换成对运算符函数的调用,把运算符的操作数转换成运算符函数的参数; 运算符被多次重载时,根据实参的类型决定调用哪个运算符函数。 可以重载为普通函数,也可以重载为成员函数; 重载为成员函数时,参数个数为运算符目数减一;重载为普通函数时参数个数为运算符目数。 //示例 class Complex{ public: double real,imag; Complex( double r = 0.0, double i= 0.0 ):real(r),imag(i) { }

Java基础 3. 运算符

旧街凉风 提交于 2020-01-25 10:46:56
Java基础 3. 运算符 目标 掌握数据类型转换 掌握算术运算符、赋值运算符 掌握逻辑运算符 掌握关系运算符、条件运算符 一、数据类型转换 //Demo1.java public class Demo1 { public static void main(String[] args) { //按照数值非数值分类 //数据类型:数值(整型int 浮点型float、double) //非数值(字符串String,字符char,布尔boolean(true、false)) //按照基本引用数据类型 //引用数据类型String 其他为基本 int num1 = 10; //浮点数默认是double double num2 = 1.0; float num3 = 5.6f; System.out.println(num3); //当表达式中有一个是double类型时。整个结果是double //强制类型转换 double -> int //强制去掉小数部分9.8 -> 8 //会造成精度丢失 int num4 = num1 - (int)num2; System.out.println(num4); //自动类型转换 //int -> double num2 = 100; } } 二、转换规则 自动类型转换规则 规则1. 如果一个操作数为double类型

Java堆栈的应用2----------中缀表达式转为后缀表达式的计算Java实现

穿精又带淫゛_ 提交于 2020-01-25 09:34:51
1、堆栈-Stack 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除操作。 堆栈中允许进行插入和删除操作的一端称为栈顶,另一端称为栈底。堆栈的插入和删除操作通常称为进栈或入栈,堆栈的删除操作通常称为出栈或退栈。 Java中已经出了Stack的具体实现类 堆栈的数据集合可以表示为a0,a1,…,an-1,每个数据元素的数据类型可以是任意的类类型。 操作集合  (1)入栈push(obj):把数据元素obj插入堆栈。  (2)出栈pop():出栈, 删除的数据元素由函数返回。  (3)取栈顶数据元素getTop():取堆栈当前栈顶的数据元素并由函数返回。 (4)非空否notEmpty():若堆栈非空则函数返回true,否则函数返回false。 堆栈是各种软件系统中应用最广泛的数据结构之一。括号匹配和表达式计算是编译软件中的基本问题,其软件设计中都需要使用堆栈。 首先来看应用之一: 中缀表达式转为后缀表达式 1、前缀表达式(Prefix Notation)是指将运算符写在前面操作数写在后面的不包含括号的表达式,而且为了纪念其发明者波兰数学家Jan Lukasiewicz所以前缀表达式也 叫做“波兰表达式”。比如- 1 + 2 3 2、后缀表达式