《第04章 运算符.ppt》由会员分享,可在线阅读,更多相关《第04章 运算符.ppt(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第四章 运算符和表达式4.1 算术运算与算术表达式算术运算与算术表达式4.2 赋值运算与赋值表达式赋值运算与赋值表达式 4.3 C语言特有的运算和运算符语言特有的运算和运算符4.4 关系运算及其表达式关系运算及其表达式4.5 逻辑运算及其表达式逻辑运算及其表达式4.1 算术运算与算术表达式算术运算与算术表达式在语言中,除控制语句和输入输出函数外,其它所有基本操作都作为运算符处理。1.七种基本算术运算符七种基本算术运算符 +、-(减法/取负)、*、/、%(求余数)、+(自增1)、-(自减1)。(1)关于除法运算/C语言规定:两个整数相除,其商为整数,小数部分被舍弃。例如,5/2=2。(2)关于求
2、余数运算要求两侧的操作数均为整型数据,否则出错。2.表达式和算术表达式表达式和算术表达式(1)表达式的概念 用运算符和括号将运算对象(常量、变量和函数等)连接起来的、符合语言语法规则的式子,称为表达式。(2)算术表达式的概念表达式中的运算符都是算术运算符。例如,3+6*9、(x+y)/2-1等,都是算术表达式。3.运算符的优先级与结合性运算符的优先级与结合性(1)语言规定了运算符的优先级和结合性。所谓结合性是指,当一个操作数两侧的运算符具有相同的优先级时,该操作数是先与左边的运算符结合,还是先与右边的运算符结合。自左至右的结合方向,称为左结合性。反之,称为右结合性。结合性是语言的独有概念。除单
3、单目目运算符、赋赋值值运算符和条条件件运算符是右结合性外,其它运算符都是左结合性。(2)表达式求值1)按运算符的优先级高低次序执行。例如,先乘除后加减。2)如果在一个运算对象(或称操作数)两侧的运算符的优先级相同,则按语言规定的结合方向(结合性)进行。例如,算术运算符的结合方向是“自左至右”,即:在执行“a b+c”时,变量b先与减号结合,执行“a-b”;然后再执行加c的运算。4.数据类型转换数据类型转换(1)在语言中,整型、实型和字符型数据间可以混合运算(因为字符数据与整型数据可以通用)。如果一个运算符两侧的操作数的数据类型不同,则系统按“先转换、后运算”的原则,首先将数据自动转换成同一类型
4、,然后在同一类型数据间进行运算。转换规则如图2-5所示。1)横向向左的箭头,表示必须的转换。char和short 型必须转换成 int 型,float型必须转换成double型。2)纵向向上的箭头,表示不同类型的转换方向。例如,int型与double型数据进行混合运算,则先将int型数据转换成double型,然后在两个同类型的数据间进行运算,结果为double型。注注意意:箭头方向只表示数据类型由低向高转换,不要理解为int型先转换成unsigned型,再转换成long型,最后转换成double型。(2)除自动转换外,语言也允许强制转换。数据类型强制转换的一般格式为:(要转换成的数据类型)(被
5、转换的表达式)当被转换的表达式是一个简单表达式时,外面的一对圆括号可以缺省。例如,(double)a(等价于(double)(a)/*将变量a的值转换成double型*/(int)(x+y)/*将x+y的结果转换成int型*/(float)5/2(等价于(float)(5)/2)/*将5转换成实型,再除以2(=2.5)*/(float)(5/2)/*将5整除2的结果(2)转换成实型(2.0)*/注注意意:强制转换类型得到的是一个所需类型的中间量,原表达式类型并不发生变化。例如,(double)a 只是将变量a的值转换成一个double型的中间量,其数据类型并未转换成double型。Return
6、4.1 自增和自减4.1 自增(自增(+)、自减()、自减(-)运算)运算 1.作用 自增运算使单个变量的值增,自减运算使单个变量的值减。2.用法与运算规则 自增、自减运算符都有两种用法:(1)前置运算运算符放在变量之前:变量名、变量名 先使变量的值增(或减),然后再以变化后的值参与其它运算,即先增减、后运算。(2)后置运算运算符放在变量之后:变量名、变量名 变量先参与其它运算,然后再使变量的值增(或减),即先运算、后增减。案例案例2.4 自增、自减运算符的用法与运算规则示例。/*案例代码文件名:AL2_4.C*/*程序功能:自增、自减运算符的用法与运算规则示例*/main()int x=6,
7、y;printf(x=%dn,x);/*输出x的初值*/y=+x;/*前置运算*/printf(y=+x:x=%d,y=%dn,x,y);y=x-;/*后置运算*/printf(y=x-:x=%d,y=%dn,x,y);程序运行结果:x=6y=+x:x=7,y=7y=x-:x=6,y=7 程序演示程序演示思思考考题题:如果将案例“y=+x;”语句中的前置运算改为后置(y=x+;),“y=x-;”语句中的后置运算改为前置(y=-x;),程序运行结果会如何?3.说明说明(1)自增、自减运算,常用于循环语句中,使循环控制变量加(或减),以及指针变量中,使指针指向下(或上)一个地址。(2)自增、自减运
8、算符,不能用于常量和表达式。例如,5+、-(a+b)等都是非法的。(3)在表达式中,连续使同一变量进行自增或自减运算时,很容易出错,所以最好避免这种用法。2.8 赋值运算与赋值表达式 1.赋值运算赋值运算 赋值符号“=”就是赋值运算符,它的作用是将一个表达式的值赋给一个变量。赋值运算符的一般形式为:变量变量 =赋值表达式赋值表达式 例如,x=5 y=(float)5/2 如果表达式值的类型,与被赋值变量的类型不一致,但都是数值型或字符型时,系统自动地将表达式的值转换成被赋值变量的数据类型,然后再赋值给变量。思考题思考题:假设变量num的数据类型为float,其值为2.5,则执行“num=(in
9、t)num”后,num的值等于多少?2.复合赋值运算复合赋值运算复合赋值运算符是由赋值运算符之前再加一个双目运算符构成的。复合赋值运算的一般格式为:变量 双目运算符双目运算符=表达式 复合赋值运算符它等价于等价于:变量=变量 双目运算符(表达式)。当表达式为简单表达式时,表达式外的一对圆括号才可缺省,否则可能出错。例如,x+=3 /*等价于x=x+3*/y*=x+6/*等价于y=y*(x+6),而不是y=y*x+6*/C语言规定的10种复合赋值运算符如下:+=,-=,*=,/=,%=;/*复合算术运算符(5个)*/&=,=,|=,=;/*复合位运算符(5个)*/3.赋值表达式赋值表达式由赋值运
10、算符或复合赋值运算符,将一个变量和一个表达式连接起来的表达式,称为赋值表达式。(1)一般格式 变量 (复合)赋值运算符 表达式(2)赋值表达式的值任何一个表达式都有一个值,赋值表达式也不例外。被赋值变量的值,就是赋值表达式的值被赋值变量的值,就是赋值表达式的值。例如,“a=5”这个赋值表达式,变量a的值“”就是它的值。Return4.3 逗号运算(,)及其表达式逗号运算(,)及其表达式语语言言提提供供一一种种用用逗逗号号运运算算符符“,”连连接接起起来来的的式式子子,称为逗号表达式。逗号运算符又称顺序求值运算符。称为逗号表达式。逗号运算符又称顺序求值运算符。1.一般形式一般形式 表达式表达式,
11、表达式表达式,表达式表达式n2.求解过程求解过程自自左左至至右右,依依次次计计算算各各表表达达式式的的值值,“表表达达式式n”的的值即为整个逗号表达式的值。值即为整个逗号表达式的值。例例如如,逗逗号号表表达达式式“a=3*5,a*4”的的值值=60:先先求求解解a=3*5,得得a=15;再再求求a*4=60,所所以以逗逗号号表表达达式式的值的值=60。又又例例如如,逗逗号号表表达达式式“(a=3*5,a*4),a+5”的的值值=20:先先求求解解a=3*5,得得a=15;再再求求a*4=60;最最后后求求解解a+5=20,所以逗号表达式的值所以逗号表达式的值=20。注注意意:并不是任何地方出现
12、的逗号,都是逗号运算符。很多情况下,逗号仅用作分隔符。a=a+,a+5Return4.3 C语言特有的运算符4.4 关系运算及其表达式关系运算及其表达式 所谓“关系运算”实际上就是“比较运算”,即将两个数据进行比较,判定两个数据是否符合给定的关系。例如,“a b”中的“”表示一个大于关系运算。如果a的值是5,b的值是3,则大于关系运算“”的结果为“真”,即条件成立;如果a的值是2,b的值是3,则大于关系运算“”的结果为“假”,即条件不成立。4.4.1 关系运算符及其优先次序关系运算符及其优先次序1关系运算符C语言提供6种关系运算符:(小于小于),(大于大于),=(大于或等于大于或等于),=(等
13、于等于),!=(不等于不等于)注意注意:在语言中,“等于”关系运算符是双等号“=”,而不是单等号“=”(赋值运算符)。2优先级 (1)在关系运算符中,前4个优先级相同,后2个也相同,且前4个高于后2个。(2)与其它种类运算符的优先级关系 关系运算符的优先级,低于算术运算符,但高于赋值运算符。4.4.2 关系表达式关系表达式 1关系表达式的概念 所谓关系表达式是指,用关系运算符将两个表达式连接起来,进行关系运算的式子。例如,下面的关系表达式都是合法的:ab,a+bc-d,(a=3)=b,(ab)=(bc)2关系表达式的值逻辑值(非“真”即“假”)。由于语言没有逻辑型数据,所以用整数“”表示“逻辑
14、真”,用整数“”表示“逻辑假”。例如,假设num1=3,num2=4,num3=5,则:(1)num1num2的值=0。(2)(num1num2)!=num3的值=1。(3)num1num2num3的值=1。思思考考题题:任意改变num1或num2的值,会影响整个表达式的值吗?为什么?(4)(num1num2)+num3的值=6,因为num1=0”。如果需要描述“x=0”、同时“x=0)&(x10),(x5),!(x=0),(year%4=0)&(year%100!=0)|(year%400=0)(2)运算规则 1)&:当且仅当两个运算量的值都为“真”时,运算结果为“真”,否则为“假”。2)|
15、:当且仅当两个运算量的值都为“假”时,运算结果为“假”,否则为“真”。3)!:当运算量的值为“真”时,运算结果为“假”;当运算量的值为“假”时,运算结果为“真”。例如,假定x=5,则(x=0)&(x10)的值为“真”,(x5)的值为“假”。2逻辑运算符的运算优先级 (1)逻辑非的优先级最高,逻辑与次之,逻辑或最低,即:!(非)&(与)|(或)(2)与其它种类运算符的优先关系 !算术运算 关系运算&|赋值运算 4.5.2 逻辑表达式逻辑表达式 1逻辑表达式的概念 所谓逻辑表达式是指,用逻辑运算符将1个或多个表达式连接起来,进行逻辑运算的式子。在C语言中,用逻辑表达式表示多个条件的组合。例如,(y
16、ear%4=0)&(year%100!=0)|(year%400=0)就是一个判断一个年份是否是闰年的逻辑表达式。逻辑表达式的值也是一个逻辑值(非“真”即“假”)。2逻辑量的真假判定和非 语言用整数“”表示“逻辑真”、用“”表示“逻辑假”。但在判断一个数据的“真”或“假”时,却以和非为根据:如果为,则判定为“逻辑假”;如果为非,则判定为“逻辑真”。例如,假设num=12,则:!num的值=,num=1 num31的值=1。3说明 (1)逻辑运算符两侧的操作数,除可以是和非的整数外,也可以是其它任何类型的数据,如实型、字符型等。(2)在计算逻辑表达式时,只有在必须执行下一个表达式才能求解时,才求解该表达式(即并不是所有的表达式都被求解)。换句话说:1)对于逻辑与运算,如果第一个操作数被判定为“假”,系统不再判定或求解第二操作数。2)对于逻辑或运算,如果第一个操作数被判定为“真”,系统不再判定或求解第二操作数。例如,假设n1、n2、n3、n4、x、y的值分别为1、2、3、4、1、1,则求解表达式“(x=n1n2)&(y=n3n4)”后,x的值变为,而y的值不变,仍等于1!Return