![C语言课件第03章_第1页](http://file4.renrendoc.com/view/93d5f42a829cb9f83311d1ce51ae44b0/93d5f42a829cb9f83311d1ce51ae44b01.gif)
![C语言课件第03章_第2页](http://file4.renrendoc.com/view/93d5f42a829cb9f83311d1ce51ae44b0/93d5f42a829cb9f83311d1ce51ae44b02.gif)
![C语言课件第03章_第3页](http://file4.renrendoc.com/view/93d5f42a829cb9f83311d1ce51ae44b0/93d5f42a829cb9f83311d1ce51ae44b03.gif)
![C语言课件第03章_第4页](http://file4.renrendoc.com/view/93d5f42a829cb9f83311d1ce51ae44b0/93d5f42a829cb9f83311d1ce51ae44b04.gif)
![C语言课件第03章_第5页](http://file4.renrendoc.com/view/93d5f42a829cb9f83311d1ce51ae44b0/93d5f42a829cb9f83311d1ce51ae44b05.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第3章 运算符和表达式3.1 表 达 式3.2 运算符及表达式3.3 运算符优先级和结合性第3章 运算符和表达式3.1 表 达 式3.1 表 达 式C语言的表达式分为基本表达式和复杂表达式。基本表达式是由以下单项构成的,即:标识符、常量、字符串字面量和用圆括号括起来的表达式。将基本表达式通过运算符连接在一起,就构成复杂表达式。例如:28,ab,(xy)/a等。由表达式还可组成更大的表达式。例如: x(ab) 103.1 表 达 式C语言的表达式分为基本表达式和复3.2 运算符及表达式运算符是在一个数学运算中表示相应运算动作的一种符号。运算符所作用的对象称作运算分量。3.2 运算符及表达式运算符
2、是在一个数学运算中表示相应3.2.1 算术运算符和算术表达式在C语言中,基本算术运算符有5个,它们是:(加) (减) *(乘) /(除) (取模)算术运算符和运算分量组成的求值序列称作算术表达式。要注意运算符“/” 和 “” 的区别。运算符 “/” 可以作用于算术类型。运算符“”却只能作用于整型量。a/b表示两个整数进行整除,其结果是舍弃余数后所得到的商值。是取整数除法的余数,而不管商的值是多少。3.2.1 算术运算符和算术表达式例3-1:算术运算符应用示例。/* arithmetic practice */#include void main() int a99; int b5; int c
3、11; int d3; int result; resultab;例3-1:算术运算符应用示例。 printf(abdn,result); resultb*c; printf(b*cdn,result); resulta/b; printf(a/bdn,result); resultab; printf(abdn,result); resultadb/c; printf(adb/cdn,result); printf(abdn,result);输出结果是:ab94b*c55a/b19ab4adb/c0输出结果是:例3-2:计算有多个算术运算符的算术表达式。#include void main(
4、) int x,a3; float y; x2025/5*2; printf(1)xdn,x); x25/2*2; printf(2)xdn,x); xa4*56;例3-2:计算有多个算术运算符的算术表达式。 printf(3)xdn,x); xa456; printf(4)xdn,x); x3*46/5; printf(5)xdn,x); x(76)5/2; printf(6)xdn,x); y25.0/2.0*2.0; printf(7)yfn,y); printf(3)xdn,x);输出结果是:(1)x30 (2)x24(3)x11(4)x1(5)x0(6)x1(7)y25.000000
5、输出结果是:3.2.2 赋值运算符和赋值表达式赋值运算符“”,其简单的使用形式是: 变量表达式 这种形式的整个表达式称作赋值表达式。在使用赋值表达式时应注意以下几点: 在赋值运算符左边的量(通常称为左值)必须是变量,不能是常量或用上述运算符结合起来的表达式。 int a,b; ab;b8;是正确的赋值形式; 6a;ab14;等形式都是不对的。3.2.2 赋值运算符和赋值表达式 赋值运算可连续进行。例如, abc0 a(b(c0) 赋值运算符的优先级比上述运算符的优先级都低。 a(b9)*(c7) 赋值表达式的值等于右边表达式的值,而结果的类型由左边变量的类型决定。 赋值运算可连续进行。例如,
6、除了上述基本的赋值运算符之外,C语言中还提供了另外10个赋值运算符,它们是: * & 这些运算符是把“运算”和“赋值”两个动作结合在一起,往往把它们称为复合赋值运算符。 x 2其等效形式是:xx2。表达式 x *y5的等效形式是:xx*(y5)。而表达式 x y10的等效形式是:xx(y10)复合赋值运算符右边的表达式应作为一个整体对待。 除了上述基本的赋值运算符之外,C语言中还提供了另外13.2.3 增量运算符和增量表达式自增运算符“”和自减运算符“”。它们都是单目运算符。当出现在运算分量的前面时,例如i、i,就称之为前缀运算符;当出现在运算分量的后面时,例如x、y,就称之为后缀运算符。由增
7、量运算符和运算分量构成的表达式称为增量表达式。1自增运算符 n这个表达式执行后,n的值增1。还可采用“后缀加”的形式: n但必须指出,并非在任何情况下二者都等价。3.2.3 增量运算符和增量表达式例3-3:显示前缀加和后缀加的区别。#include void main() int a,b,c; a9; ba;例3-3:显示前缀加和后缀加的区别。 printf( (1) ad *bdn,a,b); a9; ca; printf( (2) ad *cdn,a,c);运行后输出的结果是:(1)a10*b10(2)a10*c9 printf( (1) ad *bdn,执行ba,这条语句等价于下述两条语
8、句: ca1; ba;而改为后缀加形式,即:ca,这条语句等价于下述两条语句: ca; aa1;简而言之,在表达式中出现前缀加的情况下,前缀加所作用的运算分量值先增1,然后进行其他级别较低的运算;而在表达式中出现后缀加的情况下,先以其运算分量的当前值参与其他级别较低的运算,最后该运算分量值才增1。执行ba,这条语句等价于下述两条语句:例3-4:复合赋值符和自增运算符“”的应用。 Void main( ) int x2,y,z; x *32; printf(1)xdn,x); x *yz4; printf(2)xdn,x); xy1; zx 1;例3-4:复合赋值符和自增运算符“”的应用。 pr
9、intf(3)xd*zdn,x,z); zx * y; printf(4)xd*yd*zdn,x,y,z); 输出结果是: (1)x10 (2)x40 (3)x2*z0 (4)x3*y2*z4 printf(3)xd*zdn,x,z2自减运算符“n”就等价于: nn1它也分前缀减和后缀减两种形式。mn;等价于:nn1; mn;而 mn;却等价于:mn; nn1;2自减运算符在使用增量运算符时,还应注意以下几点: 增量运算符有副作用。就是说,增量运算符作用于运算分量时,如“a”,不仅可以向外提供一个值,而且还改变运算分量自身的值。例如: xii或者 xi(i) “”和“”是单个运算符,不是通常意
10、义上的两个“加”号或者两个“减”号。在使用增量运算符时,还应注意以下几点:xij;是理解成(i)j,还是i(j)呢?C语言词法分析遵循“最长匹配” 原则,即:如果在两个运算分量之间连续出现多个表示运算符的字符(中间没有空格),那么,在保证有意义的条件下,就从左到右尽可能多地将若干个字符组成一个运算符。所以,表达式就解释为(i)j,而不是i(j)。建议读者在录入程序时,在各个运算符之间加入空格,或者使用圆括号,把有关部分括起来,使之作为整体处理。xij; “”和“”只能作用在变量上,如“”,“”等,而不能用于常量和一般表达式(不是左值的表达式)。另外,增量运算符与运算分量结合在一起构成的表达式带
11、有自身赋值含义,但这种表达式不是左值,不能直接出现在赋值号左边。 “”和“”只能作用在变量上,如“”,“3.2.4 关系运算符和关系表达式C语言有完整的一组关系运算符,用于比较两个运算分量间的大小关系。这组运算符有6个,即: !用关系运算符将两个运算分量连在一起构成的表达式称作关系表达式。根据运算符所作用的两个运算分量之间的指定关系是否成立,分别得到关系表达式的“真”、“假”结果。3.2.4 关系运算符和关系表达式在C语言中,没有表示“真”、“假”的逻辑量TRUE(真)和FALSE(假),就借用数值来表示。以数值0表示“假”,以非0值表示“真”。对于关系表达式来说,结果的真、假分别用1和0表示
12、。关系运算只判定两个运算分量是否满足指定的关系,而不理睬二者具体数值相差多少。应注意,赋值号“”与全等比较运算符“”的区别。关系运算符的优先级低于算术运算符。 abcd应理解为:(ab)(cd)前4个关系运算符的优先级相同,后两个相等比较运算符的优先级也相同。但前者的优先级恰好比后者高一级。在C语言中,没有表示“真”、“假”的逻辑量TRUE(真)例3-4:分析下面程序的运算结果。1 void main()2 3 int a,b,c;4 abc10;5 ab c;6 printf( ad,bd,cdn,a,b,c);7 a (bc*2);8 printf( ad,bd,cdn,a,b,c);9
13、abc100;10 printf( ad,bd,cdn,a,b,c);11 例3-4:分析下面程序的运算结果。上述程序运行之后的输出结果是:a1,b10,c10a1,b20,c11a0,b20,c11上述程序运行之后的输出结果是:3.2.5 条件运算符和条件表达式C语言中提供的条件运算符“?:”是惟一的三目运算符。由条件运算符组成的表达式简称为条件表达式,或三目表达式。其一般构成形式是:表达式1?表达式2:表达式 3决定条件表达式值的方法是:先计算表达式1的值;若该值不为0,则计算表达式2的值,并将表达式2的值作为整个条件表达式的值;否则,就计算表达式3的值,并将该值作为整个条件表达式的值。3
14、.2.5 条件运算符和条件表达式例如,要求出x和y中最大的一个,并赋予变量max。max(xy)?x:y;使用条件运算符时,还要注意以下几点: 条件运算符的优先级稍高于赋值运算符,但比其他运算符的优先级都低。 三个运算分量不限于简单的算术表达式,甚至可以是函数调用。 分析条件表达式时,关键是先找出“?”和“:”,把三个运算分量区分开,然后按一般方法进行计算。例如,要求出x和y中最大的一个,并赋予变量max。例3-5:分析下面程序运行的结果。1 void main()2 3 int a,b,c;4 abc1;5 a b;6 b c;7 c a;8 printf( (1)dn,ab? a:b);9
15、 printf( (2)dn,ac? a:c+);10 ( abc)? printf( AA):printf( CC);11 printf( n ad,bd,cdn,a,b,c);12 例3-5:分析下面程序运行的结果。3.2.6 逗号运算符和逗号表达式在C语言中,逗号的用途主要有两种:一是作为分隔符,二是作为运算符。(1)逗号分隔符用来分开相应的多个数据。int a,b,c;printf( Adt Bdn,a,b);3.2.6 逗号运算符和逗号表达式(2)逗号运算符逗号作为运算符时,是把两个运算分量“连接”起来,使之构成一个逗号表达式。逗号表达式的一般形式是:表达式1,表达式2它的执行过程是
16、:先计算表达式1,然后计算表达式2。整个逗号表达式的值是表达式2的值。逗号表达式的扩展形式是:表达式1,表达式2,表达式n各个表达式必须从左到右顺序执行,而整个逗号表达式的值是其中最右边表达式的值。x(i10,j5,i*j)逗号运算符在所有运算符中是级别最低的。(2)逗号运算符3.2.7 逻辑运算符和逻辑表达式C语言中逻辑运算符有3个,它们是:! 逻辑非(相当于其他语言中的NOT)& 逻辑与 (相当于其他语言中的AND)| 逻辑或 (相当于其他语言中的OR)其中,“!”是单目运算符,而&和 | 是双目运算符。3.2.7 逻辑运算符和逻辑表达式C语言课件第03章由逻辑运算符和运算分量构成的表达式
17、称为逻辑表达式。(1)逻辑非运算符! 作用在单个运算分量上,其结果是运算分量逻辑值的“反”。(2)逻辑与运算符& 作用在前后两个运算分量上,其结果是:仅当两个运算分量同时为真时,结果才为真;否则,只要其中有一个为假,结果就为假。由逻辑运算符和运算分量构成的表达式称为逻辑表达式。(3)逻辑或运算符 |作用在前后两个运算分量上,其结果是:只要其中有一个运算分量为真,结果就为真;仅当二者同时为假时,结果才为假。这三个逻辑运算符的优先级是:!的优先级高于&的优先级,&的优先级又高于 | 的优先级。(3)逻辑或运算符 |例3-7:判断给定的某一年是否是闰年。什么是闰年呢?如果某年号能被4整除而不能被10
18、0整除,或者能被400整除,那么这年就是闰年;否则就是平年。下面的程序对用户输入的年号判别是否是闰年。1 /* determing if a year is a leap year */2 #include 3例3-7:判断给定的某一年是否是闰年。4 Void main()5 6 int year,leap;7 printf( Input your year . n);8 scanf ( d ,&year);9 leapyear40& year 100 ! 0 | year 4000;10 if (leap)11 printf ( d is a leap year . n,year);12 e
19、lse13 printf ( d is not a leap year . n,year);14 4 Void main()在使用逻辑运算符时应注意以下几点: 用逻辑运算符把运算分量连接起来就构成逻辑表达式。其运算分量可以是关系表达式、算术表达式等,甚至还可以是逻辑表达式。 !的优先级高于算术运算符的优先级。运算符!的结合性是从右到左,而&和 | 的结合性是从左到右。 逻辑表达式的值只有两个:0和1。以0代表逻辑结果为假;以1代表逻辑结果为真。在使用逻辑运算符时应注意以下几点: 运算符&和 | 保证左边的运算分量优先得到计算。就是说,由&和 | 构成的逻辑表达式严格地从左到右进行计算,并且一旦
20、根据左分量的值就能确定整个逻辑表达式的值时,就不再执行后面的运算。例如,xyz1;x | y&z;执行之后,x、y和z的值分别是2,1,1。 运算符&和 | 保证左边的运算分量优先得到计算。3.2.8 位逻辑运算符和位逻辑表达式1二进制只用0和1两个数字来表示所有的数。二进制数的基本规则是“逢二进一”。2八进制和十六进制八进制数是以8为基底的数,用到的数字是0,1,2,7,一共8个。它的基本进位规则是“逢八进一”。八进制整常数是以数字0开头的八进制数字串。二进制数与八进制数之间很容易进行转换。对于一个二进制数来说,从右向左每三个数字为一组分开,把每组二进制数转为八进制数表示。3.2.8 位逻辑
21、运算符和位逻辑表达式将八进制数转换成二进制数时,只要将每位八进制数字用三位二进制数表示,串起来就是相应的二进制数。十六进制数是以十六为基底的数,它由数字0,1,2,9和字母A,B,C,D,E,F(或者a,b,c,d,e,f)来表示。其基本进位规则是“逢十六进一”。在C语言中,十六进制整常数是以0 x或0X开头的十六进制数字串,例如0 x12、0X5a8。二进制与十六进制的转换也很容易:对于一个二进制数来说,从右向左每四个数字为一组,把每组二进制数用十六进制数字表示。把十六进制数的每一位数字用四位二进制数表示,串起来就是相应的二进制数。将八进制数转换成二进制数时,只要将每位八进制数字用三位二3原
22、码、反码和补码在计算机内表示数值的方法是不同的,一般有:原码、反码和补码。(1)原码通常,整数用一个字长表示。一般用最左边的一位(称作最高位)表示数的符号:以0代表正,1代表负。二进制数的原码表示形式是:最高位用于符号位,其余各位是数值的绝对值。3原码、反码和补码(2)反码正数的反码与原码相同。负数的反码是:原码除符号位外(仍为1),各位取反。(3)补码正数的补码与原码相同。除最高位仍为1外,原码的其余各位求反,最后再加1(2)反码4位逻辑运算符和位逻辑表达式在C语言中,位逻辑运算符有以下4个:& ( 按位与 )| ( 按位或 ) ( 按位反 ) (按位异或 )它们都是按二进制一位一位地进行运
23、算,相邻位之间不发生联系,即没有“进位”、“借位”等问题,所以称为位逻辑运算符。4位逻辑运算符和位逻辑表达式各个位逻辑运算符的优先级关系是:最高,其余3个运算符的优先级从高到低依次是&、|,但三者都高于逻辑运算符而低于关系运算符。由位逻辑运算符和运算分量构成的表达式称作位逻辑表达式。位逻辑运算符与逻辑运算符之间的区别: 位逻辑运算符是针对二进制位的,而逻辑运算符是针对整个表达式的;位逻辑运算符要计算表达式的具体数值,而逻辑运算符只判别表达式的真与假。 位逻辑运算符&、|和 的两个运算分量是可交换的;而逻辑运算符&和|的两个运算分量都是不可交换的,并且它们严格从左到右运算。各个位逻辑运算符的优先
24、级关系是:最高,其余3个运算符的3.2.9 移位运算符和移位表达式C语言中实现移位功能的运算符有两个:(左移)和(右移)。它们都是双目运算符,并且要求两个运算分量都是整型量。由移位运算符和运算分量构成的表达式称作移位表达式。(1)左移运算符它的一般使用形式是: 表达式1表达式2它的功能是:把表达式1的值(以二进制形式表示)向左移动n位,n值由表达式2确定,并且表达式2的值必须是正整数。3.2.9 移位运算符和移位表达式例如,a 00001011,那么,移位表达式 a3的结果是01011000,即:把a的各二进位全部向左移3位,右边空出的位补0,而左边溢出的位被丢弃不管。例如,a 0000101
25、1,那么,移位表达式(2)右移运算符 它的一般使用形式是: 表达式1表达式2它的功能是:把表达式1的值(以二进制形式表示)向右移n位,n的值由表达式2确定(该值必须是正整数)例如,a00001011,那么,移位表达式 a3的结果是00000001,即:把a的各二进位全都向右移3位,右边溢出的位被丢弃,而左边空出的位(在本例情况下)补0。在右移时,要注意符号位问题。(2)右移运算符 3.2.10 其他运算符(1)& 和 *单目运算符&用来取出其运算分量的地址,例如,int a,*p;p&a;“*”也是单目运算符,它是“&” 的逆运算。它把运算分量(应是指针量)所指向的内存单元中的内容取出来。例如
26、,b*p;3.2.10 其他运算符(2)强制类型运算符( )一般使用形式是:(类型名)表达式它把表达式的类型强制转换成圆括号中“类型名”所指定的类型。(double)a这是类型的临时转换方法。(3)sizeof单目运算符sizeof用来计算某种类型的变量或某种数据类型在计算机内部表示时所占用的字节数。例如:sizeof(int)(2)强制类型运算符( )(4)单目加“”和单目减“”运算符单目加“”运算的结果仍是其运算分量的值负号()的运算结果是其运算分量的负值(5)基本运算符 ( ) 其中, 用于数组下标的表示,( )用于标识函数,“”和“”用于存取结构或联合中的成员。它们的优先级在所有运算符中是最高的。(4)单目加“”和单目减“”运算符3.3 运算符优先级和结合性3.3 运算符优先级和结合性C语言课件第
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 变更更正户口申请书
- 2024-2025学年高中物理课时分层作业5电势差含解析新人教版选修3-1
- 2024-2025学年高中地理第4单元从人地关系看资源与环境第2节自然灾害与人类-以洪灾为例学案鲁教版必修1
- 涂装生产线教育中的物流技术培训与实践案例分析
- 转走读申请书
- 入团申请书的照片
- 2025年度家居用品居间代理销售服务合同
- 小学复读申请书
- 二零二五年度项目负责人聘用及项目进度管理协议书3篇
- 劳保用品申请书范文
- 招商银行房地产贷款压力测试
- 公文与公文写作课件
- 车削成形面和表面修饰加工课件
- 基于振动信号的齿轮故障诊断方法研究
- 义务教育物理课程标准(2022年版word版)
- 医疗器械分类目录2002版
- DB11_T1713-2020 城市综合管廊工程资料管理规程
- 气管套管滑脱急救知识分享
- 特种设备自检自查表
- 省政府审批单独选址项目用地市级审查报告文本格式
- 往复式压缩机安装方案
评论
0/150
提交评论