作业━━第1章━━运算符与表达式
- 格式:doc
- 大小:79.00 KB
- 文档页数:8
运算符、表达式和语句编辑人:沈哲培一、算术运算符:①:+ 加号运算符如1+2----------------------------------------------------------------------------②:- 减号运算符如9-8-----------------------------------------------------------------------------③:* 乘法运算符-----------------------------------------------------------------------------C语言中乘号是用“*”,而不是数学中的“X”,如2*6。
“*”是不能省略的④:/ 除法运算符------------------------------------------------------------------------------“/”运算符是可以实现整数和实数的除法运算,当其左右两边的操作数都是整数时,即整数除整数,结果也是整数,如果符号一侧或两侧均为实数,则结果也为实数。
如1/2=0 9/4=2 1.0/2=0.5 1/2.0=0.5 1.0/2.0=0.5⑤:% 求余运算符如5%5=0 -7%-3=-1 7%-5=2------------------------------------------------------------------------------二、赋值运算符与表达式:1.赋值表达式的一般形式:赋值运算符“=”变量=表达式运算符Sum = num1 + num2变量操作数表达式2.复合赋值运算符a+=5 相当于a=a+5a-=5 相当于a=a-5b*=c-4 相当于b=b*(c-4)b/=c-4 相当于b=b/(c-4)f%=3 相当于f=f%3三、自增自减运算符:①:++i与--i 是指在使用i之前,先把i的值加1或减1②:i++与i—是指在使用i之后,再把i的值加1或减1注意:自增自减运算符的表达式一般形式为j=++i或j=--i,i只能是变量,而不能用于常量或表达式。
运算符和表达式按运算符的优先级⾼低次序执⾏;若优先级相同,则按照结合性规则执⾏如item+2*num中,*运算符的优先级⽐+运算符⾼,因此,先进⾏”2*num"运算,再与“item"运算*p--中,*和--都是右结合,其运算顺序为p先与--结合,执⾏”p--"运算,所得结果再与*进⾏运算,相当于"*(p--)"算术运算符分为基本算术运算符和⾃增/⾃减算术运算符1.基本算术运算符在C语⾔中,基本运算符有5个,+——加法运算符-—— 减法运算符*——乘法运算符/——除法运算符%——求余运算符注意:对除法运算符,如果两个整数相除,结果仍为整数(商向下取整),如:20/6得6;如果除数或被除数中有⼀个为负值,则舍⼊的⽅向是不固定的。
如果参加+、-、*、/运算的两个数中⾄少有⼀个数为浮点数,则运算结果是double型数据,⾃动转换后所有数都按double型进⾏运算。
求余运算符%,两个操作对象都必须是整数。
结果的符号与运算符%左边的操作数的符号相同。
如:20%6得2,-45%8得-5,45%-8得5.减法运算符还可以进⾏取负运算,此时该运算符为单⽬运算符,只需⼀个操作数。
如num=-num,对num变量值取负。
基本运算符的优先级次序算术运算符的结合⽅向为“⾃左⾄右”。
如在表达式“m-n+a"中,先执⾏”m-n",再与a相加2.⾃增/⾃减算术运算符++——⾃增运算符-- ——⾃减运算符作⽤是使整型变量的值加1或减1。
这两个运算符只能⽤于变量,⽽不能⽤于常量或表达式。
⾃增/⾃减运算符都是单⽬运算符表达式++i将i的值加1,使⽤i的值表达式i++先使⽤i的值,再将i的值加1如:i=51,求j(1)j=++i——i的值先加1变为52,再赋值于j,j=52(2) j=i++——先将i的值赋值给j,j=51,再将i加1,i=52++和--是单⽬运算符,其优先级⾼于基本算术运算符,于取负运算符-的优先级相同。
运算符与表达式运算符的分类根据不同的分类标准,我们可以将运算符分为两类。
第⼀类是按照操作对象的多少进⾏划分的。
我们有下⾯的表格:⼀元运算符⼆元运算符三元运算符+-正负号+-加,减*/%乘,除,取余?:条件运算++⾃加<<>>左移,右移--⾃减&&||!与或⾮运算,^异或运算!⾮<>⼤于,⼩于~按位取反>=<=!=⼤于/⼩于等于,不等于*指针运算符=,&,|赋值按位,与,或第⼆类是按照功能划分。
我们可以分为以下内容算术运算符赋值运算符逻辑运算符------+-加减=赋值&&与*/乘除+=/-=加等减等||或%取余*=//=乘等除等!⾮++⾃增%=取余等==等于--⾃减&=,|=,^=,>>=,<<=位运算等<<左移表达式的分类 根据运算符,我们可以把表达式分为以下⼏类: 1、算术表达式 算术表达式由算术运算符和控制运算优先级的括号组成,是进⾏算术运算的基本表达形式。
(l+o+v+e)*521/1314.0;3.1415926*r; 2、赋值运算符 赋值运算符由赋值运算符,算术运算符和操作对象复合⽽成,最后以'='连接.变量=表达式或者数值//在定义时或者定义完成后初始化都可以eg:love=5211314;变量⼀=变量⼆=变量三=变量N=表达式或者值//只能在定义后初始化使⽤eg:l=o=v=e=1314; 3、逻辑表达式 ⼀般由逻辑运算符和操作对象组合⽽成,属于C语⾔中进⾏逻辑判断的主要表达形式,也是条件控制语句中的常⽤的表达式。
a&&bc||d&&m!x 4、关系表达式 关系表达式⼀般由关系运算符和操作对象组成,关系运算符也常⽤与条件控制语句复合使⽤。
eg:love>1314m==n//注意:等于判断有两个等号 5、逗号表达式 逗号表达式有其他运算符和逗号组成,常⽤于变量定义和for循环中.int a,b,c;c=(a=3,b=5,a=a+b);值得注意的是,逗号表达式的值总是等于最后⼀个表达式的值。
常⽤运算符和表达式运算符在程序中应⽤⼴泛,尤其在计算功能中,常常需要⼤量的运算符。
运算符结合操作数,便形成了表达式,并返回运算结果。
⼀. 运算符1.算术运算符算术运算符⽤于对数值数据进⾏计算。
在C#语⾔中,根据两个操作数的类型特点,加法运算符具有多重作⽤。
*两个操作数均为数字,相加的结果为两个操作数之和。
*两个操作数均为字符串,把两个字符串连接在⼀起。
*两个操作数分别为数字和字符串,则先把数字转换成字符串,然后连接在⼀起。
*两个操作数分别为数字和字符,则先把字符转换成Unicode代码值,然后求和。
算数运算符中的求模运算(%)本质上也是⼀种除法运算,只不过它舍弃商,⽽把⼩于除数的未除尽部分(即余数)作为运算结果,有称为取与运算2.关系运算符关系运算符⼜称为⽐较运算符,⽤来⽐较两个操作数的⼤⼩,或者判断两个操作数是否相等,运算符的结果为true或false。
操作数只能是值类型的数据。
3.逻辑运算符逻辑运算符读操作数或表达式执⾏布尔逻辑运算,常见的逻辑运算符如下表所⽰:运算符! & | ^ && ||含义逻辑⾮逻辑与逻辑或逻辑异或条件与条件或实例!(8>2) 8&2 8|2 8^2 (8>2)&&(3>4) (8>2)||(3>4)结果 False 0 10 10 False True逻辑⾮(!)运算结果是操作数原有逻辑的反值,逻辑与(&),逻辑或(|),逻辑异或(^)三个运算符都是⽐较两个整数的相应位。
只有当两个整数的对应位都是1时,逻辑与(&)运算符才返回结果1,否则返回结果0;当两个结果整数的对应位都是0时,逻辑或(|)运算符才返回结果0,否则返回结果1;当两个整数的对应位⼀个是1,⽽另⼀个是0时,逻辑异或(^)运算符才返回结果1,否则返回结果0;条件与(&&)与条件或(||)运算符⽤于计算两个条件表达式的值,当两个条件表达式的结果都是真时,条件与(&&)运算符才返回结果真,否则返回结果假;当两个条件表达式的结果都是假时,条件或(||)运算符才返回结果假,否则返回结果真。
运算符与表达式【学习要点】1.掌握运算符的目数、优先级、结合性等概念。
2.掌握算术运算及其应用。
3.掌握自增、自减运算及其应用。
4.掌握关系、逻辑运算及其应用。
5.掌握位运算及其应用。
6.掌握赋值、复合赋值运算及其应用,掌握赋值兼容时的类型转换。
7.掌握表达式求值时类型的自动转换和强制转换。
8.掌握表达式的组成,掌握逻辑表达式的优化及其副作用。
9.掌握逗号运算符、sizeof运算符、条件运算符及其应用。
------------------------------------------------------------------------------------------------------------------------------------------------- 【例题分析】1.若int x,y,z;下列表达式中运算结果与x=y=24相同的是______。
A.x=(y=z=8,4*6)B.x=y=(z=8,4*6)C.x=y=z=8,4*6D.x=(y=z=8),4*6【答案】B【解析】①C++语言的赋值运算有别于其它高级语言,逗号运算又是其它高级语言所没有的。
②在赋值表达式中,可以有多个赋值运算符,计算顺序自右向左,运算优先级低,仅高于逗号运算符。
③逗号既是分隔符,又是运算符,可以用一个逗号运算符或多个逗号运算符将多个表达式连接成逗号表达式,计算顺序自左向右,并将最后一个表达式的值作为整个逗号表达式的值,逗号运算优先级最低。
2.若int i=6,k=0;下列表达式中运算结果使k=7的是______。
A.k=i+++kB.k=k+i++C.k=++i+kD.k=k+++i【答案】C【解析】①自增++、自减--运算符是C++语言特有的。
②运算符++、--出现在变量的前面或后面,其运算结果是不同的。
若++、--出现在变量前,则先将变量的值加1(或减1)后,再将变量的值参加运算;反之则先将变量的值参加运算,再将变量的值加1(或减1)。
③自增、自减运算符的优先级高于算术运算符,因此对于k=i+++k:解释为i++,再加k;对于k=k+++i:解释为k++,再加i。
3.表达式‘A’+’B’+20的值是______。
【答案】151【解析】不同类型的数据混合运算时,系统可以自动进行类型转换,将表示范围小的数据类型转换成另一操作数的相同类型后再参与运算,则转换为65+66+20=151。
4.若int e=8;double f=6.4,g=8.9;则f+int(e/3*int(f+g)/2)%4的值是______。
【答案】9.4【解析】①不同类型的数据混合运算时,可以使用强制类型转换符,将一种数据类型强制转换成另一种数据类型后再参与运算。
②表达式中:e/3的值是整型数2,int(f+g)的值是整型数15,int(e/3*int(f+g)/2)的值是整型数15,15%4的值是整型数3,最后加上实型数f,得到最终值是实型数9.4。
5.若int i=65535 ,j=0x000a ,k ;k=i&j ;则i、j、k的值是______。
【答案】65535 、10 、10【解析】将十进制数65535和16进制数000aH在计算机内的二进制数,进行按位与运算,结果为k=10。
6.编写程序:求出三个实数中的最大数。
【答案】编写程序如下:#include<iostream.h>void main(){ float a , b , c ;cout << “请输入三个实数:” ;cin >> a >> b >> c ;cout << “最大数:” ;cout << ( a >= ( b >= c ? b : c ) ? a : ( b >= c ? b : c ) ) << endl ; }------------------------------------------------------------------------------------------------------------------------------------------------- 【思考题】㈠选择题1.若int a=2;cout<<( a=3*5,a*4,a+5 );则cout的输出值、a的值分别是______。
A.7、7B.15、15C.20、15D.7、65【答案】???2.若int a,c=5;a=2+(c+=c++,c+8,++c);则a、c的值分别是______。
A.13、11B.14、12C.15、13D.16、14【答案】???3.从语法的角度来看,语句if(a<=b<=c)x++; 是______。
A.正确的B.语法正确,但在编译时会有警告信息C.语法上是错误的D.编译系统不会进行相关检查【答案】???4.若int x;则表达式( (x=4*5,x*5), x+25 ) 的值是______。
A.20B.45C.100D.125【答案】???5.若int x=1,y=1,z=1,k;k=x++||++y&&++z;则y的值是______。
A.1B.2C.3D.4【答案】???6.若int x=5;则表达式( (x==4*5,x*5), x+25 ) 的值是______。
A.20B.45C.5D.30【答案】???7.若int a=1,b=2;a++&&++b;则a、b的值分别是______。
A.1、2B.2、2C.1、3D.2、3【答案】???8.数学式:a≠b且c≤d,在C++中的表达式为______。
A.a≠b&&c<=dB.a!=b&c<=dC.a=!b&&c<=dD.a!=b&&c<=d【答案】???9.数学式:a≤b≤c,在C++中的表达式为______。
A.a<=b<=cB.! (a>b>c)C.a<=b||b<=cD.a<=b&&b<=c【答案】???10.若int x=100,y=1,z;z = y>0 ? ++x : --x ;则x、z的值是______。
A.100、100B.100、101C.101、100D.101、101【答案】???11.若i nt x=5,y=7,z=8;z = x++ || y++ || ++z;则x、y、z 的值是______。
A.6、7、8B.6、8、9C.6、7、1D.6、8、1【答案】???12.若int a=15,b=17,c;c = a || ( b+=a );则a、b、c 的值是______。
A.15、17、0B.15、32、32C.15、32、1D.15、17、1【答案】???13.若int a=5,b=5,c=5;b= --a>b && ++c>b;则a、b、c的值是______。
A.4、5、5B.4、5、6C.4、0、6D.4、0、5【答案】???14.若int a=3,b=5,c=7,d=9;d= b>a || (c=a+b);则c、d的值是______。
A.7、1B.8、1C.7、0D.8、0【答案】???15.若int a=1,b;float c=3.5;c = (a+=4.8)+(b=5.9);则a、b、c的值是______。
A.1、5、10.7B.5、5、9C.5、5、10D.非法运算【答案】???16.若int a=3,b=5,c=7;c = a++>b*c-31>=a%2;则a、b、c的值是______。
A.3、5、1B.4、5、1C.4、5、0D.3、5、0【答案】???17.若int a=3;a += a -= a * a;则a 的值是______。
A.3B.6C.-3D.-12【答案】???18.若float a;int b,c=2;a = (b=9)/(c==2);则a、b、c 的值是______。
A.9、9、2B.9、9、1C.4、9、2D.4.5、9、2【答案】???------------------------------------------------------------------------------------------------------------------------------------------------- ㈡填空题1.若int x;float y;y = x = 3 / 5;则x、y 的值分别是______。
【答案】???2.若x为整型,a、b为实型,则(6x)÷(7ab)表示成______。
【答案】???3.若int a=10,b=3,c=5;c = !c + -a++ % ~b;则a、b、c 的值是______。
【答案】???4.若int a=1,b=2,c=3;b *= c+ = a <= b <= c;则a、b、c 的值是______。
【答案】???5.若int a=3,b=6,c=2;c == ! a + ~b * a - ! b;则a、b、c 的值是______。
【答案】???6.若int a=5,b=6,c=1;c=(a=c>b)&&(b=a>8);则a、b、c 的值是______。
【答案】???7.若int w=1,x=2,y=3,z=4;则表达式( w>x ? w : z > y ? z : x )的值是______。
【答案】???8.若char a=251;short b;b = a ;则a、b 的值是______。
【答案】???9.若unsigned char a=251;short b;b = a ;则a、b 的值是______。
【答案】???10.若int a=13,b=3;float c;c = a / b;则a、b、c 的值是______。
【答案】???11.若int a=13,b=3;float c;c = a / float(b);则a、b、c 的值是______。
【答案】???12.若int a=13,b=3;float c;c = (float)a / b;则a、b、c 的值是______。
【答案】???13.若int a=13,b=3;float c;c = float(a / b);则a、b、c 的值是______。
【答案】???14.若int a=2,b=3,c;cout << ( c=a+b,a++,a==b ) ;则输出值是______。