C语言表达式和算术运算符.ppt

上传人:牧羊曲112 文档编号:5426518 上传时间:2023-07-05 格式:PPT 页数:46 大小:292.99KB
返回 下载 相关 举报
C语言表达式和算术运算符.ppt_第1页
第1页 / 共46页
C语言表达式和算术运算符.ppt_第2页
第2页 / 共46页
C语言表达式和算术运算符.ppt_第3页
第3页 / 共46页
C语言表达式和算术运算符.ppt_第4页
第4页 / 共46页
C语言表达式和算术运算符.ppt_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《C语言表达式和算术运算符.ppt》由会员分享,可在线阅读,更多相关《C语言表达式和算术运算符.ppt(46页珍藏版)》请在三一办公上搜索。

1、第3章 表达式和运算符(3),3.5 运算符和表达式,3.5.1 运算符的种类、优先级和结合性 3.5.2 算术运算符和算术表达式 3.5.3 赋值运算符和赋值表达式 3.5.4 增量运算符和增量表达式 3.5.8 逗号运算符和逗号表达式,3.5运算符和表达式,运算符和表达式,优先级是指表达式中包含多个运算符时,先进行优先级高的运算符操作,然后进行优先级低的运算符操作;当表达式中包含的几个运算符的优先级全相同时,由运算符的结合性来决定他们的运算顺序。结合性:同一优先级,自左向右,为左结合性,反之为右结合性。,初等运算符(、()、.、-)单目运算符算术运算符关系运算符逻辑运算符(不包括逻辑非运算

2、符!)赋值运算符逗号运算符,算术运算符和算术表达式,1、基本的算术运算符:(加法运算符,或正值运算符。如:、)(减法运算符,或负值运算符。如:、)*(乘法运算符。如:*)(除法运算符。如:)(模运算符,或称求余运算符,两侧均应为整型数据,如:的值为)。算术运算符的优先级别:*、/、%优先于+、(*、/、%不分),()级别最高,单目运算符优先双目运算符 如 2 4,算术运算符和算术表达式,2、算术表达式(1)表达式由常量、变量、函数和运算符组成的式子称为表达式例:计算圆面积的语句 s=3.14159*r*r;该语句中r,3.14159,3.14159*r,3.14159*r*r,s=3.1415

3、9*r*r都是表达式*是运算符,3.14159是常量,s是变量(2)表达式的求值规则,按照运算符的优先级和结合性的规定顺序进行。一个表达式有一个值及其类型,算术运算符和算术表达式,(3)算术表达式 是由算数运算符和操作数组合成的式子,算术表达式用于各类数值运算。除求余运算符%外,运算对象可以是整型,也可以是实型。如:(-b-sqrt(d)/(2.0*a)运算对象包括常量、变量、函数等。一个常量、变量都可作为一个表达式。例:以下是合法的算术表达式:a*b/c-1.5+a 3*x+1.0/y10*sqrt(x)(x+y)%(x+b-c/d)100 x,算术运算符和算术表达式,说明:1)“%”是求余

4、运算。a%b计算a除以b以后的余数,也是a模b的值。它要求两个运算对象都是整型量,其结果也是整型量。当运算量为负数时,所得结果的符号与被除数(a)相同。如:17%-3=2-19%4=-3-15%-7=-1 5%1.5是非法的算术表达式2)除法运算符“/”进行求商运算。对于不同类型的运算对象,除法表达式计算结果的类型也会不同。例:计算x/y如果x,y为整型,小数部分舍去,没有四舍五入如果x,y中有一个为实型量,则x,y都被化为double类型进行计算,结果为double,算术运算符和算术表达式,运算实例:x,y为整型量:5/2结果为2,整型量 2/5结果为0,整型量x,y其中一个为实型量5.0/

5、2或 5.0/2.0或 5.0/2.0结果为2.5,实型量,练习:,例 1/2=-5/2=-5/2.0=,例 5%2=-5%2=5%-2=1%10=5%1=5.5%2=,0-2-2.5,1-1110,例:a*b/c-1.5+a(x+y)%(x+b-c/d),例如(16/32+1)%6的值_.计算方法:16/3值为5,然后52+l值为9,最后9%6值为3。,算术运算符和算术表达式,3)双目运算符两边的运算类型必须一致才能进行操作,所得结果类型与运算类型一致;如:1.0/2.0=0.5 1/2=04)如果类型不一致,系统将自动把两边转换成相同类型后进行运算;如:1.0/2=0.5 1/2.0=0.

6、5 整型转实型 短整型转长整型 有符号转无符号5)C语言中所有实数的运算均以双精度方式进行,若是单精度数,则在尾数部分补0,使之转化为双精度;,例:将数学式改写成算术表达式一般数学式 算术表达式a(b+c)+dac(a*(b+c)+d)*a*c 3.14159*r*r/2.0 x/(x+y)+1.0/x*y,算术运算符和算术表达式,基本运算符实例,基本运算符实例:main()int a,b,c1,c2;a=3,b=7;c1=b/a;c2=b%a;printf(“c1=%dtc2=%dn”,c1,c2);c1=a/b;c2=a%b;printf(“c1=%dtc2=%dn”,c1,c2);,标准

7、库函数调用,对于某些数学运算,如求平方根,指数,对数运算,C语言中有标准库函数对其进行计算。调用格式:函数名(参数,参数,)其中函数名由系统提供,不同C编译系统,提供的函数名不同,使用时需查阅相关手册。调用函数时,参数的类型必须与系统规定一致调用标准库函数之前,通常要用预编译命令“#include math.h”将所需要的库函数信息包含到用户源文件中,使用数学库函数,在使用数学库函数以前,需使用编译命令#include“math.h”例:计算x(2+xy)的值#include“math.h”main()double x,y;x=5.0;y=7.0;printf(“z=%fn”,x*(2.0+p

8、ow(x,y);,算术表达式中数据类型的转换,3、各类型数值数据的转换 当表达式中的各类数值型数据参与混合运算时,要进行类型转换下面表达式合法:1+3.14159+0+A转换方式自动转换:数据类型自动由低级向高级转换。强制转换:将表达式的运算结果强制转换成指定的数据类型。,算术表达式中数据类型的转换,自动转换规则:,低,高,自动,自动,算术表达式中数据类型的转换,练习:,1若有定义:int a;则语句a=(4*5)+4%5;运行后,a的值为()2设double型变量a,b,c,e均有值;对代数式(3ae)/(bc),不正确的C语言表达式是()。(A)a/b/c*e*3(B)3*a*e/b/c(

9、C)3*a*e/b*c(D)a*e/c/b*33.P59 3.3 3.4,赋值运算符和赋值表达式,1、赋值运算符和赋值表达式赋值表达式的一般格式为:变量=表达式说明:1)赋值运算符左边必须是变量而不能是常量或表达式,右边是合法的c语言表达式;例:j+3=j a*b=c*4 5=x x+1=y*a+3 错误 2)赋值表达式的值是赋值号左边变量被赋值后的值;正确的表示形式:x=10 x=y n=n+1 3)赋值语句可以连续进行 a=b=7+1 等价于a=(b=(c=0),赋值运算符和赋值表达式,2、复合的赋值表达式算术运算符“+-*/%”和赋值运算符”=“结合+=:a+=b+3,等价于a=a+(b

10、+3)-=:a-=b+3,等价于a=a-(b+3)*=:a*=b+3,等价于a=a*(b+3)/=:a/=b+3,等价于a=a/(b+3)%=:a%=b+3,等价于a=a%(b+3)=,=,&=,=,|=,赋值运算符和赋值表达式,注意:1)复合运算符左边必须是变量2)复合运算符右边的表达式计算完成后才参与复合赋值运算3)复合运算符的结合性和优先级等同于简单赋值运算符”=”4)复合运算符常用于某个变量自身的变化,尤其是当左边的变量名很长时,使用复合运算符书写更方便。书写时,两个运算符之间不能有空格。5)语言规定可以使用种复合赋值运算符:,*,|,赋值运算符和赋值表达式,3、赋值类型转换 如果赋值

11、号两边的类型不一致,则将赋值号右边表达式的值的类型转换成赋值号左边变量的类型;例:float f=1.0 int a=2,b=3;char c=A;f=a+b+c;(f为实型量,结果为70.0),赋值结果与类型转换,说明:1)实型数据(包括单、双精度)赋给整型变量时,舍弃实数的小数部分。如:设 i 为整型变量,执行 i=5.34,i 的值为 52)整型数据赋给实型变量时,数值不变,但以浮点数形式存储到变量中。如:对 float 型变量 f,执行 f=23 f 的值为 23.0000003)double赋给float型变量时,截取其前面7位有效数字,存储到float型变量的存储单元;float型

12、变量赋给double时,有效位扩展到16位,在内存中以8个字节存储,赋值结果与类型转换,例:void main()int i;float f;i=5.34;f=23;printf(i=%d,f=%fn,i,f);,结果:i=5,f=23.000000,赋值结果与类型转换,4)char、int、long等类型的转换“短”数据赋给“长”变量符号扩展:若最高位为 1(负数),则变量高字节位补 1;反之,补 0。,void main()char c;short int i;c=43;i=c;printf(i=%hdn,i);c=376;i=c;printf(i=%hdn,i);,43-2,赋值结果与类

13、型转换,赋值结果与类型转换,“长”数据赋给“短”变量截断:只将数据的低字节位原封不动送到变量中,void main()short int i;long l=6324232L;i=l;printf(i=%hdn,i);,赋值结果与类型转换,5)无符号整型与有符号整型,例:void main()unsigned a;int b=-1;a=b;printf(%d-%un,b,a);a=65534u;b=a;printf(%d-%un,b,a);,结果:-1-65535-2-65534,赋值运算符和赋值表达式,赋值表达式 由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。一般形式为:

14、例如:“5”是一个赋值表达式,赋值运算符和赋值表达式,对赋值表达式求解的过程是:求赋值运算符右侧的“表达式”的值;赋给赋值运算符左侧的变量。例如:赋值表达式“=3*5”的值为15,执行表达式后,变量a的值也是15。注意:一个表达式应该有一个值左值(lvalue):赋值运算符左侧的标识符变量可以作为左值;而表达式就不能作为左值(如a+b);常量也不能作为左值,,赋值运算符和赋值表达式,请分析下面的赋值表达式(a=3*5)=4*3分析:先执行括弧内的运算,将15赋给a,然后执行4*3的运算,得12,再把12赋给a。最后a的值为12,整个表达式的值为12。可以看到(a=3*5)出现在赋值运算符的左侧

15、,因此赋值表达式(a=3*5)是左值注意:在对赋值表达式(a=3*5)求解后,变量a得到值15执行(a=3*5)=4*3时,实际上是将4*3的积12赋给变量a,而不是赋给3*5不能写成:a=3*5=4*3,赋值运算符和赋值表达式,赋值表达式也可以包含复合的赋值运算符。如:a+=a-=a*a分析:此赋值表达式的求解步骤如下 先进行“*”的运算,相当于*,a的值为144132。再进行“”的运算,相当于=a+(-132),a的值为132-132-264。,赋值运算符和赋值表达式,补充例题 main()int i=5;i+=i*=i+6;printf(i=%dn,i);,分析表达式i+=i*=i+6的

16、执行过程:结合方向是从右到左,先计算i+6的值为11;计算后i的值不变仍为5;再计算i*=11,相当于i=i*11,因此i=5*11,i的值变成55;最后计算i+=55,相当于i=i+55,因此i=55+55,i的值最后变成110。,赋值运算符和赋值表达式,补充例题 main()int i=-5,j=0 x9961,k;unsigned int u;unsigned char ch;u=i;ch=j;k=ch;printf(u=%x,u=%u,ch=%c,k=%dn,u,u,ch,k);运行结果:u=fffb,u=65531,ch=a,k=97,赋值运算符和赋值表达式,例:赋值语句程序实例ma

17、in()int a,b,c;a=b=c=9;printf(“a=%d,b=%d,c=%dn”,a,b,c);a=(b=4)+(c=6);printf(“a=%d,b=%d,c=%dn”,a,b,c);a+=b+c;printf(“a=%d,b=%d,c=%dn”,a,b,c);a+=a-=a*=a;a+=a-=a+a;printf(“a=%dn”,a);,9 9 9,10 4 6,20 4 6,0,赋值运算符和赋值表达式,4、强制类型转换格式:(数据类型说明符)(表达式)注意:1)强制转换属单目运算,运算优先级为22)强制转换得到的是中间变量类型,原变量类型不变。例:int x,y;float

18、 z;(float)(x+y);(int)z+x;,例:(double)1/2 的值为0.5,因为(double)1 将整型数 1 转换成1.0(双精度类型),1.0/2值为0.5。,赋值运算符和赋值表达式,例3.11强制类型转换。#include stdio.hmain()float x;int i;x=3.6;i=(int)x;printf(x=%f,i=%dn,x,i);,增量运算符和增量表达式,1、自增、自减运算符 作用:自增运算符+:使变量的值增1 自减运算符-:使变量的值减12、两种形式前缀形式:+i,-i(在使用i之前,先使i的值加1(减1)后缀形式:i+,i-(在使用i之后,再

19、使i的值加1(减1),增量运算符和增量表达式,例:j=+i;j=i+;等价于 等价于 j=i+1;j=i;i=i+1;i=i+13、结合方向与优先级:+,-的结合方向:从右至左+,-的优先级:,例:int j=5,i=1,k,n;n=-+i;k=-j*2;,-2 8,增量运算符和增量表达式,例:若 i=1;j=+i;则j 的值为2(i先加)若 i=1;j=i+;则j 的值为1(i后加)运算符和运算对象的关系有结合方向如:若i=1;j=-i+;则j 的值为-1。(i 后加,i的值为2)负号与+,-结合方向都是从右到左,不要看成 j=(-i)+,(-i)+是错误的表达式,最好分成多句。j=-i;i

20、+;例:若 int k,i=2,j=4;则表达式 k=(+i)*(j-)的值是()。,12,增量运算符和增量表达式,补充补充例题:main()int i=3,j,k,m,n;j=i+*+i;k=-i*-i;m=+i*+i;n=+i*i-;printf(j=%d,k=%d,m=%d,n=%dn,j,k,m,n);,j=16,k=9,m=25,n=36,逗号运算符和逗号表达式,逗号运算符运算符:,作用:连接两个表达式。优先级:最低结合方向:从左至右逗号表达式一般形式:表达式1,表达式2,表达式n例:i=1,j=0 x/(y+1),a+b,3*4,逗号运算符和逗号表达式,求值过程:从左至右依次求表达

21、式1,表达式2,表达式n的值,最后一个表达式的值为整个逗号表达式的值。例:x=(a=3,6*3)注意:逗号运算符优先级最低,要注意加括号。例:比较 x=(a=3,6*3)与 x=a=3,6*3并不是任何地方出现的逗号都是作为逗号运算符。例如函数参数也是用逗号来间隔的:printf(%d,%d,%d,a,b,c);,练习:,例:逗号表达式a=3*5,a*4赋值运算符的优先级别高于逗号运算符,因此应先求解*5。的值为5,然后求解*,得。整个逗号表达式的值为练习:(,*),*3,赋值表达式,将一个逗号表达式的值赋给,的值等于,逗号表达式,包括一个赋值表达式和一个算术表达式,的值为,整个逗号表达式的值为18。,逗号运算符和逗号表达式,实例main()int i,j;j=(i=2,i+,i+);printf(i=%d,j=%dn,i,j);此处的 i+,i+与前面我们介绍的i+*i+的运算法则是不一样的,它可以等同与+i,i+能不能等同与:i+,+i。,4 3,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号