c语言运算符和表达式ppt课件

上传人:ni****g 文档编号:569510721 上传时间:2024-07-30 格式:PPT 页数:69 大小:1.02MB
返回 下载 相关 举报
c语言运算符和表达式ppt课件_第1页
第1页 / 共69页
c语言运算符和表达式ppt课件_第2页
第2页 / 共69页
c语言运算符和表达式ppt课件_第3页
第3页 / 共69页
c语言运算符和表达式ppt课件_第4页
第4页 / 共69页
c语言运算符和表达式ppt课件_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《c语言运算符和表达式ppt课件》由会员分享,可在线阅读,更多相关《c语言运算符和表达式ppt课件(69页珍藏版)》请在金锄头文库上搜索。

1、内容回顾内容回顾v单个字符的输入和输出函数单个字符的输入和输出函数v字符输出函数字符输出函数putchar(c )putchar(c )v字符输入函数字符输入函数getchar( )getchar( )v格式化输入格式化输入(scanf)(scanf)输出输出(printf)(printf)函数的用法函数的用法 整型数据的输入输出整型数据的输入输出 (%d,%o,%x,%u)(%d,%o,%x,%u) 实型数据的输入输出实型数据的输入输出(%f,%e,%lf,%le)(%f,%e,%lf,%le) 字符型数据的输入输出字符型数据的输入输出(%c)(%c)v 常用函数常用函数( (包含头文件包含

2、头文件, ,函数原型函数原型) ) 1LOGO第三章第三章第三章第三章2本章内容本章内容3运算符简介运算符简介vC C语言中,数据是程序处理的对象,运算是语言中,数据是程序处理的对象,运算是对数据进行加工的过程,体现数据之间的各对数据进行加工的过程,体现数据之间的各种不同运算关系的符号就称为种不同运算关系的符号就称为运算符运算符。vC C语言中,除了控制语句和输入输出以外的语言中,除了控制语句和输入输出以外的几乎所有的基本操作都是用运算符来实现的。几乎所有的基本操作都是用运算符来实现的。 例如:赋值操作的功能,在例如:赋值操作的功能,在C C语言中是用赋语言中是用赋值运算符值运算符“= =”来

3、实现的。来实现的。4vC C语言的运算符按照其功能分为以下语言的运算符按照其功能分为以下1313类:类:算术运算符算术运算符 + - * / % + - 下标运算符下标运算符 关系运算符关系运算符 ! 分量运算符分量运算符 - 逻辑运算符逻辑运算符 ! | 强制类型转换运算符强制类型转换运算符 (类型) 赋值运算符赋值运算符 及其扩展赋值运算符 求字节数运算求字节数运算 sizeof 条件运算符条件运算符 ?: 位运算符位运算符 | 逗号运算符逗号运算符 , 指针运算符指针运算符 * 其他运算符其他运算符 如函数调用运算符() 5学习运算符,主要掌握以下学习运算符,主要掌握以下4 4点:点:运

4、算符操作的运算符操作的数据的类型。数据的类型。不同的运算符操不同的运算符操作的数据的类型不一定相同;而且每种运算作的数据的类型不一定相同;而且每种运算符操作的数据的类型是相对固定的。符操作的数据的类型是相对固定的。运算符操作的运算符操作的数据的个数。数据的个数。不同的运算符操不同的运算符操作的数据的个数不一定相同;根据运算符连作的数据的个数不一定相同;根据运算符连接运算对象的个数,一般分为单目运算符接运算对象的个数,一般分为单目运算符(如(如+、-)、双目运算符(如)、双目运算符(如* * / %/ %)和)和三目运算符(如?:)。三目运算符(如?:)。6运算符在整个运算符系统中的运算符在整个

5、运算符系统中的优先级。优先级。优优先级是指在运算对象的左右都有运算符时先级是指在运算对象的左右都有运算符时运算的先后次序运算的先后次序。运算对象先做优先级高。运算对象先做优先级高的运算。如:的运算。如:* */ /比比+-+-优先级高。优先级高。运算符操作的数据的运算符操作的数据的结合性。结合性。运算符的结运算符的结合性规定了在表达式求解过程中,若运算合性规定了在表达式求解过程中,若运算对象其左右运算符优先级相同时的对象其左右运算符优先级相同时的运算方运算方向向。结合性有两种:左结合(从左到右计。结合性有两种:左结合(从左到右计算)和右结合(从右到左计算)。算)和右结合(从右到左计算)。7v表

6、达式:表达式:用用运算符运算符将将运算对象运算对象(常量、变量、函数常量、变量、函数等)等)连接而成的式子。连接而成的式子。 如如 a*b/c-1.5+aa*b/c-1.5+av表达式使用时应注意表达式使用时应注意表达式的值表达式的值及及类型类型。 a. a. 不同类型的运算符所表示的表达式类型也不同类型的运算符所表示的表达式类型也是不同的。表达式一般有是不同的。表达式一般有算术表达式算术表达式、赋值表赋值表达式达式、关系表达式关系表达式、逻辑表达式逻辑表达式、逗号表达式逗号表达式、条件表达式条件表达式等表达式。等表达式。 b. b. 表达式虽然有各种类型,但它总是表达式虽然有各种类型,但它总

7、是有确定有确定的值的值的,根据运算符的的,根据运算符的优先级优先级和和结合性结合性进行计进行计算。算。8v表达式书写的一般规则:表达式书写的一般规则: 表达式必须写在同一行上,只能使用表达式必须写在同一行上,只能使用圆括号圆括号, ,且左右括号个数要相同,有多层括号时内层且左右括号个数要相同,有多层括号时内层括号中的运算优先。括号中的运算优先。如:如: 写作: 1.0/2*(a*x+(a+x)/4/x) n例: 写出下列代数式的C算术表达式 1+(4+x)1/3x(1+pow( (4+x),1.0/3) )*xy/(2*sqrt(x*x+y*y) )93.1 3.1 算术表达式算术表达式v(

8、(一一) ) 基本算术运算符:基本算术运算符: (加法运算或正号运算符)(加法运算或正号运算符)(减法运算或负号运算符)(减法运算或负号运算符)* * (乘法运算符)(乘法运算符)(除法运算符)(除法运算符)% % (求余运算符,或称模运算符)(求余运算符,或称模运算符)+ + 自增运算符自增运算符 - - 自减运算符自减运算符3.1.1 3.1.1 算术运算符算术运算符10算术运算符的优先级和结合性算术运算符的优先级和结合性单目单目 +-+-双目双目 */%双目双目 +-高高低从右向左从左向右如:如:-5+3%2 -5+3%2 相当于相当于 (-5)+(3%2) (-5)+(3%2) 结果为

9、结果为 -4 -4( (优先级优先级) ) 3*5%3 3*5%3 相当于相当于 (3*5)%3 (3*5)%3 结果为结果为 0 0 ( (结合性结合性) )11v注意注意: :1) +1) +、- -、* *、/ /与数学中的运算顺序相似,先与数学中的运算顺序相似,先乘除,后加减,从左到右。乘除,后加减,从左到右。2 2)求余运算符)求余运算符% %要求两个运算对象均为要求两个运算对象均为整型数整型数据据。余数。余数符号与符号与左边左边的运算对象符号相同。的运算对象符号相同。如:如:2%32%3为为2 2,-9%5-9%5为为-4-4,9%-59%-5为为4 4。3 3)% %、/ /运算

10、符的运算符的右操作数右操作数不可以为不可以为0 0。4 4)字符类型的数据以该字符的)字符类型的数据以该字符的ASCIIASCII码码参加运参加运算。算。如:如:a a+2 +2 相当于相当于97+297+2。125 5)/ /运算符,操作数的类型不同,功能不同。运算符,操作数的类型不同,功能不同。当两个操作数均为整型时,其结果的类型也为整型。当两个操作数均为整型时,其结果的类型也为整型。 a.a.若除数和被除数都为正值,结果为正,直接舍去小数若除数和被除数都为正值,结果为正,直接舍去小数部分,如:部分,如:5/25/2的结果为的结果为2 2。 若两个操作数中有一个为实数若两个操作数中有一个为

11、实数, ,则结果是则结果是 double double 型型。因为所有实数都按因为所有实数都按doubledouble型进行运算。型进行运算。 如:如:5.0/25.0/2的结果的结果2.5.2.5.b.b.若除数或被除数中有一个为负值,若除数或被除数中有一个为负值,则舍入的方向是不固定的。则舍入的方向是不固定的。如:如:-5/3=?-5/3=?多数机器采取多数机器采取“向零取整向零取整”的方的方法,即法,即5/3=15/3=1,-5/3=-1-5/3=-1,取整后向零靠拢。,取整后向零靠拢。13整除和求余数的特殊用处整除和求余数的特殊用处123%10的结果是的结果是3;12%10的结果是的结

12、果是2;123/10,结果是,结果是12;12/10的结果是的结果是1;通过整除和求余数交叉应用,可以分解一个整数。通过整除和求余数交叉应用,可以分解一个整数。这个技巧以后我们要经常使用。这个技巧以后我们要经常使用。v小程序:输入一个三位数的整数,请分离出各位,十位,百位,并输出。 14(二)自增、自减运算符(二)自增、自减运算符u运算符号运算符号: : +(自增运算符)(自增运算符) -(自减运算符)(自减运算符)u功能功能: : 使变量的值增使变量的值增 1 1 或减或减 1 1。u用途:常用于循环语句中使循环变量自动加或减。用途:常用于循环语句中使循环变量自动加或减。 也用于指针变量,使

13、指针指向下或上一个地址。也用于指针变量,使指针指向下或上一个地址。u操作数:只能是操作数:只能是变量变量不能是常量、表达式和函数。不能是常量、表达式和函数。 如:如:i+, +i, i-, -i i+, +i, i-, -i 是正确的。是正确的。 +8 +8,+sin(4)+sin(4),(,(x+yx+y)+是错误的。是错误的。u结合性结合性: :自增(减)运算符的结合性是自增(减)运算符的结合性是右结合右结合。u优先级:单目运算符,优先级高于算术运算符,优先级:单目运算符,优先级高于算术运算符, 低于括号低于括号类运算符。类运算符。15v+、-作用于变量的形式有两种:作用于变量的形式有两种

14、:前缀方式前缀方式(prefix)(prefix):运算符:运算符 变量,如变量,如+i+i、-i -i ;后缀方式后缀方式(postfix)(postfix):变量:变量 运算符,如运算符,如i+i+、i-i-;v,:在使用之前,先使,:在使用之前,先使 的值加(减)的值加(减)v,:在使用之后,再使,:在使用之后,再使 的值加(减)的值加(减)16自增、自减运算取变量的值作为表达式的值自增、自减运算取变量的值作为表达式的值. .如如: :设设n=10;n=10;+n+n:1)n=n+1=111)n=n+1=11;2)2)取取n n值值1111作为表达式作为表达式+n n的值的值. .n+n

15、+:1)1)取取n n值值1010作为表达式作为表达式n n+的值;的值;2)n=n+1=11.2)n=n+1=11.例子例子: :inti,k;i=2;k=+i;i=2;k=i+;i=3i=3k=3k=2k=ii=i+1i=i+1k=i17v例3.1v#include vvoid main()vv int a=2,b=2,x,y;v x=-a+2; /前缀运算v y=b+-1; /后缀运算v printf(x=%d y=%dn,x,y);v printf(a=%d b=%dn,a,b);vv运行结果:运行结果: x x3 y=13 y=1 a=1 b=3 a=1 b=3a=a-1,x=a+2

16、y=b-1,b=b+118/ 连续的-表示前两个是对a的自减,最后的-表示减法运算例3.2#includevoidmain()inta=2,b=2,c;c=+a+b-;/变量a为前缀运算,b为后缀运算printf(a=%d,b=%d,c=%dn,a,b,c);a=b=2;c=-a-b;printf(a=%d,b=%d,c=%dn,a,b,c);a=b=2;printf(a=%dn,a+);printf(b=%dn,+b);c=a+b;/a、b增1后的值参加运算printf(“c=%dn”,c);a=a+1,c=a+b,b=b-1c=-(a-)-bc=-a-b,a=a-1c=(a+1)+(b+1

17、)b=b+1输出输出:a=3,b=1,c=5输出输出:a=1,b=2,c=-4输出输出:c=6输出输出:a=2输出输出:b=3说明:说明:C语言处理语言处理时是从左到右取最时是从左到右取最多个数的符号作为多个数的符号作为一个合法的运算符。一个合法的运算符。193.1.2 3.1.2 算术表达式算术表达式: : 用算术运算符和括号将运算对象用算术运算符和括号将运算对象( (也称操也称操作数)连接起来的、符合语法规则的式子,作数)连接起来的、符合语法规则的式子,称为算术表达式。运算对象包括常量、变量、称为算术表达式。运算对象包括常量、变量、函数等。函数等。 例如例如: : * *.5.5aa 是一

18、个合法的表达式。是一个合法的表达式。203.2.1 3.2.1 赋值运算符赋值运算符1 1)运算符:)运算符:= =2 2)作用:将一个数据或表达式的值赋给一个变量。)作用:将一个数据或表达式的值赋给一个变量。 如:如: /表示把常量表示把常量3 3赋给变量赋给变量a a y=a*sin(z) / y=a*sin(z) /表示把表达式表示把表达式a*sin(z)a*sin(z)的结果求出来再赋给一个变量的结果求出来再赋给一个变量y y注:赋值运算符与数学中的等号不同,赋值运算符求解注:赋值运算符与数学中的等号不同,赋值运算符求解后能够得到一个运算结果。后能够得到一个运算结果。3 3)赋值运算符

19、的优先级和结合性:)赋值运算符的优先级和结合性:优先级较低,结合性是从右向左。优先级较低,结合性是从右向左。 如:如:x=y=3;x=y=3;3.2 3.2 赋值表达式赋值表达式213.2.2 3.2.2 赋值表达式赋值表达式变量变量表达式表达式计算赋值运算符右侧计算赋值运算符右侧表达式表达式的值的值将赋值运算符右侧将赋值运算符右侧表达式表达式的值赋给左侧的的值赋给左侧的变量变量将赋值运算符左侧的将赋值运算符左侧的变量变量的值作为表达式的值的值作为表达式的值例例: : n = 2; n = 2; n = n+1; n = n+1;22对赋值表达式的说明:对赋值表达式的说明:a.a.赋值运算符赋

20、值运算符左侧只能是变量左侧只能是变量,不可以是表达,不可以是表达式、函数或常变量也不能作为左值。式、函数或常变量也不能作为左值。b.b.赋值表达式中右边的赋值表达式中右边的表达式又可以是赋值表表达式又可以是赋值表达式达式。 例:例: a=b=7a=b=7赋值表达式中含有多个赋值运算符时,赋值表达式中含有多个赋值运算符时,从右向从右向左依次赋值。左依次赋值。c.c.赋值表达式可以以表达式形式出现在某些语赋值表达式可以以表达式形式出现在某些语句(如输出语句、循环语句等)中。句(如输出语句、循环语句等)中。 如:如:printf(%dprintf(%d,a=b);a=b);233.2.3 3.2.3

21、 赋值语句赋值语句v 变量变量 = = 表达式表达式; ; 功能:先计算表达式的值,然后将值赋给功能:先计算表达式的值,然后将值赋给变量。变量。例例: int a,b,c; : int a,b,c; float x, y; float x, y; x=sqrt(7); x=sqrt(7); y=x+4; y=x+4; a=b=c=6; a=b=c=6;24.3.2.4 3.2.4 复合赋值运算符复合赋值运算符双目运算符与赋值运算符的合成或简化,称为双目运算符与赋值运算符的合成或简化,称为复合赋值运算符。复合赋值运算符。语言规定可以使用种复合赋值运算符:语言规定可以使用种复合赋值运算符: ,*

22、*, ,| | 复合赋值运算符的优先级和结合性同赋值运算符。复合赋值运算符的优先级和结合性同赋值运算符。25变量变量双目运算符双目运算符=表达式表达式复合赋值运算符的复合赋值运算符的功能功能:先将变量与赋值运算先将变量与赋值运算符后面的表达式进行一次双目运算符所指定的符后面的表达式进行一次双目运算符所指定的运算,然后再将运算结果赋给变量。运算,然后再将运算结果赋给变量。例如例如: 等价于等价于 * * 等价于等价于 * *()() 等价于等价于 以以“”为例来说明,为例来说明,它相当于使进行一次自加它相当于使进行一次自加()的操作。即先使加()的操作。即先使加,再赋给。,再赋给。26注意注意:

23、 :如果如果= =右边是包含若干项的表达式,则相右边是包含若干项的表达式,则相当于它有括号。当于它有括号。如:如: x %= y+3 x %= (y+3) |_ x = x %(y+3)(不要错写成x=x%y+3) 复合赋值运算表达式: 变量变量 双目运算符双目运算符= =表达式表达式是个整体步骤:1)左边变量的当前值与右边整个表达式进行相应运算。2)把1)的结果赋给左边的变量。3)赋值表达式的值是左边变量的值。27例例3.3赋值运算符的使用赋值运算符的使用#includevoidmain()inta=5,b=5,c=5;a-=2;b*=a+3;c/=a-1;printf(a=%d,b=%d,

24、c=%dn,a,b,c);结果 :a=3,b=30,c=2a=a-2b=b*(a+3)c=c/(a-1)283.3 3.3 逻辑表达式逻辑表达式v 关系运算符是用来比较两个运算对象大小关系运算符是用来比较两个运算对象大小的,运算结果是成立或不成立。的,运算结果是成立或不成立。v如果成立,则结果为逻辑值如果成立,则结果为逻辑值“真真”,用整,用整数数 “1 1”来表示;如:来表示;如:5=55=5v如果不成立,则结果为逻辑值假如果不成立,则结果为逻辑值假”,用整,用整数数“0 0”来表示。如:来表示。如:555 运算符运算符 =abab例子例子aba=ba=ba=ba=b小于等于小于等于=a!=

25、ba!=b不等于不等于!=!=302.2.关系运算符的优先级:关系运算符的优先级:关系运算符的优先级低于算术运算符关系运算符的优先级低于算术运算符, ,高于赋值运算符。高于赋值运算符。 、 =的优先级相同。的优先级相同。=、!、!= =的优先级相同。的优先级相同。关系运算符的结合性:关系运算符的结合性:左结合左结合如:如: int x=7; int x=7; 计算下面关系表达式的值:计算下面关系表达式的值: x5!=1 x5!=1 1=15 1=1bab、a+bb+ca+bb+c、(a=3)(b=5)(a=3)(b=5)、 a a b)(bb)(b(b=4);d=(a=3)(b=4);结果为结

26、果为0 0。 d=abc;d=abc;结果为结果为0 0。 d=ac=c;d=ac=c;结果为结果为1 1。 2 2)若)若int a=5, b=3;int a=5, b=3; printf(%d, ab); printf(%d, ab);33例例3.4分析下面程序的运行结果。分析下面程序的运行结果。#includevoidmain()floatx,y=0.3;y=y*11;x=3+0.3;if(x=y)printf(ok,x=y);elseprintf(no,x!=y);v说明:说明:两个实数一般不作相等或不等比两个实数一般不作相等或不等比较。较。(因为实数表示或在计算过程因为实数表示或在计

27、算过程中有时存在误差中有时存在误差)v结果:结果:no,x!=y34字符数据可以进行大小比较。比较时,字符数据可以进行大小比较。比较时,用字符的用字符的ASCII码进行比较。码进行比较。如:如:ABZa字母字母 AZ ASCII: 6590字母字母 az ASCII: 9712235例例3.5 3.5 #include #include void main( )void main( ) int a,b,c; int a,b,c; scanf(%d%d%d,&a,&b,&c); / scanf(%d%d%d,&a,&b,&c); /输入:输入:2 3 42 3 4 a=b!=c; / a=b!=

28、c; /将关系表达式的值赋给将关系表达式的值赋给a a printf(a=%d,b=%d,c=%dn,a,b,c); printf(a=%d,b=%d,c=%dn,a,b,c); a=(b=c+*3); /a a=(b=c+*3); /a与与b b进行相等比较进行相等比较 printf(a=%d,b=%d,c=%dn,a,b,c); printf(a=%d,b=%d,c=%dn,a,b,c); a=bc2; / a=bc2; /将关系表达式的值赋给将关系表达式的值赋给a a printf(a=%d,b=%d,c=%dn,a,b,c); printf(a=%d,b=%d,c=%dn,a,b,c)

29、; a=1,b=3,c=4a=1,b=12,c=5a=0,b=12,c=5363.3.2 3.3.2 逻辑运算符及逻辑表达式逻辑运算符及逻辑表达式1 1、逻辑运算符、逻辑运算符 逻辑与逻辑与 & (& (表示并且)表示并且) 逻辑或逻辑或 | | (表示或者)(表示或者) 逻辑非逻辑非 ! ! (表示相反)(表示相反)例:例:! !a a 例:例:a&ba&b 例:例:a a| b b 结合性:结合性:! ! 单目运算,右结合单目运算,右结合&、| | 双目运算,左结合双目运算,左结合37v用逻辑运算符将用逻辑运算符将关系表达式关系表达式或或逻辑量逻辑量连接而成连接而成的式子。的式子。如:如:

30、x = 3x = 3 3 | 5 3 | 5 !(x+y) & 7(x+y) & 7v逻辑运算对象可以任何类型的数据(整型、实逻辑运算对象可以任何类型的数据(整型、实型、字符型、指针型、枚举型)。型、字符型、指针型、枚举型)。v判断逻辑运算对象的真假判断逻辑运算对象的真假非非0 0表示表示真真 0 0表示表示假假2.逻辑表达式逻辑表达式x, y可以是任意表达式38v逻辑表达式的逻辑表达式的运算结果运算结果为一为一逻辑值逻辑值(即真(即真或假)。或假)。 1 1 (表示逻辑真,即满足条件)(表示逻辑真,即满足条件) 0 0 (表示逻辑假,即不满足条件)(表示逻辑假,即不满足条件)v逻辑表达式在程

31、序中一般用于控制语句逻辑表达式在程序中一般用于控制语句(ifif、forfor、 whilewhile、 do whiledo while), ,对某些对某些条件作出判断,根据条件的成立(真)与条件作出判断,根据条件的成立(真)与不成立(假)决定程序的流程。不成立(假)决定程序的流程。393. 3. 逻辑运算的规则:逻辑运算的规则:逻辑与 & 逻辑或 | 逻辑非 ! 真值表 x y x&y x|y !x假 假 0 0 1假 真 0 1 1真 假 0 1 0真 真 1 1 0 000非0非00非0非05&7=?0| 7=?!7=?40总结:总结:! 运算结果为运算对象逻辑值的反运算结果为运算对象

32、逻辑值的反 当运算对象为当运算对象为非零值非零值时,则运算结果为时,则运算结果为0 0 0 0, 反之当运算对象为反之当运算对象为零值零值时,则运算结果为时,则运算结果为 1 1 1 1& & & & 当两个运算对象均为当两个运算对象均为非零值非零值时,运算结果为时,运算结果为 1 1 1 1, 否则运算结果值为否则运算结果值为0 0 0 0| | | | 当两个运算对象中有一个为非零值时,运算结果为当两个运算对象中有一个为非零值时,运算结果为 1 1 1 1。 当两个运算对象均为零时,则运算结果才为当两个运算对象均为零时,则运算结果才为 0 0 0 0。41内容回顾内容回顾v算术运算符 :

33、/ % + -v 赋值运算符: = 复合赋值运算符: += -= /= %=v 关系运算符 : = = = !=v逻辑运算符 :& | ! 使用运算符时应注意: 优先级和结合性 424. 4. 逻辑运算符的优先级逻辑运算符的优先级!+-+-(正负)(正负)*/%+、-(加减)(加减)=!=&|=+=-=*=/=%=,高低例例3.6 3.6 写出下列表达式的值。写出下列表达式的值。设设 int a=2,b=3; char int a=2,b=3; char c=c=A A; ;float x=3.6,y=-4.4float x=3.6,y=-4.4;1 1) ab|!ab|!(c cA A)&x

34、y&xy2 2) a-b&!c-5|y*2xa-b&!c-5|y*2z & x+zy & z+yx x+yz & x+zy & z+yx3 3)判断字符变量)判断字符变量chch中的字符是否为大写字母的逻辑表中的字符是否为大写字母的逻辑表达式。达式。 ch=A & ch =A & ch =Z Z说明:说明: & & (逻辑与)一般用于判断两个或两个以上(逻辑与)一般用于判断两个或两个以上的条件是否同时成立。的条件是否同时成立。444 4)写出)写出|x|x|大于大于6.256.25的逻辑表达式。的逻辑表达式。-x6.25-x6.255 5)写出)写出x x、y y不同时为零的逻辑表达不同时为零

35、的逻辑表达 x!=0|y!=0 x!=0|y!=0说明:说明: | | (逻辑或)一般用于判断两个或两个(逻辑或)一般用于判断两个或两个以上的条件是否以上的条件是否至少有一个成立至少有一个成立456)6)“判断判断y y是闰年是闰年”。凡能被。凡能被4 4整除不能被整除不能被100100整除的整除的是闰年或能被是闰年或能被400400整除的是闰年整除的是闰年. . y%4=0&y%100!=0 | y%400=0y%4=0&y%100!=0 | y%400=07) 7) 判断判断“x x、y y落在圆心落在圆心(0,0)(0,0)半径为半径为1 1的圆外和中心的圆外和中心点为(点为(0,00,

36、0)边长为)边长为4 4的矩形内的矩形内”的表达式的表达式. .(0,0)(r2,0)(r1,0)(x,y)x*x+y*y1&x=-2&x=-2&y1&x=-2&x=-2&y、=、=关系运算关系运算5=、!=关系运算关系运算6&逻辑与逻辑与7|逻辑或逻辑或8?:条件运算符条件运算符3(三目运算符)(三目运算符)9自右向左自右向左=、+=、-=、*=、/=、%=赋值运算符赋值运算符2(双目运算符)(双目运算符)10,逗号运算符逗号运算符多目多目11自左向右自左向右470x100x10不同于不同于0x&x100x&x10要判断一个变量的值是否在要判断一个变量的值是否在0 0到到1010之间,很自然

37、想之间,很自然想到了这样一个表达式:到了这样一个表达式:scanf(%d,&a); scanf(%d,&a); if(0a10)if(0a10) printf(%d,a); printf(%d,a); 编译通过编译通过, ,但是在运行的时候就会出问题。但是在运行的时候就会出问题。仔细分析一下仔细分析一下ifif语句的运行过程语句的运行过程. .正确的写法应该是:正确的写法应该是:if(0a)&(a10)if(0a)&(a=0?1:f=t=0?1:1 1;求三个变量最大值求三个变量最大值 x x、y y、z z。 s= s=(s=xy?x:ys=xy?x:y)z?s:zz?s:z;将将字字符符变

38、变量量chch若若为为小小写写字字母母则则改改为为大大写写字字母,其余字符不变。母,其余字符不变。 ch=(ch=ch=(ch=a a&ch=&chb?a:cd?c:dint a=1,b=2,c=3,d=4; ab?a:cd?c:d ab?a:(cd?c:d)ab?a:(cd?c:d) 结果为结果为4 451v例例3.10 3.10 输入三个数给变量输入三个数给变量a a,b b,c c后,按值从大后,按值从大到小输出到小输出#includevoidmain()inta,b,c;intm,n,k;scanf(“%d%d%d”,&a,&b,&c);/输入输入5-87m=ab?a:b;/m取取a、

39、b中大数中大数m=mc?m:c;/m取取c、m中最大数中最大数n=ab?a:b;/n取取a、b中小数中小数n=nc?n:c;/n取取c、n中最小数中最小数k=a+b+cmn;/三个数的和减去最大、最小数,得中间数三个数的和减去最大、最小数,得中间数printf(%d%d%dn,m,k,n);输入:输入:5 -8 75 -8 7输出:输出: -8-8523.4.3.4. 逗号运算符及逗号表达式逗号运算符及逗号表达式1 1、逗号运算符、逗号运算符, (常用(常用 在在forfor语句中)语句中)2 2、逗号表达式、逗号表达式 表达式表达式1 1,表达式,表达式2 2,表达式,表达式n n功能:功能

40、: 自左至右自左至右计算各表达式的值,并以计算各表达式的值,并以最后最后一个表达式的值一个表达式的值作为逗号表达式的值。作为逗号表达式的值。如:a=2+4,3*5a a的值为,的值为,整个表达式整个表达式的值为的值为53. .优先级和结合性优先级和结合性逗号运算符是所有运算符中级别最低的,运算逗号运算符是所有运算符中级别最低的,运算方向:从左向右方向:从左向右例例: : (,*) ,*3赋值表达式,将赋值表达式,将一个逗号表达式一个逗号表达式的值赋给,的值赋给,的值等于的值等于逗号表达式,包括逗号表达式,包括一个赋值表达式和一个赋值表达式和一个算术表达式,一个算术表达式,的值为,整个的值为,整

41、个逗号表达式的值为逗号表达式的值为18。54注意注意: :并不是任何地方出现的逗号都是作为逗号运算符。并不是任何地方出现的逗号都是作为逗号运算符。例如函数参数也是用逗号来间隔的。例如函数参数也是用逗号来间隔的。如如: : printf(printf(“%d,%d,%d%d,%d,%d”,a,b,c);,a,b,c);“,”并不是一个并不是一个逗号表达式,逗号表达式,它是它是printf函数函数的的3个参数个参数printf(printf(“%d,%d,%d%d,%d,%d”,(a,b,c),b,c) ,(a,b,c),b,c) ;“(,(,)”是一个是一个逗号表达式,逗号表达式,它的值等于它的

42、值等于的值。的值。553.5 3.5 多种类型混合运算多种类型混合运算C语言中,允许不同类型的数据进行混合运算,包括整型(int,short,long)、实型(float,double)、字符型(char)数据都可以进行混合运算。例如:10+a+15-87651234 *b 是合法的。v在进行运算时,不同类型的数据要先转换成同一类型,然后再运算求值。56v表达式中数据类型的转换可分为两种:表达式中数据类型的转换可分为两种: 数据类型的隐式转换数据类型的隐式转换( (自动转换自动转换) ) 数据类型的强制转换数据类型的强制转换v类型转换在类型转换在C C中也属于一种运算。中也属于一种运算。57(

43、1 1)自动转换)自动转换在进行算术运算过程中,两个参加运算的操在进行算术运算过程中,两个参加运算的操作数,在计算前先自动进行类型转换。作数,在计算前先自动进行类型转换。v水平方向:自动v垂直方向:低 高 高doublefloatunsignedlonglongunsignedunsignedshort低intchar,short3.5.1 3.5.1 算术运算中的类型转换算术运算中的类型转换58例:例: A + 12A + 12 65 65 77 77 规则规则1 1:凡凡char, shortchar, short型一律自动转换成型一律自动转换成intint型,型, floatfloat一

44、律转换成一律转换成doubledouble型,转换后若两操作型,转换后若两操作数类型相同,作算术运算,其结果类型与转换数类型相同,作算术运算,其结果类型与转换后的类型相同。后的类型相同。1.5f*4.2 1.5f*4.2 1.5f1.5f转换为转换为doubledouble型,计算结果型,计算结果6.3 6.3 为为doubledouble型型59规则规则2 2:相同类型的操作数(除相同类型的操作数(除char, shortchar, short , floatfloat 型外)作算术运算的结果为同一类型。型外)作算术运算的结果为同一类型。例:两个整数的除法其结果一定是整数。例:两个整数的除法

45、其结果一定是整数。 5/25/2结果为结果为2 2,-5/2-5/2结果为结果为-2-2。60规则3:不同类型的操作数或经规则不同类型的操作数或经规则1 1转换后仍然是转换后仍然是不同类型,则低级别的自动转换成高级别的再不同类型,则低级别的自动转换成高级别的再运算,其结果类型与转换后的类型相同。运算,其结果类型与转换后的类型相同。charshortintunsignedlongunsignedlongfloatdouble61例例3.11 2.0f+5/2*33.11 2.0f+5/2*3 2 2 6 6 2.0 6.0 2.0 6.0 8.0 8.0高doublefloatunsignedl

46、onglongunsignedunsignedshort低intchar,short规则规则规则规则规则规则规则规则62v可以利用强制类型转换运算符将一个表达式可以利用强制类型转换运算符将一个表达式转换成所需类型。转换成所需类型。( (类型名类型名) ) 表达式表达式强制类型转换运算符优先级同+,高于算术运算符,从右向左如:(double)3(int)3.8(double)(5/2)(double)5/23.032.02.5(2 2)强制类型转换)强制类型转换63例例.12#includevoidmain()float;inti;x=3.6;i=(int)x;printf(x=%f,i=%dn

47、,x,i);n说明:强制类型转换,对说明:强制类型转换,对被转换被转换变量变量本身没有本身没有影响影响( (既不改变变量的类型,也不改变变量值的既不改变变量的类型,也不改变变量值的类型类型) ),只生成一个中间计算结果。,只生成一个中间计算结果。v运行结果:运行结果:x3.600000,i=3v说明:说明:说明:说明:有两种类型转换,一种是在运算时不必用户指定,系统自动进行的类型转换。第二种是强制类型转换。当自动类型转换不能实现目的时,可以用强制类型转换。643.5.23.5.2赋值时数据类型的转换赋值时数据类型的转换v在赋值语句中,左边变量和右边表达式的类型在赋值语句中,左边变量和右边表达式

48、的类型不同时,系统会自动完成类型转换。不同时,系统会自动完成类型转换。v将赋值运算符右侧表达式的类型自动转换成赋将赋值运算符右侧表达式的类型自动转换成赋值号左侧变量的类型,再赋值。值号左侧变量的类型,再赋值。v如:如:int x=3; int x=3; 则表达式则表达式x=x+1.999x=x+1.999的值是的值是4 4。65数据类型的赋值转换规则表数据类型的赋值转换规则表变量变量类型类型表达式值类型表达式值类型转换规则转换规则示例示例charint取表达式值的低取表达式值的低8 8位位 x=65 x=65 或或x=557x=557变量变量x x值为值为AAfloat、double取表达式整

49、数部分的低取表达式整数部分的低8 8位位x=65.78x=65.78 变量变量X X值为值为A A intchar将对应将对应ASCIIASCII码值赋给变量码值赋给变量 x=A , x=A , 变量变量X X值为值为6565float、double舍弃小数部分舍弃小数部分 (正常情况下)(正常情况下)x=3.89; x=3.89; 变量变量X X的值为的值为3 3floatchar、int、double浮点形式,注意有效位数浮点形式,注意有效位数float float t=3.14159265, t=3.14159265, 变量变量t t值为值为3.1415923.141592doublec

50、har、int、double浮点形式,注意有效位数浮点形式,注意有效位数66常见的几种赋值时的数据类型转换常见的几种赋值时的数据类型转换v字符数据赋值给整型变量字符数据赋值给整型变量 (char-int)(char-int)例例:int z;:int z; z=b;/ z=b;/即字符即字符bb的的ASCIIASCII码值赋给码值赋给z z变量变量) )v整数赋值给实型变量整数赋值给实型变量 (int - float)(int - float)例例: float z;: float z; z=39; /z z=39; /z的值即为的值即为39.000000 39.000000 67常见的几种赋

51、值时的数据类型转换常见的几种赋值时的数据类型转换v实数赋值给整型变量实数赋值给整型变量 (float-int)(float-int)例例 int x;int x; x=3.89; / x=3.89; /取整数,舍弃小数取整数,舍弃小数v如果值超过变量的取值范围,可能整数部如果值超过变量的取值范围,可能整数部分数据会丢失。分数据会丢失。 683.5.3 3.5.3 运算符优先级和运算符结合方向运算符优先级和运算符结合方向vC C语言的运算符有种优先级和两种结合性。语言的运算符有种优先级和两种结合性。v运算级别高的先计算,再进行运算级别低的运运算级别高的先计算,再进行运算级别低的运算。算。v在运算符优先级相同时,运算顺序由结合性决在运算符优先级相同时,运算顺序由结合性决定。定。v表达式中可以通过增加括号来改变运算顺序。表达式中可以通过增加括号来改变运算顺序。69

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号