版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
06:50:411C++程序設(shè)計(jì)教程(第二版)第四章計(jì)算表達(dá)Chapter4
ComputationalExpressing清華大學(xué)出版社錢能06:50:412計(jì)算表達(dá):表達(dá)計(jì)算使用一系列操作,它依賴于特定語言的操作符功能,關(guān)乎數(shù)據(jù)類型的內(nèi)在特性,故計(jì)算表達(dá)目的在于深入剖析數(shù)據(jù)類型對于編程的影響,從而準(zhǔn)確使用操作符學(xué)習(xí)方法:1.掌握操作符的功能和相互關(guān)系〔優(yōu)先級和結(jié)合性〕2.針對內(nèi)部數(shù)據(jù)類型,對一些典型的操作中的典型問題留下深刻印象06:50:413第四章內(nèi)容
名詞解釋(NameExplainations)
算術(shù)運(yùn)算問題(ArithmeticProblems)
相容類型的轉(zhuǎn)換(CastCampatibleType)
關(guān)系與邏輯操作(Relation&LogicOperations)
位操作(BitOperations)
增量操作(IncrementOperations)
表達(dá)式副作用(Expression’sSideEffects)
06:50:4141.操作符(Operators)單目操作符:在一個操作數(shù)上施加的操作,如:-3雙目操作符:在二個操作數(shù)上施加的操作,如:5-3故有些操作符既是單目操作符,又是雙目操作符表達(dá)式:假設(shè)干個操作數(shù)和操作符按語法規(guī)那么構(gòu)成的操作,如:a=-3-5+6*7/-8逗號表達(dá)式值為最后一個子表達(dá)式的值,但求值過程是從左至右逐項(xiàng)進(jìn)行的。例如:D=(a=2,b=a+5,a*b);//d的值為1406:50:415左值和右值左值和右值是相對于賦值表達(dá)式而言的。左值表達(dá)式不但具有空間實(shí)體,還具有讀寫訪問權(quán)。右值可以是不占據(jù)內(nèi)存空間的臨時量或字面值,可以是不具有寫入權(quán)的空間實(shí)體。06:50:416例如:Constintb=5;A=b+2;B=a+2;//錯:b擁有空間但無寫入權(quán)(a=4)+=28;//(a=4)為左值06:50:41706:50:418優(yōu)先級:表達(dá)式中多個操作符的執(zhí)行順序的規(guī)定性,如:
*x++;
//先做x++
結(jié)合性:同級操作符的執(zhí)行順序的規(guī)定性,如:
a=b=6;//先做b=606:50:4192.算術(shù)運(yùn)算問題(ArithmeticProblems)整型數(shù)表示范圍有限,如:
1+2+3+...+10000不能用整型變量累計(jì)的一般循環(huán)方法來解:intsum=0;for(inti=1;i<=10000;++i)sum+=i;cout<<sum<<“\n”;06:50:4110整型數(shù)的周而復(fù)始性,如:
unsignedinta=2000000000;unsignedintb=3000000000;cout<<a+b<<“\n”;
結(jié)果為:705032704//取模232而得
超過表示范圍的整型數(shù)不是報(bào)錯,而是表示成一個去掉進(jìn)位后的余數(shù)06:50:4111中間結(jié)果溢出導(dǎo)致計(jì)算錯誤,如:
inta=100000;
intb=100000;
intc=1000;cout<<a*b/c<<"\n";cout<<a*(b/c)<<"\n";
結(jié)果為:
14100651000000006:50:4112浮點(diǎn)數(shù)的精度和有效位影響比較的正確性,如:
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”);結(jié)果為:samenotsame06:50:4113浮點(diǎn)數(shù)計(jì)算的近似性使精確性比較失敗,如:
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”;結(jié)果為:NotsameSame結(jié)論:使用浮點(diǎn)數(shù)進(jìn)行相等和不想等比較的操作通常是有問題的。浮點(diǎn)數(shù)的相等比較,一般總是使用兩者相減的值是否落在0的臨域中來判斷的。----即小于10的負(fù)幾次方。06:50:411406:50:41153.相容類型轉(zhuǎn)換(CastCompatibleType
)
隱式轉(zhuǎn)換:整型和浮點(diǎn)型都是數(shù)值型,所以它們是相容類型.指針與整型不相容,如:
7.0/3=7.0/3.0//將3隱式轉(zhuǎn)換成浮點(diǎn)
=2.33333333…inta=‘a(chǎn)’+3;inta=9;int*ap=&a;3+ap//錯06:50:4116從表達(dá)能力弱的類型到強(qiáng)的類型的轉(zhuǎn)換是平安的,反之,會引起精度喪失.如:floatf=7.0/3;//doublefloatinta=7.0/3;//doubleintcout.precision(9);cout<<fixed<<7.0/3<<“\n”;cout<<f<<“\n”<<a<<“\n”;結(jié)果為:2.3333333332.333333254206:50:4117可以用顯式轉(zhuǎn)換的方法,人為控制運(yùn)算在一定的數(shù)據(jù)類型下工作,如:
doubled=sqrt(123456.0);inta=static_cast<int>(d)*8+5;intb=d*8+5;//隱式轉(zhuǎn)換為浮點(diǎn)cout<<a<<“\n”<<b<<“\n”;A=2000000000;B=1000000000;intc=(static_cast<double>(a)+b)/2;Cout<<a+b<<endl<<c<<endl;結(jié)果為:28132815-12949672961500000000static_cast<type>顯式轉(zhuǎn)換采用顯式轉(zhuǎn)換的第一個目的是為了維護(hù)整型數(shù)運(yùn)算的一致性。另一個目的是為了得到正確的計(jì)算結(jié)果。06:50:411806:50:41194.關(guān)系與邏輯操作(Relations&LogicOperations
)=與==的區(qū)別intx=9;X=(x==9);//因?yàn)橄嗟?,值?賦值給x,賦值表達(dá)式的值為1x=9;//賦值表達(dá)式的值為9X=(x==0);//因?yàn)椴幌嗟?,值?賦給x,賦值表達(dá)式的值為0注:賦值表達(dá)式也具有值,它的值就是所賦的值。邏輯表達(dá)式的值為0或1.06:50:41204.關(guān)系與邏輯操作(Relations&LogicOperations
)=與==的區(qū)別intx=9;if(x==0)cout<<“test1ok\n”;if(x=5)cout<<“test2ok\n”;if(x=0)cout<<“test3ok\n”;結(jié)果為:test2ok注:賦值表達(dá)式也具有值,它的值就是鎖賦的值。邏輯表達(dá)式的值為0或1.06:50:4121!=是操作符,=!不是操作符
intx=3;if(x!=9)cout<<“not9\n”;if(x=!9)cout<<“xisfalse\n”;條件表達(dá)式(x!=0)與(x)等同
intx=3;if(x!=0)cout<<x;if(x)cout<<x;06:50:4122不等式連寫的錯誤:
inta=-1,b=0,c=1;if(a<b<c)cout<<“ok1\n”;if(a<b&&b<c)cout<<“ok2\n”;結(jié)果為:
ok2
06:50:4123短路求值的妙用:1、防止除0的惡果if(b&&a/b>2)cout<<“ok\n”;2、防止不必要的求值if(a==0||b=func())cout<<”useless\n”;06:50:41245.位操作(BitOperations)
左移操作<<將整數(shù)最高位擠掉,在右端補(bǔ)0。如:
inta=12;//a為:00000000000000000000000000001100a=a<<1;//a為:0000000000000000000000000001100006:50:4125右移操作>>在整數(shù)的高位擠一個0或1進(jìn)去〔有符號數(shù)擠符號位,無符號數(shù)擠0〕,而整數(shù)最低位被擠掉。如:
shortinta=a>>1;//a=-1即unsignedshortintb=b>>1;//b=32767即06:50:4126位與操作&將兩個操作數(shù)每一位做與操作,如:inta=12;//a為:00000000000000000000000000001100intb=6;//b為:00000000000000000000000000000110//a&b為:00000000000000000000000000000100intcbit=a&b;intclogic=a&&b;cout<<cbit<<“\n”<<clogic<<“\n”;結(jié)果為:(比較&與&&的區(qū)別)4106:50:4127位或操作|將兩個操作數(shù)每一位做或操作,如:inta=12;//a為:00000000000000000000000000001100intb=6;//b為:00000000000000000000000000000110//a|b為:00000000000000000000000000001110
intcbit=a|b;intclogic=a||b;cout<<cbit<<“\n”<<clogic<<“\n”;結(jié)果為:(比較|與||的區(qū)別)14106:50:41286.增量操作(IncrementOperations)
前增量與后增量:前增量可以當(dāng)左值。
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++不是左值06:50:4129編譯的貪吃特征:
inta=3,b=5,c;c=a++b;//錯:理解為a++bc=a+++b;//ok:a+++bc=a++++b;//錯:理解為a++++bc=a+++++b;//錯:理解為a+++++b06:50:4130指針的增量操作:chars1[10],s2[]=“hello”;char*p1=s1,*p2=s2;while(*p1++=*p2++);等價于以下操作序列:while(*p2){*p1=*p2;p1++;p2++;}*p1=0;12301661230082HelloHelp1p206:50:41317.表達(dá)式副作用(Expression’sSideEffects)
表達(dá)式的值
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版游戲版權(quán)采購合同示范文本3篇
- 湘潭大學(xué)《體育基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年版經(jīng)營權(quán)作抵押借款協(xié)議樣例版B版
- 二零二五版戶外廣告資源代理合作框架協(xié)議3篇
- 2024消防設(shè)備研發(fā)與制造合同范本3篇
- 二零二五年度藝術(shù)品收藏交易合同3篇
- 2025年度智慧養(yǎng)老服務(wù)平臺建設(shè)與運(yùn)營合同3篇
- 桐城師范高等??茖W(xué)?!侗硌莼A(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五版板房租賃合同含物業(yè)管理及保潔服務(wù)3篇
- 四川文軒職業(yè)學(xué)院《機(jī)械工程材料B》2023-2024學(xué)年第一學(xué)期期末試卷
- 上海紐約大學(xué)自主招生面試試題綜合素質(zhì)答案技巧
- 辦公家具項(xiàng)目實(shí)施方案、供貨方案
- 2022年物流服務(wù)師職業(yè)技能競賽理論題庫(含答案)
- 危化品安全操作規(guī)程
- 連鎖遺傳和遺傳作圖
- DB63∕T 1885-2020 青海省城鎮(zhèn)老舊小區(qū)綜合改造技術(shù)規(guī)程
- 高邊坡施工危險源辨識及分析
- 中海地產(chǎn)設(shè)計(jì)管理程序
- 簡譜視唱15942
- 《城鎮(zhèn)燃?xì)庠O(shè)施運(yùn)行、維護(hù)和搶修安全技術(shù)規(guī)程》(CJJ51-2006)
- 項(xiàng)目付款審核流程(visio流程圖)
評論
0/150
提交評論