




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C + 程序设计教程(第二版)第四章 计算表达 Chapter 4 Computational Expressing18:17:581计算表达: 表达计算使用一系列操作,它依赖于特定语言的操作符功能,关乎数据类型的内在特性,故计算表达目的在于深入剖析数据类型对于编程的影响,从而准确使用操作符学习方法: 1.掌握操作符的功能和相互关系(优先级和结合性) 2.针对内部数据类型,对一些典型的操作中的典型问题留下深刻印象18:17:582第四章内容 名词解释( Name Explainations ) 算术运算问题 ( Arithmetic Problems ) 相容类型的转换 ( Cast Camp
2、atible Type ) 关系与逻辑操作 ( Relation & Logic Operations ) 位操作 ( Bit Operations ) 增量操作 ( Increment Operations ) 表达式副作用 ( Expressions Side Effects ) 18:17:5831. 操作符 ( Operators )单目操作符:在一个操作数上施加的操作,如:-3双目操作符:在二个操作数上施加的操作,如:- 故有些操作符既是单目操作符,又是双目操作符表达式:若干个操作数和操作符按语法规则构成的操作,如: a = -3-5+6*7/-818:17:584优先级:表达式中多
3、个操作符的执行顺序的规定性,如: *x+; / 先做x+结合性:同级操作符的执行顺序的规定性,如: a=b=6; / 先做b=618:17:585. 算术运算问题( Arithmetic Problems )整型数表示范围有限,如: 不能用整型变量累计的一般循环方法来解: int sum = 0; for(int i=1; i=10000; +i) sum += i; coutsum“n”;18:17:586整型数的周而复始性,如: unsigned int a = 2000000000; unsigned int b = 3000000000; cout a+b“n”; 结果为: 70503
4、2704 超过表示范围的整型数不是报错,而是表示成一个去掉进位后的余数18:17:587中间结果溢出导致计算错误,如: int a = 100000; int b = 100000; int c = 1000; couta*b/cn; couta*(b/c)n; 结果为: 1000000018:17:588浮点数的精度和有效位 影响比较的正确性,如: float f1 = 7.123456789; float f2 = 7.123456785; if ( f1=f2 ) cout“f1 equal to f2n”; float f = 1.0/3.0; double d = 1.0/3.0;
5、if ( g=d ) cout“g not equal to dn”;结果为: f1 equals to f2 g not equals to d18:17:589浮点数计算的近似性 使精确性比较失败,如: double d1 = 123456789.9*9; double d2 = 1111111109.1;if ( d1!=d2 ) cout “Not samen” ;else cout “Samen” ;if ( abs ( d1-d2 ) 1e-05 ) cout “Samen” ;else cout “Not samen” ;结果为:Not sameSame18:17:58103.
6、相容类型转换 ( Cast Compatible Type ) 隐式转换:整型和浮点型都是数值型,所以它们是相容类型指针与整型不相容,如: 7.0 / 3 = 7.0 / 3.0 /将隐式转换成浮点 = 2.33333333 int a = 9; int* ap = &a; 3 + ap /错18:17:5811从表达能力弱的类型到强的类型的转换是安全的,反之,会引起精度丢失如: float f = 7.0/3; / doublefloat int a = 7.0/3; / doubleint cout.precision(9); cout fixed 7.0/3 “n” ; cout f “
7、n” a “n” ; 结果为: 2.333333333 2.333333254 218:17:5812可以用显式转换的方法,人为控制运算在一定的数据类型下工作,如: double d = sqrt ( 123456.0 ) ;int a = static_cast(d) * 8 + 5;int b = d * 8 + 5; / 隐式转换为浮点couta“n”b“n”;结果为:2813281518:17:58134. 关系与逻辑操作 (Relations & Logic Operations )=与=的区别int x = 9;if ( x = 0 ) cout “test 1 okn” ;if
8、( x = 5 ) cout “test 2 okn” ;if ( x = 0 ) cout “test 3 okn” ;结果为:test 2 ok18:17:5814!=是操作符,=!不是操作符 int x = 3; if ( x!=9 ) cout “not 9n” ; if ( x=!9 ) cout “impossiblen” ;条件表达式(x!=0)与(x)等同 int x = 3; if ( x != 0 ) cout x ; if ( x ) cout x ;18:17:5815不等式连写的错误: int a = -1, b = 0, c = 1; if ( abc ) cout
9、 “ok1n” ; if ( ab & bc ) cout 2 ) cout “okn” ; 避免不必要的求值 if ( a=0 | b=func() ) cout”uselessn”; 18:17:58175. 位操作( Bit Operations ) 左移操作将整数最高位挤掉,在右端补0。如: int a = 12; / a为:0000001100 a = a在整数的高位挤一个0或1进去(有符号数挤符号位,无符号数挤 ),而整数最低位被挤掉。如: short int a = -2; / 1111111111111110 a = a1; / a=-1 即1111111111111111 u
10、nsigned short int b = 65535; / 1111111111111111 b = b1; / b=32767即1111118:17:5819位与操作&将两个操作数每一位做与操作,如: int a = 12; / a为: 0000001100 int b = 6; / b为: 0000000110 / a & b为: 0000000100 int cbit = a & b; int clogic = a & b; cout cbit “n” clogic “n” ; 结果为:( 比较 & 与 & 的区别 ) 4 118:17:5820位与操作 |将两个操作数每一位做或操作,
11、如: int a = 12; / a为: 0000001100 int b = 6; / b为: 0000000110 / a | b为: 0000001110 int cbit = a | b; int clogic = a | b; cout cbit “n” clogic “n” ; 结果为:( 比较 | 与 | 的区别 ) 14 118:17:5821.增量操作(Increment Operations) 前增量与后增量: 操作数为左值才能做增量操作 const int d = 8 ; d+ ; / 错: d不是左值 3+ ; / 错: 3不是左值 int a = 3, x = 3,
12、b, c ; b = +a ; / a的前增量操作,使b 为4 c = x+ ; / x的后增量操作,使c 为 5 a+ -= 2 ; / 错: a+不是左值 +a += 5; / ok: +a 是左值且a最后为11 +a+; / 错: 先做a+,而a+不是左值18:17:5822编译的贪吃特征: int a = 3, b = 5, c; c = a + b ; /错: 理解为a+ b c = a + b; /ok: a+ +b c = a + b; /错: 理解为a+ +b c = a + b; /错: 理解为a+ + +b18:17:5823指针的增量操作:char s110, s2 =
13、“hello” ;char *p1 = s1, *p2 = s2;while ( *p1+ = *p2+ ) ;等价于下列操作序列:while ( *p2 ) *p1 = *p2 ; p1+ ; p2+ ;*p1 = 0 ;HelloHelp1p218:17:58247. 表达式副作用 ( Expressions Side Effects ) 表达式的值 由操作数和操作符决定. 操作符决定对操作数施加的操作 操作的先后由优先级和结合性作主 访问操作数的先后,语言没有明确规定表达式的副作用 表达式的值因为访问操作数先后顺序不同而不同所引起18:17:5825使结合律失效 int a = 3, b = 5 ; c = a*b + +b; d = +b + a*b; / c与d不同 /c为21,d 为24 或反之使括号失效 int a = 3 , b = 5 ; int c = +b * ( a+b ) ; /可能为5418:17:5826副作用的根源 表达式中,多于一个的实体值发生改变 int a = 3, b = 5 ; c = a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 上海普陀区2025年高三压轴卷化学试卷含解析
- 康复运动训练培训课件
- 工程供应链管理概述
- 福建省泉州市2023年第29届WMO竞赛六年级数学下学期竞赛试卷
- 2025届福建省永安市一中高考化学三模试卷含解析
- 手工灯具制作课件
- 截瘫定位诊断
- 2025届江苏省横林高级中学高考化学考前最后一卷预测卷含解析
- 劳动安全教育小班
- 山东省潍坊市示范中学2025年高三第一次模拟考试化学试卷含解析
- 形势与政策(2025春)超星尔雅学习通答案满分章节测试
- 国企集团公司各岗位廉洁风险点防控表格(廉政)范本
- ISO28000:2022供应链安全管理体系
- 2024年浪潮入职测评题和答案
- 《艺术学概论考研》课件艺术本体论-模仿论
- 南站二期标识设计变更003精神堡垒施工图
- 电厂防腐涂装培训ppt课件
- 履带-轮式爬楼梯电动轮椅设计【带图纸】
- 设计费投标报价表
- 全矿井风量测定及风表操作
- 中国历朝历代地图大全
评论
0/150
提交评论