4 运算符和表达式

上传人:jin****ng 文档编号:168591019 上传时间:2022-11-11 格式:DOCX 页数:7 大小:118.75KB
收藏 版权申诉 举报 下载
4 运算符和表达式_第1页
第1页 / 共7页
4 运算符和表达式_第2页
第2页 / 共7页
4 运算符和表达式_第3页
第3页 / 共7页
资源描述:

《4 运算符和表达式》由会员分享,可在线阅读,更多相关《4 运算符和表达式(7页珍藏版)》请在装配图网上搜索。

1、University of Electronic Science and Technology of China4运算符和表达式一.常见运算符1. 算术运算符:2. 关系运算符:+ - * / % = =二二!【注:从左至右依次为: 大于小于大于等于小于等于等于不等于】3. 逻辑运算符:| & !【注:从左至右依次为:逻辑或逻辑与逻辑非】4.赋值运算符:=5.条件运算符:?:6.指针运算符:* &7891011121314(2)(3)4)结合性:自右向左优先级:102030+和-同级;+ 和负号运算符同级。+ -高于算术运算符。【如:i+i应理解为:(i+) +i】 强调:10 +和-只能用于

2、变量,不能由于常量;20 +和-用于指针变量,则使指针向前或向 后移动一个单位。(根据指针变量类型,在内存中移动不同单元)位运算符: 丨八& 强制转换运算符:(类型) 分量运算符: -下标运算符:求字节运算符:sizeof 复合赋值运算符: 自增自减运算符: 逗号运算符:,二.几类重要的运算符 1.算术运算符(1)(2)(3)30 +和-与其它运算符在表达式中同时存在 时(不带括号),则按照优先级和右结合性 进行运算。4o +和-可以用干整型变量和实型变量。 使用:+= 一二 *=等10 i+表示i参与运算后加上1;+20 -i表示i参与运算前减去1(5)种类:+ - * / % 结合性:自左

3、向右 优先级:1o2o3o* / %同级;+ -同级;* / %高于+ -。(4)强调:10对于/:(左结合性)、两个数据(常量或变量)中一个为实型,则结果为实型; 两个整型数据相除,则结果为整型数相除,只要其*20对于 (模余);要求两个数据必须为整型, 结果为两数据相除的余数。【如:2+5-3*4的值为-52/3 的值为 02.0/5 的值为 0.44%2 的值为 03%2的值为 1】2自增自减运算符:(1)种类:据。+O30表达式中含有前缀和后缀的自增自 减运算符,则计算过程如下: 对所有前缀进行增减运算; 对表达式进行运算; 对所有后缀进行增减运算。【如:#include void m

4、ain( )int i=2,j=3,k;k=(i+)+(j-)+4;printf(result:k=%d,i=%d,j=%dn,k,i,j);运行结果: result:k=9,i=3,j=2】【思考:如下程序的结果为#include void main( )int i=2,j=3,k;k=(i+)+(j+)+4+(+i)+(+j); printf(result:k=%d,i=%d,j=%dn,k,i,j);】【注:表达式中同时出现i和+i,则1o TC系统将i 和+i都同时增加1。电占询圍L丈学University of Electronic Sciencg and Teclinobgy of

5、 China2o VC系统将+i中的i增加1,而变量i则不 增加1。】【思考:如果int i=2,j=3,k;则执行 k=i+j-+i+-i;k 的值是。】3. 关系运算符(1) 种类: 二二二二!二(2) 结合性:自左向右(3) 优先级:10 =二同级;2o 二二!二同级;3o =二高于二二!二。(4) 关系表达式的两种结果:10结果为真,则以1表示;20结果为假,则以0表示。【注:关系表达式的结果为逻辑量】4. 逻辑运算符:(1) 种类:| & !【注:10逻辑与&类似于乘积运算;2o逻辑或|类似于加法运算】(2) 结合性:左(3) 优先级:由低到高依次为:| & !了(4) 逻辑表达式的

6、两种结果:1o结果为真,则以1表示;2o结果为假,则以0表示。(5) 运算强调:非0则1,是0则0。 【注:10任何类型数据都可以作为逻辑量研究;20处理|或者&的表达式时,一旦结果确定, 则停止运算】【注:10 0和非0是逻辑运算的依据;20 0和1是逻辑运算的结果】5. 赋值运算符:(1) 种类:二(2) 作用:将一个表达式的值赋给一个变量。6. 复合赋值运算符:(1) 种类:+= -二 *= /= %= = &= |=入二(2) 优先级:同级(3) 用法:E1 op二 E2 O E1二 E1 op E2 【注:10 op为一个运算符;20 E1为变量名;30 E2为变量或表达式;40首先

7、计算E2的值,再进行复合赋值运算。 【如:a+=2 O a=a+2x*=a+g O x=x*(a+g)c%=b O c=c%b】(4) 优点:简化程序,提高编程效率。(5) 几类重要运算符的优先级别: 由低到高依次为:复合赋值赋值逻辑关系算术!7. 逗号运算符:(1) 种类:,(2) 优先级:低于所有运算符(3) 运算规律:从左自右依次计算所有表达式,以最后一个表达式 的结果作为该语句的最终 结果。【如:y=(a二b+c,a二c+d,a二d+e);结果为a=d+e 且 y=d+e 】7.类型转换(1) 说明:同一个表达式中可以进行不同类型数据的混合运算,运算时 转换成同类型数据。(2) 三类转

8、换10自动转换 类型转换顺序charshortunsigned short intunsignedlongfloatb; d 的值是 1。2o d=a+bc; d 的值是 0。3o d=c+b=c+a; d 的值0。4o d=a!=bb即为32,结果为真,所以d的值是1。2o表达式等价于(a+b)c,即为51,结果为 假,所以 d 的值是 0。30表达式等价于(c+b)=(c+a),即为 3=4,结果为假,所以 d 的值是 o。4o 表达式等价于 d=(a!=bc), 因为bc为假,所以bc的值是0,而a!=bc 成立,所以d的值是1。( 2) int a=-7,b=0 c; 则10 c=!a

9、; c 的值是 0。20 c=a&b; c 的值是 0。30 c=!b2|5&5二5; c 的值是 1。解:10因为a=-7非零,故a的逻辑值为1,因此!a 的逻辑值是0,所以c的值是0。20因为b=0,故b的逻辑值为0,所以a&b的 值是逻辑值是0,所以c的值是0。30 等价于 c=(!b2) |1 & (5=5),有Jr WWr j-c=(12)|1 &1,有 c=1|1&1,有 c=1|1,所以c的值是1。(3) 如果某年能被4整除且不能被100整除,或 者该年能被400整除,则为闰年。设某年为n,则 判定其是否为闰年的表达式可表示为: n%4=0&n%100! =0l|n%400=0;

10、(4) 读下列程序。 A 1#include void main( )Tk | fint a,b=5,c,d=9;Aa=5=3;c=10=3的值为1,所以a=1 10=2的值是0,所有c=0 b+a=5+1=6,所以 b=6 d+c=9+0=9,所以 d=9(5) 读下列程序。#include stdio.h void main( )int i=2,j=3,k;j=i+;k=+i;prin tf(i,j,k=%d,%d,%dn,i,j,k);则程序运行后结果为i,j,k=4,2,4。解:根据自增自减运算符的运算规律由 j=i+;得 j=2,此后 i=3由k=+i;得i=4,通过赋值得k=4。所

11、有,有 i=4,j=2,k=4。(6) 读下列程序。#include void main( )int i=2,j=3,k;k=i+j-+j+-i; printf(i,j,k=%d,%d,%dn,i,j,k);程序运行结果为i,_i,k=2,2,8。解:自增自减运算符具有自右向左结合性,且优先 级别大于算术运算符,故在没有括号的具有自增自减运算符和算术运 算符的表达式中,首先进行右结合考虑自增自减, 再进行左结合考虑自增自减,最后考虑算术运算。k=i+j一+j+一i;等效于k=(i+)+(j-)+j+(-i);按照运算规律首先运算前缀,得到i=1;然后运算 k二 i+j+j+l,得 k=1+3+

12、3+1=8 最后运算后缀,得到 i=2, j=2(7) 读下列程序。#include void main( )int a=2,b=4,c=6,x,y; y=(x=a+b,x+c); printf(x=%d,y=%dn,x,y);程序运行结果为:x=6,v=12。解:根据逗号运算符的运算规律,得 x=2+4=6, x+c=6+6=12,于是 y=x+c=12(8)已知:a=b=c=1;且均为int型变量,执行语 句+a|+b|+c;则变量a的值为 2;变量b的值为丄;变量c的值为丄。解:根据自增运算符的优先级别高于逻辑运算符, 有 +a|+b|+c;等效于(+a)|(+b)|(+c);因此,首先

13、 a 的值增加 1,变为 2,故逻辑值 为1,此时表达式的结果已确定,不再进行+b和 +c及逻辑运算,所以变量b和c都保持原来的初 值1,所以语句执行后有: a=2;b=1;c=1。例 4 . 2 选择题( 1 )已知 char a; int b; float c;double d;执行语句c=a+b+c+d;则变量c的数据类C. 10解:显然, i+=+i; 等价于 i=i+(+i);由前缀+可知,i在参与运算前加上1,故运 算前i=6 (注意等式右边变量i的值都变为6);因 此右端结果为6+6=12,最后将12重新赋给左端i,所以,A答案正确。(4) 已知:inty;float x=-3;

14、执行语句 y=x%2;则1事T变量y的值是(D )A. 1C. 0解:D. 13B. -1D.语句有误%两边的类型必须为整型,而x为单精度实型, 故不能取模余,因此语句有误,所以,D答案正确。(5) 已知:intx=3,y=5,z;执行语句 z=x=xy;则1Z J变量z的值是(A )A. 0C. 3B. 1D. 5解:值,型是A. intB. char这是一个赋值表达式,从右到左依次运算并赋C. float 解:D. doubleT由于语句c二a+b+c+d;右端的d因为 xy 为假,所以值为 0, 故x被赋值为0,z也被赋值为0, 所以,A答案正确。右端结果为双精度型,而语句左端变量为单精

15、度 型,根据赋值转换,右端的结果赋给左端c,会自 动转换为单精度型,所以,C答案正确。f(2) 已知:int j,i=1;执行语句j二-i+;则i和j的值分别是(CA. 1,1B. -1,2C. 2,-1D. -2,2解:根据自增运算符的规则,后缀形式是i参与运算是后才加上1,所以j的值为-1, i的值为2。 所以,C答案正确。(3) 已知:int i=5;执行语句i+=+i;则i的值是()A. 12B. 11(6) 以下选项中,与k=n+完全等价的表达式是( A )A. k=n,n=n+1B. n=n+1,k=nC. k=+nD. k+=n+1解:由后缀+可知,变量n赋给k后,n自增1。 所

16、以A答案正确。(7) 已知: intx=6; 执行语句 x+=x-=x*x; 则变量x 的值是( B )A. 36B. -60C. 60D. -24解:根据复合赋值运算规律,有 x+=x-=x*x; Ox=x+(x-=x*x); O x=x+(x=x-x*x);University of Electronic Science and Technology of China因此,得X=-30+(-30)=-60 所以,B答案正确。(8)若定义int x;要将x强制转换成双精度类型,则应该执行A(double)xCdouble(x)( A )Bx(double)D(x)double#include

17、 void main()int y=3,x=3,z=1; printf(%d%dn,(+x,y+),z+2);B4 2D3 3A3 4C4 3下列运算符运算级别最高的是 (D )强制转换的格式为:(类型名)表达式A. &B. +=所以, A 答案正确。C. =D. !(9)以下程序的运行结果是:(C)(14)在C语言中,要求运算数是整型的运算符是#include (A )void main( )A. %B. /int k=2,i=2,m;C. !=D. *m=(k+=i*=k);(15)在C语言中表达式(2/5+3/5)的值是printf(%d,%dn,m,i) ;Jh(A )A. 0A. 0

18、.4A8,6B8,3Tyr JC. 0.6D. 1C6,4D7,4(16)设 int a=2, b=3,3F c; c=(a*=b);则执行上( 10)设 x 和 y 均为 int 型变量,则以下语句:述语句后c的值是(D )x+=y; y=x-y; x_二y;的功能是(D)f zA. 2B. 3A.把x和y按从大到小排列。C. 5D. 6B.把x和y按从小到大排列。(17)int a, b, c=5; a:=c+; b=c;执行上述语C.无确定结果。jr句后,则b的值为( C )D.交换x和y中的值。XI JFA. 4B. 5(11)以下程序的运行结果是(r|C )C. 6D. 7#incl

19、ude 1*(18)设有定义: doublex=4.9;则表达式rrvoid main()(int)(x)%3/4 的值是( D )int a=4,m=0, n=0,k;A. 4.9B. 0.5k=(m=a=3)|(n=a=4);C. 0.25D. 0printf(%d,%dn,m,n);歹(19)设变量x为float型且已经赋值,则以下语句中能够将x中的数值保留到小数点后面两位,并A. 0,0B. 0,1将第三位四舍五入的是:( C )C. 1,0D. 1,1Ax=x*100+0.5/100.0(13)T解:【思考:#include void main()int m=5,n=5,k; k=(

20、m=0)&(n=0); printf(%d,%dn,m,n); 输出结果为:】(12)以下程序的运行结果是x=(x*100+0.5)/100.0x=(int)(x*100+0.5)/100.0x=(x/100+0.5)*100.0D)BCD【例如:取x=2.346,带入C中运算,得x=2.35】【 思考: 若有程序段: double x=-5.9;int y;y=(int)x;执行该段程序后x=,y=】(20)设有定义:float a=2,b=4,h=3;,以下 C 语 言表达式中与代数式(a+b)h/2计算结果不相符的 是( B )电占询放/学University of Electronic

21、 Sciencg and Technology of ChinaA. (a+b)*h/2B. (1/2)*(a+b)*hA. k+C. +kB. k+=1D.k+1(23)以下选项中,当x为大于 1 的奇数时,值为0 的表达式是( D )A. x%2=1B.x/2C. x%2!=0D.x%2=0(24)以下程序的运行结果是( B#include stdio.hvoid main( )int i=5,j=5;printf(%d,%dn,i一,+j)TC. (a+b)*h*1/2 D. h/2*(a+b)(21)设有如下程序段:int x=2008, y=2009;prin tf(%dn,(x,y);则以下叙述中正确的是( D )A. 输出语句中格式说明符的个数少于输出项 的个数,不能正确输出B. 运行时产生出错信息C. 输出值为2008D. 输出值为2009(22)设有定义: int k=0; ,以下选项的四个表 达式中与其他三个表达式的值不相同的是( A )5 5cs只改变原变量(X )T 、例4. 3判断题(1)强制类型转换,如(double)x,的类型,而不改变其值。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!