C++程序設(shè)計(jì)教程4_第1頁(yè)
C++程序設(shè)計(jì)教程4_第2頁(yè)
C++程序設(shè)計(jì)教程4_第3頁(yè)
C++程序設(shè)計(jì)教程4_第4頁(yè)
C++程序設(shè)計(jì)教程4_第5頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論