C++程序设计教程4.ppt
上传人:sy****28 上传时间:2024-09-14 格式:PPT 页数:28 大小:81KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

C++程序设计教程4.ppt

C++程序设计教程4.ppt

预览

免费试读已结束,剩余 18 页请下载文档后查看

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

C++程序设计教程(第二版)计算表达:表达计算使用一系列操作,它依赖于特定语言的操作符功能,关乎数据类型的内在特性,故计算表达目的在于深入剖析数据类型对于编程的影响,从而准确使用操作符学习方法:1.掌握操作符的功能和相互关系(优先级和结合性)2.针对内部数据类型,对一些典型的操作中的典型问题留下深刻印象第四章内容1.操作符(Operators)优先级:表达式中多个操作符的执行顺序的规定性,如:*x++;//先做x++结合性:同级操作符的执行顺序的规定性,如:a=b=6;//先做b=62.算术运算问题(ArithmeticProblems)整型数的周而复始性,如:unsignedinta=2000000000;unsignedintb=3000000000;cout<<a+b<<“\n”;结果为:705032704超过表示范围的整型数不是报错,而是表示成一个去掉进位后的余数中间结果溢出导致计算错误,如:inta=100000;intb=100000;intc=1000;cout<<a*b/c<<"\n";cout<<a*(b/c)<<"\n";结果为:141006510000000浮点数的精度和有效位影响比较的正确性,如:floatf1=7.123456789;floatf2=7.123456785;if(f1==f2)cout<<“f1equaltof2\n”;floatf=1.0/3.0;doubled=1.0/3.0;if(g==d)cout<<“gnotequaltod\n”;结果为:f1equalstof2gnotequalstod浮点数计算的近似性使精确性比较失败,如: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”;结果为:NotsameSame3.相容类型转换(CastCompatibleType)从表达能力弱的类型到强的类型的转换是安全的,反之,会引起精度丢失.如:floatf=7.0/3;//doublefloatinta=7.0/3;//doubleintcout.precision(9);cout<<fixed<<7.0/3<<“\n”;cout<<f<<“\n”<<a<<“\n”;结果为:2.3333333332.3333332542可以用显式转换的方法,人为控制运算在一定的数据类型下工作,如:doubled=sqrt(123456.0);inta=static_cast<int>(d)*8+5;intb=d*8+5;//隐式转换为浮点cout<<a<<“\n”<<b<<“\n”;结果为:281328154.关系与逻辑操作(Relations&LogicOperations)!=是操作符,=!不是操作符intx=3;if(x!=9)cout<<“not9\n”;if(x=!9)cout<<“impossible\n”;条件表达式(x!=0)与(x)等同intx=3;if(x!=0)cout<<x;if(x)cout<<x;不等式连写的错误:inta=-1,b=0,c=1;if(a<b<c)cout<<“ok1\n”;if(a<b&&b<c)cout<<“ok2\n”;结果为:ok2短路求值的妙用:避免除0的恶果if(b&&a/b>2)cout<<“ok\n”;避免不必要的求值if(a==0||b=func())cout<<”useless\n”;5.位操作(BitOperations)右移操作>>在整数的高位挤一个0或1进去(有符号数挤符号位,无符号数挤0),而整数最低位被挤掉。如:shortinta=-2;//1111111111111110a=a>>1;//a=-1即1111111111111111unsignedshortintb=65535;//1111111111111111b=b>>1;//b=32767即0111111111111111位与操作&将两个操作数每一位做与操作,如:inta=12;//a为:00000000000000000000000000001100intb=6;//b为:00000000000000000000000000000110//a&b为:00000000000000000000000000000100intcbit=a