第七章 分支結(jié)構(gòu)程序設(shè)計_第1頁
第七章 分支結(jié)構(gòu)程序設(shè)計_第2頁
第七章 分支結(jié)構(gòu)程序設(shè)計_第3頁
第七章 分支結(jié)構(gòu)程序設(shè)計_第4頁
第七章 分支結(jié)構(gòu)程序設(shè)計_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 www.BJXY.cnC語言程序設(shè)計教學(xué)課題組語言程序設(shè)計教學(xué)課題組 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計l7.1 7.1 分支結(jié)構(gòu)概述分支結(jié)構(gòu)概述l7.2 if7.2 if語句語句l7.3 7.3 多分支結(jié)構(gòu)多分支結(jié)構(gòu)l7.4 7.4 單分支結(jié)構(gòu)單分支結(jié)構(gòu)l7.5 7.5 語句標號和語句標號和gotogoto語句語句l7.6 7.6 綜合程序舉例綜合程序舉例 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計1.1. 分支結(jié)構(gòu)的概念:根據(jù)給分支結(jié)構(gòu)的概念:根據(jù)給定條件是否成立而決定執(zhí)定條件是否成立而決定執(zhí)行不同步驟的算法結(jié)構(gòu)。行不同步驟的算法結(jié)構(gòu)。2.2. 基本模式:雙分支結(jié)構(gòu)和基本模式:雙分支

2、結(jié)構(gòu)和單分支結(jié)構(gòu)。單分支結(jié)構(gòu)。3.3. 執(zhí)行到分支結(jié)構(gòu)時,在兩執(zhí)行到分支結(jié)構(gòu)時,在兩條可能的路徑中,根據(jù)條條可能的路徑中,根據(jù)條件是否成立而選擇件是否成立而選擇其中一其中一條條執(zhí)行。執(zhí)行。7.1 分支結(jié)構(gòu)概述雙分支結(jié)構(gòu)雙分支結(jié)構(gòu)單分支結(jié)構(gòu)單分支結(jié)構(gòu) 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計 在現(xiàn)實生活中,需要進行判斷和選擇的情況是很多的,例如: 上完體育課,上完體育課,如果如果是上午最后一節(jié),下課是上午最后一節(jié),下課后去食堂吃飯;后去食堂吃飯;否則否則, ,進進教室上課。教室上課。 如果考試不及格,要補考如果考試不及格,要補考 如果遇到紅燈,要停車等待如果遇到紅燈,要停車等待 身高低于身高低于

3、1.31.3的兒童乘地鐵的兒童乘地鐵免票免票7.1 分支結(jié)構(gòu)概述 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計7.2 if語句 C語言的語言的if語句有以下兩種基本形式:語句有以下兩種基本形式:(1 1)if(if(表達式表達式) ) 語句語句 (2 2)if(if(表達式表達式) ) 語句語句1 1 else else 語句語句2 2/*含含else子句的子句的if語句語句*/*不含不含else子句的子句的if語句語句*/ 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計7.2.1 if語句 if(表達式表達式) 語句語句 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計 【例【例7-1】輸入兩個數(shù),】輸入兩個

4、數(shù),分別放入分別放入x和和y中,要求中,要求輸出其中的大數(shù)。輸出其中的大數(shù)。 7.2.1 if語句#includemain( )int x, y, max;printf(Enter x&y: );scanf(%d%d,&x,&y);printf(x=%d,y=%dn,x,y);max=x;if(xbab則將則將a a與與b b進行值交換,使得進行值交換,使得a a值為值為a a和和b b中的較小值;中的較小值; 接著將接著將a a和和c c進行比較,若進行比較,若acac則將則將a a與與c c進行值交換,此進行值交換,此時使得時使得a a值為值為a a 、b b和和c

5、 c中的最小值;中的最小值; 最后將最后將b b和和c c進行比較,若進行比較,若bcbc則將則將b b與與c c進行值交換,此進行值交換,此時使得時使得b b值為值為b b和和c c中的較小值,且中的較小值,且c c值為最大值。值為最大值。7.2.1 if語句 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計7.2.1 if語句#includevoid main( ) int a, b, c, t;printf(input a,b,c:);scanf(%d%d%d,&a,&b,&c);printf(a=%d,b=%d,c=%dn,a,b,c);if (ab) t=a; a=b

6、; b=t; if (ac) t=a; a=c; c=t; if (bc) t=b; b=c; c=t; printf(%d,%d,%dn,a,b,c);【程序分析【程序分析】 以上程序無論給以上程序無論給a a、b b和和c c輸入什么數(shù),輸入什么數(shù),最后總是把最小數(shù)放在最后總是把最小數(shù)放在a a中,把最大數(shù)中,把最大數(shù)放在放在c c中。當(dāng)然,此題稍做變化,如不中。當(dāng)然,此題稍做變化,如不改變輸入改變輸入a a、b b、c c的值,而通過改變輸?shù)闹?,而通過改變輸出的出的a a、b b、c c的順序來實現(xiàn)對輸入數(shù)據(jù)的順序來實現(xiàn)對輸入數(shù)據(jù)的有序輸出;請自行考慮,并編程實的有序輸出;請自行考慮,并

7、編程實現(xiàn)?,F(xiàn)。 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計7.2.2 ifelse語句if(if(表達式表達式) ) 語句語句1 1 else else 語句語句2 2【注意【注意】 elseelse不是一條獨立不是一條獨立的語句,它只是的語句,它只是ifif語句語句的一部分。在程序中的一部分。在程序中elseelse必須與必須與ifif配對,共配對,共同組成一條同組成一條ififelseelse語語句。句。 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計 【例【例7-3】 輸入一個數(shù),判別它是否能被輸入一個數(shù),判別它是否能被3整除。若能被整除。若能被3整除,輸出整除,輸出YES;不能被;不能被3整除

8、,輸出整除,輸出NO。7.2.2 ifelse語句#includemain() int n ;printf(input n:); scanf(%d,&n);if(n%3=0) /*判斷判斷n能否被能否被3整除整除*/ printf(n=%d YESn,n);else printf(n=%d NOn,n); 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計7.3 多分支結(jié)構(gòu) 雙分支結(jié)構(gòu):上雙分支結(jié)構(gòu):上完體育課,完體育課,如果如果是上午最后一節(jié),是上午最后一節(jié),下課后去食堂吃下課后去食堂吃飯;飯;否則否則,進教,進教室上課。室上課。 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計7.3.1嵌套的if語

9、句 if子句和子句和else子句中可以是任意合法的子句中可以是任意合法的C語句,語句,因此當(dāng)然也可以是因此當(dāng)然也可以是if語句,通常稱此為嵌套語句,通常稱此為嵌套的的if語句。語句。 內(nèi)嵌的內(nèi)嵌的if語句既可以嵌套在語句既可以嵌套在if子句中,也可子句中,也可以嵌套在以嵌套在else子句中。具體形式有以下三種:子句中。具體形式有以下三種:一一在在if if子句中嵌套具有子句中嵌套具有elseelse子句的子句的if if語句語句if(表達式表達式1) if(表達式表達式2) 語句語句1 else 語句語句2else 語句語句3 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計二二 在在if if子句中

10、嵌套不子句中嵌套不含含elseelse子句的子句的if if語句語句if(表達式表達式1) if(表達式表達式2) 語句語句1 else語句語句2【注意】在【注意】在ifif子句中的一對花括號不可缺少。因為子句中的一對花括號不可缺少。因為C C語言語言的語法規(guī)定:的語法規(guī)定:elseelse子句總是與前面最近的不帶子句總是與前面最近的不帶elseelse的的ifif相結(jié)合,與書寫格式無關(guān)。因此,以上語句如果寫成:相結(jié)合,與書寫格式無關(guān)。因此,以上語句如果寫成:if(表達式表達式1)if(表達式表達式2) 語句語句1else語句語句2if(表達式表達式1)if(表達式表達式2) 語句語句1els

11、e 語句語句2實質(zhì)上等價于實質(zhì)上等價于7.3.1嵌套的if語句 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計三三 在在elseelse子句中嵌套子句中嵌套if if語句語句7.3.1嵌套的if語句if(表達式表達式1) 語句語句1elseif(表達式表達式2) 語句語句2 else 語句語句3if(表達式表達式1) 語句語句1else if(表達式表達式2) 語句語句2if(表達式表達式1) 語句語句1else if(表達式表達式2) 語句語句2 else 語句語句3if(表達式表達式1) 語句語句1else if(表達式表達式2) 語句語句2(1)內(nèi)嵌的if語句帶有else: (2)內(nèi)嵌的if語

12、句不帶else:或?qū)懗桑?或?qū)懗桑河梢陨蟽煞N語句形式可以看到,內(nèi)嵌在由以上兩種語句形式可以看到,內(nèi)嵌在elseelse子句中的子句中的ifif語句語句無論是否有無論是否有elseelse子句,在語法上都不會引起誤會,因此建議子句,在語法上都不會引起誤會,因此建議在設(shè)計嵌套的在設(shè)計嵌套的ifif語句時,盡量把內(nèi)嵌的語句時,盡量把內(nèi)嵌的ifif語句嵌在語句嵌在elseelse子句子句中。中。 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計 在在else子句中嵌套子句中嵌套if語句可形成多層嵌套,語句可形成多層嵌套,這時形成了層次式的嵌套這時形成了層次式的嵌套if語句語句 if(表達式表達式1) 語句語句

13、1else if(表達式表達式2) 語句語句2else if(表達式表達式3) 語句語句3else if(表達式表達式4) 語句語句4else語句語句n7.3.1嵌套的if語句 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計 【例【例7-4】 編程實現(xiàn):根據(jù)輸入的學(xué)生成績編程實現(xiàn):根據(jù)輸入的學(xué)生成績給出相應(yīng)的等級,大于或等于給出相應(yīng)的等級,大于或等于90分以上的分以上的等級為等級為A,60分以下的等級為分以下的等級為E,其余每,其余每10分為一個等級。分為一個等級。 【問題分析】分析題目,可以看出這個題【問題分析】分析題目,可以看出這個題目是根據(jù)輸入的學(xué)生成績確定相應(yīng)的等級,目是根據(jù)輸入的學(xué)生成績確

14、定相應(yīng)的等級,其處理流程如下圖所示。其處理流程如下圖所示。 7.3.1嵌套的if語句 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計7.3.1嵌套的if語句 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計#includevoid main()int score;printf(Enter score:); scanf(%d,&score);printf(score=%d:,score);if(score100|score=90) printf(An);else if(score=80) printf(Bn);else if(score=70) printf(Cn);else if(score=60)

15、 printf(Dn);else printf(En);7.3.1嵌套的if語句 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計 【程序分析【程序分析】 當(dāng)執(zhí)行以上程序時,首先輸入學(xué)生的成績,然后進入當(dāng)執(zhí)行以上程序時,首先輸入學(xué)生的成績,然后進入if語句。語句。 if語句中的表達式將依次對學(xué)生成績進行判斷,若能使語句中的表達式將依次對學(xué)生成績進行判斷,若能使某某if后的表達式值為后的表達式值為1,則執(zhí)行與其相應(yīng)的子句,之后,則執(zhí)行與其相應(yīng)的子句,之后便退出整個便退出整個if結(jié)構(gòu)。結(jié)構(gòu)。 例如,若輸入的成績?yōu)槔?,若輸入的成績?yōu)?6分,首先輸出:分,首先輸出:score=86: ,當(dāng)從上向下逐一檢測時

16、,使當(dāng)從上向下逐一檢測時,使score=80這一表達式的值這一表達式的值為為1,因此在以上輸出之后再輸出,因此在以上輸出之后再輸出B,然后便退出整個,然后便退出整個if結(jié)構(gòu)。結(jié)構(gòu)。 如果輸入如果輸入47分,則首先輸出:分,則首先輸出:score=47: ,因為所有,因為所有if子句中的表達式的值都為子句中的表達式的值都為0,因此執(zhí)行最后,因此執(zhí)行最后else子句中子句中的語句,接著輸出的語句,接著輸出E。然后退出。然后退出if結(jié)構(gòu)。結(jié)構(gòu)。7.3.1嵌套的if語句 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計7.3.2 switch語句 switch語句形式如下:語句形式如下: switch(表達式

17、表達式) case 常量表達式常量表達式1: 語句語句1case 常量表達式常量表達式2: 語句語句2case 常量表達式常量表達式n: 語句語句ndefault: 語句語句n+1switch語句體語句體 可以是整型表達式或字符型表達式可以是整型表達式或字符型表達式case語句標號語句標號 1 1、defaultdefault標號可以出現(xiàn)在語句體中任何標號位置標號可以出現(xiàn)在語句體中任何標號位置上。在上。在switchswitch語句體中也可以沒有語句體中也可以沒有defaultdefault標號。標號。2 2、casecase語句標號后的語句語句標號后的語句1 1、語句、語句2 2等,可以是一

18、條等,可以是一條語句,也可以是若干語句。語句,也可以是若干語句。3 3、必要時,、必要時,casecase語句標號后的語句可以省略不寫。語句標號后的語句可以省略不寫。4 4、在關(guān)鍵字、在關(guān)鍵字casecase和常量表達式之間一定要有空格。和常量表達式之間一定要有空格。 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計 【例【例7-5】用】用switch語句改寫例語句改寫例7-4。#includevoid main() int score; /*score中存放學(xué)生的成績中存放學(xué)生的成績*/ printf(Enter a mark:);scanf(%d,&score); printf(score

19、=%d:,score);if(score100|score0) printf(Error data!n);elseswitch(score/10)case 10:case 9:printf(An);case 8:printf(Bn);case 7:printf(Cn);case 6:printf(Dn);default:printf(En);7.3.2 switch語句 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計7.3.2 switch語句 【程序分析】當(dāng)執(zhí)行以上程序,輸入了一個【程序分析】當(dāng)執(zhí)行以上程序,輸入了一個73分的學(xué)生成績后,分的學(xué)生成績后,接著執(zhí)行接著執(zhí)行switch語句,首先計算語

20、句,首先計算switch之后一對括號中的表達之后一對括號中的表達式:式:73/10,它的值為,它的值為7,然后尋找與,然后尋找與7吻合的吻合的case 7分支,開始分支,開始執(zhí)行其后的各語句。執(zhí)行該程序的輸入輸出結(jié)果如下:執(zhí)行其后的各語句。執(zhí)行該程序的輸入輸出結(jié)果如下:輸入:輸入: Enter a mark: 73 輸出:輸出:score=73:CDE 在輸出了與在輸出了與73分相關(guān)的分相關(guān)的C之后,又同時輸出了與之后,又同時輸出了與73不相關(guān)不相關(guān)的等級的等級D、E,這顯然不符合原意。為了改變這種多余輸,這顯然不符合原意。為了改變這種多余輸出的情況,出的情況,switch語句常需要與語句常需

21、要與break語句配合使用。語句配合使用。 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計三、在三、在switchswitch語句體中使用語句體中使用breakbreak語句語句 break為為C語言關(guān)鍵字,語言關(guān)鍵字,break語句又稱間斷語句??梢詫⒄Z句又稱間斷語句。可以將break語句放在語句放在case標號之后的任何位置,通常是在標號之后的任何位置,通常是在case之之后的語句最后加上后的語句最后加上break語句。每當(dāng)執(zhí)行到語句。每當(dāng)執(zhí)行到break語句時,語句時,立即跳出立即跳出switch語句體。語句體。7.3.2 switch語句 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計7.3.2

22、switch語句 【例【例7-6】現(xiàn)用】現(xiàn)用break語句修改【例語句修改【例7-5】的】的程序。程序。 #includevoid main() int score;printf(Enter a mark:);scanf(%d,&score);printf(score=%d:,score);if(score100|score0) printf(Error data!n);elseswitch(score/10)case 10:case 9:printf(An);break;case 8:printf(Bn);break;case 7:printf(Cn);break;case 6:pr

23、intf(Dn);break;default:printf(En); 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計7.3.2 switch語句 【程序分析】程序執(zhí)行過程如下:【程序分析】程序執(zhí)行過程如下: (1)當(dāng)給)當(dāng)給score輸入輸入100時,時,switch后一對括號中的表后一對括號中的表達式:達式:score/10的值為的值為10。因此選擇。因此選擇case 10分支,因為分支,因為沒有遇到?jīng)]有遇到break語句,所以繼續(xù)執(zhí)行語句,所以繼續(xù)執(zhí)行case 9分支,輸出:分支,輸出:score=100:A之后,遇之后,遇break語句,執(zhí)行語句,執(zhí)行break語句,退語句,退出出switch

24、語句體。由此可見,成績語句體。由此可見,成績90到到100分,執(zhí)行的分,執(zhí)行的是同一分支。是同一分支。 (2)當(dāng)輸入成績?yōu)椋┊?dāng)輸入成績?yōu)?8時,時,switch后一對括號中表達式后一對括號中表達式的值為的值為3,將選擇,將選擇default分支,在輸出:分支,在輸出:score=38:E之之后,退出后,退出switch語句體。語句體。 (3)當(dāng)輸入成績?yōu)椋┊?dāng)輸入成績?yōu)?6時,時,switch后一對括號中表達式后一對括號中表達式的值為的值為7,因此選擇,因此選擇case 7分支,在輸出:分支,在輸出:score=76:C之之后,執(zhí)行后,執(zhí)行break語句,退出語句,退出switch語句體。語句體

25、。 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計7.4單分支結(jié)構(gòu)單分支結(jié)構(gòu)是雙分支結(jié)構(gòu)單分支結(jié)構(gòu)是雙分支結(jié)構(gòu)的一種特例。的一種特例。例如單分支結(jié)構(gòu):出門帶例如單分支結(jié)構(gòu):出門帶傘問題:傘問題:如果如果下雨,帶傘下雨,帶傘后后出門出門,否則否則直接直接出門出門。 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計7.4單分支結(jié)構(gòu) 分支結(jié)構(gòu)的兩種分支結(jié)構(gòu)的兩種基本模式與程序設(shè)計基本模式與程序設(shè)計中的中的ifif語句:語句:此時,此時,“否否”的這個分支含義是什么的這個分支含義是什么? ?雙分支結(jié)構(gòu)雙分支結(jié)構(gòu)單分支結(jié)構(gòu)單分支結(jié)構(gòu)這樣當(dāng)學(xué)習(xí)這樣當(dāng)學(xué)習(xí)ifif語句中的語句中的elseelse時,時,可以理解可以理解e

26、lseelse語句中其實隱含著語句中其實隱含著不成立的條件,無須重復(fù)書寫。不成立的條件,無須重復(fù)書寫。 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計雙分支的語句格式:雙分支的語句格式:if if elseelse 單分支的語句格式:單分支的語句格式:if if 7.4單分支結(jié)構(gòu)分支結(jié)構(gòu)的兩種基本模式與程序設(shè)計中的分支結(jié)構(gòu)的兩種基本模式與程序設(shè)計中的if語句對應(yīng)關(guān)系:語句對應(yīng)關(guān)系:ififelseelseifif雙分支結(jié)構(gòu)雙分支結(jié)構(gòu)單分支結(jié)構(gòu)單分支結(jié)構(gòu)條件條件 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計7.5 語句標號和goto語句 在在C語言中,語句標號不必特意加以定義,語言中,語句標號不必特意加以

27、定義,標號可以是任意合法的標識符,當(dāng)在標識標號可以是任意合法的標識符,當(dāng)在標識符后面加一個冒號,如:符后面加一個冒號,如:flag1: 、stop0: ,該標識符就成了一個語句標號該標識符就成了一個語句標號 stop0: printf(ENDn); 語句標號必須是標識符語句標號必須是標識符 濱江學(xué)院濱江學(xué)院第七章 分支結(jié)構(gòu)程序設(shè)計 goto語句稱為無條件轉(zhuǎn)向語句語句稱為無條件轉(zhuǎn)向語句 7.5 語句標號和goto語句goto 語句標號語句標號; goto語句的作用是把程序的執(zhí)行轉(zhuǎn)向語句標號所在語句的作用是把程序的執(zhí)行轉(zhuǎn)向語句標號所在的位置,這個語句標號必須與此的位置,這個語句標號必須與此goto語句同在一個語句同在一個函數(shù)內(nèi)。濫用函數(shù)內(nèi)。濫用

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論