C++程序设计 教学课件 ppt 作者 郑莉 第2章_运算的模拟

上传人:E**** 文档编号:89190901 上传时间:2019-05-21 格式:PPT 页数:62 大小:1.07MB
返回 下载 相关 举报
C++程序设计 教学课件 ppt 作者 郑莉 第2章_运算的模拟_第1页
第1页 / 共62页
C++程序设计 教学课件 ppt 作者 郑莉 第2章_运算的模拟_第2页
第2页 / 共62页
C++程序设计 教学课件 ppt 作者 郑莉 第2章_运算的模拟_第3页
第3页 / 共62页
C++程序设计 教学课件 ppt 作者 郑莉 第2章_运算的模拟_第4页
第4页 / 共62页
C++程序设计 教学课件 ppt 作者 郑莉 第2章_运算的模拟_第5页
第5页 / 共62页
点击查看更多>>
资源描述

《C++程序设计 教学课件 ppt 作者 郑莉 第2章_运算的模拟》由会员分享,可在线阅读,更多相关《C++程序设计 教学课件 ppt 作者 郑莉 第2章_运算的模拟(62页珍藏版)》请在金锄头文库上搜索。

1、1,第 2 章 运算的模拟,清华大学 郑 莉,2,目录,2.1 运算符与表达式 2.2 运算符优先级与类型转换 2.3 运算符重载简介,3,2.1运算符与表达式,表达式由一个或多个操作数(operand)通过操作符(或运算符,operator)组合而成 最简单的表达式仅包含一个常量或者变量,例如2,i,data_searched都属于表达式 较复杂的表达式则由操作符及一个或多个操作数组成 任何表达式必然包含操作数 含有操作符的表达式的值可以通过对操作数做指定操作获得 可以将多个操作符和操作数结合起来组成一个复杂表达式,这样的复杂表达式被称为“复合表达式”,4,2.1运算符与表达式,是否能够成功

2、地计算复合表达式与子表达式的计算顺序有关,因此,要想在C+中正确地实现运算,就必须了解C+中运算符的内部规则。一般来说,子表达式的计算顺序由操作符的“优先级”和“结合方向”来决定。可见,“优先级”和“结合方向”是计算机数据运算的重要概念。那么,什么是“优先级”,什么是“结合方向”? 优先级的高低决定同一个表达式中出现的不同运算符的计算次序,计算机先计算优先级较高的运算符,然后再计算优先级较低的运算符。 结合方向决定了表达式中每个运算符的计算方向。,5,2.1.1 算术运算,算术运算符及其使用方法 如果“/”运算的两个操作数都是整数,则结果取整,如果需要获得实数结果,那就需要将其中至少一个操作数

3、改为浮点数 “%”两侧的操作数必须为整数,2.1 运算符与表达式,6,2.1.1 算术运算,“溢出”现象的根本原因在于计算机能够容纳的最大或最小值是有规定的。当算术运算的结果超出了运算平台能够容纳的最大值或最小值时,就会导致溢出(overflow)。另外当除数为0时,算术运算就失去了意义,编译程序时会报错。当然,这些错误都是可以通过正确的编程避免的 浮点数的算术运算还有一个“精度”问题。在计算机中,浮点数存储是近似的,浮点数运算的结果精度受到底层数据类型的固有精度的影响,2.1 运算符与表达式,7,2.1.1 算术运算,例2-1 算术运算的示例程序,2.1 运算符与表达式,int main()

4、 int data_searched; /声明而不赋值 int i = 2; /声明并赋值 cout “i = “ i endl; /测试赋值的结果 int k = 4, l = 2; /连续的同类型赋值之间可以用逗号间隔 i = k + l; /加法运算 cout “i (k + l) = “ i endl; /测试加法运算的结果 cout “5 * 2 + 4 * 30 / 3 = “ 5 * 2 + 4 * 30 / 3 endl; /复合表达式 cout “l - k = ” l - k endl; /测试减法运算的结果,8,2.1.1 算术运算,cout “l * -k = “ l

5、* -k endl; /运算顺序:先取负,再作乘法 cout “7 / 3在C+中的直接运算结果是 : “ 7 / 3 “ , 6 / 2在C+中的直接运算结果是 : “ 6 / 2 endl; cout “21 / -3在C+中的直接运算结果是 : “ 21 / -3 “ , -21 / -8在C+中的直接运算结果是 : “ -21 / -8 endl; cout “14 % 5在C+中的直接运算结果是 : ” 14 % 5 “ , 14 % -5在C+中的直接运算结果是 : ” 14 % -5 endl; /14 % -5 的运 /算结果与机器的操作平台有关,可能是4或-1 cout “1

6、4 / 5浮点运算结果 = “ (float)14 / 5 endl; cout “5 / 3在本机上能得到的最精确值 = “ (double)5 / 3 endl; return 0; ,2.1 运算符与表达式,9,2.1.1 算术运算,例2-1 运行结果,2.1 运算符与表达式,i = 2 i (k + l) = 6 5 * 2 + 4 * 30 / 3 = 50 l - k = -2 l * -k = -8 7 / 3在C+中的直接运算结果是 : 2 , 6 / 2在C+中的直接运算结果是 : 3 21 / -3在C+中的直接运算结果是 : -7 , -21 / -8在C+中的直接运算结

7、果是 : 2 14 % 5在C+中的直接运算结果是 : 4 , 14 % -5在C+中的直接运算结果是 : 4 14 / 5浮点运算结果 = 2.8 5 / 3在本机上能得到的最精确值 = 1.66667,10,2.1.1 算术运算,例2-1 分析与思考 对于整数之间的加减乘除运算和正数之间的取余运算,C+中的计算规则跟我们之前学过的数学运算基本相同,注意当整数相除时,C+将只取运算结果的整数部分 要得到两个操作数运算(例如除法)的浮点结果,就需要将至少一个操作数转换为浮点类型,例如要得到14 除以 5的浮点数结果,可以写(float)14 / 5或14 / (float)5,但是float(

8、14 / 5)的写法是无效的,因为修饰的对象是14 / 5的结果,也就是2,2.1 运算符与表达式,11,2.1.2 赋值运算,在例2-1中,我们已经应用过赋值运算符:i = k + i。在没有进行特殊定义的情况下,赋值运算用“=”实现,表示计算“=”右边表达式的结果,将结果值赋给“=”左边的变量。对于基本数据类型,右值可以是任意的常量、变量或能产生值的表达式,但是左值必须是一个明确命名的变量(即应该有一个存储数据的物理空间),2.1 运算符与表达式,12,2.1.2 赋值运算,赋值运算的注意事项: 运算符“=”代表的是赋值运算,而不是相等关系,C+语言中用“= =”表示相等关系 赋值运算符的

9、左侧必须是变量名,不能是常量。例如:8=i+2 是错误的表达式。 赋值运算符两侧出现同一个变量时,所代表的含义不同。以表达式i=i+3为例,他表示将变量i的值取出来,加1以后,再存回变量i中,2.1 运算符与表达式,13,2.1.2 赋值运算,赋值运算的注意事项: 当赋值符号左侧的操作变量和右侧的表达式值类型不一致时,计算机自动进行类型转换,试图将赋值符号右侧的表达式值转换为左侧的变量类型,并将转换后的值存放到变量之中。如果编译器无法完成类型转换工作,则提示错误信息。例如:若 int i; i=3.1; 则计算机将浮点数3.1转换为整数3后放入整数变量i之中,变量i的值为3,而不是3.1;若i

10、nt i; i=“str”; 则计算机试图将字符串“str”转换为整数,但是由于无法将其转换为整数,所以编译器将提示错误。更详细内容参考本章2.1.5自动类型转换和2.1.6显式类型转换,2.1 运算符与表达式,14,2.1.2 赋值运算,赋值运算的注意事项: 表达式的运算结果溢出的问题。当表达式的值超出结果数据类型的范围时,将发生溢出,使结果值发生错误,2.1 运算符与表达式,15,2.1.2 赋值运算,赋值运算的注意事项: 为了简化代码和提高编译速度,可以采用复合赋值运算符。如+=,-=,%=等。复合赋值运算理解方法如图所示,2.1 运算符与表达式,16,2.1.2 赋值运算,例2-2赋值

11、运算符的示例程序,2.1 运算符与表达式,int main() int n, value1; /声明而没有赋初值 int a = 12; /声明且赋初值 int b = 1, c = 2; /多个赋值可以使用逗号分割 n = a + b; /赋值运算符的右值可以是常量,也可以是变量, /但左值必须是变量 cout “a = “ a “, b = “ b “, c = “ c “, n = “ n endl; /检验上述赋值的结果 int d; d = 3.14; /会自动转换成左值变量的数据类型,17,2.1.2 赋值运算,char ch1, ch2; ch1 = ch2 = f; /连续赋值

12、,赋值运算的右结合特性 cout “ch1 = “ ch1 “, ch2 = “ ch2 “, d = “ d endl; /检验上述赋值的结果 a = a + 2; cout “a (= a + 2) = “ a endl; a += b; cout “a (+= b) = “ a endl; a -= 4; cout “a (-= 4) = “ a endl; a *= 2; cout “a (*= 2) = “ a endl; a /= 3; cout “a (/= 3) = “ a endl; /复合赋值运算符的测试 return 0; ,2.1 运算符与表达式,18,2.1.2 赋值

13、运算,例2-2 运行结果,2.1 运算符与表达式,a = 12, b = 1, c = 2, n = 13 ch1 = f, ch2 = f, d = 3 a (= a + 2) = 14 a (+= b) = 15 a (-= 4) = 11 a (*= 2) = 22 a (/= 3) = 7,19,2.1.3 自增/自减运算,C+为加1和减1运算提供了更方便简短的运算符,那就是自增(+)和自减自减(-)运算符,它们同时具有算术运算符与赋值操作符的一些性质 自增和自减运算符分为前置与后置两种。其中,前置运算符返回加1后的值,即左值,而后置操作符返回的则是右值(操作数实质上仍然加1)。例如以

14、下两个代码段: int a = 1; cout +a endl; 和 int a = 1; cout a+ endl; 前者的输出是2,后者的输出是1 自减运算符也有这样的差别,2.1 运算符与表达式,20,2.1.3 自增/自减运算,自增/自减运算的注意事项 自增运算符的操作数必须为变量,不能为常量或表达式。如 +2; +(i+k);或+(+x)均不符合C+自增运算符的规定,属于不合法的表达式。 自增(自减)符号出现在操作数的左边和右边的区别在于读取变量的原值还是新值。如果+i(或-i)则进行自增或自减运算后读取i的新值;如果是i+ (或i-)则进行自增或自减运算之前读取i原来的值,然后进行

15、自增或自减运算。,2.1 运算符与表达式,21,2.1.3自增/自减运算,例2-3 自增/自减运算符的示例程序,2.1 运算符与表达式,int main() int a = 1, b = 1; cout “+a = “ +a endl; cout “b+ = “ b+ endl; int c = 4, d = 4; cout “-c = “ -c endl; cout “d- = “ d- endl; return 0; ,22,2.1.3自增/自减运算,例2-3 运行结果,2.1 运算符与表达式,+a = 2 b+ = 1 -c = 3 d- = 4,23,2.1.4逗号运算,逗号运算符常用

16、于循环语句的循环控制,我们将在第三章中进行详细讲述,2.1 运算符与表达式,24,2.1.5关系运算,关系运算用于实现比较,2.1 运算符与表达式,25,2.1.5关系运算,关系表达式的结果是bool类型,只有两种值,即true或false,C+中兼容了C语言以整数1表示逻辑“真”,以整数0表示逻辑“假”的语法 初等数学中的542与C+语言中的542不相同。前者是成立的,后者的结果为false。为什么?请同学们思考 等于和不等于运算符的优先级小于其他关系运算符。因此,表达式1= =2 1 的结果为true,2.1 运算符与表达式,26,2.1.6逻辑运算,逻辑运算符使用算术或指针类型的操作数,并返回bool类型值(true或false) 逻辑运算符及其使用方法,2.1 运算符与表达式,27,2.1.6逻辑运算,逻辑运算符的真值表,2.1

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

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

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