C语言运算符和表达式(精品).ppt
C语言运算符和表达式考核知识点:1.C语言运算符的 种类、运算符优先级和结合行。2.不同类型数据间的转换和预算。3.C语言表达式的各种类型和求值规则。4.位运算的 含义及使用。5.简单的位运算。本章考核内容分值比例约位10%。C语言运算符简介oC语言的运算符范围很宽,几乎把所有的基本操作都作为运算符处理,具体见右表:名称运算符算术运算符+、-、*、/、%关系运算符,=,=,!=,,,算术运算符关系运算符逻辑运算符(不包括!)条件运算符赋值运算符逗号运算符.说明:以上优先级别由左到右递减,单目运算符优先级最高,逗号运算符优先级最低.强制类型转换运算符o可以利用强制类型转换符将一个表达式转换成所需类型,其一般形式为:(类型名)(表达式)例如:(char)(x+y);/*将(x+y)的值强制转换为字符型*/(double)(m*n);/*将(m*n)的值强制转换为 double类型*/系统提示:表达式应该用括号括起来,如果写成(char)x+y,则表示只将X转换为字符型,然后与Y相加。逗号运算符和逗号表达式o用逗号运算符将几个表达式连接起来,例如a=b+c,b=a*a,c=a+b,称为逗号表达式。o一般形式为:表达式1,表达式2,表达式3,表达式n 逗号表达式的求解过程是:先求解表达式1,然后依次求解表达式2,直到表达式n的值。整个逗号表达式的值就是表达式n的值。需要注意的是:逗号运算符是所有运算符中级别最低的。算术运算符和算术表达式o基本的算术运算符 1.+(加法运算符或正值运算符,如2+6)2.-(减法运算符或负值运算符,如6-3)3.*(乘法运算符,如2*8)。4./(除法运算符,如6/5)。5.%(求余运算符,%两侧应为整型,如9/7的值为2)。说明:两个整数相除的结果为整型,如5/3的结果为1,舍去小数部分,如果参加+、-、*、/运算的两个数中有一个为实数,则结果是double类型。自动转换,由小的类型到大的类型。算术表达式和运算符的优先级与结合性o算术表达式是用算术运算符和括号将运算量连接起来、符合C语言语法规则的表达式。运算对象包括 函数、常量、变量等。o在计算机中,算术表达式的求值规律与数学中的四则运算规律类似,其运算规则和要求如下:1.在算术表达式中,可使用多层圆括号,但括号必须配对。运算时从内层圆括号开始,由内向外依次计算各表达式的值。2.在算术表达式中,对于不同优先级的运算符,可按运算符的优先级由高到低进行运算,若表达式中运算符的优先级相同,则按运算符的结合方向运算。3.如果一个运算符两侧的操作数类型不同,则先利用自动转换或强制类型转换,使两者具有相同类型,然后进行运算。自增自减运算符o作用:使变量的值增1或减1.如:+i,-i(在使用i之前,先使i的值加1或减1)。i+,i(在使用i之后,使i的值加1或减1)。系统提示:(1)只有变量才能用自增运算符和自减运算符,而常量和表达式不能用,如10+或(x+y)-都是不合法的。(2)+和的结合方向是”自右向左”,如-i+,i的左边是负号运算符,右边使自增运算符,负号运算符和自增运算符都是“自右向左”结合的,相当于-(i+).在循环语句中常用到自增(减)运算符,在指针中也常用到该运算符,一定要弄清楚i+和+i的区别。赋值运算符合赋值表达式o赋值符号“=”就是赋值运算符,作用是将一个数据赋给一个变量或将一个变量的值赋给另一个变量,由赋值运算符组成的表达式称为赋值表达式。一般形式为:变量名=表达式在程序中可以多次给一个变量赋值,每赋值一次,与他相应的存储单元中的数据就被更新一次,内存中当前的数据就是最后一次所赋值的那个数据。复合的赋值运算符在赋值运算之前加上其他运算符可以构成复合赋值运算符。其中与算术运算有关的复合运算符是:+=,-=,*=,/=,%=。例如:求表达式a+=a-=a*a的值,其中a的初值为12.步骤:(1)先进行“a-=a*a”的运算,相当于 a=a-a*a=12-144=-132(2)再进行“a+=-132”运算,相当于 a=a+(-132)=-132-132=-264系统提示:两个符号之间不可以有空格,复合赋值运算符的优先级与赋值运算符的相同。表达式n+=1等价于n=n+1,作用是取变量n中的值增1再赋给变量n,其他复合的赋值运算符的运算规则依次类推。赋值运算中的类型转换o如果赋值运算符两侧的类型不一致,再赋值前系统将自动先把右侧表达式求得的数值按赋值号左边变量的类型进行转换,但这种转换仅限于某些数据之间,通常称为“赋值兼容”。对于另一些数据,例如,后面将要讨论的地址值,就不能赋给一般的变量,称为“赋值不兼容”。常用的转换规则如下:1.当实型数据赋值给整型变量时,将实型数据的小数部分截断。如:int x;执行“x=5.21;”后,x的值为5;2.当整型数据赋值给实型变量时,数值不变,但以浮点数形式存储到是型变量中。如:float x=45;输出x的结果为:45.00000经典题解1.以下程序的输出结果为()A)a=4,i=4B)a=5,i=4C)a=4,i=5D)a=5,i=5正确答案是:()#include main()int i=4,a;a=i+;printf(“a=%d,i=%d”,a,i);本题考查的是自增运算符及赋值运算符的综合使用问题。自增运算符是一元运算符,其优先级比赋值运算符高。把表达式i+的值赋予a,由于i+的结果为当前i的值(当前i的值为4),所以i+的值为4,得到a的值为4.同时,计算了i+后,i由4变为5.故正确答案为:C