版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
08:52:351C++程序設(shè)計(jì)教程(第二版)第四章計(jì)算表達(dá)Chapter4
ComputationalExpressing清華大學(xué)出版社錢能08:52:352計(jì)算表達(dá):表達(dá)計(jì)算使用一系列操作,它依賴于特定語言的操作符功能,關(guān)乎數(shù)據(jù)類型的內(nèi)在特性,故計(jì)算表達(dá)目的在于深入剖析數(shù)據(jù)類型對(duì)于編程的影響,從而準(zhǔn)確使用操作符學(xué)習(xí)方法:
1.掌握操作符的功能和相互關(guān)系(優(yōu)先級(jí)和結(jié)合性)
2.針對(duì)內(nèi)部數(shù)據(jù)類型,對(duì)一些典型的操作中的典型問題留下深刻印象08:52:353第四章內(nèi)容
名詞解釋(NameExplainations)
算術(shù)運(yùn)算問題(ArithmeticProblems)
相容類型的轉(zhuǎn)換(CastCampatibleType)
關(guān)系與邏輯操作(Relation&LogicOperations)
位操作(BitOperations)
增量操作(IncrementOperations)
表達(dá)式副作用(Expression’sSideEffects)
08:52:3541.操作符(Operators)單目操作符:在一個(gè)操作數(shù)上施加的操作,如:-3雙目操作符:在二個(gè)操作數(shù)上施加的操作,如:5-3故有些操作符既是單目操作符,又是雙目操作符表達(dá)式:若干個(gè)操作數(shù)和操作符按語法規(guī)則構(gòu)成的操作,如:
a=-3-5+6*7/-8逗號(hào)表達(dá)式值為最后一個(gè)子表達(dá)式的值,但求值過程是從左至右逐項(xiàng)進(jìn)行的。例如:D=(a=2,b=a+5,a*b);//d的值為1408:52:355左值和右值左值和右值是相對(duì)于賦值表達(dá)式而言的。左值表達(dá)式不但具有空間實(shí)體,還具有讀寫訪問權(quán)。右值可以是不占據(jù)內(nèi)存空間的臨時(shí)量或字面值,可以是不具有寫入權(quán)的空間實(shí)體。08:52:356例如:Constintb=5;A=b+2;B=a+2;//錯(cuò):b擁有空間但無寫入權(quán)(a=4)+=28;//(a=4)為左值08:52:35708:52:358優(yōu)先級(jí):表達(dá)式中多個(gè)操作符的執(zhí)行順序的規(guī)定性,如:
*x++;
//先做x++
結(jié)合性:同級(jí)操作符的執(zhí)行順序的規(guī)定性,如:
a=b=6;//先做b=608:52:3592.算術(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”;08:52:3510整型數(shù)的周而復(fù)始性,如:
unsignedinta=2000000000;unsignedintb=3000000000;cout<<a+b<<“\n”;
結(jié)果為:705032704//取模232而得
超過表示范圍的整型數(shù)不是報(bào)錯(cuò),而是表示成一個(gè)去掉進(jìn)位后的余數(shù)08:52:3511中間結(jié)果溢出導(dǎo)致計(jì)算錯(cuò)誤,如:
inta=100000;
intb=100000;
intc=1000;cout<<a*b/c<<"\n";cout<<a*(b/c)<<"\n";
結(jié)果為:
14100651000000008:52:3512浮點(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é)果為:samenotsame08:52:3513浮點(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ù)幾次方。08:52:351408:52:35153.相容類型轉(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//錯(cuò)08:52:3516從表達(dá)能力弱的類型到強(qiáng)的類型的轉(zhuǎn)換是安全的,反之,會(huì)引起精度丟失.如:
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.333333254208:52:3517可以用顯式轉(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)換的第一個(gè)目的是為了維護(hù)整型數(shù)運(yùn)算的一致性。另一個(gè)目的是為了得到正確的計(jì)算結(jié)果。08:52:351808:52:35194.關(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.08:52:35204.關(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.08:52:3521!=是操作符,=!不是操作符
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;08:52:3522不等式連寫的錯(cuò)誤:
inta=-1,b=0,c=1;if(a<b<c)cout<<“ok1\n”;if(a<b&&b<c)cout<<“ok2\n”;結(jié)果為:
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)
左移操作<<將整數(shù)最高位擠掉,在右端補(bǔ)0。如:
inta=12;//a為:00000000000000000000000000001100a=a<<1;//a為:0000000000000000000000000001100008:52:3525右移操作>>在整數(shù)的高位擠一個(gè)0或1進(jìn)去(有符號(hào)數(shù)擠符號(hào)位,無符號(hào)數(shù)擠0),而整數(shù)最低位被擠掉。如:
shortinta=-2;//1111111111111110a=a>>1;//a=-1即1111111111111111unsignedshortintb=65535;//1111111111111111b=b>>1;//b=32767即011111111111111108:52:3526位與操作&將兩個(gè)操作數(shù)每一位做與操作,如:
inta=12;//a為:00000000000000000000000000001100intb=6;//b為:00000000000000000000000000000110//a&b為:00000000000000000000000000000100intcbit=a&b;intclogic=a&&b;cout<<cbit<<“\n”<<clogic<<“\n”;
結(jié)果為:(比較&與&&的區(qū)別)4108:52:3527位或操作|將兩個(gè)操作數(shù)每一位做或操作,如:
inta=12;//a為:00000000000000000000000000001100
intb=6;//b為:00000000000000000000000000000110//a|b為:00000000000000000000000000001110
intcbit=a|b;
intclogic=a||b;cout<<cbit<<“\n”<<clogic<<“\n”;
結(jié)果為:(比較|與||的區(qū)別)14108:52:35286.增量操作(IncrementOperations)
前增量與后增量:前增量可以當(dāng)左值。
constintd=8;d++;//錯(cuò):d不是左值
3++;//錯(cuò):3不是左值
inta=3,x=3,b,c;
b=++a;//a的前增量操作,使b為4c=x++;//x的后增量操作,使c為3a++-=2;//錯(cuò):a++不是左值
++a+=5;//ok:++a是左值且a最后為9++a++;//錯(cuò):先做a++,而a++不是左值08:52:3529編譯的貪吃特征:
inta=3,b=5,c;c=a++b;//錯(cuò):理解為a++bc=a+++b;//ok:a+++bc=a++++b;//錯(cuò):理解為a++++bc=a+++++b;//錯(cuò):理解為a+++++b08:52:3530指針的增量操作:chars1[10],s2[]=“hello”;char*p1=s1,*p2=s2;while(*p1++=*p2++);等價(jià)于下列操作序列:while(*p2){*p1=*p2;p1++;p2++;}*p1=0;12301661230082HelloHelp1p208:52:35317.表達(dá)式副作用(Expression’sSideEffects)
表達(dá)式的值
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024中介服務(wù)項(xiàng)目協(xié)議
- 2024適用房產(chǎn)中介購(gòu)房協(xié)議格式范本
- 2024年期建筑工人勞務(wù)承攬協(xié)議
- 2024年專利技術(shù)許可格式協(xié)議
- 2024年化玉米購(gòu)銷協(xié)議模板
- 2024屆安徽省安慶二中、天成中學(xué)高中數(shù)學(xué)試題競(jìng)賽模擬(二)試題
- 2023-2024學(xué)年浙江省鎮(zhèn)海中學(xué)高三高考沖刺第一次考試數(shù)學(xué)試題
- 2024年安全煙花爆竹零售協(xié)議樣本
- 2024年材料采購(gòu)協(xié)議典范
- 2024年度商品采購(gòu)協(xié)議樣式
- QJ44型直流雙臂電橋使用說明書
- 帷幕灌漿孔原始記錄表
- 《臨床決策分析》課件.ppt
- 淚道沖洗PPT學(xué)習(xí)教案
- 新課程背景下初中語文教學(xué)的轉(zhuǎn)變與創(chuàng)新
- 淺談校園影視在學(xué)校教育中的作用
- 咖啡種植標(biāo)準(zhǔn)化規(guī)程
- 上海大眾汽車商務(wù)禮儀培訓(xùn)PPT課件
- 理論力學(xué)習(xí)題集含答案
- 驅(qū)動(dòng)壓在肺保護(hù)性通氣策略中的研究進(jìn)展(全文)
- 公路工程施工安全技術(shù)規(guī)范
評(píng)論
0/150
提交評(píng)論