《《C程序设计》第1章基本数据与表达式(四-2).ppt》由会员分享,可在线阅读,更多相关《《C程序设计》第1章基本数据与表达式(四-2).ppt(55页珍藏版)》请在三一办公上搜索。
1、1.5.3 逻辑表达式,逻辑表达式用于判断运算。逻辑表达式的值只有两个:表达式 成立 为 true(1)表达式 不成立 为 false(0)表达式求值过程中,非0值都作为逻辑真。构成逻辑表达式的运算符有关系运算符和逻辑运算符。,1.关系运算,关系运算是指对两个运算量的大小进行比较。,关系运算符:大于=大于等于 小于=小于等于=等于!=不等于优先级:低于算术运算类,高于赋值类结合性:从左向右结合,例:若有int x=2,y=3,z;则 x=y x!=y,值为 0,值为 1,z 的值为 1,z=2=3=5,z=0=5,z=1,z=3-1=x+1=y+2,1.关系运算,(1)设 a=0,b=0.5,
2、x=0.3 表达式 a=x=b 的结果为:,0,1,注意:说明数学含义 x在区间a,b 的数学表达式 a x b 不能使用 a=x=b 表示 应该使用 a=x&x=b 表示,注意关系运算的正确使用:,1.关系运算,注意关系运算的正确使用:,(2)表达式 5 2 7 6 的结果为:,0,1,讨论:5 2 7 8 是一个无意义的数学式子,但在C+中是合法表达式 应尽量避免使用这种意义不清的表达式,0,1.关系运算,注意关系运算的正确使用:,(3)关系表达式的结果为整数,所以也可以看作整型表达式。例:int i=1,j=7,a;a=i+(j%4!=0);,讨论:应尽量避免使用这种意义不清的表达式,3
3、,1,2,1.关系运算,注意关系运算的正确使用:,(4)字符数据按ASC码值进行比较例:a 0值为 1(true)A 100值为 0(false),1.关系运算,注意关系运算的正确使用:,(5)实数比较的误差 例:1.2345678901234567897=1.2345678901234567898 值为 1(true)这是数据有效位数引起的误差。,讨论:实数比较宜采用求误差值形式:fabs(x-y)例如:fabs(x-y)1e-5,1.关系运算,2.逻辑运算,&逻辑与左结合|逻辑或左结合!逻辑非右结合,逻辑运算符:,逻辑与,2.逻辑运算,逻辑与,2.逻辑运算,逻辑与,2.逻辑运算,逻辑或,逻
4、辑与,2.逻辑运算,逻辑或,逻辑与,2.逻辑运算,逻辑或,逻辑与,2.逻辑运算,逻辑与,逻辑或,2.逻辑运算,逻辑与,逻辑或,2.逻辑运算,逻辑与,逻辑或,逻辑非,2.逻辑运算,逻辑与,逻辑或,逻辑非,2.逻辑运算,逻辑与,逻辑或,逻辑非,2.逻辑运算,逻辑与,逻辑或,逻辑非,2.逻辑运算,逻辑真值表:,2.逻辑运算,逻辑运算规律:,1&a=a0|a=a0&a=01|a=10&!a=01|!a=1,a|a=aa&a=a!(a|b)=!a&!b!(a&b)=!a|!b!(!a)=a,2.逻辑运算,其中:a,b均为逻辑值1(true)或0(false),逻辑运算规律:,E1&E2当表达式 E1 的
5、值为 0 时,不再对 E2 求值E1|E2当表达式 E1 值为非 0 时,不再对 E2 求值,例:,x=y=0;x+,2.逻辑运算,逻辑运算规律:,E1&E2当表达式 E1 的值为 0 时,不再对 E2 求值E1|E2当表达式 E1 值为非 0 时,不再对 E2 求值,例:,x=y=0;x+,x+,&,x+&,x+,结果:逻辑表达式值为0,x 的值为 1,y 的值为 0,2.逻辑运算,结果:逻辑表达式值为1,逻辑运算规律:,E1&E2当表达式 E1 的值为 0 时,不再对 E2 求值E1|E2当表达式 E1 值为非 0 时,不再对 E2 求值,例:,x=y=0;x+,x=y=1;x-|y-;,
6、结果:逻辑表达式值为0,想一想 如果有x+;y+;x 则 逻辑表达式的值是多少?变量 x、y 的值是多少?,2.逻辑运算,-2 1,例:写出描述点 A(x,y)落在图中绿色部分(不压线)的 C+表达式:,1.5.3 逻辑表达式,1.5.4 赋值表达式,赋值表达式的作用是把数据值写入变量,修改对象的值,一般形式为:变量=表达式,赋值表达式的作用是把数据值写入变量,修改对象的值,一般形式为:变量=表达式,赋值运算符,例如int Score1=90;int Score2=75;int Temp=Score2;Score2=Score1;Score1=Temp;,1.5.4 赋值表达式,赋值表达式的作
7、用是把数据值写入变量,修改对象的值,一般形式为:变量=表达式,例如int Score1=90;int Score2=75;int Temp=Score2;Score2=Score1;Score1=Temp;,1.5.4 赋值表达式,赋值表达式的作用是把数据值写入变量,修改对象的值,一般形式为:变量=表达式,例如int Score1=90;int Score2=75;int Temp=Score2;Score2=Score1;Score1=Temp;,90,75,Score1,Score2,Temp,75,1.5.4 赋值表达式,赋值表达式的作用是把数据值写入变量,修改对象的值,一般形式为:变量
8、=表达式,例如int Score1=90;int Score2=75;int Temp=Score2;Score2=Score1;Score1=Temp;,90,75,Score1,Score2,Temp,75,90,1.5.4 赋值表达式,赋值表达式的作用是把数据值写入变量,修改对象的值,一般形式为:变量=表达式,例如int Score1=90;int Score2=75;int Temp=Score2;Score2=Score1;Score1=Temp;,90,90,Score1,Score2,Temp,75,75,1.5.4 赋值表达式,赋值运算的强制类型转换,例如int x=0;x=2
9、.3;cout x=x;,x=2,1.5.4 赋值表达式,赋值运算的优先级和关联性,赋值运算的优先级很低 赋值运算的右结合 赋值表达式称为左值表达式,允许关联赋值,例如x=y=z+2;x=y=(z+2);x=(y=z+2);(x=y)=z+2;z+2=x=y;,1.5.4 赋值表达式,赋值运算的优先级和关联性,赋值运算的优先级很低 赋值运算的右结合 赋值表达式称为左值表达式,允许关联赋值,例如x=y=z+2;x=y=(z+2);x=(y=z+2);(x=y)=z+2;z+2=x=y;,(1)计值,1.5.4 赋值表达式,赋值运算的优先级和关联性,赋值运算的优先级很低 赋值运算的右结合 赋值表达
10、式称为左值表达式,允许关联赋值,例如x=y=z+2;x=y=(z+2);x=(y=z+2);(x=y)=z+2;z+2=x=y;,(2)把 z+2 的值写入 y,1.5.4 赋值表达式,赋值运算的优先级和关联性,赋值运算的优先级很低 赋值运算的右结合 赋值表达式称为左值表达式,允许关联赋值,例如x=y=z+2;x=y=(z+2);x=(y=z+2);(x=y)=z+2;z+2=x=y;,(3)把 y 的值写入 x,1.5.4 赋值表达式,赋值运算的优先级和关联性,赋值运算的优先级很低 赋值运算的右结合 赋值表达式称为左值表达式,允许关联赋值,例如x=y=z+2;x=y=(z+2);x=(y=z
11、+2);(x=y)=z+2;z+2=x=y;,与第一行等价,1.5.4 赋值表达式,赋值运算的优先级和关联性,赋值运算的优先级很低 赋值运算的右结合 赋值表达式称为左值表达式,允许关联赋值,例如x=y=z+2;x=y=(z+2);x=(y=z+2);(x=y)=z+2;z+2=x=y;,与第一行等价,1.5.4 赋值表达式,赋值运算的优先级和关联性,赋值运算的优先级很低 赋值运算的右结合 赋值表达式称为左值表达式,允许关联赋值,例如x=y=z+2;x=y=(z+2);x=(y=z+2);(x=y)=z+2;z+2=x=y;,(1)把 y 的值写入 x,1.5.4 赋值表达式,赋值运算的优先级和
12、关联性,赋值运算的优先级很低 赋值运算的右结合 赋值表达式称为左值表达式,允许关联赋值,例如x=y=z+2;x=y=(z+2);x=(y=z+2);(x=y)=z+2;z+2=x=y;,(2)求值,1.5.4 赋值表达式,赋值运算的优先级和关联性,赋值运算的优先级很低 赋值运算的右结合 赋值表达式称为左值表达式,允许关联赋值,例如x=y=z+2;x=y=(z+2);x=(y=z+2);(x=y)=z+2;z+2=x=y;,(3)把 z+2 的值写入 x,1.5.4 赋值表达式,赋值运算的优先级和关联性,赋值运算的优先级很低 赋值运算的右结合 赋值表达式称为左值表达式,允许关联赋值,例如x=y=
13、z+2;x=y=(z+2);x=(y=z+2);(x=y)=z+2;z+2=x=y;,注意对变量 x 作了两次写操作,1.5.4 赋值表达式,赋值运算的优先级和关联性,赋值运算的优先级很低 赋值运算的右结合 赋值表达式称为左值表达式,允许关联赋值,例如x=y=z+2;x=y=(z+2);x=(y=z+2);(x=y)=z+2;z+2=x=y;,注意第一次赋值操作没有意义,1.5.4 赋值表达式,赋值运算的优先级和关联性,赋值运算的优先级很低 赋值运算的右结合 赋值表达式称为左值表达式,允许关联赋值,例如x=y=z+2;x=y=(z+2);x=(y=z+2);(x=y)=z+2;z+2=x=y;
14、,错误向哪一个对象赋值?,1.5.4 赋值表达式,赋值运算的优先级和关联性,赋值运算的优先级很低 赋值运算的右结合 赋值表达式称为左值表达式,允许关联赋值,例如x=y=z+2;x=y=(z+2);x=(y=z+2);(x=y)=z+2;z+2=x=y;,它是一个右值表达式只能放在赋值号右边,1.5.4 赋值表达式,复合赋值运算,双目算符 op 的表达式:A=A op B 可以缩写成:A op=B,c=c-k,c-=k,x=x*(y+8),x*=y+8,x=x+3,x+=3,x=x%3,x%=3,例:,1.5.4 赋值表达式,复合赋值运算,双目算符 op 的表达式:A=A op B 可以缩写成:
15、A op=B,+=-=*=/=%=&=|=,C+提供的10个复合赋值运算符:,用于位运算,1.5.4 赋值表达式,1.5.5 条件表达式,条件运算表达式格式:,E1?E2:E3其中?:称为条件运算符,是C+中唯一的三目运算符;E1、E2、E3 为表达式。功能 根据 E1 的值,决定计算 E2 或 E3。若 E1 的值为true(非0),条件表达式的值为 E2 的值;若 E1 的值为false(0),条件表达式的值为 E3 的值。,示例,/例1-16 计算 a+|b|的值#include void main()float a,b;cout a b;cout=0?a+b:a-b)endl;,注意
16、添加括号条件运算级别低于插入,1.5.5 条件表达式,示例,计算 a、b之中的大值:max=a b?a:b 求 a 的符号:sig=a 0?1:(a=A&ch=Z)?(ch+32):ch,1.5.5 条件表达式,1.5.6 逗号表达式,逗号表达式格式:,E1,E2,E3,En 其中,称为逗号运算符,运算级别最低;E1、E2、E3、En 为表达式。功能 顺序执行 E1、E2、E3 En,最后获得逗号表达式的值。注意,也用于分隔符,如:int func(int a,int b,double x);,逗号表达式示例:,(1)a=3*5,a*4,(2)(a=3*5,a*4),a+5,(3)b=(a=3,6*3),(4)b=a=3,6*a,15,a=15,60,60,15,a=15,60,60,20,20,3,a=3,18,18,b=18,3,a=3,b=3,18,18,1.5.6 逗号表达式,以下从高到低排列各类运算的优先级,i+1 j*4&!P|Q等价于:(i+1)(j*4)&(!P)|Q P!=i j|Q&S等价于:(P!=(i j)|(Q&S),例如,再论运算符的优先关系,