第三講 表達式和語句_第1頁
第三講 表達式和語句_第2頁
第三講 表達式和語句_第4頁
第三講 表達式和語句_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第三講表達式和語句語句、表達式基本概念運算符優(yōu)先級和結(jié)合性表達式數(shù)據(jù)類型轉(zhuǎn)換語句算法基本概念程序是一些按次序執(zhí)行的語句,執(zhí)行語句是為了要完成某個操作,修改某個數(shù)據(jù)。程序中大部分語句是由表達式構(gòu)成的。表達式是計算求值的基本單位,它是由運算符和運算數(shù)組成的式子。運算符是表示進行某種運算的符號。運算數(shù)包含常量、變量和函數(shù)等。

C++語言定義了豐富的運算符。這些運算符按所要求的操作數(shù)的多少,可分為單目運算符、雙目運算符和三目運算符。按運算符的運算性質(zhì)又可分為算術(shù)運算符、關(guān)系運算符、邏輯運算符等。運算符算術(shù)運算符:

+-*/%

關(guān)系運算符:

<<=>===!=

邏輯運算符:

!&&||

位運算符:

<<>>~|^&

自增自減運算符:

++--

賦值運算符

=及其擴展(+=-=*=/=%=等)條件運算符:

?:

指針運算符:*和

&

逗號運算符:

,

函數(shù)調(diào)用運算符()下標運算符[]

求字節(jié)運算符

sizeof

強制類型轉(zhuǎn)換運算符:(type)

算術(shù)運算符

算術(shù)運算符有雙目運算和單目運算兩種。包括:

+(加法運算符,或取正運算符,如1+2,+3)

-(減法運算符,或取負運算符,如1-2,-3)*(乘法運算符,如1*2)

/(除法運算符,如1/2)

%(模運算符或稱求余運算符,如7%3=1)其中+(取正)、-(取負)是單目運算符,其余是雙目運算符“/”運算符的兩個操作數(shù)都是整數(shù)時,其計算結(jié)果應(yīng)是除法運算后所得商的整數(shù)部分。例如,5/2的結(jié)果是2。取余運算符(%)的兩個操作數(shù)必須是整數(shù)或字符型數(shù)據(jù)。賦值運算符(1)賦值運算符“=”的一般格式為:

變量=表達式; 表示將其右側(cè)的表達式求出結(jié)果,賦給其左側(cè)的變量。例如:

inti; i=3*(4+5); //i的值變?yōu)?7(2)賦值表達式本身的運算結(jié)果是右側(cè)表達式的值,而結(jié)果類型是左側(cè)變量的數(shù)據(jù)類型。例如:

inti=1.2*3; //結(jié)果為3,而不是3.6(3)賦值運算符的結(jié)合性是從右至左的,因此,C++程序中可以出現(xiàn)連續(xù)賦值的情況。例如,下面的賦值是合法的:

inti,j,k; i=j=k=10;(4)復(fù)合運算符:

+=(加賦值), -=(減賦值), *=(乘賦值), /=(除賦值),

%=(取模賦值),

<<=(左移賦值),

>>=(右移賦值),

&=(與賦值),

^=(異或賦值),

|=(或賦值)

例如:inta=12;a+=a;

intb=12;b+=b-=b*=b;關(guān)系運算符(1)關(guān)系運算符用于兩個值進行比較,運算結(jié)果為true(真)或false(假),分別用值非0(true)或0(false)表示。C++中的關(guān)系運算符如下:

<(小于),

<=(小于等于),

>(大于),

>=(大于等于),==(等于),

!=(不等于),

(2)關(guān)系運算符都是雙目運算符,其結(jié)合性是從左到右,<、<=、>、>=運算符的優(yōu)先級相同,==和!=運算符的優(yōu)先級相同,前者運算的優(yōu)先級高于后者。(3)關(guān)系運算符的優(yōu)先級低于算術(shù)運算符而高于賦值運算符。例如:

a+b>c 等價于

(a+b)>c a!=b>c 等價于 a!=(b>c)

邏輯運算符

&&(邏輯與),||(邏輯或),?。ㄟ壿嫹牵? 邏輯表達式的結(jié)果為真則為1,結(jié)果為假則為0。 邏輯非(?。┦菃文窟\算符,邏輯與(&&)與邏輯或(||)為雙目運算符。

邏輯非的優(yōu)先級最高,邏輯與次之,邏輯或最低。

“&&”和“||”低于關(guān)系運算符,“!”高于算術(shù)運算符。

aba&&ba||b!a!b0000110非00110非000101非0非01100自增、自減運算符(1)自增(++)、自減(--)運算符為變量的增1和減1提供了緊湊格式。(2)自增、自減運算符都是單目運算符,其作用是使變量的值增1或減1。(3)自增、自減運算符有四種應(yīng)用格式:

inta=3;b=a++;等價于b=a;a=a+1;

inta=3;b=a--;等價于b=a;a=a-1;

(運算符后置用法,代表先使用變量,然后對變量增值)

inta=3;b=++a;等價于

a=a+1;b=a;

inta=3;b=--a;等價于a=a-1;b=a;

(運算符前置用法,代表先對變量增值,再使用變量)

(4)C++編譯器在處理時盡可能多的自左向右將運算符結(jié)合在一起。如:a+++b表示為(a++)+b而不是a+(++b)。(5)++,––,的結(jié)合性為從右至左,而一般算術(shù)運算符為從左至右。如:–i++相當于–(i++)。(6)++和––運算法只能用于變量,不得用于常量和表達式。如:

5++,(a+b)++均為不合法。條件運算符(1)條件運算符“?:”是C++中惟一三目運算符,其形式為:

表達式1?表達式2:表達式3

它的運算方式為:先計算表達式1的值,如果其值為非0(真),則表達式2的值就是整個表達式的最終結(jié)果;否則表達式3的值就是整個表達式的值。常見的一個例子為:

max=((a>b)?a:b)

上面例子定義了一個求兩個數(shù)a和b中最大值,其中決定哪一個是最大值用了條件運算符。(2)條件運算符的結(jié)合性是自右向左。例如有以下條件表達式:

a>b?a:c>d?c:d相當于

a>b?a:(c>d?c:d)(3)條件運算符的優(yōu)先級別高于賦值運算符,低于關(guān)系運算符和算術(shù)運算符。例如有:

a>b?a-b:b-a相當于

a>b?(a-b):(b-a)位運算符(1)位(bit)是計算機中表示信息的最小單位,一般用0和1表示。一個字符在計算機中用8個位表示,8個位組成一個字節(jié)。C++語言需要將人們通常所習(xí)慣的十進制數(shù)表示為二進制、八進制或十六進制數(shù)來理解對位的操作。C++中所有的位運算符如下:

~(按位求反),<<(左移),

>>(右移), &(按位與), ^(按位異或),

|(按位或)。(2)位運算符是對其操作數(shù)按其二進制形式逐位進行運算,參加位運算的操作數(shù)必須為整數(shù)。sizeof運算符(求字節(jié)運算符)(1)sizeof運算符是單目運算符,用于計算運算對象在內(nèi)存中所占字節(jié)的多少,它有兩種形式:

sizeof

(類型標識符);

sizeof

表達式;(2)sizeof可以接受的類型標識符很多,如sizeof(int)表示求整型數(shù)據(jù)在內(nèi)存中所占字節(jié)數(shù)。

例如:inta,則sizeof(a)表示求變量a在內(nèi)存中所占字節(jié)數(shù)。 例如:inta[10],則sizeof(a)表示求數(shù)組a在內(nèi)存中所占字節(jié)數(shù)。

逗號運算符(1)逗號運算符用于將多個表達式連在一起,并將各表達式從左到右的順序依次求值,但只有其最右端的表達式的結(jié)果,作為整個逗號表達式的結(jié)果。(2)逗號表達式的一般格式為:

表達式1,表達式2,……,表達式n

例如:

inta=3,b=4,c=5; a+b,b+c,c+a;

則先求解a+b,再求解b+c,最后求解c+a,整個表達式的結(jié)果為c+a的結(jié)果。

運算符優(yōu)先級(1)運算符優(yōu)先級決定了在表達式中各個運算符執(zhí)行的先后順序。高優(yōu)先級運算符先于低優(yōu)先級運算符進行運算。(2)當表達式中出現(xiàn)了括號時,會改變優(yōu)先級。先計算括號中的子表達式值,再計算整個表達式的值。(3)運算符的結(jié)合方式有兩種:左結(jié)合和右結(jié)合。左結(jié)合表示運算對象先與其左邊的運算符結(jié)合,如加法;右結(jié)合表示運算對象優(yōu)先與其右邊的運算符結(jié)合,如單目運算符+、-。(4)同一優(yōu)先級的優(yōu)先級別相同,運算次序由結(jié)合方向決定。如1*2/3,*和/的優(yōu)先級別相同,其結(jié)合方向自左向右,則等價于(1*2)/3。(5)不同的運算符要求有不同的運算對象個數(shù),單目運算符只需一個運算對象,如i++,-a,sizeof(b)等。優(yōu)先級操作符結(jié)合性1()[].->::左→右2!~+-++--&*(強制轉(zhuǎn)換類型)sizeof

右→左3*/%左→右4+加-減左→右5<<左移>>右移左→右6<<=>=>左→右7==!=左→右8&按位與左→右9^按位異或左→右10|按位或左→右11&&左→右12||左→右13?:右→左14=*=/=+=-=|=<<=>>=右→左15,左→右優(yōu)先級和結(jié)合性表達式

表達式是用于計算的式子,它由運算符、運算數(shù)和括號組成。最簡單的表達式只有一個常量或變量,當表達式中有兩個或多個運算符時,表達式稱為復(fù)雜表達式,其中運算符執(zhí)行的先后順序由它們的優(yōu)先級和結(jié)合性決定。執(zhí)行表達式所規(guī)定的運算,所得到的結(jié)果值便是表達式的值。

C++中由于運算符很豐富,因此表達式的種類也很多。常用的表達式有6種。

1. 算術(shù)表達式 由算術(shù)運算符和位操作運算符組成的表達式。其表達式的值是一個數(shù)值,表達式的類型由運算符和運算數(shù)確定。 例如,

a+3*(b/2)就是一個算術(shù)表達式。2. 邏輯表達式 由邏輯運算符組成的表達式。其表達式的值的類型為邏輯型,一般地,真用1表示,假用0表示。 例如,!a&&b||c就是一個邏輯表達式。

3. 關(guān)系表達式 由關(guān)系運算符組成的表達式。其表達式的值的類型為邏輯型,一般地,真用1表示,假用0表示。 例如,a>b!=c就是一個關(guān)系表達式。4. 賦值表達式 由賦值運算符組成的表達式。 例如,已知a=b就是一個賦值表達式。

5. 條件表達式 由三目運算符組成的表達式。條件表達式的值取決于?號前面的表達式,該表達式的值為非0時,整個表達式的值為“:”號前面表達式的值,否則為“:”號后面表達式的值。條件表達式的類型是“:”號前和“:”號后兩個表達式中類型高的一個表達式的類型。 例如,a>b?a:b就是一個條件表達式。6. 逗號表達式 用逗號將若干個表達式連起來組成的表達式。該表達式的值是組成逗號表達式的若干個表達式中最后一個表達式的值,類型也是最后一個表達式的類型。逗號表達式計算值的順序是從左至右逐個表達式分別計算。 例如,a+3,b+4,c+5就是一個逗號表達式。

數(shù)據(jù)類型轉(zhuǎn)換

C++中數(shù)據(jù)類型轉(zhuǎn)換有兩類,即隱式類型轉(zhuǎn)換和顯式類型轉(zhuǎn)換。1、隱式類型轉(zhuǎn)換 隱式類型轉(zhuǎn)換是由編譯器自動完成的類型轉(zhuǎn)換。當編譯器遇到不同類型的數(shù)據(jù)參與同一運算時,會自動將它們轉(zhuǎn)換為相同類型后再進行運算,賦值時會把所賦值的類型轉(zhuǎn)換為與被賦值變量類型一樣。隱式類型轉(zhuǎn)換按從低到高的順序進行。

數(shù)據(jù)類型轉(zhuǎn)換的順序整型(int)短整型,字符型(short,char)單精度浮點型(float)雙精度浮點型(double)無符號長整型(unsigned

long)長整型(long)無符號整型(unsigned)2、顯式類型轉(zhuǎn)換顯式類型轉(zhuǎn)換是由程序員顯式指出的類型轉(zhuǎn)換,轉(zhuǎn)換形式有兩種:

類型名(表達式) (類型名)表達式 這里的“類型名”是任何合法的C++數(shù)據(jù)類型,例如float、int等。通過類型的顯式轉(zhuǎn)換可以將“表達式”轉(zhuǎn)換成適當?shù)念愋汀? 例如:doublef=3.6;

intn=(int)f;//n=3。注意:轉(zhuǎn)換后的類型數(shù)據(jù)由系統(tǒng)分配一個中間變量存放,而原變量類型不變。左值和右值左值(leftvalue)指能出現(xiàn)在賦值表達式左邊的表達式。左值表達式具有存放數(shù)據(jù)的空間,并且存放是允許的。如:inta=3;constintb=4;右值(rightvalue)只能出現(xiàn)在表達式的右邊。左值表達式可以作為右值表達式。語句語句是程序中最小的獨立單位,根據(jù)復(fù)雜程度的不同,可以分為簡單語句和復(fù)合語句;根據(jù)執(zhí)行流程的不同,又可以分為順序語句、分支語句和循環(huán)語句,這三種基本結(jié)構(gòu)能夠組織成任意復(fù)雜的程序??照Z句是最簡單的語句,僅由一個分號組成,表示什么也不做。復(fù)合語句由一對花括號“{}”和括號里的一系列簡單語句組成,通常用在分支語句和循環(huán)語句中。順序結(jié)構(gòu)語句順序結(jié)構(gòu)語句在執(zhí)行過程中,程序的流程不會發(fā)生轉(zhuǎn)移。常見的順序結(jié)構(gòu)語句有:聲明語句、賦值語句和輸入輸出語句。選擇結(jié)構(gòu)語句

if(條件表達式)//語句1;else

//語句2;if(條件表達式)//語句1;if(條件表達式1)//語句1;elseif(條件表達式2)//語句2;………elseif(條件表達式n)//語句n;else//語句n+1;多分支結(jié)構(gòu)單分支結(jié)構(gòu)雙分支結(jié)構(gòu)多分支語句

嵌套的if可以處理多分支選擇,但容易引起困惑和許多難以發(fā)現(xiàn)的錯誤,可以用switch語句來替代它們,格式為:switch(判斷表達式){

case

常量表達式1:語句1;

break;

case常量表達式2:語句2;

break;

//……

default:語句n+1;

}case后面的常量表達式必須是整型、字符型或枚舉型表達式,并且要求互不相同,保證分支選擇的唯一性。case分支的后面如果有多條語句,可以用花括號“{}”括起來,也可以不用。default語句是可選項,總是放在switch語句的最后。case語句僅起語句標號作用,并不改變控制流程。在case語句中通常會用到break語句,它的作用是使程序流程退出switch語句,轉(zhuǎn)向switch語句后面的下一條語句。初學(xué)者易犯的一個錯誤是忽略break語句在使用switch語句時,需要注意以下四個問題:循環(huán)語句for(表達式1;表達式2;表達式3)

語句;while(表達式)

語句;do

語句;while(表達式);while循環(huán)語句do-while循環(huán)語句for循環(huán)語句轉(zhuǎn)移語句用來改變程序的順序執(zhí)行流程,將程序執(zhí)行流程轉(zhuǎn)移到程序其他地方。包括:break、continue、goto和return等。break語句一般只用于while、do-while、for或者switch語句,作用是終止執(zhí)行當前的循環(huán)語句或者switch語句,跳轉(zhuǎn)到當前語句的下一條語句。在循環(huán)嵌套中,break語句用來從最近的封閉循環(huán)體內(nèi)跳出,而不能中止所有的循環(huán)語句。continue語句用在循環(huán)語句中,作用為結(jié)束本次循環(huán),即跳過循環(huán)體中尚未執(zhí)行的語句,接著進行下一次是執(zhí)行循環(huán)的判定程序的靈魂——算法做任何事情都有一定的步

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論