1 / 17

本章内容

本章内容. 表达式概念 算数运算符 ++,-- 运算符 赋值运算符 逗号运算符 关系运算符 逻辑运算符. 条件运算符 位运算 复合运算 混合运算 类型运算符 运算符优先级表 常用数学函数. 表达式. 概念:常量、变量、数组元素、函数等运算对象和运算符号以及括号的有意义的组合 , 都被成为表达式 , 也就是说表达式是一个运算的式子 (P30), 如下面都是表达式 2 a 2+a a++ 2+sin(5) a=2 a,b. 算数运算符.

Download Presentation

本章内容

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 本章内容 • 表达式概念 • 算数运算符 • ++,--运算符 • 赋值运算符 • 逗号运算符 • 关系运算符 • 逻辑运算符 条件运算符 位运算 复合运算 混合运算 类型运算符 运算符优先级表 常用数学函数

  2. 表达式 • 概念:常量、变量、数组元素、函数等运算对象和运算符号以及括号的有意义的组合,都被成为表达式,也就是说表达式是一个运算的式子(P30),如下面都是表达式 • 2 a 2+a a++ 2+sin(5) a=2 a,b

  3. 算数运算符 • + (加) -(减) *(乘) / (除) %(求余) • 注意写C语言表达式时和数学中的算式相区分,下面数学算式都不是正确的C语言算式: • x/-y(出现两个运算符) (x+y)(a+b)(缺乏乘号) • 注意C语言中,同种类型值运算时结果为同类型,整数除整数结果为一个整数,如5/2 值为2,不是2.5 • 求余运算要求两个预算值皆为整数,结果为两者整除后产生的余数,如5%2 值为1,4%2值为0 • */%优先级高于+-优先级,运算方向从左向右

  4. ++,-- • ++--对应于低级语言中的自增和自减运算,运算只能用于变量,使变量自增1或减1,不能用于表达式或常量,下面都是错的 • 3++ (x+y)— • ++ --运算符用在变量前时,先执行加1或减1运算,然后再把变量的值作为表达式值送出 • ++ --运算符用在变量后时,先把变量的值作为表达式值送出,然后再执行加1或减1运算 • 如: • i=1;a=i++;//a获得值为1,i自身变为2 • i=1;a=++i; //i自身变为2, a获得值为2

  5. ++ --运算符举例 • //例1 • #include "iostream.h" • void main(){ • int a=1,b,c; • b=a++; • c=b++; • cout<<"a="<<a<<",b="<<b<<",c="<<c<<endl; • } • //例2 • #include "iostream.h" • void main(){ • int a=1,b,c; • b=a++; • c=++a; • cout<<"a="<<a<<",b="<<b<<",c="<<c<<endl; • }

  6. 赋值运算 • 在C语言中,=也是一个运算符,它的左侧必须是一个变量,功能是把右侧表达式的值赋给左侧的变量,并把此值作为=表达式的值,试比较: • a=(a1+a2); +是运算符,+表达式产生的结果即(a1加a2的和)赋给了a, b=(b1=b2);=是运算符,括号内的=使b1获得b2的值,同时=表达式产生的结果即(b2)赋给了b • 当然括号外的=也产生表达式值,但此值没有保存到变量中 • 赋值运算符优先级仅高于”,”运算符,方向从右向左 • 当=两侧类型不一致时,右侧自动转化成左侧类型 • 低类型向高类型转化时会自动扩展字节,而值不变,扩充对于整数类,扩充字节填充符号位数字,正数填0,负数填1 • 高类型向低类型转化时,只从低字节截取 • #include "iostream.h" • void main(){ • short a=0x12345678; • cout<<hex<<a<<endl; • }

  7. 逗号运算符 • 格式: 表达式1,表达式2 • 逗号运算符返回逗号右侧表达式值作为逗号表达式值 • 逗号运算符在所有优先级别最低,运算方向方向从左向右 • 下面表达式的值及a变量的值: • a=(5+4,c=6,d=7)//表达式值为7,a的值为7 • a=5+4,c=6,d=7 //表达式值为7,a的值为9 • a=(a=3*5,(a*4,a+5)),a+10 //表达式值为30,a的值为20

  8. 关系运算 • 关系运算结果只能为1(表示真或正确)或0(表示假或错误) • 高优先级: < <= > >= • 低优先级: == != • 例:2>2(值为0) 2>=2(值为1) • 运算方向为从左向右运算,如: • 30==60==0 结果为1 • 10<5<20 结果为1 • 由此可以看出,这样连续比较是没有意义的 • 注意判断相等的关系运算符为相临的两个等号,一旦漏掉一个就变成了赋值运算 • 如假设a=0;则表达式a==0(表达式值为1),a==1(表达式值为0) • 而不管a值是多少,a=0(表达式值永为0,永假式),a=1(表达式值永为1,永真式)

  9. 逻辑运算 • && (与运算):表达式1 && 表达式2 • 相当于中文”并且”,两个表达式全是1,则结果为1,否则结果为0 • 1&&1(值为1) 1&&0(值为0) 0 &&0(值为0) • ||(或运算):表达式1 || 表达式2 • 相当于中文”或”||,两个表达式全是0,则结果为0,否则结果为1 • 1||1(值为1) 1||0(值为1) 0 ||0(值为0) • !(否运算):!表达式 • 表达式值取反,0变1,1变0 • !1(值为0) !0(值为1) • 在逻辑运算中,所有的非0值都等同于1,如: • 6&&1(值为1) !6(值为0) • 三个运算符中,!为单目运算符,优先级最高,&&比||优先级高 • 逻辑运算方向,同级别从左向右,确定结果后停止运算

  10. 逻辑运算举例 • #include "iostream.h" • void main() • { int a,b,c; • a=5;b=2;c=3; • a=a++||++b&&c++; cout<<"a="<<a<<"b="<<b<<"c="<<c<<endl; • b=a>c&&c++||a++&&c++||a++ ; cout<<"a="<<a<<"b="<<b<<"c="<<c<<endl; • }

  11. 条件运算符 • 表达式1?表达式2:表达式3 • 当表达式1的值为非0值时,表达式的值作为表达式值,否则表达式3的值作为表达式值 • a=-1;b=a>0?10:20;//b的值为20 • a=1;b=a>0?’A’:’B’;//b的值为’A’ • 优先级仅高于逗号运算符和赋值运算符,运算方向具有右结合性,如: • a>b?c:d<3?e:f, 等同于a>b?c:(d<3?e:f)

  12. 位运算 • 位运算是对操作数二进制位的运算 • &(按位与)、|(按位或)、^(按位异或) 、~(按位取反) • <<(算术左移)低位补零 • >>(算数右移)高位补符号位数字

  13. 复合运算 • C语言中,把一些运算符和=组合起来,同时完成运算符所指的运算及赋值预算,称为复合运算 • +=、-=、*=、/=、%=、&=、|=、^=、<<=、>>= • a+=b 相当于a=a+b • 复合运算符优先级等同于赋值运算符 • a=2; a*=2+3; • 因为*=优先级低于+,所以表达式值为10

  14. 混合运算 当不同数据类型进行运算时,称为混合运算 运算规律:不同数据类型相遇时,低类型产生一个向高类型的转化值(操作数本身不变化),然后参与运算,这条规则不适应赋值运算 例子: 5/2+3.5 结果为5.5 char a=‘\xff’; a*10*’a’;结果-970

  15. 强制类型转换 用类型符号把表达式值转换为指定类型 格式:(类型名)表达式 如: (int)(a+b),(float)c; 注意只影响结果,不影响操作数

  16. 运算符优先级

  17. math.h中提供的数学函数(P29) • double fabs(double d) 求绝对值 • int abs(int n)求绝对值 • double sqrt(double d) 求开平方值 • double sin(double a)求正弦值 • double cos(double a)求余弦值 • double tan(double a)求正切值 • double exp(int n) 求en • double log(double d)求 ln(d) • double log10(double d)求 log10(d) • double pow(double x,int n)求Xn

More Related