VC++第三章教学教案

上传人:yulij****0329 文档编号:141465004 上传时间:2020-08-08 格式:PPT 页数:52 大小:370.50KB
返回 下载 相关 举报
VC++第三章教学教案_第1页
第1页 / 共52页
VC++第三章教学教案_第2页
第2页 / 共52页
VC++第三章教学教案_第3页
第3页 / 共52页
VC++第三章教学教案_第4页
第4页 / 共52页
VC++第三章教学教案_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《VC++第三章教学教案》由会员分享,可在线阅读,更多相关《VC++第三章教学教案(52页珍藏版)》请在金锄头文库上搜索。

1、,第3章 运算符与表达式,运算符(operator)也称为操作符,对程序中的数据进行运算。参与运算的数据称为操作数(operand)。 变量、字面常量等通过运算符组合成表达式,一个表达式也能作为操作数来构成更复杂的表达式。 表达式(expression)是构成程序语句的基本要素。,3.1 基本运算符 对于运算符,应注意以下几方面。 (1) 运算符的功能和语义。 (2) 运算符的操作数。每个运算符对其操作数的个数、类型和值都有一定限制。 (3) 运算符的优先级(precedence)。每个运算符都有确定的优先级。 (4) 运算符的结合性(associativity)。 表3.1给出了C+中的主要

2、运算符的功能、优先级、目数、结合性。表中按优先级从高到低分为16个级别。,基本运算符,Operator.doc,3.1.1 算术运算符 + 、- (正号、负号,单目运算) + 、 - 、 *、 / 、 %(双目运算) +、-、*、/ 按通常的算术规定。,注意: 对于除,若两个操作数都是整数,结果为整数(商部分)。 1/2=0 5/2=2 %通常称为取模运算,两个操作数必须都是整型数,结果为余数,余数的符号与左边数的符号等同。 3%2=1 -3%2=-1 3%-2=1 -3%-2=-1 8%4=0,在算术运算中需要注意溢出问题。 两个整数做加法、减法或乘法运算时,即便结果溢出也不是错误。 例如:

3、short s1 = 32765; s1 = s1 + 3;/结果是否超过short的最大值? couts1endl;/ 输出-32768,而不是32768。实际上,观察二进制数据,这两个值是一样的。,3.1.2 关系运算 、=、= =、!= = = 与 = :注意:a=5 赋值运算;a= =5;判断是否相等 a=x=b 与 数学上的x取值区间ax b 不同 关系运算的结果是一个表示“真”或“假”的逻辑值,即一个bool值。当关系成立时,其运算结果为真;当关系不成立时,结果为假。但C语言中没有逻辑型,关系运算的结果要用一个int值表示,0即为假,1即为真。,a=2 b=3 c=4 a2 0 a

4、b+c 0 a=2 1,aA b=a+1 c-a=a,a=a 0 aa 0 b=a=2 1,关系运算符的优先级为(括弧中运算符的优先级相同):(、=、 b = c; /等价于d = (a b) = c); d的值为0 d = a = b b b) = c); d的值为1 可以使用()来改变运算符的计算次序。,既然关系运算的结果是一个逻辑值,那么就可以保存在一个逻辑型bool变量中。例如: bool b = a 5; 由于浮点数在计算机内进行运算和存储时会产生误差,因此在比较两个浮点数时,建议不要直接比较两数是否相等。例如,执行下面语句: double d1 = 3.3333, d2 = 4.4

5、444; if(d1 + d2 = 7.7777) cout相等endl; else cout不等endl; coutd1 + d2endl; ,条件语句中用“=”来判断浮点数是否相等,结果是不等,但d1+d2输出结果却是7.7777。两个实型数即便输出结果完全一样,其内部值也可能不一样。判断两个实数是否相等的正确方法是:判断两个实数之差的绝对值是否小于一个给定的允许误差数,如判断d1是否等于d2时,应改为: fabs(d1 - d2) = 1e-6 其中,fabs()是计算绝对值的一个库函数,使用时要包含头文件math.h。,3.1.3 逻辑运算符 对逻辑值进行运算的运算符就是逻辑运算符。C

6、+语言提供了3个逻辑运算符,用于表示操作数之间的逻辑关系,它们是!(逻辑非)、/输出0,假 /B 导入命名空间std void main(void) int a, b; bool res1, res2, res3, res4, res5; a = 3; b = 5; res1 = a 3 ,3.1.4 位运算符 位运算是指对字节内部的二进制位进行移位或逻辑运算。 位运算是通过位运算符来完成的。 位运算的操作数必须是char、short、或int值,而且结果也是char、short或int值。 除了按位求反是单目运算符,其余位运算都是双目运算符。 C+提供了两类位运算:移位运算和按位逻辑运算。,

7、1. 移位运算符 移位运算符的格式为: operand n 将操作数operand向右移动n个二进制位,保持符号不变。 其中,n为整数。注意移位运算并不改变operand本身的值。例如: short operand = 0 x8, n = 3; short a = operand n;/结果为0 x40 操作数左移n个二进制位后,右边移出的空位用0补齐。 当左移时,对于带符号数,最高位表示符号,可能会因为低位的1或0移到最高位,最终改变操作数的符号。如: short s = 4567; short result = s 3; cout result ; /输出:-29000 如果操作数是正数,

8、而且左移没有导致改变符号,那么左移n位,相当于乘以2n。,我们知道,int型的数值范围是-231到231-1。下面代码利用左移位来得到int型的最小值和最大值。 int min = 1 m;结果为0 xf4b6,即-2890,对于移位运算,注意以下几点: (1)不要尝试对float或double数据进行移位运算,编译会出错。 (2)移动位数n应不大于左操作数的位数,如int移位应不大于32。如果n大于左操作数位数,实际移动位数要自动按字长取模:n%(sizeof(int)。例如,i负值位数,结果总为0。 (4)左移位与cin可能混淆,可用括号消除这些错误,例如cout(k3)。,按位逻辑运算符

9、 按位逻辑运算有4个:求反、与 cout j ? i : j) = j ? i : j) = j ? i : j); /A cout The largest value of : /求出i,j和k中的最大值 i , j and k is max endl; ,3.1.6 赋值运算符 赋值运算就是将一个表达式的值赋给一个变量。 C+语言提供了两类赋值运算符:基本赋值运算符和复合赋值运算符。 基本赋值运算符为“=”,复合赋值运算符有多种形式:+=、-=、*=、/=、%=、=、 int d = a = b; /d的值为0,3.1.7 逗号运算符 逗号“,”既是标点符号(用做分隔符),又是运算符。逗号

10、运算符用来将两个表达式连接起来,逗号表达式的一般表达形式为: , 逗号运算符是双目运算符,取其右边操作数的值作为整个表达式的结果。逗号运算符的优先级最低。例如: int i,j,k;/作标点符号用 funx(x,y,z);/作标点符号用 a+b, a+c /逗号运算符 1+4, 3.4+10, 3 t = (a+=1, b-=2, c+3); x=3+6,x*3,x+6; cout a= a t; cout b= t t; cout c= c t; cout t= t endl; cout x= x endl; x=(x=3+6,x*3),x+6; cout x= x endl; x=(x=3

11、+6,x*3,x+6); cout x= x endl; x=(x=3+6,x=x*3,x+6); cout x= x endl; ,3.1.8 自增、自减运算符 自增、自减运算就是对一个变量加1或减1。自增用“+”运算符,而自减用“-”运算符,它们都是单目运算符。运算符“+”和“-”是一个整体,中间不能用空格隔开。 自增(或自减)运算符要区分前缀和后缀两种形式。 前缀形式,运算符放在操作数左边,例如+count。先使操作数自增(自减)1个单位后,然后取其值作为运算结果。 后缀形式,运算符放在操作数右边,例如count+,先取操作数的值参与当前表达式的运算,然后再使操作数自增(自减)1个单位。

12、,例如: int count = 15, digit = 16, number, amount; number = +count;/ count和number都为16 amount = digit+;/ amount的值为16,digit的值为17 自增、自减运算符要求操作数必须是左值,往往是一个变量。前缀式的计算结果是操作数修改后的值,因此结果仍然是一个左值;而后缀式的值是原先操作数的值,所以它不是左值。如: int amt=63, nut=96; + +amt;/相当于+(+amt),结果为65 +nut-;/相当于+(nut-),nut-不是左值,所以语法错误 (+nut)-;/+nut

13、是左值,所以语法正确 自增、自减运算符具有较高的优先级,高于所有的算术运算符。,例3-4自增、自减运算符的使用。 #include void main(void) int a = 2, b = 3; int c, d, e; c = +a + b- ;/c = 3 + 3 couta=atb=btc=cendl; d = + +a + +b;/d = 5 + 3 couta=atb=btd=dendl; e = a+ - - -b;/e = 5 - 1 couta=atb=bte=eendl; 程序运行后,在屏幕上输出的结果为: a=3 b=2 c=6 a=5 b=3 d=8 a=6 b=1

14、e=4,在上面这些运算符中,只有赋值运算符和自增自减运算符可以更改左值,常称为副作用(side effect)。应避免在同一个表达式中对同一个变量进行多次自增自减运算,否则结果难以合理解释。例如: int a = 2; int b = +a + +a; 最后b的值为8,a为4。实际上b = 4 + 4,而不是b = 3 + 4。 再如: a = 2; int c = a+ + +a; 最后c的值为6,a为4。实际上c = 3 + 3,而不是c = 2 + 3。一个比较合理的解释是这里的+运算是从右向左计算的(但这违背+的结合性,从左向右),真正执行的是: int c = +a + a+; 注意

15、,尽管后缀自增自减运算符具有比较高的优先级,也不能先计算。例如: int a = 2; int b = 3 + (a+);/等同于 b = 3 + a+ 此时变量b的值是3+2,而不是3+3。,3.1.9 sizeof运算符 每种类型的变量都占用一定大小的存储单元。存储单元的大小与变量类型、CPU及操作系统有关。 sizeof运算符用于测试某种数据类型或表达式的类型在内存中所占的字节数,它是一个一元运算符。其语法格式为: sizeof() 或 sizeof() 例如: sizeof (int)/整数类型占4个字节,结果为4 sizeof (3+3.6) /3+3.6的结果为double实数,结果为8,3.1.10 typeid运算符 对于任何一个表达式,应该知道它的类型究竟是什么。例如: int i = -2; unsigned j = 3; cout,还要再调用一个函数name()。,例3-6 typeid运算符的例子。 #include #include void main() int i = -2; unsigned j = 3; couti*jendl;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号