第4章C++表达式与基本程序控制结构.ppt
《第4章C++表达式与基本程序控制结构.ppt》由会员分享,可在线阅读,更多相关《第4章C++表达式与基本程序控制结构.ppt(76页珍藏版)》请在三一文库上搜索。
1、,第4章 C+表达式 与基本程序控制结构,运算符是指用来表示在数据上执行某些特定操作的符号。 参与运算的数据称为操作数。 根据参与运算的操作数的个数是一个、两个或三个,运算符分为一元运算符、二元运算符和三元运算符。,41 运算符与表达式,表达式是指用运算符和圆括号把常量、变量和函数等运算成分连接起来的有意义的式子。 单个常量、变量和函数也都可以看成是一个表达式。 表达式经过计算后都会得到一个确定的 值,这个值就是表达式的值。,每个表达式都具有唯一确定的值和唯一确定的类型。,例如:98.56 , (98.56) , x , 876-78 ,3*(2.5+5) ,sqrt(9)都是合法的表达式。
2、它们的值分别为98.56、98.56、x的值、794、22.5、3。 其中sqrt()是一个计算平方根的标准函数,包含在库math.h中。,C+中有一种表达式称为逗号表达式,指的是用逗号分隔开的表达式序列。 比如: x = 3 , y = 8 , x + y 逗号表达式的求值次序是从左到右依次计算各表达式的值,以最后一个表达式的值和类型作为整个逗号表达式的值和类型。比如上面这个逗号表达式的值为11。,4.1.1 算术表达式 用算术运算符(+、-、*、/)连接起来的表达式就称为算术表达式。,用除法运算符进行整数除法与进行浮点数除法是不同的。用于整数时,表示整除,如果有余数,余数部分就被省略了。如
3、: 5 / 2 得到的结果为 2(int型) 8 / 5 得到的结果为 1(int型) 而用于浮点数时: 5.0 / 2.0 得到的结果为 2.5(float型) 8.0 / 5.0 得到的结果为 1.6(float型),取余运算符用于取整数除法的余数,是对除法运算符的一个必要的补充。 如: 5 2 得到的结果为 1 8 5 得到的结果为 3 在/和%运算中,注意除数不能为零,否则将产生溢出错误。 在做+和*运算特别是*运算时,很容易出现运算结果产生溢出的情况,要注意将数据定义为足够长度的类型。,当赋值运算符的两边出现相同的变量时,C+还提供了一个简洁的表达方式:x=。其中的x可为 +、-、*
4、、/、等。 假定e1和e2是表达式,那么 e1 = (e1) x (e2) 就等价于 e1 x = e2 例如,表达式a=a+9可以用+=写成如下形式: a+=9 注意围绕 e2 的括号。例如,表达式y-=x+1实际上是y=y-(x+1),+ + 和 - - 运算符 增1运算符和减1运算符分别对其操作数进行加1和减1操作,它们既可以用在变量前,作为前缀运算符,例如: int m, n; +m; -n; 又可用在变量后,作为后缀运算符。例如: m+; n-;,前缀增(减)1运算符在使用变量的值之前就使变量值加1或减1, 后缀增(减)1运算符在使用变量的值之后才使变量值加1或减1。 例如,若n的值
5、为5,那么 x = n +; 先将n的值5赋给x,即x的值为5,再将 n的值加1,则n为6。而 x = + n; 先将n的值加1得到6,再将n的值赋给x,则x和n的值都为6。,4.1.2 关系运算 C+的关系运算符都是二元的,有、=、=、=、!=,分别表示“大于”、“小于”、“大于等于”、“小于等于”、“等于”和“不等于”。 由关系运算符连接起来的表达式就称为关系表达式。,关系表达式的值只有两个:1和0。 1表示逻辑真,即该关系表达式成立; 0表示逻辑假,即该关系表达式不成立。 例如,表达式 6 = 4 的值为1, 而表达式 67 != 67 的值为0。,例4.1 关于关系运算的一个例子 #
6、include void main() double x=45.3, y; couty; cout(xy)endl; 例4.1执行后,若输入的y的值是小于45.3的,则得到的结果是1,否则得到0。,4.1.3 逻辑运算 C+的逻辑运算符有三个:一元运算符!(逻辑非)和二元运算符&(逻辑与)、|(逻辑或)。 用逻辑运算符连接起来的表达式称为逻辑表达式。, 当 x=8 时,上述表达式为0。,| 运算符左右两边的表达式只要有一个为真(非0),整个表达式的值就为1。只有当其左右两边的表达式都为0时,整个表达式的值才为0。 例如: (x20) 当x=36时,此表达式的值为1; x=8时,此表达式的值也为
7、1; x=16 时,此表达式的值为0。,! 运算符用在表达式的前面,表示取表达式的非。若表达式值为0,取非以后为1; 若表达式值为非0,取非以后为0。 例如: !(32) 的值为0,因为(32)的值为1。,C+在计算逻辑表达式的值时,若从左到右计算到某处就已经能够确定表达式的值,则不再继续后面部分的求值。,例如,形如 e1 & e2 的表达式,在已求得表达式e1的值为0的情况下,已经能够确定整个逻辑表达式的值为0,C+就不再对e2求值。,同样,形如 e1 | e2 的表达式,如果已经求得e1的值为1,则整个表达式的值一定为1,C+就不再对e2求值。,4.1.4 条件运算符 条件运算符?:是C+
8、中唯一的一个三元运算符。 条件运算符的表达式具有如下形式: e1 ? e2 : e3 其中e1、e2、e3皆为表达式。,条件运算执行的操作是:先计算表达式e1的值,如果为非0,则计算表达式 e2 的值并把它作为整个表达式的值; 而如果e1的值为0,则计算表达式e3的值,并用它作为整个表达式的值。,例如,表达式 ( x y ) ? 10 : 20 如果x的值大于y的值,则表达式的值为10,否则表达式的值为20。 又如,在语句 max = (ab) ? a : b; 中,max将赋值为a、b中较大的数。,4.1.5 位运算 在计算机存储器中,所有的数据都是以二进制形式存放的。位运算是对二进制机器数
9、进行的操作。 C+中的位运算符有6种: 按优先级顺序为 ,(),&,|。 位运算符的运算对象只能是整型(int)或字符型(char),位运算不改变运算对象本身。,例4.2 下面的小程序将输出: fedcba98 #include void main() int a=0x01234567; /0000 0001 0010 0011 0100 0101 0110 0111 couthexaendl; /1111 1110 1101 1100 1011 1010 1001 1000 ,(1)(按位求反): 一元运算,将运算对象各位求反。,(2)(右移): 二元运算,左操作数为移位对象,右操作数为移动
10、位数n。返回移位对象整体向右移动n位,高位用n个0填补以后的值。(当移位对象为负数的补码时,高位用n个1填补。),例4.3 左移和右移 #include void main() int a=0x0089abcd; /0000 0000 1000 1001 1010 1011 1100 1101 int b=-100; /1111 1111 1111 1111 1111 1111 1001 1100 cout5)5)endl; /1111 1111 1111 1111 1111 1111 1111 1100 ,程序输出: 113579a0 44d5e fffff380 fffffffc,(4)&
11、(按位与): 二元运算,将两个运算对象按位相与。 (5)(按位异或): 二元运算,将两个运算对象按位异或。 (6)|(按位或): 二元运算,将两个运算对象按位相或。,例4.4 按位逻辑运算 #include void main() int a=0x01234567; /0000 0001 0010 0011 0100 0101 0110 0111 int b=0x89abcdef; /1000 1001 1010 1011 1100 1101 1110 1111 couthex(a /1000 1001 1010 1011 1100 1101 1110 1111 ,程序输出: 1234567
12、88888888 89abcdef,4.1.6 求字节数运算 求字节数运算为一元运算,用sizeof()运算符。其功能是求变量或表达式的数据类型在内存中占据的字节数。待求字节数的表达式放在括号中,返回值为整型。,例4.5 求字节数运算 #include #include void main() short a=-32768; float b=9.0; double c=5.7; char d=k; coutsizeof(a)“ “; coutsizeof(b)“ “; coutsizeof(c)“ “; coutsizeof(d)“ “; coutsizeof(sqrt(b)“ “; cout
13、sizeof(a+b+c)endl; 程序输出: 2 4 8 1 8 8,4.1.7 运算符的优先级和结合性 当一个表达式中有多个运算符时,运算符的优先级和结合性就决定了表达式中各运算的先后顺序。优先级相同时,由结合性决定运算次序。,运算符的结合性分为左结合(从左到右计算)和右结合(从右到左计算) 例如,运算符+和-优先级相同、为左结合,因此表达式 45+89-23 按从左到右的顺序计算,先做加法再做减法。 而赋值运算符=是右结合的,因此表达式 x=y=78 的运算次序为:先将78赋给y,再将y赋给x。,表4.1 C+常用运算符的优先级和结合性,C+各运算符的优先级总的来说有如下规律(按优先级
14、从高到低): 一元二元(除了赋值)三元赋值逗号; 二元运算符又有如下规律: 算术关系逻辑; 逻辑运算符有如下规律: ! & |。,例4.7 根据表达式的求值次序,求下列表达式的值 假定有 int x = 5 , y = 4 , z = 6 ; char a = s , b = t ; int w = 2 ; 表达式 表达式的值 z / y z / 4.0 z / y % z / x a b | y z a != b & z 6 a = b & ! ( y z ) a = b & ! y z x + 1 +z x + 1 z+ -x -y | x + y z & z % 3 = 0 ( x+ ,
15、 x += y , x + y ),1,1.5,0,1,0,0,1,1,0,1,14,按照结构化程序设计的思想,程序由三种单入口、单出口的基本结构组成:顺序结构、选择结构、循环结构。 C+的控制流就是由这三种基本结构组成的。,42 基本程序控制结构,4.2.1 顺序结构 顺序结构的程序是指程序中的所有语句都是按书写顺序逐一执行的,只有顺序结构的程序功能有限。,例4.8 计算球的体积 。已知球的体积公式为: 4R3 V= 3 # include void main() float radius , bulk; cout radius ; / 输入半径 bulk = (4*3.1416* radi
16、us* radius* radius)/3; cout “bulk = “ bulk endl; / 输出体积 ,选择结构也称为分支结构,用于处理在程序中出现了两条或更多执行路径可供选择的情况。选择结构可以用选择语句来实现。选择语句包括 if 语句和 switch 语句。,4.2.2 选择结构,1If 语句 if语句有两种格式。,格式1:if (条件表达式) 语句 功能:对条件表达式求值,若值为真(非0)则执行它后面的语句; 否则什么也不做。 若需要执行的语句用单条语句写不下,就应该用复合语句。,例4.9 将两个数排序输出 # include void main( ) float a , b
17、, ls; cout ab; if (ab) ls = a; a = b; b = ls; couta“ “b endl ; ,格式2: if (条件表达式) 语句1 else 语句2 功能:对条件表达式求值,若值为真(非0)执行其后的语句1; 否则执行else后面的语句2。即根据条件表达式是否为真分别作不同的处理。,4.10 用if else 对例4.9的改写 # include void main() loat a , b , ls; coutab; if (ab) couta“ “bendl; else cout b “ “ a endl; ,上一节介绍的条件运算符也可以用if语句来改写
18、。例如: y = (ab)? a:b; 可以用下面这个 if-else 语句来代替: if (ab) y=a; else y=b;,if语句中也可以包含if 语句,这就构成了if语句的嵌套。,例4.11 某单位向职工按月发放医疗补贴的具体方案如下:职工工龄在10年以下的,医疗补贴为其基本工资的10% ; 工龄在10年以上20年以下的,医疗补贴为其基本工资的15% ; 工龄在20年以上30年以下的,医疗补贴为其基本工资的20% ; 工龄在30年以上的,医疗补贴为其基本工资的30%。输入某职工的工龄及基本工资,计算他每月应得的医疗补贴。,# include void main() int seni
19、ority; double wages, allowance; coutseniority; /输入工龄 coutwages; /输入基本工资 if (seniority10 ) /工龄在10年以下 allowance=wages*0.1; else if( seniority 20 ) /工龄在10年19年 allowance=wages*0.15; else if ( seniority 30 ) /工龄在20年29年 allowance=wages*0.2; else allowance=wages*0.3; /工龄在30年以上 cout“The allowance is : “allo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 表达式 基本 程序控制 结构
链接地址:https://www.31doc.com/p-2987131.html