




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第4章 選擇結(jié)構(gòu),本章要點(diǎn): 4.1 關(guān)系運(yùn)算和邏輯運(yùn)算 4.2 if語(yǔ)句和用if語(yǔ)句構(gòu)成的選擇結(jié)構(gòu) 4.3 條件表達(dá)式構(gòu)成的選擇結(jié)構(gòu) 4.4 switch語(yǔ)句以及用switch語(yǔ)句和break語(yǔ)句構(gòu)成的選擇結(jié)構(gòu) 4.5 語(yǔ)句標(biāo)號(hào)和goto語(yǔ)句,4.1 關(guān)系運(yùn)算和邏輯運(yùn)算,4.1.1 C語(yǔ)言中的邏輯值 C語(yǔ)言中,參與邏輯運(yùn)算的量為非零值或整數(shù)零,非零值和整數(shù)零分別表示運(yùn)算量為“真”或“假”。邏輯運(yùn)算的結(jié)果值,即邏輯表達(dá)式的值應(yīng)該是一個(gè)邏輯值“真”或“假”。C語(yǔ)言編譯系統(tǒng)在給出邏輯運(yùn)算結(jié)果時(shí),以數(shù)值1代表“真”,以0代表“假”,但在判斷一個(gè)量是否為“真”時(shí),以0代表“假”,以非0代表“真”。,4
2、.1.2 關(guān)系運(yùn)算符和關(guān)系表達(dá)式 關(guān)系運(yùn)算實(shí)際上就是“比較運(yùn)算”,將兩個(gè)數(shù)進(jìn)行比較,判斷比較的結(jié)果是否符合指定的條件。 1關(guān)系運(yùn)算符 關(guān)于關(guān)系運(yùn)算符的說(shuō)明: (1)表4-1中前4種運(yùn)算符(、=)的優(yōu)先級(jí)別相同,后兩種也相同。前4種優(yōu)先級(jí)別高于后兩種。如,“”優(yōu)先級(jí)別高于“!=”。 (2)關(guān)系運(yùn)算符與算術(shù)運(yùn)算符、賦值運(yùn)算符的優(yōu)先級(jí)關(guān)系如下: 算術(shù)運(yùn)算符(高)關(guān)系運(yùn)算符(中)賦值運(yùn)算符(低) 即:算術(shù)運(yùn)算符優(yōu)先級(jí)別高于關(guān)系運(yùn)算符,關(guān)系運(yùn)算符優(yōu)先級(jí)別又高于賦值運(yùn)算符。 (3)關(guān)系運(yùn)算符的結(jié)合方向是“自左向右”。,C語(yǔ)言有六種關(guān)系運(yùn)算符,如表4-1所示。 表4.1 C語(yǔ)言中的關(guān)系運(yùn)算符,2關(guān)系表達(dá)式及
3、關(guān)系表達(dá)式的值 用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式(算術(shù)表達(dá)式、關(guān)系表達(dá)式、邏輯表達(dá)式、賦值表達(dá)式、字符表達(dá)式等)連接起來(lái)的式子,稱關(guān)系表達(dá)式。例如,a=b,a= =c等。 在C語(yǔ)言中,關(guān)系表達(dá)式的結(jié)果值為1或0。當(dāng)關(guān)系表達(dá)式成立時(shí),其結(jié)果值為1,否則,其值為0。若a=10,b=6,表達(dá)式a=b為“真“,其值為1。 當(dāng)關(guān)系運(yùn)算符兩邊的值類型不一致時(shí),系統(tǒng)將自動(dòng)進(jìn)行轉(zhuǎn)換。轉(zhuǎn)換規(guī)則與雙目運(yùn)算中的類型轉(zhuǎn)換規(guī)則相同。,關(guān)系運(yùn)算示例:試求x=531的值。 分析:x=531相當(dāng)于: x=(53)1 =11 =0 故x的值為0。 關(guān)系表達(dá)式主要用于選擇結(jié)構(gòu)中的條件判斷。 重點(diǎn)提示:表示“等于”關(guān)系的運(yùn)算符“= =”和
4、“不等于”關(guān)系的運(yùn)算符“!=”與數(shù)學(xué)中的表示方法不同。在使用它們時(shí)請(qǐng)予以注意,以免寫錯(cuò)關(guān)系運(yùn)算符而導(dǎo)致錯(cuò)誤的結(jié)果。例如,欲判斷x是否等于0,如果寫成:x=0就不是判斷x是否等于0的含義了,而成了把0賦值給變量x。正確的寫法應(yīng)為:x= =0。,4.1.3 邏輯運(yùn)算符和邏輯表達(dá)式 1C語(yǔ)言中的邏輯運(yùn)算符 關(guān)系表達(dá)式只適于描述單一的條件,對(duì)于較復(fù)雜的復(fù)合條件就需要將若干個(gè)關(guān)系表達(dá)式連接起來(lái)才能描述,如描述“x大于0且不等于2”,就需要將兩個(gè)關(guān)系表達(dá)式x0和x!=2連接起來(lái):x0 printf(Please enter two integers:n); scanf(%d,%d, ,程序運(yùn)行結(jié)果為: P
5、lease enter two integers: 3,57 3 9-6 Please enter two integers: 456,456 456= =456 里層的ifelse語(yǔ)句是外層條件語(yǔ)句if下的嵌套語(yǔ)句,它雖然占據(jù)多個(gè)書寫行,卻不是復(fù)合語(yǔ)句,可以作為一個(gè)語(yǔ)句看待,因此無(wú)須用一對(duì)大括號(hào)括起來(lái)。 重點(diǎn)提示:在嵌套內(nèi)的if語(yǔ)句既可以是if語(yǔ)句形式也可以是ifelse語(yǔ)句形式,這就會(huì)出現(xiàn)多個(gè)if和多個(gè)else重疊的情況。此時(shí)要特別注意if和else的配對(duì)問(wèn)題。if和else配對(duì)規(guī)則為:else總是與它前一個(gè)最近的if配對(duì)。,4.3 條件表達(dá)式構(gòu)成的選擇結(jié)構(gòu) 對(duì)于有些選擇分支結(jié)構(gòu),C語(yǔ)言另
6、外還提供了一個(gè)特殊的運(yùn)算符條件運(yùn)算符,由此構(gòu)成的表達(dá)式也可以形成簡(jiǎn)單的選擇結(jié)構(gòu),這種選擇結(jié)構(gòu)能以表達(dá)式的形式內(nèi)嵌在允許出現(xiàn)表達(dá)式的地方,使得可以根據(jù)不同的條件使用不同的數(shù)據(jù)參與運(yùn)算。,1條件運(yùn)算符 條件運(yùn)算符由兩個(gè)符號(hào)“?”和“:”組成,要求有3個(gè)操作對(duì)象,稱三目(元)運(yùn)算符,它是C語(yǔ)言中唯一的三目運(yùn)算符。 2條件表達(dá)式 條件表達(dá)式的一般形式為: 表達(dá)式1?表達(dá)式2:表達(dá)式3,它的執(zhí)行過(guò)程如圖4.5所示。以下是幾點(diǎn)說(shuō)明: (1)通過(guò)情況下,表達(dá)式1是關(guān)系表達(dá)式或邏輯表達(dá)式,用于描述條件表達(dá)式中的條件,表達(dá)式2和表達(dá)式3可以是常量、變量或表達(dá)式。 (2)條件表達(dá)式的執(zhí)行順序?yàn)椋合惹蠼獗磉_(dá)式1,若
7、值為非0,表示條件為真,則求解表達(dá)式2,此時(shí)表達(dá)式2的值就作為整個(gè)條件表達(dá)式的值;若表達(dá)式1的值為0,表示條件為假,則求解表達(dá)式3,表達(dá)式3的值就是整個(gè)條件表達(dá)式的值。,(3)在程序中,通過(guò)把條件表達(dá)式的值直接賦予某個(gè)變量。例如: min=(a0?1:x0?1:(x0?-1:0)。,其作用是判斷x的符號(hào)情況。當(dāng)x為正數(shù)時(shí),該條件表達(dá)式的值為1;當(dāng)x為負(fù)數(shù)時(shí),該條件表達(dá)式的值為-1;當(dāng)x為0時(shí),該條件表達(dá)式的值為0。 (7)條件表達(dá)式不能取代一般的if語(yǔ)句,僅當(dāng)if語(yǔ)句中內(nèi)嵌的語(yǔ)句為賦值語(yǔ)句(且兩個(gè)分支都給同一變量賦值)時(shí)才能代替if語(yǔ)句。 (8)表達(dá)式1、表達(dá)式2、表達(dá)式3的類型可以不同。此時(shí)
8、條件表達(dá)式的值的類型為它們中較高的類型。,重點(diǎn)提示:條件表達(dá)式的執(zhí)行順序?yàn)椋合惹蠼獗磉_(dá)式1,若值為非0,則此時(shí)表達(dá)式2的值就作為整個(gè)條件表達(dá)式的值;反之,則表達(dá)式3的值就是整個(gè)條件表達(dá)式的值。,4.4 switch語(yǔ)句以及用switch語(yǔ)句和break語(yǔ)句構(gòu)成的選擇結(jié)構(gòu),4.4.1 switch語(yǔ)句 通過(guò)前面的討論我們知道,if語(yǔ)句處理兩個(gè)分支,處理多個(gè)分支時(shí)需使用ifelseif結(jié)構(gòu),但如果分支較多,則嵌套的if語(yǔ)句層數(shù)就越多,程序不但冗長(zhǎng)而且理解也比較困難。因此,C語(yǔ)言又提供了一種專門用于處理多分支結(jié)構(gòu)的條件選擇語(yǔ)句,稱為switch語(yǔ)句,又稱開(kāi)關(guān)語(yǔ)句。,使用switch語(yǔ)句直接處理多個(gè)分
9、支(當(dāng)然包括兩個(gè)分支)。其一般形式為: switch(表達(dá)式) case 常量表達(dá)式1: 語(yǔ)句1;break; case 常量表達(dá)式2: 語(yǔ)句2;break; case 常量表達(dá)式n: 語(yǔ)句n;break; default: 語(yǔ)句n+1; break;,說(shuō)明: (1)switch、case、break、default均為C語(yǔ)言的保留字。 (2)swich的表達(dá)式通常是一個(gè)整型或字符型變量,也允許是枚舉型變量,其結(jié)果為相應(yīng)的整數(shù)、字符或枚舉常量。 (3)常量表達(dá)式又稱為開(kāi)關(guān)常數(shù),必須是與表達(dá)式對(duì)應(yīng)一致的整數(shù)、字符或枚舉常量。 (4)語(yǔ)句1至語(yǔ)句n,可以是簡(jiǎn)單語(yǔ)句,也可以是復(fù)合語(yǔ)句。 (5)在關(guān)鍵
10、字case和常量表達(dá)式之間一定要有空格。 重點(diǎn)提示:在switch語(yǔ)句中,default以及break是可以有也可以沒(méi)有的,且case語(yǔ)句標(biāo)號(hào)后的語(yǔ)句也可以省略不寫。,4.4.2 switch執(zhí)行過(guò)程 switch語(yǔ)句的執(zhí)行流程是:首先計(jì)算switch后面圓括號(hào)中表達(dá)式的值,然后用其結(jié)果依次與各個(gè)case的常量表達(dá)式相比較,若圓括號(hào)中表達(dá)式的值與某個(gè)case后面的常量表達(dá)式的值相等,就執(zhí)行此case后面的語(yǔ)句,執(zhí)行后遇break語(yǔ)句就退出switch語(yǔ)句;若圓括號(hào)中表達(dá)式的值與所有case后面的常量表達(dá)式的值都不相同,則執(zhí)行default后面的語(yǔ)句n+1,執(zhí)行后退出switch語(yǔ)句,退出后程序
11、流程轉(zhuǎn)向開(kāi)關(guān)語(yǔ)句的下一個(gè)語(yǔ)句。,圖4.6 switch語(yǔ)句的執(zhí)行過(guò)程,例如,下面的switch語(yǔ)句可以根據(jù)鍵入考試成績(jī)的等級(jí)(grade)輸出百分制分?jǐn)?shù)段: 鍵入A,輸出85100 鍵入B,輸出7084 鍵入其他任意字符,輸出error switch (grade) caseA: printf(85100n); break; caseB: printf(7084n); break; default: printf(errorn);,注意: (1)在switchcase語(yǔ)句中,各個(gè)case常量表達(dá)式不一定要按其值的大小順序來(lái)書寫語(yǔ)句,但要求各個(gè)case后的常量表達(dá)式必須是不同的值,以保證分支選擇
12、的唯一性。例如: switch (ch) caseA: 語(yǔ)句1;break; caseB: 語(yǔ)句2;break; caseA: 語(yǔ)句2; break; default: 語(yǔ)句3; 該例中前2個(gè)case語(yǔ)句都是合法的,當(dāng)變量ch取A、B時(shí),分別執(zhí)行語(yǔ)句1、2,但最后一條case語(yǔ)句與第一條case語(yǔ)句的常量表達(dá)式的值相同,這是不允許的。,(2)如果在case后面包含多條執(zhí)行語(yǔ)句時(shí),也不需要加大括號(hào),進(jìn)入某個(gè)case后,會(huì)自動(dòng)順序執(zhí)行本case后面的所有執(zhí)行語(yǔ)句。 (3)default總是放在最后,這時(shí),default后不需要break語(yǔ)句。并且,default部分也不是必須的,如果沒(méi)有這一部分,
13、當(dāng)switch后面圓括號(hào)中表達(dá)式的值與所有case后面的常量表達(dá)式的值都不相等時(shí),則不執(zhí)行任何一個(gè)分支直接退出switch語(yǔ)句。此時(shí),switch語(yǔ)句相當(dāng)于一個(gè)空語(yǔ)句。例如,將上面例子中switch語(yǔ)句中的default部分去掉,則當(dāng)輸入的字符不是“A”、“B”、時(shí),此switch語(yǔ)句中的任何一條語(yǔ)句也不被執(zhí)行。,(4)在switchcase語(yǔ)句中,多個(gè)case可以共用一條執(zhí)行語(yǔ)句,例如: case A: case B: printf(60n); break; 在A、B兩種情況下,均執(zhí)行相同的語(yǔ)句,即輸出“60”。 (5)在switch語(yǔ)句中,只有最后一個(gè)分支(default)中的break語(yǔ)
14、句的存在于否不影響執(zhí)行結(jié)果。因?yàn)闆](méi)有這個(gè)break語(yǔ)句,執(zhí)行該分支的所有語(yǔ)句后也會(huì)自動(dòng)退出switch語(yǔ)句。而其余各分支中的break語(yǔ)句有與無(wú)時(shí)的流程是完全不同的。例如在上例中,如果caseA、B后面沒(méi)有break語(yǔ)句,則當(dāng)grade=A時(shí),程序從printf(85100n)開(kāi)始執(zhí)行,輸出結(jié)果為: 85100 7084 error,這是因?yàn)閏ase后面的常量表達(dá)式實(shí)際上只起語(yǔ)句標(biāo)號(hào)作用,而不起條件判斷作用,即“只是開(kāi)始執(zhí)行處的入口標(biāo)號(hào)”。因此,一旦與switch后面圓括號(hào)中表達(dá)式的值匹配,就從此標(biāo)號(hào)處開(kāi)始執(zhí)行,而且執(zhí)行完一個(gè)case后面的語(yǔ)句后,若沒(méi)遇到break語(yǔ)句,就自動(dòng)進(jìn)入下一個(gè)cas
15、e繼續(xù)執(zhí)行,而不再判斷是否與之匹配,直到遇到break語(yǔ)句才停止執(zhí)行,退出break語(yǔ)句。因此,若想執(zhí)行一個(gè)case分支后立即跳出switch語(yǔ)句,就必須在此分支的最后添加一個(gè)break語(yǔ)句。 重點(diǎn)提示:在switch語(yǔ)句中,default總是放在最后,這時(shí),default后不需要break語(yǔ)句。因此只有最后一個(gè)分支(default)中的break語(yǔ)句的存在于否不影響執(zhí)行結(jié)果。,4.5 語(yǔ)句標(biāo)號(hào)和goto語(yǔ)句,4.5.1 語(yǔ)句標(biāo)號(hào) 在C語(yǔ)言中,語(yǔ)句標(biāo)號(hào)不必特殊加以定義,標(biāo)號(hào)可以是任意合法的標(biāo)識(shí)符,當(dāng)在標(biāo)識(shí)符后面加一個(gè)冒號(hào),該標(biāo)識(shí)符就成為一個(gè)語(yǔ)句標(biāo)號(hào)。如student:等。注意,C語(yǔ)言中,語(yǔ)句標(biāo)號(hào)必須是標(biāo)識(shí)符,而不能是數(shù)值常量形式,標(biāo)號(hào)可以和
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- T-ZZB 3633-2024 原液著色滌綸牽伸絲
- T-ZSM 0074-2024 餐飲業(yè)油煙排放在線監(jiān)測(cè)儀
- 二零二五年度旅游行業(yè)客服業(yè)務(wù)員雇傭服務(wù)協(xié)議
- 二零二五年度總經(jīng)理社會(huì)責(zé)任與公益慈善聘用協(xié)議
- 2025年度模特時(shí)尚活動(dòng)贊助商權(quán)益合作協(xié)議
- 二零二五年度荒山承包轉(zhuǎn)讓及林業(yè)資源開(kāi)發(fā)利用合同
- 二零二五年度學(xué)校事業(yè)單位校車司機(jī)勞動(dòng)合同
- 二零二五年度私人土地買賣合同案:森林資源開(kāi)發(fā)合作合同樣本
- 二零二五年度學(xué)生校園交通安全管理協(xié)議范本匯編
- 二零二五年度合作社職業(yè)經(jīng)理人鄉(xiāng)村振興聘用協(xié)議
- 主神空間兌換
- 《中外美術(shù)史》課件13外國(guó)美術(shù)史+中世紀(jì)美術(shù)
- 水電站生產(chǎn)準(zhǔn)備工作方案
- 《請(qǐng)給我結(jié)果》讀書心得-PPT課件
- HD7簡(jiǎn)明實(shí)用操作手冊(cè)
- S水電站引水建筑物設(shè)計(jì)
- 110kV軟母線及引連線施工方案
- 鼓譜——海闊天空
- CT報(bào)告單模板
- 足球比賽計(jì)分表(共6頁(yè))
- 軟件概要設(shè)計(jì)說(shuō)明書范例(共21頁(yè))
評(píng)論
0/150
提交評(píng)論