計算機二級C語言第4章選擇結構.ppt_第1頁
計算機二級C語言第4章選擇結構.ppt_第2頁
計算機二級C語言第4章選擇結構.ppt_第3頁
計算機二級C語言第4章選擇結構.ppt_第4頁
計算機二級C語言第4章選擇結構.ppt_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第4章 選擇結構,本章要點: 4.1 關系運算和邏輯運算 4.2 if語句和用if語句構成的選擇結構 4.3 條件表達式構成的選擇結構 4.4 switch語句以及用switch語句和break語句構成的選擇結構 4.5 語句標號和goto語句,4.1 關系運算和邏輯運算,4.1.1 C語言中的邏輯值 C語言中,參與邏輯運算的量為非零值或整數(shù)零,非零值和整數(shù)零分別表示運算量為“真”或“假”。邏輯運算的結果值,即邏輯表達式的值應該是一個邏輯值“真”或“假”。C語言編譯系統(tǒng)在給出邏輯運算結果時,以數(shù)值1代表“真”,以0代表“假”,但在判斷一個量是否為“真”時,以0代表“假”,以非0代表“真”。,4

2、.1.2 關系運算符和關系表達式 關系運算實際上就是“比較運算”,將兩個數(shù)進行比較,判斷比較的結果是否符合指定的條件。 1關系運算符 關于關系運算符的說明: (1)表4-1中前4種運算符(、=)的優(yōu)先級別相同,后兩種也相同。前4種優(yōu)先級別高于后兩種。如,“”優(yōu)先級別高于“!=”。 (2)關系運算符與算術運算符、賦值運算符的優(yōu)先級關系如下: 算術運算符(高)關系運算符(中)賦值運算符(低) 即:算術運算符優(yōu)先級別高于關系運算符,關系運算符優(yōu)先級別又高于賦值運算符。 (3)關系運算符的結合方向是“自左向右”。,C語言有六種關系運算符,如表4-1所示。 表4.1 C語言中的關系運算符,2關系表達式及

3、關系表達式的值 用關系運算符將兩個表達式(算術表達式、關系表達式、邏輯表達式、賦值表達式、字符表達式等)連接起來的式子,稱關系表達式。例如,a=b,a= =c等。 在C語言中,關系表達式的結果值為1或0。當關系表達式成立時,其結果值為1,否則,其值為0。若a=10,b=6,表達式a=b為“真“,其值為1。 當關系運算符兩邊的值類型不一致時,系統(tǒng)將自動進行轉換。轉換規(guī)則與雙目運算中的類型轉換規(guī)則相同。,關系運算示例:試求x=531的值。 分析:x=531相當于: x=(53)1 =11 =0 故x的值為0。 關系表達式主要用于選擇結構中的條件判斷。 重點提示:表示“等于”關系的運算符“= =”和

4、“不等于”關系的運算符“!=”與數(shù)學中的表示方法不同。在使用它們時請予以注意,以免寫錯關系運算符而導致錯誤的結果。例如,欲判斷x是否等于0,如果寫成:x=0就不是判斷x是否等于0的含義了,而成了把0賦值給變量x。正確的寫法應為:x= =0。,4.1.3 邏輯運算符和邏輯表達式 1C語言中的邏輯運算符 關系表達式只適于描述單一的條件,對于較復雜的復合條件就需要將若干個關系表達式連接起來才能描述,如描述“x大于0且不等于2”,就需要將兩個關系表達式x0和x!=2連接起來:x0 printf(Please enter two integers:n); scanf(%d,%d, ,程序運行結果為: P

5、lease enter two integers: 3,57 3 9-6 Please enter two integers: 456,456 456= =456 里層的ifelse語句是外層條件語句if下的嵌套語句,它雖然占據(jù)多個書寫行,卻不是復合語句,可以作為一個語句看待,因此無須用一對大括號括起來。 重點提示:在嵌套內的if語句既可以是if語句形式也可以是ifelse語句形式,這就會出現(xiàn)多個if和多個else重疊的情況。此時要特別注意if和else的配對問題。if和else配對規(guī)則為:else總是與它前一個最近的if配對。,4.3 條件表達式構成的選擇結構 對于有些選擇分支結構,C語言另

6、外還提供了一個特殊的運算符條件運算符,由此構成的表達式也可以形成簡單的選擇結構,這種選擇結構能以表達式的形式內嵌在允許出現(xiàn)表達式的地方,使得可以根據(jù)不同的條件使用不同的數(shù)據(jù)參與運算。,1條件運算符 條件運算符由兩個符號“?”和“:”組成,要求有3個操作對象,稱三目(元)運算符,它是C語言中唯一的三目運算符。 2條件表達式 條件表達式的一般形式為: 表達式1?表達式2:表達式3,它的執(zhí)行過程如圖4.5所示。以下是幾點說明: (1)通過情況下,表達式1是關系表達式或邏輯表達式,用于描述條件表達式中的條件,表達式2和表達式3可以是常量、變量或表達式。 (2)條件表達式的執(zhí)行順序為:先求解表達式1,若

7、值為非0,表示條件為真,則求解表達式2,此時表達式2的值就作為整個條件表達式的值;若表達式1的值為0,表示條件為假,則求解表達式3,表達式3的值就是整個條件表達式的值。,(3)在程序中,通過把條件表達式的值直接賦予某個變量。例如: min=(a0?1:x0?1:(x0?-1:0)。,其作用是判斷x的符號情況。當x為正數(shù)時,該條件表達式的值為1;當x為負數(shù)時,該條件表達式的值為-1;當x為0時,該條件表達式的值為0。 (7)條件表達式不能取代一般的if語句,僅當if語句中內嵌的語句為賦值語句(且兩個分支都給同一變量賦值)時才能代替if語句。 (8)表達式1、表達式2、表達式3的類型可以不同。此時

8、條件表達式的值的類型為它們中較高的類型。,重點提示:條件表達式的執(zhí)行順序為:先求解表達式1,若值為非0,則此時表達式2的值就作為整個條件表達式的值;反之,則表達式3的值就是整個條件表達式的值。,4.4 switch語句以及用switch語句和break語句構成的選擇結構,4.4.1 switch語句 通過前面的討論我們知道,if語句處理兩個分支,處理多個分支時需使用ifelseif結構,但如果分支較多,則嵌套的if語句層數(shù)就越多,程序不但冗長而且理解也比較困難。因此,C語言又提供了一種專門用于處理多分支結構的條件選擇語句,稱為switch語句,又稱開關語句。,使用switch語句直接處理多個分

9、支(當然包括兩個分支)。其一般形式為: 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的表達式通常是一個整型或字符型變量,也允許是枚舉型變量,其結果為相應的整數(shù)、字符或枚舉常量。 (3)常量表達式又稱為開關常數(shù),必須是與表達式對應一致的整數(shù)、字符或枚舉常量。 (4)語句1至語句n,可以是簡單語句,也可以是復合語句。 (5)在關鍵

10、字case和常量表達式之間一定要有空格。 重點提示:在switch語句中,default以及break是可以有也可以沒有的,且case語句標號后的語句也可以省略不寫。,4.4.2 switch執(zhí)行過程 switch語句的執(zhí)行流程是:首先計算switch后面圓括號中表達式的值,然后用其結果依次與各個case的常量表達式相比較,若圓括號中表達式的值與某個case后面的常量表達式的值相等,就執(zhí)行此case后面的語句,執(zhí)行后遇break語句就退出switch語句;若圓括號中表達式的值與所有case后面的常量表達式的值都不相同,則執(zhí)行default后面的語句n+1,執(zhí)行后退出switch語句,退出后程序

11、流程轉向開關語句的下一個語句。,圖4.6 switch語句的執(zhí)行過程,例如,下面的switch語句可以根據(jù)鍵入考試成績的等級(grade)輸出百分制分數(shù)段: 鍵入A,輸出85100 鍵入B,輸出7084 鍵入其他任意字符,輸出error switch (grade) caseA: printf(85100n); break; caseB: printf(7084n); break; default: printf(errorn);,注意: (1)在switchcase語句中,各個case常量表達式不一定要按其值的大小順序來書寫語句,但要求各個case后的常量表達式必須是不同的值,以保證分支選擇

12、的唯一性。例如: switch (ch) caseA: 語句1;break; caseB: 語句2;break; caseA: 語句2; break; default: 語句3; 該例中前2個case語句都是合法的,當變量ch取A、B時,分別執(zhí)行語句1、2,但最后一條case語句與第一條case語句的常量表達式的值相同,這是不允許的。,(2)如果在case后面包含多條執(zhí)行語句時,也不需要加大括號,進入某個case后,會自動順序執(zhí)行本case后面的所有執(zhí)行語句。 (3)default總是放在最后,這時,default后不需要break語句。并且,default部分也不是必須的,如果沒有這一部分,

13、當switch后面圓括號中表達式的值與所有case后面的常量表達式的值都不相等時,則不執(zhí)行任何一個分支直接退出switch語句。此時,switch語句相當于一個空語句。例如,將上面例子中switch語句中的default部分去掉,則當輸入的字符不是“A”、“B”、時,此switch語句中的任何一條語句也不被執(zhí)行。,(4)在switchcase語句中,多個case可以共用一條執(zhí)行語句,例如: case A: case B: printf(60n); break; 在A、B兩種情況下,均執(zhí)行相同的語句,即輸出“60”。 (5)在switch語句中,只有最后一個分支(default)中的break語

14、句的存在于否不影響執(zhí)行結果。因為沒有這個break語句,執(zhí)行該分支的所有語句后也會自動退出switch語句。而其余各分支中的break語句有與無時的流程是完全不同的。例如在上例中,如果caseA、B后面沒有break語句,則當grade=A時,程序從printf(85100n)開始執(zhí)行,輸出結果為: 85100 7084 error,這是因為case后面的常量表達式實際上只起語句標號作用,而不起條件判斷作用,即“只是開始執(zhí)行處的入口標號”。因此,一旦與switch后面圓括號中表達式的值匹配,就從此標號處開始執(zhí)行,而且執(zhí)行完一個case后面的語句后,若沒遇到break語句,就自動進入下一個cas

15、e繼續(xù)執(zhí)行,而不再判斷是否與之匹配,直到遇到break語句才停止執(zhí)行,退出break語句。因此,若想執(zhí)行一個case分支后立即跳出switch語句,就必須在此分支的最后添加一個break語句。 重點提示:在switch語句中,default總是放在最后,這時,default后不需要break語句。因此只有最后一個分支(default)中的break語句的存在于否不影響執(zhí)行結果。,4.5 語句標號和goto語句,4.5.1 語句標號 在C語言中,語句標號不必特殊加以定義,標號可以是任意合法的標識符,當在標識符后面加一個冒號,該標識符就成為一個語句標號。如student:等。注意,C語言中,語句標號必須是標識符,而不能是數(shù)值常量形式,標號可以和

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論