C語言入門基礎(chǔ)選擇結(jié)構(gòu)_第1頁
C語言入門基礎(chǔ)選擇結(jié)構(gòu)_第2頁
C語言入門基礎(chǔ)選擇結(jié)構(gòu)_第3頁
C語言入門基礎(chǔ)選擇結(jié)構(gòu)_第4頁
C語言入門基礎(chǔ)選擇結(jié)構(gòu)_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、聯(lián)系方式:http:/北京源智天下科技有限公司第第6 6章章 選擇結(jié)構(gòu)選擇結(jié)構(gòu)前幾章介紹了前幾章介紹了C語言的幾個基本要素語言的幾個基本要素(變量、常量、數(shù)據(jù)類型變量、常量、數(shù)據(jù)類型、語句、操作符和表達式、語句、操作符和表達式),本章和第,本章和第7章將介紹章將介紹C語言中語言中的基本程序結(jié)構(gòu)。在第的基本程序結(jié)構(gòu)。在第1章關(guān)于程序基礎(chǔ)知識的介紹中,章關(guān)于程序基礎(chǔ)知識的介紹中,已經(jīng)討論了三種基本結(jié)構(gòu)。已經(jīng)討論了三種基本結(jié)構(gòu)。在前幾章的范例中接觸到的程序基本都屬于順序結(jié)構(gòu),本章在前幾章的范例中接觸到的程序基本都屬于順序結(jié)構(gòu),本章將先討論選擇結(jié)構(gòu)的使用。將先討論選擇結(jié)構(gòu)的使用。C語言提供了多種手段來

2、實現(xiàn)語言提供了多種手段來實現(xiàn)選擇結(jié)構(gòu):選擇結(jié)構(gòu):if語句、語句、switch語句、條件表達式和邏輯表達語句、條件表達式和邏輯表達式。它們各有優(yōu)劣和適用的場景。通過本章的學(xué)習(xí),需式。它們各有優(yōu)劣和適用的場景。通過本章的學(xué)習(xí),需要掌握以下內(nèi)容:要掌握以下內(nèi)容:聯(lián)系方式:http:/北京源智天下科技有限公司第第6 6章章 選擇結(jié)構(gòu)選擇結(jié)構(gòu)if語句三種形式的使用;語句三種形式的使用;使用使用switch語句實現(xiàn)多路選擇結(jié)構(gòu);語句實現(xiàn)多路選擇結(jié)構(gòu);else if結(jié)構(gòu)和結(jié)構(gòu)和switch語句的使用范圍;語句的使用范圍;條件表達式的使用,以及與條件表達式的使用,以及與if語句的比較;語句的比較;邏輯表達式的

3、隱式選擇。邏輯表達式的隱式選擇。聯(lián)系方式:http:/北京源智天下科技有限公司6.1 if6.1 if語句語句if語句是語句是C語言中實現(xiàn)選擇結(jié)構(gòu)最常用的方式。當(dāng)語言中實現(xiàn)選擇結(jié)構(gòu)最常用的方式。當(dāng)if語句和語句和else語句組合時候時,可以實現(xiàn)更靈活更復(fù)雜的選擇結(jié)語句組合時候時,可以實現(xiàn)更靈活更復(fù)雜的選擇結(jié)構(gòu)。學(xué)會熟練地使用構(gòu)。學(xué)會熟練地使用if語句是語句是C編程的基礎(chǔ)。本小節(jié)將討編程的基礎(chǔ)。本小節(jié)將討論如何使用論如何使用if語句來實現(xiàn)選擇結(jié)構(gòu),已經(jīng)使用中需要注意語句來實現(xiàn)選擇結(jié)構(gòu),已經(jīng)使用中需要注意的問題。的問題。聯(lián)系方式:http:/北京源智天下科技有限公司if語句的功能是根據(jù)一個條件判斷

4、的結(jié)果選擇執(zhí)行某一分支語句的功能是根據(jù)一個條件判斷的結(jié)果選擇執(zhí)行某一分支。if語句可以分為兩個部分:語句可以分為兩個部分:if頭和頭和if體。體。if頭由關(guān)鍵字頭由關(guān)鍵字if和包含在括號中的表達式組成。和包含在括號中的表達式組成。if體由一個語句或一個復(fù)體由一個語句或一個復(fù)合語句組成。例如:合語句組成。例如:if (判斷表達式判斷表達式 ) /* if頭頭 */操作操作1;/* if體體 */操作操作2;聯(lián)系方式:http:/北京源智天下科技有限公司if語句經(jīng)常和語句經(jīng)常和else語句組合使用。語句組合使用。else語句也由兩部分:語句也由兩部分:else頭和頭和else體。關(guān)鍵字體。關(guān)鍵字i

5、f和關(guān)鍵字和關(guān)鍵字else搭配使用的標(biāo)準(zhǔn)形式如下:搭配使用的標(biāo)準(zhǔn)形式如下:if (判斷表達式判斷表達式 ) 操作操作1; else /* else頭頭*/操作操作2;/* else 體體*/合理地組合合理地組合if語句和語句和else語句,可以實現(xiàn)以下三種選擇結(jié)構(gòu)。語句,可以實現(xiàn)以下三種選擇結(jié)構(gòu)。聯(lián)系方式:http:/北京源智天下科技有限公司1if結(jié)構(gòu)結(jié)構(gòu)if ( 表達式表達式 ) 操作操作1;該結(jié)構(gòu)的程序流程圖如右圖所示。該結(jié)構(gòu)的程序流程圖如右圖所示。聯(lián)系方式:http:/北京源智天下科技有限公司2if-else結(jié)構(gòu)結(jié)構(gòu)if ( 表達式表達式 ) 操作操作1; else 操作操作2;if-e

6、lse結(jié)構(gòu)的程序執(zhí)行流程圖如右圖所示。結(jié)構(gòu)的程序執(zhí)行流程圖如右圖所示。聯(lián)系方式:http:/北京源智天下科技有限公司3else if結(jié)構(gòu)結(jié)構(gòu)if ( 表達式表達式1 ) 執(zhí)行操作執(zhí)行操作1; else if ( 表達式表達式2 )執(zhí)行操作執(zhí)行操作2; else if ( 表達式表達式3 )執(zhí)行操作執(zhí)行操作3;/*在這里允許有任意多個在這里允許有任意多個else if語句語句*/ else 執(zhí)行操作執(zhí)行操作4;聯(lián)系方式:http:/北京源智天下科技有限公司該結(jié)構(gòu)實現(xiàn)了多路分支結(jié)構(gòu),其中可以有任意多個該結(jié)構(gòu)實現(xiàn)了多路分支結(jié)構(gòu),其中可以有任意多個else if語句,語句,每一個每一個else if都

7、是一路程序分支。其程序流程圖如下圖所示。都是一路程序分支。其程序流程圖如下圖所示。聯(lián)系方式:http:/北京源智天下科技有限公司else if結(jié)構(gòu)實際上是結(jié)構(gòu)實際上是if-else結(jié)構(gòu)的變種,可以其改寫為結(jié)構(gòu)的變種,可以其改寫為if-else結(jié)構(gòu)(為了結(jié)構(gòu)(為了簡化,程序只包含一個簡化,程序只包含一個else if):):if ( 表達式表達式1 ) 執(zhí)行操作執(zhí)行操作1; else /* 以下全部內(nèi)容為第一個以下全部內(nèi)容為第一個else的的else體體 */if ( 表達式表達式2 )執(zhí)行操作執(zhí)行操作2; else if ( 表達式表達式3 ) 執(zhí)行操作執(zhí)行操作3; else 執(zhí)行操作執(zhí)行操作

8、4;聯(lián)系方式:http:/北京源智天下科技有限公司關(guān)鍵字關(guān)鍵字else與與if的組合使用可以實現(xiàn)多種豐富的選擇結(jié)構(gòu)。的組合使用可以實現(xiàn)多種豐富的選擇結(jié)構(gòu)。但在當(dāng)程序中使用但在當(dāng)程序中使用else語句時,務(wù)必保證關(guān)鍵字語句時,務(wù)必保證關(guān)鍵字else必須必須存在一個正確配對的存在一個正確配對的if。當(dāng)。當(dāng)if體或體或else體中嵌套使用體中嵌套使用if語句語句的三種形式時,的三種形式時,else和和if的配對情況會變得復(fù)雜,若不細的配對情況會變得復(fù)雜,若不細心處理,就有可能發(fā)生錯誤。心處理,就有可能發(fā)生錯誤。聯(lián)系方式:http:/北京源智天下科技有限公司在一個選擇結(jié)構(gòu)中,如果有多個分支,而各分支的

9、關(guān)系是不在一個選擇結(jié)構(gòu)中,如果有多個分支,而各分支的關(guān)系是不平等的,則按照思維邏輯的習(xí)慣可以將分支按重要性或平等的,則按照思維邏輯的習(xí)慣可以將分支按重要性或優(yōu)先級的順序從高到低排放。而在優(yōu)先級的順序從高到低排放。而在if-else結(jié)構(gòu)中,如果兩結(jié)構(gòu)中,如果兩個分支不是平等的,請按照邏輯思維習(xí)慣,把重要的或個分支不是平等的,請按照邏輯思維習(xí)慣,把重要的或者正常的分支處理放在者正常的分支處理放在if體里,即當(dāng)體里,即當(dāng)if頭的選擇表達式為頭的選擇表達式為真時進入的分支是重要的或者正常的;而次要的或者異真時進入的分支是重要的或者正常的;而次要的或者異常的分支處理放在常的分支處理放在else體。如果是

10、多路分支選擇結(jié)構(gòu),體。如果是多路分支選擇結(jié)構(gòu),一般按分支的重要性依次向后排列。一般按分支的重要性依次向后排列。聯(lián)系方式:http:/北京源智天下科技有限公司賦值操作符賦值操作符=與等于操作符與等于操作符=只相差一個等號,前者多寫一只相差一個等號,前者多寫一個等號就變成后者,而后者少寫一個等號也變成前者。個等號就變成后者,而后者少寫一個等號也變成前者。這種錯誤在編程中十分常見。而且,這兩種都是合法的這種錯誤在編程中十分常見。而且,這兩種都是合法的寫法,編譯器無法自動檢測。如果這種錯誤出現(xiàn)在寫法,編譯器無法自動檢測。如果這種錯誤出現(xiàn)在if語句語句的判斷表達式中,很可能出現(xiàn)期望外的邏輯完全不一樣的判

11、斷表達式中,很可能出現(xiàn)期望外的邏輯完全不一樣的程序。因此,編程時必須特別小心。下面的范例討論的程序。因此,編程時必須特別小心。下面的范例討論了這種錯誤的危險,并討論一種防范這種錯誤的措施。了這種錯誤的危險,并討論一種防范這種錯誤的措施。聯(lián)系方式:http:/北京源智天下科技有限公司6.2 switch6.2 switch語句語句switch語句是語句是C語言中選擇結(jié)構(gòu)的另一個常用的實現(xiàn)方式,語言中選擇結(jié)構(gòu)的另一個常用的實現(xiàn)方式,十分適用于多路選擇的實現(xiàn)。本小節(jié)將討論十分適用于多路選擇的實現(xiàn)。本小節(jié)將討論switch結(jié)構(gòu)結(jié)構(gòu)的使用和的使用和break語句在語句在switch結(jié)構(gòu)中的作用,同時還比

12、較結(jié)構(gòu)中的作用,同時還比較了了switch結(jié)構(gòu)和結(jié)構(gòu)和if-else結(jié)構(gòu)在實現(xiàn)多路選擇中的優(yōu)劣,結(jié)構(gòu)在實現(xiàn)多路選擇中的優(yōu)劣,最后還介紹了標(biāo)號的使用。最后還介紹了標(biāo)號的使用。聯(lián)系方式:http:/北京源智天下科技有限公司switch語句的標(biāo)準(zhǔn)形式如下:語句的標(biāo)準(zhǔn)形式如下:switch ( 判斷表達式判斷表達式 ) /* switch頭,下面為頭,下面為switch體體 */case 常量表達式常量表達式1: 操作操作1;/* 分支分支1 */case 常量表達式常量表達式2: 操作操作2;/* 分支分支2 */case 常量表達式常量表達式3: 操作操作3;/* 分支分支3 */default:

13、 操作操作n;/* 異常情況異常情況 */聯(lián)系方式:http:/北京源智天下科技有限公司break語句在語句在switch語句中的作用十分重要。在語句中的作用十分重要。在switch語句語句中,遇到中,遇到break便終止執(zhí)行便終止執(zhí)行switch語句,跳出本層語句,跳出本層switch體,繼續(xù)執(zhí)行后續(xù)語句。正確使用體,繼續(xù)執(zhí)行后續(xù)語句。正確使用break語句與語句與case語句語句和合理搭配,可以實現(xiàn)功能強大的多路選擇功能。和合理搭配,可以實現(xiàn)功能強大的多路選擇功能。聯(lián)系方式:http:/北京源智天下科技有限公司比較例比較例6-1和例和例6-4,讀者會發(fā)現(xiàn),讀者會發(fā)現(xiàn)else if語句和語句

14、和switch語句都語句都適合用在多路選擇的場景中。那么,他們的區(qū)別是什么適合用在多路選擇的場景中。那么,他們的區(qū)別是什么呢?呢? 整數(shù)或值為整數(shù)的表達式都可以構(gòu)造成具有有效布爾值的表整數(shù)或值為整數(shù)的表達式都可以構(gòu)造成具有有效布爾值的表達式,所以所有的達式,所以所有的switch語句都可以轉(zhuǎn)化為語句都可以轉(zhuǎn)化為else if語句。語句。然而,大多數(shù)的情況下,這種轉(zhuǎn)化只會降低效率,是不然而,大多數(shù)的情況下,這種轉(zhuǎn)化只會降低效率,是不能帶來任何好處的。所以,使用能帶來任何好處的。所以,使用switch語句實現(xiàn)多路選語句實現(xiàn)多路選擇結(jié)構(gòu)比使用擇結(jié)構(gòu)比使用if-else語句更有優(yōu)勢。如果能使用語句更有

15、優(yōu)勢。如果能使用switch語句,應(yīng)該首先選擇語句,應(yīng)該首先選擇switch語句。語句。聯(lián)系方式:http:/北京源智天下科技有限公司在在switch語句中,涉及到了兩種標(biāo)號:語句中,涉及到了兩種標(biāo)號:case標(biāo)號和標(biāo)號和default標(biāo)號。標(biāo)號本身的存在不會改變程序的流程,但與跳轉(zhuǎn)標(biāo)號。標(biāo)號本身的存在不會改變程序的流程,但與跳轉(zhuǎn)主體(主體(switch與與goto,后面章節(jié)會介紹,后面章節(jié)會介紹goto語句)搭配語句)搭配時,標(biāo)號的存在會產(chǎn)生不同的執(zhí)行過程。時,標(biāo)號的存在會產(chǎn)生不同的執(zhí)行過程。聯(lián)系方式:http:/北京源智天下科技有限公司具名具名常量,顧名思義就是有名字的常量,它是常量,顧名

16、思義就是有名字的常量,它是C語言中宏定語言中宏定義的一種用途,屬于預(yù)處理命令,是在程序編譯前(預(yù)義的一種用途,屬于預(yù)處理命令,是在程序編譯前(預(yù)處理)進行的工作。在處理)進行的工作。在“預(yù)處理預(yù)處理”一章中會詳細討論預(yù)一章中會詳細討論預(yù)處理的用法和功能。具名常量的定義由三部分組成:處理的用法和功能。具名常量的定義由三部分組成:#define、具名常量和數(shù)值。其標(biāo)準(zhǔn)形式如下:、具名常量和數(shù)值。其標(biāo)準(zhǔn)形式如下:#define 具名常量具名常量 數(shù)值常量數(shù)值常量聯(lián)系方式:http:/北京源智天下科技有限公司6.3 6.3 條件操作符與條件表達式條件操作符與條件表達式條件操作符是條件操作符是C語言中唯

17、一的三元操作符,由條件操作符組語言中唯一的三元操作符,由條件操作符組成的條件表達式可以實現(xiàn)簡單的選擇結(jié)構(gòu)。由于整個選成的條件表達式可以實現(xiàn)簡單的選擇結(jié)構(gòu)。由于整個選擇結(jié)構(gòu)都實現(xiàn)在一條語句中,限制了條件表達式的功能擇結(jié)構(gòu)都實現(xiàn)在一條語句中,限制了條件表達式的功能,但也因此使其更適用于實現(xiàn)比較簡單的選擇控制結(jié)構(gòu),但也因此使其更適用于實現(xiàn)比較簡單的選擇控制結(jié)構(gòu)。本小節(jié)將先介紹條件操作符和條件表達式的使用,再。本小節(jié)將先介紹條件操作符和條件表達式的使用,再比較了條件表達式與比較了條件表達式與if-else結(jié)構(gòu)的優(yōu)劣,最后討論了條件結(jié)構(gòu)的優(yōu)劣,最后討論了條件表達式的類型轉(zhuǎn)換和嵌套使用。表達式的類型轉(zhuǎn)換和

18、嵌套使用。聯(lián)系方式:http:/北京源智天下科技有限公司條件表達式是通過使用條件操作符來實現(xiàn)的。條件操作符是條件表達式是通過使用條件操作符來實現(xiàn)的。條件操作符是個三元操作符,其標(biāo)準(zhǔn)形式如下:個三元操作符,其標(biāo)準(zhǔn)形式如下:表達式表達式1 ? 表達式表達式2 : 表達式表達式3;流程圖如右圖所示。流程圖如右圖所示。聯(lián)系方式:http:/北京源智天下科技有限公司不同點主要包括以下兩點:不同點主要包括以下兩點:條件表達式的表達式條件表達式的表達式2和表達式和表達式3都只能是一句語句,不能為都只能是一句語句,不能為復(fù)合表達式;而復(fù)合表達式;而if體和體和else體則可以為復(fù)合表達式。體則可以為復(fù)合表達式

19、。條件表達式仍可以作為其他表達式的子表達式。條件表達式仍可以作為其他表達式的子表達式。聯(lián)系方式:http:/北京源智天下科技有限公司在條件表達式中,第在條件表達式中,第2個表達式的值類型必須與第個表達式的值類型必須與第3個表達式個表達式的值類型相同。后兩個表達式的值該類型就是條件表達的值類型相同。后兩個表達式的值該類型就是條件表達式的值類型。如果兩個值類型不同,則需要進行類型轉(zhuǎn)式的值類型。如果兩個值類型不同,則需要進行類型轉(zhuǎn)換,其遵循的規(guī)則與數(shù)值運算中的類型轉(zhuǎn)換相同。換,其遵循的規(guī)則與數(shù)值運算中的類型轉(zhuǎn)換相同。聯(lián)系方式:http:/北京源智天下科技有限公司條件表達式可以嵌套使用,即把一個條件表

20、達式作為另一個條件表達式可以嵌套使用,即把一個條件表達式作為另一個條件表達式中的子表達式。例如,可以將范例條件表達式中的子表達式。例如,可以將范例6-7的的if-else結(jié)構(gòu)用條件表達式改寫如下:結(jié)構(gòu)用條件表達式改寫如下:(0 = i ? b : a) 0)? printf(b 0n): printf(b = a) /* a,b均為整型均為整型 */do something;在這個例子里,只有當(dāng)在這個例子里,只有當(dāng)a不等于不等于0時,才能作為除數(shù),時,才能作為除數(shù),b / a = a才才合法,這種情況下才執(zhí)行第二個表達式;如果合法,這種情況下才執(zhí)行第二個表達式;如果a等于等于0,則條件,則條件

21、表達式結(jié)束,值為表達式結(jié)束,值為0。上面的例子不能寫為:。上面的例子不能寫為:if (b / a = a) do something;這時,若這時,若a等于零,將出現(xiàn)錯誤。也不能寫為:等于零,將出現(xiàn)錯誤。也不能寫為:if (b / a = a & a != 0) do something;這也會產(chǎn)生錯誤,因為不管這也會產(chǎn)生錯誤,因為不管a是否為是否為0,都會執(zhí)行,都會執(zhí)行b / a。聯(lián)系方式:http:/北京源智天下科技有限公司2使用結(jié)構(gòu)體指針使用結(jié)構(gòu)體指針當(dāng)變量為結(jié)構(gòu)體指針時,若要訪問其成員,必須要保證該變當(dāng)變量為結(jié)構(gòu)體指針時,若要訪問其成員,必須要保證該變量指向一個實體(即不為量指

22、向一個實體(即不為NULL)。使用邏輯表達式可以)。使用邏輯表達式可以實現(xiàn)如下:實現(xiàn)如下:if (ptr & ptr-data = data) /* ptr 指向一個含有成員指向一個含有成員data的結(jié)構(gòu)體的結(jié)構(gòu)體 */do something;只有當(dāng)只有當(dāng)ptr不等于不等于0(或或NULL),ptr-data才合法。如果才合法。如果ptr不不等于等于0,執(zhí)行第二個表達式;如果,執(zhí)行第二個表達式;如果ptr等于等于0,則條件表達,則條件表達式結(jié)束,值為式結(jié)束,值為0。結(jié)構(gòu)體指針會在第。結(jié)構(gòu)體指針會在第18章中詳細討論。章中詳細討論。聯(lián)系方式:http:/北京源智天下科技有限公司3邏輯或

23、表達式的多條件判斷邏輯或表達式的多條件判斷下面這段代碼是范例下面這段代碼是范例6-5中的一段中的一段else if語句:語句: else if (4 = month/* 4月份月份 */| 6 = month/* 6月份月份 */| 9 = month/* 9月份月份 */| 11 = month)/* 11月份月份 */printf(there are 30 days in this month!n);聯(lián)系方式:http:/北京源智天下科技有限公司實現(xiàn)功能為:如果變量實現(xiàn)功能為:如果變量month等于等于4,6,9或或11時,程序打時,程序打印結(jié)果。這個結(jié)構(gòu)的印結(jié)果。這個結(jié)構(gòu)的if頭中含有頭

24、中含有4個判斷,但是當(dāng)個判斷,但是當(dāng)month等于等于4時,只執(zhí)行了一次判斷;當(dāng)時,只執(zhí)行了一次判斷;當(dāng)month等于等于6時,只執(zhí)時,只執(zhí)行了兩次判斷;當(dāng)行了兩次判斷;當(dāng)month等于等于9時,執(zhí)行三次判斷;其余時,執(zhí)行三次判斷;其余情況下才會執(zhí)行四次判斷。該代碼可以用情況下才會執(zhí)行四次判斷。該代碼可以用else if語句展開語句展開得到完全等效的語句,如下:得到完全等效的語句,如下:else if ( 4 = month ) /* 4月份月份 */printf(there are 30 days in this month!n);else if ( 6 = month ) /* 6月份月份 */printf(

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論