![C++程序设计教程4_第1页](http://file4.renrendoc.com/view2/M03/22/1C/wKhkFmY-yJKAPFvPAADG-aeHkzA131.jpg)
![C++程序设计教程4_第2页](http://file4.renrendoc.com/view2/M03/22/1C/wKhkFmY-yJKAPFvPAADG-aeHkzA1312.jpg)
![C++程序设计教程4_第3页](http://file4.renrendoc.com/view2/M03/22/1C/wKhkFmY-yJKAPFvPAADG-aeHkzA1313.jpg)
![C++程序设计教程4_第4页](http://file4.renrendoc.com/view2/M03/22/1C/wKhkFmY-yJKAPFvPAADG-aeHkzA1314.jpg)
![C++程序设计教程4_第5页](http://file4.renrendoc.com/view2/M03/22/1C/wKhkFmY-yJKAPFvPAADG-aeHkzA1315.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
08:52:351C++程序设计教程(第二版)第四章计算表达Chapter4
ComputationalExpressing清华大学出版社钱能08:52:352计算表达:表达计算使用一系列操作,它依赖于特定语言的操作符功能,关乎数据类型的内在特性,故计算表达目的在于深入剖析数据类型对于编程的影响,从而准确使用操作符学习方法:
1.掌握操作符的功能和相互关系(优先级和结合性)
2.针对内部数据类型,对一些典型的操作中的典型问题留下深刻印象08:52:353第四章内容
名词解释(NameExplainations)
算术运算问题(ArithmeticProblems)
相容类型的转换(CastCampatibleType)
关系与逻辑操作(Relation&LogicOperations)
位操作(BitOperations)
增量操作(IncrementOperations)
表达式副作用(Expression’sSideEffects)
08:52:3541.操作符(Operators)单目操作符:在一个操作数上施加的操作,如:-3双目操作符:在二个操作数上施加的操作,如:5-3故有些操作符既是单目操作符,又是双目操作符表达式:若干个操作数和操作符按语法规则构成的操作,如:
a=-3-5+6*7/-8逗号表达式值为最后一个子表达式的值,但求值过程是从左至右逐项进行的。例如:D=(a=2,b=a+5,a*b);//d的值为1408:52:355左值和右值左值和右值是相对于赋值表达式而言的。左值表达式不但具有空间实体,还具有读写访问权。右值可以是不占据内存空间的临时量或字面值,可以是不具有写入权的空间实体。08:52:356例如:Constintb=5;A=b+2;B=a+2;//错:b拥有空间但无写入权(a=4)+=28;//(a=4)为左值08:52:35708:52:358优先级:表达式中多个操作符的执行顺序的规定性,如:
*x++;
//先做x++
结合性:同级操作符的执行顺序的规定性,如:
a=b=6;//先做b=608:52:3592.算术运算问题(ArithmeticProblems)整型数表示范围有限,如:
1+2+3+...+10000不能用整型变量累计的一般循环方法来解:intsum=0;for(inti=1;i<=10000;++i)sum+=i;cout<<sum<<“\n”;08:52:3510整型数的周而复始性,如:
unsignedinta=2000000000;unsignedintb=3000000000;cout<<a+b<<“\n”;
结果为:705032704//取模232而得
超过表示范围的整型数不是报错,而是表示成一个去掉进位后的余数08:52:3511中间结果溢出导致计算错误,如:
inta=100000;
intb=100000;
intc=1000;cout<<a*b/c<<"\n";cout<<a*(b/c)<<"\n";
结果为:
14100651000000008:52:3512浮点数的精度和有效位影响比较的正确性,如:
floatf1=7.123456789;floatf2=7.123456785;cout<<(f1!=f2?“notsame\n”:“same\n”);floatg=1.0/3.0;doubled=1.0/3.0;cout<<(g==d?“same\n”:“same\n”);结果为:samenotsame08:52:3513浮点数计算的近似性使精确性比较失败,如:
doubled1=123456789.9*9;doubled2=1111111109.1;if(d1!=d2)cout<<“Notsame\n”;elsecout<<“Same\n”;if(abs(d1-d2)<1e-05)cout<<“Same\n”;elsecout<<“Notsame\n”;结果为:NotsameSame结论:使用浮点数进行相等和不想等比较的操作通常是有问题的。浮点数的相等比较,一般总是使用两者相减的值是否落在0的临域中来判断的。----即小于10的负几次方。08:52:351408:52:35153.相容类型转换(CastCompatibleType
)
隐式转换:整型和浮点型都是数值型,所以它们是相容类型.指针与整型不相容,如:
7.0/3=7.0/3.0//将3隐式转换成浮点
=2.33333333…inta=‘a’+3;inta=9;int*ap=&a;3+ap//错08:52:3516从表达能力弱的类型到强的类型的转换是安全的,反之,会引起精度丢失.如:
floatf=7.0/3;//doublefloatinta=7.0/3;//doubleintcout.precision(9);cout<<fixed<<7.0/3<<“\n”;cout<<f<<“\n”<<a<<“\n”;
结果为:
2.3333333332.333333254208:52:3517可以用显式转换的方法,人为控制运算在一定的数据类型下工作,如:
doubled=sqrt(123456.0);inta=static_cast<int>(d)*8+5;intb=d*8+5;//隐式转换为浮点cout<<a<<“\n”<<b<<“\n”;A=2000000000;B=1000000000;intc=(static_cast<double>(a)+b)/2;Cout<<a+b<<endl<<c<<endl;结果为:28132815-12949672961500000000static_cast<type>显式转换采用显式转换的第一个目的是为了维护整型数运算的一致性。另一个目的是为了得到正确的计算结果。08:52:351808:52:35194.关系与逻辑操作(Relations&LogicOperations
)=与==的区别intx=9;X=(x==9);//因为相等,值为1赋值给x,赋值表达式的值为1x=9;//赋值表达式的值为9X=(x==0);//因为不相等,值为0赋给x,赋值表达式的值为0注:赋值表达式也具有值,它的值就是所赋的值。逻辑表达式的值为0或1.08:52:35204.关系与逻辑操作(Relations&LogicOperations
)=与==的区别intx=9;if(x==0)cout<<“test1ok\n”;if(x=5)cout<<“test2ok\n”;if(x=0)cout<<“test3ok\n”;结果为:test2ok注:赋值表达式也具有值,它的值就是锁赋的值。逻辑表达式的值为0或1.08:52:3521!=是操作符,=!不是操作符
intx=3;if(x!=9)cout<<“not9\n”;if(x=!9)cout<<“xisfalse\n”;条件表达式(x!=0)与(x)等同
intx=3;if(x!=0)cout<<x;if(x)cout<<x;08:52:3522不等式连写的错误:
inta=-1,b=0,c=1;if(a<b<c)cout<<“ok1\n”;if(a<b&&b<c)cout<<“ok2\n”;结果为:
ok2
08:52:3523短路求值的妙用:
1、避免除0的恶果
if(b&&a/b>2)cout<<“ok\n”;2、
避免不必要的求值
if(a==0||b=func())cout<<”useless\n”;08:52:35245.位操作(BitOperations)
左移操作<<将整数最高位挤掉,在右端补0。如:
inta=12;//a为:00000000000000000000000000001100a=a<<1;//a为:0000000000000000000000000001100008:52:3525右移操作>>在整数的高位挤一个0或1进去(有符号数挤符号位,无符号数挤0),而整数最低位被挤掉。如:
shortinta=-2;//1111111111111110a=a>>1;//a=-1即1111111111111111unsignedshortintb=65535;//1111111111111111b=b>>1;//b=32767即011111111111111108:52:3526位与操作&将两个操作数每一位做与操作,如:
inta=12;//a为:00000000000000000000000000001100intb=6;//b为:00000000000000000000000000000110//a&b为:00000000000000000000000000000100intcbit=a&b;intclogic=a&&b;cout<<cbit<<“\n”<<clogic<<“\n”;
结果为:(比较&与&&的区别)4108:52:3527位或操作|将两个操作数每一位做或操作,如:
inta=12;//a为:00000000000000000000000000001100
intb=6;//b为:00000000000000000000000000000110//a|b为:00000000000000000000000000001110
intcbit=a|b;
intclogic=a||b;cout<<cbit<<“\n”<<clogic<<“\n”;
结果为:(比较|与||的区别)14108:52:35286.增量操作(IncrementOperations)
前增量与后增量:前增量可以当左值。
constintd=8;d++;//错:d不是左值
3++;//错:3不是左值
inta=3,x=3,b,c;
b=++a;//a的前增量操作,使b为4c=x++;//x的后增量操作,使c为3a++-=2;//错:a++不是左值
++a+=5;//ok:++a是左值且a最后为9++a++;//错:先做a++,而a++不是左值08:52:3529编译的贪吃特征:
inta=3,b=5,c;c=a++b;//错:理解为a++bc=a+++b;//ok:a+++bc=a++++b;//错:理解为a++++bc=a+++++b;//错:理解为a+++++b08:52:3530指针的增量操作:chars1[10],s2[]=“hello”;char*p1=s1,*p2=s2;while(*p1++=*p2++);等价于下列操作序列:while(*p2){*p1=*p2;p1++;p2++;}*p1=0;12301661230082HelloHelp1p208:52:35317.表达式副作用(Expression’sSideEffects)
表达式的值
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年05月四川省卫生健康委员会所属事业单位公开选调工作人员笔试历年高频考点(难、易错点)附带答案详解
- 2024年05月内蒙古农业大学职业技术学院招考聘用28人笔试历年高频考点(难、易错点)附带答案详解
- 2024年05月上半年四川广元市青川县引进(公开招聘)高层次和急需紧缺专业人才25人笔试历年高频考点(难、易错点)附带答案详解
- 2024辽宁鞍山市立山区事业单位面向应届毕业生招聘高层次急需紧缺人才38人笔试历年高频考点(难、易错点)附带答案详解
- 2024年05月河南新乡获嘉县事业单位工作人员60人笔试历年高频考点(难、易错点)附带答案详解
- 新高考版《物理》资料:习题部分课堂专题专练试题-专题一直线运动
- 2024年4月合同法自考试题含解析
- 2023年4月高教自考《合同法》试卷含解析
- 国开大学2018年01月2408《中国当代文学》期末考试参考答案
- 2024年05月辽宁丹东市元宝区卫健系统招考聘用急需紧缺人才笔试历年高频考点(难、易错点)附带答案详解
- 小型家用风力发电机毕业设计毕业设计
- 中国文学批评史试题(十套)
- 车轮组更换施工方案
- (完整版)自然拼读测试题
- (完整版)A4作文格纸可直接打印使用
- 不锈钢雕塑报价详细
- 1112号元素电子排布式
- 佛说土地真经Word版
- 第2课秀秀美图更漂亮(教学设计)
- 三大财务报表模板
- 数学建模论文-体重与身高问题.doc
评论
0/150
提交评论