《C语言运算符和表达式(精品).ppt》由会员分享,可在线阅读,更多相关《C语言运算符和表达式(精品).ppt(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、运算符和表达式运算符和表达式夏涛 运算符与表达式计算机与运算密不可分。运算是对数据的加工。最基本的运算形式常常可以用一些简洁的符号记述,这些符号称为运算符或操作符。C表达式:用运算符将运算对象(也称操作数)连接起来的、符合C语法规则的式子。被运算的对象-数据称为运算量或操作数。运算量可以是数字,也可以是字符;运算量可以是常量,也可以是变量,还可以是函数。表达式描述了对哪些数据,以什么顺序施与什么样的操作。它由运算符与运算量组成。2+3运算量运算量运算符合法的表达式:1、a+32、1.25+sin(90)3、ac4、a=1998与代数运算符、代数表达式的差异1、不是所有的代数运算符都被C语言支持
2、。2、同样一个功能的运算符的书写形式是有差异的。3、有些代数运算符需要通过函数实现。4、有些运算符在普通代数式中是没有的。5、C语言表达式和代数表达式的书写格式是有差异的。6、不要吝啬使用括号。与运算运算运运 算:算:对数据进行计算处理的过程。例:y=x*x、y=cos(x)、ab。运算符运算符:表示不同运算的符号(它代表各种运算的含义)。例:+、-、*、b。运算符运算符种类种类 算术运算符、关系运算符、逻辑运算符、条件运算符等。优先级优先级 混合运算时,各种运算的优先次序。结合性结合性 混合运算时,各种运算是从运算符左边还是右边开始进行。运算与运算符运算与运算符 运算符号运算符号注意1、运算
3、符的功能、运算符的功能2、与运算量的关系、与运算量的关系A、要求运算量的个数:要求两个运算量参要求运算量的个数:要求两个运算量参加运算,称为双项(双元、双目)运算符;有的加运算,称为双项(双元、双目)运算符;有的运算符只允许有一个运算量,称为单项(一元、运算符只允许有一个运算量,称为单项(一元、一目)运算符。一目)运算符。B、要求运算量的类型。要求运算量的类型。3、运算的优先级别、运算的优先级别4、结合方向、结合方向5、所得结果的类型,即表达式的类型。、所得结果的类型,即表达式的类型。%:只能对整数进行该运算/:整数运算的结果为整数运算符的优先级与结合性运算符的优先级:运算符优先级表,按照由运
4、算符的优先级:运算符优先级表,按照由高向低的次序执行;高向低的次序执行;运算符的结合性:算术运算符的结合方向。运算符的结合性:算术运算符的结合方向。“自左至右自左至右”或或“自右至左自右至左”。例如:=是“自右至左”结合的;a=b=c=5 就相当于 a=(b=(c=5);运算的优先级运算的优先级今后再讲今后再讲基本运算符与基本表达式1、算术运算符与算术表达式、算术运算符与算术表达式2、关系运算符与关系表达式、关系运算符与关系表达式3、逻辑运算符与逻辑表达式、逻辑运算符与逻辑表达式4、赋值运算符与赋值表达式、赋值运算符与赋值表达式基本的算术运算符+加法运算符加法运算符 -减法运算符减法运算符*乘
5、法运算符乘法运算符 /除法运算符除法运算符%模运算符(求余运算符)模运算符(求余运算符)注意:注意:1、两个整数相除的结果为整数,舍弃小数、两个整数相除的结果为整数,舍弃小数部分;部分;2、除数和被除数中有一个为实数,则商为、除数和被除数中有一个为实数,则商为double型型思考:思考:int a=3;float b=2.5;那么那么a/b的的结果结果为何不是为何不是float型?型?3、求余运算要求、求余运算要求%的两侧均为整型数据。的两侧均为整型数据。百钱买百鸡main()int cocks,hens,chicks;cocks=0;while(cocks=19)hens=0;while(h
6、ens=33)chicks=100-cocks-hens;if(5*cocks+3*hens+chicks/3)=100)printf(“%d%d%dn”,cocks,hens,chicks);hens=hens+1;cocks=cocks+1;两整数相除,商取整数例题例题例题例题分析程序及输出结果分析程序及输出结果:main()char c1=A,c2;int m;c2=c1+32;m=c1+32;printf(c1 c2 m=%c%c%c n,c1,c2,m);printf(c1 c2 m=%d%d%d n,c1,c2,m);有错误吗有错误吗?运行结果运行结果:运行程序(2-0.c)c1
7、c2 m=A a ac1 c2 m=A a ac1 c2 m=65 97 97c1 c2 m=65 97 97将字符 A 的ASCII 代码(65)存入字符变量 c1 中!字符变量 c2和整变量m 保存的都是 97,此代码对应的是字母 a!注意:字符型与整型“通用”%c 描述字符型;%d 描述整型自增、自减运算符注意:注意:1、只能用于变量,不能用于常量或表达式;只能用于变量,不能用于常量或表达式;2、运算符的结合方向、运算符的结合方向为为“自右至左自右至左”。使变量的值增使变量的值增1或减或减1。名名 称称 运算符运算符 说说 明明 例例 增增 1(前缀)(前缀)+先加先加1,后使用。,后使
8、用。+i 增增 1(后缀)(后缀)+先使用,后加先使用,后加1。i+减减 1(前缀)(前缀)-先减先减1,后使用。,后使用。-i 减减 1(后缀)(后缀)-先使用,后减先使用,后减1。i-例:int j,i=3;例:int j,i=3;j=+i;j=i+;结果变量j的值为3,结果j的值为4。变量i将3赋给j后自加1变为4。赋值运算符先计算等号右边的表达式,然后将其值赋给先计算等号右边的表达式,然后将其值赋给等号左边的变量。等号左边的变量。C语言赋值运算符与数学中的等号其含义有语言赋值运算符与数学中的等号其含义有着本质的不同。着本质的不同。名名 称称 赋值运算符赋值运算符赋赋 值值 =格式格式:
9、变量变量=表达式表达式;例:例:x=10;y=x*x+x;复合的赋值运算符1、复合的赋值运算符:在赋值符、复合的赋值运算符:在赋值符“=”之前加上其之前加上其它运算符,则构成了复合的运算符。它运算符,则构成了复合的运算符。2、C语言规定可以使用语言规定可以使用10种复合赋值运算符:种复合赋值运算符:+=,-=,*=,/=,%=,=,&=,=,|=3、复合赋值运算符相当于将运算符左侧的变量与右、复合赋值运算符相当于将运算符左侧的变量与右侧的常量(或表达式的值)进行相关的运算。侧的常量(或表达式的值)进行相关的运算。加赋值加赋值 +=a+=b a=a+b 减赋值减赋值 -=a-=b a=a-b乘赋
10、值乘赋值 *=a*=b a=a*b除赋值除赋值 /=a/=b a=a/b模赋值模赋值%=a%=b a=a%b赋值表达式1、由一个赋值运算符将一个变量和一个表达式、由一个赋值运算符将一个变量和一个表达式连接起来的式子称为连接起来的式子称为“赋值赋值表达式表达式”。2、作用:将赋值运算符右侧的、作用:将赋值运算符右侧的“表达式表达式”的值的值赋给左侧的变量。赋给左侧的变量。3、上述的、上述的“表达式表达式”可以是一个赋值表达式。可以是一个赋值表达式。4、赋值的对象,或者说赋值运算符的左边,必、赋值的对象,或者说赋值运算符的左边,必须是一个变量,而不能是一个函数或常量。须是一个变量,而不能是一个函数
11、或常量。变量初始化在说明变量时给它赋一个初值,只需在变量名在说明变量时给它赋一个初值,只需在变量名后面加一等号及一个常数。这就叫做变量初始化。后面加一等号及一个常数。这就叫做变量初始化。它的一般形式是:它的一般形式是:类型类型 变量名变量名=常数;常数;注意:注意:没有赋初值的变量,并不意味着该变量中没有没有赋初值的变量,并不意味着该变量中没有数值。数值。全程变量在没有明确初始化的情况下由程序自全程变量在没有明确初始化的情况下由程序自动赋零。动赋零。局部变量在未初始化时其值是不确定的,局部变量在未初始化时其值是不确定的,是一是一个随机数个随机数。例:例:int a=3;int b=c=0;fl
12、oat f=5.8;char c1=e;变量的赋值变量的赋值1、初始化:说明的同时赋值初始化:说明的同时赋值 int i=5,j=6;float x=10.1;char name=A;2、先先说明,后赋值说明,后赋值int i;float x=10.1;char name;i=5;name=A 赋值运算符的副作用1、费解、容易误解、费解、容易误解-对人的副作用对人的副作用克服方法:尽量把程序写得易懂一些。效率和易读克服方法:尽量把程序写得易懂一些。效率和易读性是一对主要矛盾。可靠性第一,效率第二。性是一对主要矛盾。可靠性第一,效率第二。措施:将费解处分解;加一些措施:将费解处分解;加一些“不不
13、必要必要”的括号;的括号;加注释说明。加注释说明。2、不定解、不定解-对机器的副作用对机器的副作用原因:原因:C语言中运算符类型丰富,对表达式的求值语言中运算符类型丰富,对表达式的求值顺序无统一规定。同一程序,在不同的计算机系统运行顺序无统一规定。同一程序,在不同的计算机系统运行时结果不同。时结果不同。措施:使表达式分解,在任何计算机上运行都能得措施:使表达式分解,在任何计算机上运行都能得到同一结果。到同一结果。c=b*=a+2;x=i+j;a=a+2;b=b*a;c=b;或:c=a+2;c=b*c;或:c=b*=(a+2);或:c=b*=a+2;/*c=a+2;c=b*c*/x=i+j;i+
14、;j=3;i=(k=j+1)+(j=5);j=3;k=j+1;j=5;i=k+j;变量的数据类型变量的数据类型、字节长度、位数、数据范围字节长度、位数、数据范围数据存储格式doublefloatlongshortchar符点表示定点表示不同类型数据间的转换1、提升与降格、提升与降格2、实数变整数,截去小数;、实数变整数,截去小数;double变变float,去掉多余的有效数字,四舍五入。去掉多余的有效数字,四舍五入。3、丢失精度:由、丢失精度:由2引起,或由于有效数字位引起,或由于有效数字位数引起。数引起。4、结果不确定:符点数降格,当数据值超、结果不确定:符点数降格,当数据值超过了目标类型的
15、取值范围,所得到的结果是不确过了目标类型的取值范围,所得到的结果是不确定的。定的。5、截去高位:长整数转换为短整数时,要、截去高位:长整数转换为短整数时,要将高位截去,只将低字节的内容保留。将高位截去,只将低字节的内容保留。指出下边程序在执行过程中各个变量的取值。指出下边程序在执行过程中各个变量的取值。main()int x=315;char ch=a,c;float f=3.5;c=x;x=f;f=c;f=x;315的二进制形式为:的二进制形式为:0000000100111011其赋给字符变量其赋给字符变量 c 取低八位即取低八位即 00111011所以所以 c 的值为的值为:59。x 的值
16、为的值为:3。f 的值为的值为:59.0。f 的值为的值为:3.0。不同类型数据间的转换main()double a=123456.789098765;float b=a;long c=a;int i=a;printf(“a=%lf,b=%f;c=%ld,i=%dn”,a,b,c,i);运行结果:a=123456.789099,b=123456.789062,c=123456,i=-7616各类型数据间的混合运算整型、实型、字符型数据间可以混合运算。整型、实型、字符型数据间可以混合运算。不同类型的数据要先转换成同一类型,然后进行运算。不同类型的数据要先转换成同一类型,然后进行运算。转换的基本原
17、则:转换的基本原则:保证运算精度!保证运算精度!必定的转换:必定的转换:1、float变变double2、char,short变变int运算运算对象为不同类型时的转换:对象为不同类型时的转换:1、转换方法:转换方法:int unsigned long double2、系统自动进行。系统自动进行。赋值中的类型转换1、类型转换是指不同类型变量混合使用的情况。、类型转换是指不同类型变量混合使用的情况。2、规则:赋值运算符右边的值变为赋值运算符左边变量所属的类型、规则:赋值运算符右边的值变为赋值运算符左边变量所属的类型3、整型转换为实行和实型转换为双精度实型,并不增加任何准确度和精确度、整型转换为实行
18、和实型转换为双精度实型,并不增加任何准确度和精确度4、普通类型转换的结果、普通类型转换的结果强制类型转换通过使用强制类型转换,可以强迫表达通过使用强制类型转换,可以强迫表达式的值转换为某一特定类型。一般的形式式的值转换为某一特定类型。一般的形式是:是:(类型)(类型)表达式表达式其中类型是其中类型是C语言的标准数据类型。语言的标准数据类型。注意:强制类型转换时,得到一个所需注意:强制类型转换时,得到一个所需类型的中间变量,原来变量的类型未发生类型的中间变量,原来变量的类型未发生变化。变化。逗号运算符逗号运算符用于将多个表达式串在一起。逗号运算符用于将多个表达式串在一起。逗号运算符是所有运算符中
19、级别最低的。逗号运算符是所有运算符中级别最低的。逗号运算符的左边总是不返回的,也就是说逗号右逗号运算符的左边总是不返回的,也就是说逗号右边表达式的值才是整个表达式的值。边表达式的值才是整个表达式的值。实质:逗号使一系列的运算逐个进行。实质:逗号使一系列的运算逐个进行。逗号用在赋值语句的右边,将一系列表达式逐个分逗号用在赋值语句的右边,将一系列表达式逐个分隔开,而赋给变量的值是最后一个表达式的值。隔开,而赋给变量的值是最后一个表达式的值。逗号运算符和普通英语中的逗号运算符和普通英语中的and一词有相同的含义,一词有相同的含义,就象词组就象词组“do this and this and this”一样。一样。请注意区分参数间的分隔符和逗号运算符。请注意区分参数间的分隔符和逗号运算符。逗号表达式用逗号运算符将两个表达式连接起来,称为逗号表用逗号运算符将两个表达式连接起来,称为逗号表达式。逗号表达式的一般形式为:达式。逗号表达式的一般形式为:表达式表达式1,表达式,表达式2,.,表达式,表达式n一个逗号表达式可以与另外一个表达式组成一个新一个逗号表达式可以与另外一个表达式组成一个新的逗号表达式。的逗号表达式。例如:y=10;x=(y=y-5,25/y);Y的初始值为10,减5后为5再将25除以5所得结果为5,所以x的值为5。