《(5.2.3)--运算符与表达式.ppt》由会员分享,可在线阅读,更多相关《(5.2.3)--运算符与表达式.ppt(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、3.3 运算符和表达式1运算符1算算术运算运算符符+-*/%+-2关系运算符关系运算符 =!=3逻辑运算符运算符!&|4位位运算符运算符|&5赋值运算符运算符=及其及其扩展展赋值运算符运算符6条件条件运算符运算符?:7逗号运算符逗号运算符,8指指针运算符运算符*&9求字求字节数运算符数运算符sizeof10强制制类型型转换运算符运算符(类型型)11成成员运算符运算符.-12下下标运算符运算符 13其他其他如函数如函数调用运算符用运算符()2常用的算数运算符运算符运算符含含义举例例结果果+正号运算符(单目运算符)aa的值-负号运算符(单目运算符)-aa的算术负值*乘法运算符a*ba和b的乘积除法
2、运算符aba除以b的商求余运算符aba除以b的余数加法运算符aba和b的和减法运算符a-ba和b的差两个实数相除的结果是双精度实数,两个整数相除的结果为整数%运算符要求参加运算的运算对象(即操作数)为整数,结果也是整数3自增(+)自减(-)运算符+i,-i在使用之前,先使的值加/减1i+,i-在使用之后,使的值加/减1+i是先执行i=i+1,再使用i的值;而i+是先使用i的值,再执行i=i+1。int i=3,j;j=+i;/i的值先变成4,再赋给,j的值为int i=3,j;j=i+;/先将i的值3赋给,的值为,然后变为int i=3;printf(“%d”,+i);/输出int i=3;p
3、rintf(“%d”,i+);/输出3建议谨慎使用+和-运算符,只用最简单的形式,即i+,i-,且把它们作为单独的表达式。4算术表达式和运算符的优先级与结合性用算术运算符和括号将运算对象(也称操作数)连接起来的、符合语法规则的式子称为C算算术表达式表达式。运算对象包括常量、变量、函数等。C语言规定了运算符的优先先级(例如先乘除后加减),还规定了运算符的结合性合性。在表达式求值时,先按运算符的优先级别顺序执行,当在一个运算对象两侧的运算符的优先级别相同时,则按规定的“结合方向”处理。语言规定了各种运算符的结合方向(结合性),“自左至右的结合方向”又称“左左结合性合性”,即运算对象先与左面的运算符
4、结合。相反“自右至左的结合方向”称为“右右结合性合性”。5不同类型数据间的混合运算如果一个运算符两侧的数据类型不同,则先自动进行类型转换,使二者成为同一种类型,然后进行运算。整型、实型、字符型数据间可以进行混合运算。规律律为:+、-、*、/运算的两个数中有一个数为float或double型,结果是double型,因为系统将所有float型数据都先转换为double型,然后进行运算。如果int型与float或double型数据进行运算,先把int型和float型数据转换为double型,然后进行运算,结果是double型。字符(char)型数据与整型数据进行运算,就是把字符的ASCII代码与整型
5、数据进行运算。如果字符型数据与实型数据进行运算,则将字符的ASCII代码转换为double型数据,然后进行运算。6不同类型数据间的混合运算int i=3,j;float f=2.5;double d=7.5;printf(%lf,10+a+i*f-d/3);程 序 分 析10+a+i*f-d/3进行10+a的运算,a的值是整数97,运算结果为107。由于“*”比“+”优先级高,先进行i*f的运算。先将i与f都转成double型,运算结果为7.5,double型。整数107与*的积相加。先将整数107转换成双精度数,相加结果为114.5,double型。进行d/3的运算,先将3转换成double
6、型,d/3结果为2.5,double型。将10+a+i*f的结果114.5与d/3的商2.5相减,结果为112.0,double型。7不同类型数据间的混合运算【例3.3】给定一个大写字母,要求用小写字母输出。解解题思路思路:字符数据以ASCII码存储在内存中,形式与整数的存储形式相同。所以字符型数据和其他算术型数据之间可以互相赋值和运算。大小写字母之间的关系是:同一个字母,用小写表示的字符的ASCII代码比用大写表示的字符的ASCII代码大32。#include int main()char c1,c2;c1=A;/将字符A的ASCII代码放到c1变量中c2=c1+32;/得到字符a的ASCI
7、I代码,放在c2变量中printf(%cn,c2);/输出c2的值,是一个字符printf(%dn,c2);/输出c2的值,是字符a的ASCII代码return 0;一个字符数据既可以以字符形式输出,也可以以整数形式输出。0 1 1 0 0 0 0 1 存储(ASCII码)%c%d 输出格式符 a 97显示结果8强制类型转换自动类型转换类型转换在运算时不必用户干预,系统自动进行的类型转换。当自动类型转换不能实现目的时,可以用强制类型转换。9强制类型转换运算符(类型名型名)(表达式表达式)(double)a将转换成double型(int)(x+y)将x+y的值转换成int型(float)(5%3
8、)将5%3的值转换成float型(int)x+y只将x转换成整型,然后与y相加int a;float x,y;double b;a=(int)x进行强制类型运算(int)x后得到一个int类型的临时值,它的值等于的整数部分,把它赋给a,注意x的值和类型都未变化,仍为float型。该临时值在赋值后就不再存在了。10赋值运算符“=”“=”的作用是将一个数据赋给一个变量。例如:a=3的作用是执行一次赋值操作(或称赋值运算)。把常量3赋给变量a。也可以将一个表达式的值赋给一个变量。11*复合赋值运算符在赋值符=之前加上其他运算符,可以构成复合的运算符。凡是二元(二目)运算符,都可以与赋值符一起组合成复
9、合赋值符。有关算术运算的复合赋值运算符有+=,=,=,=,=。a+=3等价于a=a+3x*=y+8 等价于x=x*(y+8)x=3等价于x=x3注意如果赋值符右边是包含若干项的表达式,则相当于它有括号有括号。例如,x%=y+3等价于x=x%(y+3),切勿错写为x=x%y+3。12赋值表达式:变量 赋值运算符 表达式赋值表达式的作用是将一个表达式的值赋给一个变量,因此赋值表达式具有计算和赋值的双重功能。对赋值表达式求解的过程程是:求赋值运算符右侧的“表达式”的值,赋给赋值运算符左侧的变量。既然是一个表达式,就应该有一个值,表达式的表达式的值等于等于赋值后左后左侧变量的量的值。赋值运算符左侧应该
10、是一个可修改值的“左左值”(left value,简写为lvalue)。能出现在赋值运算符右侧的表达式称为“右右值”(right value,简写为rvalue)。注意并不是任何形式的数据都可以作为左值的,左左值应当当为存存储空空间并可以被并可以被赋值。变量可以作为左值,而算术表达式a+b就不能作为左值,常量也不能作为左值。13赋值表达式:变量 赋值运算符 表达式a=(b=5)括号内的b=5是一个赋值表达式,它的值等于5。执行表达式“a=(b=5)”,就是执行b=5和a=b两个赋值表达式。因此a的值等于5,整个赋值表达式的值也等于5。赋值运算符按照“自右而左”的结合顺序,因此,(b=5)外面的
11、括号可以不要,即a=(b=5)和a=b=5等价,都是先求b=5的值(得5),然后再赋给a。赋值表达式使得赋值操作不仅可以出现在赋值语句中,而且可以出现在其他语句中(如输出语句、循环语句等)如:printf(%d,a=b);如果b的值为3,则输出a的值(也是表达式a=b的值)为3。在一个printf函数中完成了赋值和输出双重功能。a=b=c=5 表达式值为5,a,b,c值均为5a=5+(c=6)表达式值为11,a值为11,c值为6a=(b=4)+(c=6)表达式值为10,a值为10,b等于4,c等于6a=(b=10)/(c=2)表达式值为5,a等于5,b等于10,c等于2a=(b=3*4)表达式
12、值为12,a,b值均为1214*赋值过程中的类型转换如果赋值运算符两侧的类型一致,则直接进行赋值。int i;i=234;/直接将整数234存入变量i的存储单元中如果赋值运算符两侧的类型不一致,但都是基本类型时,在赋值时要进行类型转换。类型转换是由系统自动进行的,转换的规则是:1.将浮点型数据(包括单、双精度)赋给整型变量时,先对浮点数取整,即舍弃小数部分,然后赋予整型变量。2.将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中。3.将一个double型数据赋给float变量时,先将双精度数转换为单精度,即只取67位有效数字,存储到float型变量的4个字节中。应注意双精度数
13、值的大小不能超出float型变量的数值范围;将一个float型数据赋给double型变量时,数值不变,在内存中以8个字节存储,有效位数扩展到15位。4.字符型数据赋给整型变量时,将字符的ASCII代码赋给整型变量。5.将一个占字节多的整型数据赋给一个占字节少的整型变量或字符变量时,只将其低字节原封不动地送到被赋值的变量(即发生“截断”)。15变量赋初值可以用赋值语句对变量赋值,也可以在定义变量时对变量赋以初值。int a=3;/指定a为整型变量,初值为3;相当于int a;a=3;float f=3.56;/指定f为浮点型变量,初值为3.56char c=a;/指定c为字符变量,初值为aint a,b,c=5;/指定a,c为整型变量,但只对c初始化,c的初值为;/相当于int a,b,c;c=5;对几个变量赋予同一个初值:int a=3,b=3,c=3;int a=b=c=3;/可以先定义,再用赋值语句,即int a,b,c;a=b=c=3;16