下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
本文由衰神and衰圣貢獻ppt文檔可能在WAP端瀏覽體驗不佳。建議您優(yōu)先選擇TXT,或下載源文件到本機查看。第4章選擇結(jié)構(gòu)本章要點:本章要點4.1關(guān)系運算和邏輯運算4.2if語句和用if語句構(gòu)成的選擇結(jié)構(gòu)ifif4.3條件表達式構(gòu)成的選擇結(jié)構(gòu)4.4switch語句以及用switch語句和break語句構(gòu)成的選擇結(jié)構(gòu)4.5語句標(biāo)號和goto語句關(guān)系運算和邏輯運算C語言中的邏輯值C語言中,參與邏輯運算的量為非零值或整數(shù)零,非零值和整數(shù)零分別表示運算量為“真”或“假”。邏輯運算的結(jié)果值,即邏輯表達式的值應(yīng)該是一個邏輯值“真”或“假”C語言編譯系統(tǒng)在給出邏輯運算結(jié)果時,以數(shù)值1代表“真”,以0代表“假”,但在判斷一個量是否為“真”時,以0代表“假”,以非0代表“真”。關(guān)系運算符和關(guān)系表達式關(guān)系運算實際上就是“比較運算”,將兩個數(shù)進行比較,判斷比較的結(jié)果是否符合指定的條件。1.關(guān)系運算符關(guān)于關(guān)系運算符的說明:(1)表4-1中前4種運算符(<、<=、>、>=)的優(yōu)先級別相同,后兩種也相同。前4種優(yōu)先級別高于后兩種。如,“>”優(yōu)先級別高于“!=”。(2)關(guān)系運算符與算術(shù)運算符、賦值運算符的優(yōu)先級關(guān)系如下:算術(shù)運算符(高)一關(guān)系運算符(中)一賦值運算符(低)即:算術(shù)運算符優(yōu)先級別高于關(guān)系運算符,關(guān)系運算符優(yōu)先級別又高于賦值運算符。(3)關(guān)系運算符的結(jié)合方向是“自左向右”。C語言有六種關(guān)系運算符,如表4-1所示。表4.1C語言中的關(guān)系運算符運算符<<=>>===(連續(xù)兩個=)!=名稱小于小于或等于大于大于或等于等于不等于優(yōu)先次序優(yōu)先級相同(高)優(yōu)先級相同(低)2.關(guān)系表達式及關(guān)系表達式的值用關(guān)系運算符將兩個表達式(算術(shù)表達式、關(guān)系表達式、邏輯表達式、賦值表達式、字符表達式等)連接起來的式子,稱關(guān)系表達式。例如,a>=b,a>==c等。在C語言中,關(guān)系表達式的結(jié)果值為1或0。當(dāng)關(guān)系表達式成立時,其結(jié)果值為1,否則,其值為10。若a=10,b=6,表達式a>=b為“真“,其值為1。當(dāng)關(guān)系運算符兩邊的值類型不一致時,系統(tǒng)將自動進行轉(zhuǎn)換。轉(zhuǎn)換規(guī)則與雙目運算中的類型轉(zhuǎn)換規(guī)則相同。關(guān)系運算示例:試求x=5〉3〉1的值。分析:x=5〉3〉1相當(dāng)于:x=(5〉3)〉1=1〉1=0故x的值為0。關(guān)系表達式主要用于選擇結(jié)構(gòu)中的條件判斷。重點提示:表示“等于”關(guān)系的運算符“==”※重點提示和“不等于”關(guān)系的運算符“!=”與數(shù)學(xué)中的表示方法不同。在使用它們時請予以注意,以免寫錯關(guān)系運算符而導(dǎo)致錯誤的結(jié)果。例如,欲判斷x是否等于0,如果寫成:x=0就不是判斷x是否等于0的含義了,而成了把0賦值給變量x。正確的寫法應(yīng)為:x==0。4.1.3邏輯運算符和邏輯表達式1.C語言中的邏輯運算符關(guān)系表達式只適于描述單一的條件,對于較復(fù)雜的復(fù)合條件就需要將若干個關(guān)系表達式連接起來才能描述,如描述“x大于0且不等于2”,就需要將兩個關(guān)系表達式x>0和x!=2連接起來:x>0&&x!=2。其中“&&”是C語言中的邏輯運算符。C語言提供了三種邏輯運算符,如表4.2所示。表4.2C語言中的邏輯運算符運算符!名稱邏輯非示例!a示例說明a非說明單目運算符雙目運算符雙目運算符高低優(yōu)先次序&&邏輯與a&&ba與b||邏輯或a||ba或b關(guān)于邏輯運算符的說明:(1)邏輯運算符的優(yōu)先次序如下:?。ǜ撸┮?&(中)一||(低)(2)邏輯運算符具有自左向右的結(jié)合性(3)邏輯運算符與賦值運算符、關(guān)系運算符、算術(shù)運算符的優(yōu)先次序如下:(由高到低)?。ㄟ壿嫹牵┮凰阈g(shù)運算一關(guān)系運算一&&(邏輯與)一||(邏輯或)一賦值運算例如:a>=b)&&(x>y)可以寫為:a>=b&&x>y(a==b)||(x==y)可以寫為:a==b||x==y(!a)||(a>=b)可以寫為:!a||a>=b2.邏輯表達式和邏輯表達式的值用邏輯運算符將關(guān)系表達式或邏輯值連接起來的式子稱邏輯表達式。一個邏輯表達式中可以包含多個邏輯運算符,如x>y&&a<=b-!c參與邏輯運算的量為非零值或整數(shù)零,非零值和整數(shù)零分別表示運算量為“真”或“假”。邏輯運算的結(jié)果值,即邏輯表達式的值應(yīng)該是一個邏輯值“真”或“假”,即為“1”或“0”。表4.3為邏輯運算的運算規(guī)則表。用它表示當(dāng)a和b的值為不同組合時,各種邏輯運算所得到的值。a非0非000b非00非00!a0011!b0101a&&b1000a||b1110以下是關(guān)于邏輯運算的幾點說明:(1)參與邏輯運算的量不但可以是0和1,或者是0和非零的整數(shù),也可以是任何類型的數(shù)據(jù),如字符型、實型或指針型等。但最終以0和非0來判定它們屬于“真”或“假”。(2)在邏輯表達式求解中,并不是所有邏輯運算符都需要執(zhí)行,有時只需執(zhí)行一部分運算符就可得出邏輯表達式的最后結(jié)果。例如x&&y&&z,只有x為真時才需要判斷y的真假,若x為假,則立即得出整個表達式為假。(3)邏輯表達式的運用場合與關(guān)系表達式完全相同,也是用于流程控制語句中的條件描述。只不過,關(guān)系表達式描述的是單一的條件,邏輯表達式描述的是復(fù)合的條件。(4)在處理一個復(fù)雜表達式時,對于表達式中不同位置上出現(xiàn)的數(shù)值,應(yīng)區(qū)分哪些是作為數(shù)值運算或關(guān)系運算的對象,哪些作為邏輯運算的對象。例如求下列表達式的值:8>=5&&2||6<5-!0計算步驟如下:①表達式自左至右掃描求解。因為關(guān)系符優(yōu)先于&&,所以首先處理8>=5,在關(guān)系運算符〉=兩側(cè)的8和5作為數(shù)值參加關(guān)系運算,8>=5的值為1。②再進行1&&2||6<5-!0運算。自左至右掃描求解,&&兩側(cè)的1和2作為邏輯運算對象,因為參加運算的皆為非0,故結(jié)果為1。③接下來進行1||6<5-!0運算。6的左側(cè)為||運算符,右側(cè)為<運算符,根據(jù)優(yōu)先級別,應(yīng)先進行<的運算。即先進行6<5-!0運算?,F(xiàn)在5的左側(cè)為<運算符,右側(cè)為-運算符,而-優(yōu)先于<,因此,應(yīng)先進行5-!0的運算。又由于!的優(yōu)先級別最高,故先進行!0的運算,得結(jié)果1。④然后進行5-1運算。得結(jié)果為4。⑤下面再進行6<4運算。得結(jié)果為0。⑥最后進行1||0運算。得到1。故表達式的值為1。※重點提示:在邏輯表達式求解中,并不是重點提示所有邏輯運算符都需要執(zhí)行,有時只需執(zhí)行一部分運算符就可得出邏輯表達式的最后結(jié)果。if語句和用if語句構(gòu)成的選擇結(jié)構(gòu)4.2.1if語句if語句是選擇結(jié)構(gòu)的一種形式,又稱為條件分支語句。它的流程控制方式是:根據(jù)給定的條件進行判定,由判定的結(jié)果(真或假)決定執(zhí)行給出的兩種操作之一。C語言中提供了三種形式的if語句:不含else的if語句、if~else語句和if~else~if語句。1.不含else的if語句(1)語句形式如下:if(表達式)語句圓括號中的表達式一般是關(guān)系表達式或邏輯表達式,用于描述選擇結(jié)構(gòu)的條件,但也可以是其他任意的數(shù)值類型表達式,包括整型、實型、字符型等。如果在if子句中需要多個語句,則應(yīng)該使用大括號“{}”把一組語句組成復(fù)合語句。(2)執(zhí)行過程首先計算if后面圓括號中的表達式的值,若為非0值,則執(zhí)行語句1,然后脫離本選擇結(jié)構(gòu),繼續(xù)執(zhí)行if語句的下一個語句;否則不執(zhí)行語句1,直接轉(zhuǎn)去執(zhí)行if語句的下一個語句。圖4-1if語句程序流程圖圖4.2if-else語句執(zhí)行過程if-else語句(1)語法形式如下:if(表達式)語句1;else語句2;語句1稱為if子句,語句2稱為else子句,這些子句只允許是一條語句,若需要多條語句時,則應(yīng)該使用“{}”將這些語句括起來組成復(fù)合語句。另外要注意,else不是一條獨立的語句,它只是if語句的一部分,因此在程序中else必須與if配對。(2)執(zhí)行過程首先計算圓括號內(nèi)的表達式值,若為非0值,則執(zhí)行語句1,然后脫離本選擇結(jié)構(gòu),繼續(xù)執(zhí)行if語句的下一個語句;否則執(zhí)行語句2,然后脫離本選擇結(jié)構(gòu),繼續(xù)執(zhí)行if語句的下一個語句。if-else-if語句(1)語法形式如下:if(表達式1)語句1;elseif(表達式2)語句2;elseif(表達式3)語句3; elseif(表達式n-1)語句n-1;else語句n;(2)執(zhí)行過程)若表達式1為真執(zhí)行語句1,否則進行下一步判斷;為真,若表達式為真,執(zhí)行語句,否則進行下一步判斷;若表達式2為真執(zhí)行語句2,否則進行下一步判斷;為真,達式為真,執(zhí)行語句,否則進行下一步判斷;??;最后;所有表達式都為假時,執(zhí)行語句n。所有表達式都為假時,執(zhí)行語句。if-else-if語句的執(zhí)行過程語句的執(zhí)行過程如圖4-3所示所示。如圖所示。不易錯。出晰,而且能使條件書寫捷,簡寫。這樣做不僅使程序條理清的條件一定要按照某種順序書語句時,※※※※重點提示:使用if~else~ifif~else~ifif~else~ifif~else~if4.2.2嵌套的if語句在if語句中又包含一個或多個if語句稱為if語句的嵌套。以下是C語言中if~else語句的二重嵌套的三種形式。(1)在if子句中嵌套具有else子句的if語句,如圖4.4(a)所示(2)在if子句中嵌套不含else子句的if語句,如圖4.4(b)所示(3)在else子句中嵌套if語句,如圖4.4(c)所示。圖4.4嵌套的if語句結(jié)構(gòu)如果把嵌套寫成如下形式:if(表達式1)if(表達式2)語句1;else語句2;程序設(shè)計者把else與第一個if書寫在同一列,試圖以此表示它們的匹配的。但是,根據(jù)if和else配對規(guī)則,else卻是與第二個if配對(因為離它最近)。由此可見,C語言不是以書寫格式來分隔語句的,而是由邏輯關(guān)系決定的。當(dāng)if和else的數(shù)目不等時,為了保險起見,也可以用一對大括號括起來確定配對關(guān)系??勺魅缦绿幚恚篿f(表達式1){if(表達式2)語句1; }else語句2;例如:從鍵盤輸入兩個整數(shù),試比較它們的大小。main(){inta,b;printf("Pleaseentertwointegers:\n");scanf("%d,%d",&a,&b);if(a!=b)if(a>b)printf("%d>%d\n",a,b);elseprintf("%d<%d\n",a,b);elseprintf("%d==%d\n",a,b);}程序運行結(jié)果為:Pleaseentertwointegers:3,57<回車>3<57Pleaseentertwointegers:9,-6<回車>9>-6Pleaseentertwointegers:456,456<回車>456==456里層的if~else語句是外層條件語句if下的嵌套語句,它雖然占據(jù)多個書寫行,卻不是復(fù)合語句,可以作為一個語句看待,因此無須用一對大括號括起來。重點提示:在嵌套內(nèi)的if語句既可以是if語句形式也可※重點提示以是if~else語句形式,這就會出現(xiàn)多個if和多個else重疊的情況。此時要特別注意if和else的配對問題。if和else配對規(guī)則為:else總是與它前一個最近的if配對。條件表達式構(gòu)成的選擇結(jié)構(gòu)對于有些選擇分支結(jié)構(gòu),C語言另外還提供了一個特殊的運算符——條件運算符,由此構(gòu)成的表達式也可以形成簡單的選擇結(jié)構(gòu),這種選擇結(jié)構(gòu)能以表達式的形式內(nèi)嵌在允許出現(xiàn)表達式的地方,使得可以根據(jù)不同的條件使用不同的數(shù)據(jù)參與運算。1.條件運算符條件運算符由兩個符號“?”和“:”組成,要求有3個操作對象,稱三目(元)運算符,它是C語言中唯一的三目運算符。2.條件表達式條件表達式的一般形式為:表達式1?表達式2:表達式3它的執(zhí)行過程如圖4.5所示。以下是幾點說明:(1)通過情況下,表達式1是關(guān)系表達式或邏輯表達式,用于描述條件表達式中的條件,表達式2和表達式3可以是常量、變量或表達式。(2)條件表達式的執(zhí)行順序為:先求解表達式1,若值為非0,表示條件為真,則求解表達式2,此時表達式2的值就作為整個條件表達式的值;若表達式1的值為0,表示條件為假,則求解表達式3,表達式3的值就是整個條件表達式的值。(3)在程序中,通過把條件表達式的值直接賦予某個變量。例如:min=(aO?l:x〈O?-l:O上述條件表達式中,表達式3部分又是一個條件表達式。根據(jù)條件表達式的結(jié)合性,上述條件表達式等價于:x>0?1:(x〈0?-1:0)。其作用是判斷x的符號情況。當(dāng)x為正數(shù)時,該條件表達式的值為1;當(dāng)x為負數(shù)時,該條件表達式的值為-1;當(dāng)x為0時,該條件表達式的值為0。 (7)條件表達式不能取代一般的if語句,僅當(dāng)if語句中內(nèi)嵌的語句為賦值語句(且兩個分支都給同一變量賦值)時才能代替if語句。(8)表達式1、表達式2、表達式3的類型可以不同。此時條件表達式的值的類型為它們中較高的類型?!攸c提示:條件表達式的執(zhí)行順序為:先求解表達重點提示式1,若值為非0,則此時表達式2的值就作為整個條件表達式的值;反之,則表達式3的值就是整個條件表達式的值。switch語句以及用switch語句和break語句構(gòu)成的選擇結(jié)構(gòu)4.4.1switch語句通過前面的討論我們知道,if語句處理兩個分支,處理多個分支時需使用if~else~if結(jié)構(gòu),但如果分支較多,則嵌套的if語句層數(shù)就越多,程序不但冗長而且理解也比較困難。因此,C語言又提供了一種專門用于處理多分支結(jié)構(gòu)的條件選擇語句,稱為switch語句,又稱開關(guān)語句。使用switch語句直接處理多個分支(當(dāng)然包括兩個分支)。其一般形式為:switch(表達式){case常量表達式1:語句1;break;case常量表達式2:語句2;break;??case常量表達式n:語句n;break;default:語句n+1;break;}說明:(1)switch、case、break、default均為C語言的保留字。(2)swich的表達式通常是一個整型或字符型變量,也允許是枚舉型變量,其結(jié)果為相應(yīng)的整數(shù)、字符或枚舉常量。(3)常量表達式又稱為開關(guān)常數(shù),必須是與表達式對應(yīng)一致的整數(shù)、字符或枚舉常量。(4)語句1至語句n,可以是簡單語句,也可以是復(fù)合語句。(5)在關(guān)鍵字case和常量表達式之間一定要有空格。重點提示:在switch語句中,default以及break是%重點提示可以有也可以沒有的,且case語句標(biāo)號后的語句也可以省略不寫。4.4.2switch執(zhí)行過程switch語句的執(zhí)行流程是:首先計算switch后面圓括號中表達式的值,然后用其結(jié)果依次與各個case的常量表達式相比較,若圓括號中表達式的值與某個case后面的常量表達式的值相等,就執(zhí)行此case后面的語句,執(zhí)行后遇break語句就退casebreak出switch語句;若圓括號中表達式的值與所有case后面的常量表達式的值都不相同,則執(zhí)行default后面的語句n+1,執(zhí)行后退出switch語句,退出后程序流程轉(zhuǎn)向開關(guān)語句的下一個語句。圖4.6switch語句的執(zhí)行過程例如,下面的switch語句可以根據(jù)鍵入考試成績的等級(grade。輸出百分制分?jǐn)?shù)段:鍵入'A',輸出85?100鍵入'B',輸出70?84鍵入其他任意字符,輸出errorswitch(grade){case'A':printf("85?100\n");break;case'B':printf("70?84\n");break;default:printf("error\n");}注意:(1)在switch~case語句中,各個case常量表達式不一定要按其值的大小順序來書寫語句,但要求各個case后的常量表達式必須是不同的值,以保證分支選擇的唯一性。例如:switch(ch){case'A':語句1;break;case'B':語句2;break;case'A':語句2;break;default:語句3;}該例中前2個case語句都是合法的,當(dāng)變量ch取'A'、’B'時,分別執(zhí)行語句1、2,但最后一條case語句與第一條case語句的常量表達式的值相同,這是不允許的。(2)如果在case后面包含多條執(zhí)行語句時,也不需要加大括號,進入某個case后,會自動順序執(zhí)行本case后面的所有執(zhí)行語句。(3)default總是放在最后,這時,default后不需要break語句。并且,default部分也不是必須的,如果沒有這一部分,當(dāng)switch后面圓括號中表達式的值與所有case后面的常量表達式的值都不相等時,則不執(zhí)行任何一個分支直接退出switch語句。此時,switch語句相當(dāng)于一個空語句。例如,將上面例子中switch語句中的default部分去掉,則當(dāng)輸入的字符不是“A”、“B”、時,此switch語句中的任何一條語句也不被執(zhí)行。在switch~case語句中,多個case可以共用一條執(zhí)行語句,例如:case'A':case'B':printf("〉60\n");break;在A、B兩種情況下,均執(zhí)行相同的語句,即輸出“〉60”。(5)在switch語句中,只有最后一個分支(default)中的break語句的存在于否不影響執(zhí)行結(jié)果。因為沒有這個break語句,執(zhí)行該分支的所有語句后也會自動退出switch語句。而其余各分
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年內(nèi)蒙古錫林郭勒盟單招職業(yè)傾向性測試題庫及參考答案詳解1套
- 2026年湖北城市建設(shè)職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性考試題庫含答案詳解
- 惠州公務(wù)員面試題及答案
- 太原社工面試題目及答案
- 如皋中醫(yī)院面試題及答案
- 2025年武漢某初級中學(xué)招聘骨干教師6人備考題庫及參考答案詳解
- 2025年民生銀行深圳分行社會招聘備考題庫及一套完整答案詳解
- 2025年凱里市華鑫高級中學(xué)教師招聘備考題庫及參考答案詳解一套
- 2025年浙江大學(xué)愛丁堡大學(xué)聯(lián)合學(xué)院方兆元課題組科研助理招聘備考題庫及一套參考答案詳解
- 江西省水務(wù)集團有限公司2025年第三批社會招聘備考題庫及一套參考答案詳解
- 模切機個人工作總結(jié)
- 尿道損傷教學(xué)查房
- 北師大版九年級中考數(shù)學(xué)模擬試卷(含答案)
- 《寢室夜話》(4人)年會晚會搞笑小品劇本臺詞
- 三國殺游戲介紹課件
- 開放大學(xué)土木工程力學(xué)(本)模擬題(1-3)答案
- 醫(yī)療機構(gòu)遠程醫(yī)療服務(wù)實施管理辦法
- 【教學(xué)課件】謀求互利共贏-精品課件
- 情感性精神障礙護理課件
- 從投入產(chǎn)出表剖析進出口貿(mào)易結(jié)構(gòu)
- 偏微分方程的數(shù)值解法課后習(xí)習(xí)題答案
評論
0/150
提交評論