




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
17:45:581C++程序設計教程(第二版)第四章計算表達Chapter4
ComputationalExpressing清華大學出版社錢能17:45:582計算表達:表達計算使用一系列操作,它依賴于特定語言的操作符功能,關乎數據類型的內在特性,故計算表達目的在于深入剖析數據類型對于編程的影響,從而準確使用操作符學習方法:
1.掌握操作符的功能和相互關系(優先級和結合性)
2.針對內部數據類型,對一些典型的操作中的典型問題留下深刻印象17:45:583第四章內容
名詞解釋(NameExplainations)
算術運算問題(ArithmeticProblems)
相容類型的轉換(CastCampatibleType)
關系與邏輯操作(Relation&LogicOperations)
位操作(BitOperations)
增量操作(IncrementOperations)
表達式副作用(Expression’sSideEffects)
17:45:5841.操作符(Operators)單目操作符:在一個操作數上施加的操作,如:-3雙目操作符:在二個操作數上施加的操作,如:5-3故有些操作符既是單目操作符,又是雙目操作符表達式:若干個操作數和操作符按語法規則構成的操作,如:
a=-3-5+6*7/-8逗號表達式值為最后一個子表達式的值,但求值過程是從左至右逐項進行的。例如:D=(a=2,b=a+5,a*b);//d的值為1417:45:585左值和右值左值和右值是相對于賦值表達式而言的。左值表達式不但具有空間實體,還具有讀寫訪問權。右值可以是不占據內存空間的臨時量或字面值,可以是不具有寫入權的空間實體。17:45:586例如:Constintb=5;A=b+2;B=a+2;//錯:b擁有空間但無寫入權(a=4)+=28;//(a=4)為左值17:45:58717:45:588優先級:表達式中多個操作符的執行順序的規定性,如:
*x++;
//先做x++
結合性:同級操作符的執行順序的規定性,如:
a=b=6;//先做b=617:45:5892.算術運算問題(ArithmeticProblems)整型數表示范圍有限,如:
1+2+3+...+10000不能用整型變量累計的一般循環方法來解:intsum=0;for(inti=1;i<=10000;++i)sum+=i;cout<<sum<<“\n”;17:45:5810整型數的周而復始性,如:
unsignedinta=2000000000;unsignedintb=3000000000;cout<<a+b<<“\n”;
結果為:705032704//取模232而得
超過表示范圍的整型數不是報錯,而是表示成一個去掉進位后的余數17:45:5811中間結果溢出導致計算錯誤,如:
inta=100000;
intb=100000;
intc=1000;cout<<a*b/c<<"\n";cout<<a*(b/c)<<"\n";
結果為:
14100651000000017:45:5812浮點數的精度和有效位影響比較的正確性,如:
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”);結果為:samenotsame17:45:5813浮點數計算的近似性使精確性比較失敗,如:
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的負幾次方。17:45:581417:45:58153.相容類型轉換(CastCompatibleType
)
隱式轉換:整型和浮點型都是數值型,所以它們是相容類型.指針與整型不相容,如:
7.0/3=7.0/3.0//將3隱式轉換成浮點
=2.33333333…inta=‘a’+3;inta=9;int*ap=&a;3+ap//錯17:45:5816從表達能力弱的類型到強的類型的轉換是安全的,反之,會引起精度丟失.如:
floatf=7.0/3;//doublefloatinta=7.0/3;//doubleintcout.precision(9);cout<<fixed<<7.0/3<<“\n”;cout<<f<<“\n”<<a<<“\n”;
結果為:
2.3333333332.333333254217:45:5817可以用顯式轉換的方法,人為控制運算在一定的數據類型下工作,如:
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>顯式轉換采用顯式轉換的第一個目的是為了維護整型數運算的一致性。另一個目的是為了得到正確的計算結果。17:45:581817:45:58194.關系與邏輯操作(Relations&LogicOperations
)=與==的區別intx=9;X=(x==9);//因為相等,值為1賦值給x,賦值表達式的值為1x=9;//賦值表達式的值為9X=(x==0);//因為不相等,值為0賦給x,賦值表達式的值為0注:賦值表達式也具有值,它的值就是所賦的值。邏輯表達式的值為0或1.17:45:58204.關系與邏輯操作(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.17:45:5821!=是操作符,=!不是操作符
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;17:45:5822不等式連寫的錯誤:
inta=-1,b=0,c=1;if(a<b<c)cout<<“ok1\n”;if(a<b&&b<c)cout<<“ok2\n”;結果為:
ok2
17:45:5823短路求值的妙用:
1、避免除0的惡果
if(b&&a/b>2)cout<<“ok\n”;2、
避免不必要的求值
if(a==0||b=func())cout<<”useless\n”;17:45:58245.位操作(BitOperations)
左移操作<<將整數最高位擠掉,在右端補0。如:
inta=12;//a為:00000000000000000000000000001100a=a<<1;//a為:0000000000000000000000000001100017:45:5825右移操作>>在整數的高位擠一個0或1進去(有符號數擠符號位,無符號數擠0),而整數最低位被擠掉。如:
shortinta=-2;//1111111111111110a=a>>1;//a=-1即1111111111111111unsignedshortintb=65535;//1111111111111111b=b>>1;//b=32767即011111111111111117:45:5826位與操作&將兩個操作數每一位做與操作,如:
inta=12;//a為:00000000000000000000000000001100intb=6;//b為:00000000000000000000000000000110//a&b為:00000000000000000000000000000100intcbit=a&b;intclogic=a&&b;cout<<cbit<<“\n”<<clogic<<“\n”;
結果為:(比較&與&&的區別)4117:45:5827位或操作|將兩個操作數每一位做或操作,如:
inta=12;//a為:00000000000000000000000000001100
intb=6;//b為:00000000000000000000000000000110//a|b為:00000000000000000000000000001110
intcbit=a|b;
intclogic=a||b;cout<<cbit<<“\n”<<clogic<<“\n”;
結果為:(比較|與||的區別)14117:45:58286.增量操作(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++不是左值17:45:5829編譯的貪吃特征:
inta=3,b=5,c;c=a++b;//錯:理解為a++bc=a+++b;//ok:a+++bc=a++++b;//錯:理解為a++++bc=a+++++b;//錯:理解為a+++++b17:45:5830指針的增量操作:chars1[10],s2[]=“hello”;char*p1=s1,*p2=s2;while(*p1++=*p2++);等價于下列操作序列:while(*p2){*p1=*p2;p1++;p2++;}*p1=0;12301661230082HelloHelp1p217:45:58317.表達式副作用(Expression’sSideEffects)
表達式的值
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年 長沙市北雅中學招聘教師考試試題附答案
- 中國活動扳手行業市場運營態勢分析及投資前景預測報告
- 2025年中國關節內窺鏡行業市場深度分析及投資策略咨詢報告
- 中國低溫粉碎機行業發展監測及投資戰略規劃研究報告
- 2023-2028年中國無機陶瓷行業發展監測及市場發展潛力預測報告
- 2025年中國無功功率補償設備行業投資分析及發展戰略咨詢報告
- 中國游泳池自動水處理系統項目投資可行性研究報告
- 中國太陽能單晶硅棒行業發展監測及投資戰略規劃報告
- 2020-2025年中國現代農業產業園區行業投資研究分析及發展前景預測報告
- 中國半導體照明光源行業市場全景監測及投資策略研究報告
- DBJ∕T 13-261-2017 福建省二次供水不銹鋼水池(箱)應用技術規程
- 簡歷撰寫與面試技巧
- GB∕T 16422.3-2022 塑料 實驗室光源暴露試驗方法 第3部分:熒光紫外燈
- 新建區2018年中小學(幼)教師、特崗教師
- 中國歷史地理復習資料
- 05示例:玉米脫粒機的設計(含全套CAD圖紙)
- 冷庫項目施工組織設計方案
- 年中總結會策劃方案
- (最新)污水處理池施工方案
- 肺膿腫護理查房ppt課件
- 我要建一座王宮(正譜)
評論
0/150
提交評論