比较运算符

逆波兰表达式

守給你的承諾、 提交于 2020-01-04 13:53:11
逆波兰表达式 表达式一般由操作数(Operand)、运算符(Operator)组成,例如算术表达式中,通常把运算符放在两个操作数的中间, 这称为中缀表达式(Infix Expression),如A+B。 波兰数学家Jan Lukasiewicz提出了另一种数学表示法,它有两种表示形式: 把运算符写在操作数之前,称为波兰表达式(Polish Expression)或前缀表达式(Prefix Expression),如+AB; 把运算符写在操作数之后,称为逆波兰表达式(Reverse Polish Expression)或后缀表达式(Suffix Expression),如AB+; 其中,逆波兰表达式在编译技术中有着普遍的应用。 算法: 一、 将中缀表达式转换成后缀表达式算法: 1、从左至右扫描一中缀表达式。 2、若读取的是操作数,则判断该操作数的类型,并将该操作数存入操作数堆栈 3、若读取的是运算符 (1) 该运算符为左括号"(",则直接存入运算符堆栈。 (2) 该运算符为右括号")",则输出运算符堆栈中的运算符到操作数堆栈,直到遇到左括号为止。 (3) 该运算符为非括号运算符: (a) 若运算符堆栈栈顶的运算符为括号,则直接存入运算符堆栈。 (b) 若比运算符堆栈栈顶的运算符优先级高或相等,则直接存入运算符堆栈。 (c) 若比运算符堆栈栈顶的运算符优先级低

“中序表达式”转换为“前序表达式”、“后序表达式”

萝らか妹 提交于 2020-01-04 13:39:47
   上周末参照书本写了个“计算器”的程序,其中最令我费解的就是“前序表达式”、“后续表达式”,好像记得老师在上课的时候讲过,估计当时也没听懂,看的稀里糊涂的,不过现在大概明白了……   在此仅做以笔记。 首先看下面所示表格: 中序表达式 2*3/(2-1)+3*(4-1) 前序表达式 +/*23-21*3-41 后序表达式 23*21-/341-*+    中序表达式对我们而言是很直观的(我们平时接触的就是这个),但计算机处理起来比较麻烦(括号、优先级之类的),前序和后序表达式中没有括号,而且在计算中只需单向扫描,不需要考虑运算符的优先级。   以前序表达式“+/*23-21*3-41”为例,从右往左,先取出两个操作数“1”、“4”和一个运算符“-”,计算“4-1”,将结果3回填到字符串中,现在字符串变为“+/*23-21*33”。   再从右至左取两个数“3”、“3”和“*”,计算“3*3”,将结果“9”回填到字符串,得“+/*23-219’”,   再取数,连续取出“9”、“1”、“2”,直到取出一个运算符“-”,将与运算符最近的两个操作数进行计算,即“2-1”得“1”,回填字符串中,现在为“+/*239”   重复上述步骤,取出“2*3”=6,回填字符串得到“+/619”,   再取“6/1”=6,得到“+69”,   再取“6+9”=15。运算完毕。   即 从右至左取数

运算符与运算表达式

旧街凉风 提交于 2020-01-04 01:55:06
共计七种运算符: 1、赋值运算符与赋值表达式(等号); 2、算术运算符与算术表达式(加减乘除余) 如果用0 做除数,虽然可以通过编译,但是在程序运行时,会抛出异常java.lang. ArithmeticException,这在有关异常处理的章节中,会有详细讲解。 3、自增和自减运算符; 如果++运算符放在变量名前面,那么它们被称为“前缀运算符”,如++A;如果放在变量名后面,它们就被称为“后缀运算符”,如A++。对于前缀运算符来说,它总是先自增1,然后参与运算;对于后缀运算符来说,它总是先以原来的值参与运算,然后再自增1。 4、关系运算符与关系表达式; 算术表达式的运算结果为boolean型。当关系表达式成立时,运算结果为true;当关系表达式不成立时,运算结果为false,如表2-6所示。要注意的是,当进行相等比较时,运算符为两个连着的等号“==”,不要写成赋值运算符“=”。所有关系运算符都可以用于对整数、浮点数和字符型数据的比较,其中等于和不等于运算符可用于所有数据类型。 5、逻辑运算符与逻辑表达式; 有时需要将返回类型为boolean(布尔)类型的表达式组合在一起,构成一个更加复杂的表达式。 逻辑运算符被用做逻辑上的组合,包括:与(&和&&)、或(|和||)、异或(^)、非(!)。 5.1、与(&和&&) 当“&&”左侧的表达式结果为false时,就不再计算其右侧的表达式

第5章其他数据类型和运算符

孤者浪人 提交于 2020-01-01 22:28:35
第5章其他数据类型和运算符 理解并创建数组、创建多维数组、创建不规则数组、了解另一种数组的声明语法、数组引用赋值、使用length数组成员、使用for-each形式的for循环、使用字符串、应用命令形参。 方法重载是Java实现多态性的途径之一。 for-each形式的循环 int [ ] [ ] a = { { 2 , 2 , 1 } , { 3 , 4 , 2 , 2 } , { 5 , 6 } } ; for ( int [ ] x : a ) { for ( int y : x ) System . out . print ( y + " " ) ; System . out . println ( ) ; } String类常用方法: boolean equals(str) int length() char charAt(index) int compareTo(str) int indexOf(str) int lastIndexOf(str) 注意:equals()方法比较两个String对象的字符序列是否相等。把==应用到两个字符串引用只是用老判断两个引用所指的是否是同一个对象。(注意这里和C++里是不一样的) 可以使用String来控制switch语句 ?运算符 int a = b > c ? b : c ; 用法和C++里面是一样的 来源: CSDN 作者:

JavaScript的运算符与流程控制

﹥>﹥吖頭↗ 提交于 2019-12-30 00:17:23
一、运算符的详解    1、算术运算符    描述: ++(自增运算符)、--(自减运算符)   语法: ++num、num++、--num、num--   功能: 对变量本身进行加1或减1    例子:     var num = 10;     num++;  // 相当于num = num+1;     console.log(num);      num--;  // 相当于num = num-1;    console.log(num);     注意:    (1)对于自增自减运算符,如果出现在运算子的前面,则先将自己自增或自减,然后再执行当前语句。    (2)对于自增自减运算符,如果出现在运算子的后面,则先执行当前语句,执行完毕再自己自增自减。     例子:     var num =10;     console.log(++num);  // 先计算本身,再参与语句执行     console.log(num++);  // 先参与语句执行,再计算本身     console.log(num);    2、赋值运算符     描述: +=、-=、*=、/=、%=   语法: num+=6;   解释: 表示累加,【num+=6;】相当于【num = num+6;】    例子:     var num = 10;     num+=1;  // num =

运算符

喜夏-厌秋 提交于 2019-12-28 23:35:20
算术运算符 运算符 运算 范例 结果 + 正号 +3 3 - 负号 b=4;-b -4 + 加 5+5 10 - 减 6-4 2 * 乘 3*4 12 / 除 5/5 1 % 取余(取模) 5%5 0 + + 自增(前):先运算后取值 a=2;b=++a; a=3;b=3 + + 自增(后):先取值后运算 a=2;b=a++; a=3;b=2 - - 自减(前):先运算后取值 a=2;b=- -a; a=1;b=1 - - 自减(后):先取值后运算 a=2;b=a- -; a=1;b=2 算术运算符的注意问题 如果对负数取模,可以把模数的负号忽略不记,如:5%-2=1。 但被模数是负数就另当别论。 对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。 例如:int x=3510;x=x/1000*1000; x的结果是? 下面以+为例 //加 //用在数字就是求和 int num1 = 10 ; int num2 = 20 ; System . out . println ( num1 + num2 ) ; //用在字符串不是求和而是连接功能 String str = "abc" ; System . out . println ( str + 123 ) ; //整数和小数相加永远是小数 int num3 = 30 ; double d

2.PHP基本语法__常量、运算符

我只是一个虾纸丫 提交于 2019-12-28 15:47:14
1. 常量   在所有语言中,常量都是固定的量,也就是说当一个常量被赋值之后,这个值是不会改变的。PHP中也是如此   声明方式: define("常量名",“常量值”)      注意:PHP中常量是全局的,在私有方法中使用,是不需要做特殊声明的 2. 运算符   对于常用的运算符,这里就不会再次说明,只说明比较特殊的运算符             来源: https://www.cnblogs.com/qfshini/p/12111938.html

c++中的操作符重载(转)

不羁岁月 提交于 2019-12-28 10:14:45
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、什么是操作符重载 操作符重载可以分为两部分:“操作符”和“重载”。说到重载想必都不陌生了吧,这是一种编译时多态,重载实际上可以分为函数重载和操作符重载。运算符重载和函数重载的不同之处在于操作符重载重载的一定是操作符。我们不妨先直观的看一下所谓的操作符重载: #include <iostream> using namespace std; int main() { int a = 2 , b = 3; float c = 2.1f , d = 1.2f; cout<<"a + b = "<<a+b<<endl; cout<<"c + d = "<<c+d<<endl; return 0; } 我们看到操作符“+”完成 float 和 int 两 种类型的加法计算,这就是操作符重载了。这些内置类型的操作符重载已经实现过了,但是如果现在我们自己写过的类也要实现实现类似的加法运算,怎么办呢?? 比如现在现在有这样一个点类point,要实现两个点的相加,结果是横纵坐标都要相加,这时候就需要我们自己写一个操作符重载函数了。 #include <iostream> using namespace std; class point { double x; double y; public: double get_x() {

JS基础4-数组和运算符

谁说我不能喝 提交于 2019-12-27 15:57:32
一、数组 数组是使用单独的变量名来存储一系列的值, JavaScript为数组提供了一个length属性来得到数组的长度。 js数组有以下特点: 1. 数组长度可变。总长度等于数组的最大索引值 +1 2.同一数组中的元素类型可以互不相同 3. 当访问未赋值的数组元素时,该元素值为 undefined,不会数组越界 <script> var arr1=[2,5,6];//定义时直接给数组元素赋值 var arr2=[];//定义一个空数组 var arr3=new Array();//定义一个空数组并通过索引来赋值 arr3[0]=1; arr3[3]="abc"; </script> 数组 二、运算符    ++: 自加 : 对原有的数据进行 +1    --: 自减 : 对原有的数据进行 -1 例如:  在进行混合运算时我们看式子 , 从左往右看     首先 x++,++ 在变量 x 的后面 , 要先把变量 x 的值拿出来放在这个位置上 ( 即 int y = 3 + ++x + x * 10), 然后自身 +1; 这里变量 x = 3+1 = 4,( 如果不好理解 , 可以令 int a = x++, 则 a = 3);     接着往右看遇到 ++x, ++ 在变量 x 的前面 , 要先自身 +1( 即 x = 4+1 = 5), 然后值再放到这个位置即 (int y =

数据结构和算法之栈1

二次信任 提交于 2019-12-27 04:33:24
数组模拟栈 (1)将数组模拟成栈的思想: //用数组模拟栈的思想: * 1·先创建栈,用数组 * 2·定义一个变量top表示栈顶,初始化为-1 * 3·入栈:top++,stack[top]=val,要进行栈满的操作 * 4·出栈:数据取出:int value=stack[top];top--即可,要进行判断栈为空的操作,因为有返回值,所以一般我们进行异常抛出*/ 1.1:注意:因为是拿数组进行模拟栈 1:在栈类中有一个数组 2:在栈类中有一个maxSize定义栈的大小;因为栈是有大小的 3:在栈类中必须有一个指针一直指向栈顶,初始值为-1; 4:其次是在栈类中写入方法,模拟实现栈即可 1.2:栈的代码如下所示 package com.dataStrcture; import java.util.Scanner; //用数组模拟栈 /*思想: * 1·先创建栈,用数组 * 2·定义一个变量top表示栈顶,初始化为-1 * 3·入栈:top++,stack[top]=val,要进行栈满的操作 * 4·出栈:数据取出:int value=stack[top];top--即可,要进行判断栈为空的操作,因为有返回值,所以一般我们进行异常抛出*/ class ArrayStack{ public int maxSize;//栈的大小 public int[]stack; public int