全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)C第四章 選擇結(jié)構(gòu)
《全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)C第四章 選擇結(jié)構(gòu)》由會(huì)員分享,可在線閱讀,更多相關(guān)《全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)C第四章 選擇結(jié)構(gòu)(57頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)C第四章第四章 選擇結(jié)構(gòu)選擇結(jié)構(gòu)2010年年10月月- 2011年年3月月第四章第四章 選擇結(jié)構(gòu)選擇結(jié)構(gòu)4.1 4.1 關(guān)系運(yùn)算和邏輯運(yùn)算關(guān)系運(yùn)算和邏輯運(yùn)算4.2 if4.2 if語(yǔ)句和語(yǔ)句和if if語(yǔ)句構(gòu)成的選擇結(jié)構(gòu)語(yǔ)句構(gòu)成的選擇結(jié)構(gòu)4.3 4.3 條件表達(dá)式構(gòu)成的選擇結(jié)構(gòu)條件表達(dá)式構(gòu)成的選擇結(jié)構(gòu)4.4switch4.4switch語(yǔ)句以及語(yǔ)句以及switchswitch語(yǔ)句和語(yǔ)句和breakbreak語(yǔ)語(yǔ)句構(gòu)成的選擇結(jié)構(gòu)句構(gòu)成的選擇結(jié)構(gòu)4.5 4.5 語(yǔ)句標(biāo)號(hào)和語(yǔ)句標(biāo)號(hào)和gotogoto語(yǔ)句語(yǔ)句 C語(yǔ)言提供了可以進(jìn)行邏輯判斷的若干選擇語(yǔ)句,由這
2、此選擇語(yǔ)句可構(gòu)成程序中的選擇結(jié)構(gòu),通常又稱為分支結(jié)構(gòu)。選擇結(jié)構(gòu)4.1.1 C4.1.1 C語(yǔ)言的邏輯值語(yǔ)言的邏輯值 關(guān)系表達(dá)式和邏輯表達(dá)式的運(yùn)算結(jié)果都會(huì)得到一個(gè)邏輯值。關(guān)系表達(dá)式和邏輯表達(dá)式的運(yùn)算結(jié)果都會(huì)得到一個(gè)邏輯值。邏輯值只有兩個(gè),分別用邏輯值只有兩個(gè),分別用“真真”和和“假假”來(lái)表示。在來(lái)表示。在C C語(yǔ)言中,語(yǔ)言中,沒(méi)有專門(mén)的沒(méi)有專門(mén)的“邏輯值邏輯值”,而是用非,而是用非0 0表示表示“真真”,用,用0 0表示表示“假假”。4.1 4.1 關(guān)系運(yùn)算和邏輯運(yùn)算關(guān)系運(yùn)算和邏輯運(yùn)算 4.1.24.1.2關(guān)系運(yùn)算符和表達(dá)式關(guān)系運(yùn)算符和表達(dá)式 在程序中經(jīng)常需要比較兩個(gè)量的大小關(guān)系,以決定程序下在
3、程序中經(jīng)常需要比較兩個(gè)量的大小關(guān)系,以決定程序下一步的工作。比較兩個(gè)量的運(yùn)算符稱為關(guān)系運(yùn)算符。一步的工作。比較兩個(gè)量的運(yùn)算符稱為關(guān)系運(yùn)算符。 關(guān)系運(yùn)算符是雙目運(yùn)算符,具有自左至右的結(jié)合性。關(guān)系運(yùn)算符是雙目運(yùn)算符,具有自左至右的結(jié)合性。關(guān)系運(yùn)算符及其優(yōu)先次序1. (小于)2. (大于)4. = (大于或等于)5. = (等于)6. != (不等于)4.1.2.1 C4.1.2.1 C語(yǔ)言的關(guān)系運(yùn)算符語(yǔ)言的關(guān)系運(yùn)算符優(yōu)先級(jí)相同(高)優(yōu)先級(jí)相同(高)優(yōu)先級(jí)相同(低)優(yōu)先級(jí)相同(低)說(shuō)明:關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符關(guān)系運(yùn)算符的優(yōu)先級(jí)高于賦值運(yùn)算符4.1.2.2.關(guān)系表達(dá)式用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式
4、(可以是算術(shù)表達(dá)式或 關(guān)系表達(dá)式,邏輯表達(dá)式,賦值表達(dá)式,字符表達(dá)式) 接起來(lái)的式子,稱關(guān)系表達(dá)式 關(guān)系表達(dá)式的一般形式為: 表達(dá)式表達(dá)式 關(guān)系運(yùn)算符關(guān)系運(yùn)算符 表達(dá)式表達(dá)式例:ab,a+bb+c,(a=3)(b=5),ab)(bb”的值為“真”,表達(dá)式的值為1。C C語(yǔ)言中沒(méi)有專用語(yǔ)言中沒(méi)有專用的邏輯值,的邏輯值,1 1代表代表真,真,0 0代表假代表假關(guān)系表達(dá)式舉例:a+bc-dx3/2a+1(bc)a!=(c=d) 關(guān)系表達(dá)式的值是真”和“假”,用“1”和“0”表示。如: 50的值為“真”,即為1。(a=3)(b=5)由于35不成立,故其值為假,即為0?!纠縨ain() char c=
5、k; int i=1,j=2,k=3; float x=3e+5,y=0.85; printf(%d,%dn,a+5=k+1); printf(%d,%dn,1j5,x-5.25b & cd 等價(jià)于 (ab)&(cd) !b=c|da 等價(jià)于 (!b)=c)|(dc&x+yc)&(x+y)3&84-!0 自左向右運(yùn)算 1&0邏輯值為083邏輯值為1表達(dá)式值為0在邏輯表達(dá)式的求解中,并不是所有的邏輯運(yùn)算符都要被執(zhí)行。(1)a&b&c 只有a為真時(shí),才需要判斷b的值,只有a和b都為真時(shí), 才需要判斷c的值。(2)a|b|c 只要a為真,就不必判斷b和c的值,只有a為假,才 判斷b。a和b都為假才判
6、斷c例:(m=ab)&(n=cd) 當(dāng)a=1,b=2,c=3,d=4,m和n的原值為1時(shí),由于“ab”的值為0,因此m=0,而“n=cd”不被執(zhí)行,因此n的值不是0而仍保持原值1。 用邏輯表達(dá)式來(lái)表示閏年的條件能被4整除,但不能被100整除。能被4整除,又能被400整除答答 (year%4=0&year%100!=0)|year%400=0案案 值為真(1)是閏年,否則為非閏年。邏輯運(yùn)算的值也為“真”和“假”兩種,用“1”和“0 ”來(lái)表示。其求值規(guī)則如下:1. 與運(yùn)算 &:參與運(yùn)算的兩個(gè)量都為真時(shí),結(jié)果才為真,否則為假。 例如: 50 & 42 由于50為真,42也為真,相與的結(jié)果也為真。2.
7、 或運(yùn)算|:參與運(yùn)算的兩個(gè)量只要有一個(gè)為真,結(jié)果就為真。 兩個(gè)量都為假時(shí),結(jié)果為假。 例如: 50|58由于50為真,相或的結(jié)果也就為真。3. 非運(yùn)算!:參與運(yùn)算量為真時(shí),結(jié)果為假;參與運(yùn)算量為假時(shí),結(jié)果為真。 例如: !(50) 的結(jié)果為假。 雖然編譯在給出邏輯運(yùn)算值時(shí),以“1”代表“真”,“0 ”代表“假”。 但反過(guò)來(lái)在判斷一個(gè)量是為“真”還是為“假”時(shí),以“0”代表“假”,以非“0”的數(shù)值作為“真”。例如:由于5和3均為非“0”因此5&3的值為“真”,即為1。 又如: 5|0的值為“真”,即為1。 邏輯運(yùn)算的值邏輯運(yùn)算的值【例】main()main() char c=k; char c=
8、k; int int i=1,j=2,k=3; i=1,j=2,k=3; float x=3e+5,y=0.85; float x=3e+5,y=0.85; printf printf(%d,%dn,!x(%d,%dn,!x* *!y,!x);!y,!x); printf(%d,%dn,x|i&j-3,ij&xy); printf(%d,%dn,x|i&j-3,ij&xy); printf printf(%d,%dn,i=5&c&(j=8),x+y|i+j+k);(%d,%dn,i=5&c&(j=8),x+y|i+j+k); 本例中本例中!x!x和和!y!y分別為分別為0 0,!x!x* *!
9、y!y也為也為0 0,故其輸出值為,故其輸出值為0 0。由于。由于x x為非為非0 0,故故!x!x的邏輯值為的邏輯值為0 0。對(duì)。對(duì)x| i & j-3x| i & j-3式,先計(jì)算式,先計(jì)算j-3j-3的值為非的值為非0 0,再求,再求i i & j-3& j-3的邏輯值為的邏輯值為1 1,故,故x|i&j-3x|i&j-3的邏輯值為的邏輯值為 1 1。對(duì)。對(duì)ij&xyij&xy式,由于式,由于ijij的值為的值為1 1,而,而xyxy) printf(“%d”,x); If語(yǔ)句的三種基本形式4.2.1 If4.2.1 If語(yǔ)句語(yǔ)句【例】 main() int a,b,max; print
10、f(n input two numbers:); scanf(%d%d,&a,&b); max=a; if (maxy) printf(“%d”,x); else printf(“%d”,y);第二種形式為基本形式【例】main() int a, b; printf(input two numbers: ); scanf(%d%d,&a,&b); if(ab) printf(max=%dn,a); else printf(max=%dn,b); 輸入兩個(gè)整數(shù),輸出其中的大數(shù)。改用if-else語(yǔ)句判別a,b的大小,若a大,則輸出a,否則輸出b。 前二種形式的if語(yǔ)句一般都用于兩個(gè)分支的情況。
11、當(dāng)有多個(gè)分支選擇時(shí),可采用if-else-if語(yǔ)句,其一般形式為: (3)if(表達(dá)式1)語(yǔ)句1 else if(表達(dá)式2)語(yǔ)句2 else if(表達(dá)式3)語(yǔ)句3 else if(表達(dá)式m)語(yǔ)句m else 語(yǔ)句n 其語(yǔ)義是:依次判斷表達(dá)式的值,當(dāng)出現(xiàn)某個(gè)值為真時(shí),則執(zhí)行其對(duì)應(yīng)的語(yǔ)句。然后跳到整個(gè)if語(yǔ)句之外繼續(xù)執(zhí)行程序。 如果所有的表達(dá)式均為假,則執(zhí)行語(yǔ)句n。然后繼續(xù)執(zhí)行后續(xù)程序。 if-else-if語(yǔ)句的執(zhí)行過(guò)程如上圖所示。第三種形式為基本形式【例】#includestdio.hmain() char c; printf(input a character: ); c=getchar(
12、); if(c=0&c=A&c=a&c500) cost=0.15; else if(number300) cost=0.10; else if(number100) cost=0.075; else if(number50) cost=0.05; else cost=0; 在使用if語(yǔ)句中還應(yīng)注意以下問(wèn)題:1) 在三種形式的if語(yǔ)句中,在if關(guān)鍵字之后均為表達(dá)式。 該表達(dá)式通常是邏輯表達(dá)式或關(guān)系表達(dá)式, 但也可以是其它表達(dá)式,如賦值表達(dá)式等,甚至也可以是一個(gè)變量。例如: if(a=5) 語(yǔ)句; if(b) 語(yǔ)句;都是允許的。只要表達(dá)式的值為非0,即為“真”。如在: if(a=5);中表達(dá)式的
13、值永遠(yuǎn)為非0,所以其后的語(yǔ)句總是要執(zhí)行的,當(dāng)然這種情況在程序中不一定會(huì)出現(xiàn),但在語(yǔ)法上是合法的。又如,有程序段: if(a=b) printf(%d,a); else printf(a=0); 本語(yǔ)句的語(yǔ)義是,把b值賦予a,如為非0則輸出該值,否則輸出“a=0”字符串。這種用法在程序中是經(jīng)常出現(xiàn)的。 2) 在if語(yǔ)句中,條件判斷表達(dá)式必須用括號(hào)括起來(lái),在語(yǔ)句之后必須加分號(hào)。 3) 在if語(yǔ)句的三種形式中,所有的語(yǔ)句應(yīng)為單個(gè)語(yǔ)句,如果要想在滿足條件時(shí)執(zhí)行一組(多個(gè))語(yǔ)句,則必須把這一組語(yǔ)句用括起來(lái)組成一個(gè)復(fù)合語(yǔ)句。但要注意的是在之后不能再加分號(hào)。例如: if(ab) a+; b+; else a
14、=0; b=10;if語(yǔ)句(例題)例例: :輸入兩個(gè)實(shí)數(shù),按代數(shù)值由小到大的順序輸出這兩個(gè)輸入兩個(gè)實(shí)數(shù),按代數(shù)值由小到大的順序輸出這兩個(gè)數(shù)。數(shù)。#includestdio#include.hvoid main()void main()float a,b,t;float a,b,t;scanfscanf(“%f,%f”,&a,&b);(“%f,%f”,&a,&b);if(ab)if(ab)t=a;t=a; a=b; a=b; b=t; b=t; printf(“%5.2f,%5.2fn”,a,b);printf(“%5.2f,%5.2fn”,a,b); ynabt=aa=bb=t例例: :輸入三
15、個(gè)數(shù)輸入三個(gè)數(shù)a,b,c,a,b,c,要求按由小到大的順序輸出。要求按由小到大的順序輸出。If ab 將a和b對(duì)換If ac 將a和c對(duì)換If bc 將b和c對(duì)換abacbca和b交換a和c交換c和b交換yyynn #include #include void main ( ) void main ( ) float a,b,c,t; float a,b,c,t; scanf(“%f,%f,%f”,&a,&b,&c); scanf(“%f,%f,%f”,&a,&b,&c); if(ab)if(ab) t=a;a=b;b=t; t=a;a=b;b=t; if(ac) if(ac) t=a;a=c
16、;c=t; t=a;a=c;c=t;if(bc) if(bc) t=b;b=c;c=t; t=b;b=c;c=t; printf(%5.2f,%5.2f,%5.2fn,a,b,c); printf(%5.2f,%5.2f,%5.2fn,a,b,c); 4.2.2嵌套的if語(yǔ)句一、當(dāng)if語(yǔ)句中的執(zhí)行語(yǔ)句又是if語(yǔ)句時(shí),則構(gòu)成了if 語(yǔ)句嵌套的情形。其一般形式可表示如下: if(表達(dá)式) if語(yǔ)句; 或者為 if(表達(dá)式) if語(yǔ)句; else if語(yǔ)句; 在嵌套內(nèi)的if語(yǔ)句可能又是if-else型的,這將會(huì)出現(xiàn)多個(gè)if和多個(gè)else重疊的情況,這時(shí)要特別注意if和else的配對(duì)問(wèn)題。例如: if
17、(表達(dá)式1) if(表達(dá)式2) 語(yǔ)句1; else 語(yǔ)句2;其中的else究竟是與哪一個(gè)if配對(duì)呢?應(yīng)該理解為: if(表達(dá)式1) if(表達(dá)式2) 語(yǔ)句1; else 語(yǔ)句2;還是應(yīng)理解為: if(表達(dá)式1) if(表達(dá)式2) 語(yǔ)句1; else 語(yǔ)句2; 為了避免這種二義性,語(yǔ)言規(guī)定,else 總是與它前面最近的if配對(duì),因此對(duì)上述例子應(yīng)按前一種情況理解?!纠縨ain() int a,b; printf(please input A,B: ); scanf(%d%d,&a,&b); if(a!=b) if(ab) printf(ABn); else printf(AB、AB或A=B。這種
18、問(wèn)題用if-else-if語(yǔ)句也可以完成。而且程序更加清晰。因此,在一般情況下較少使用if語(yǔ)句的嵌套結(jié)構(gòu)。以使程序更便于閱讀理解。匹配規(guī)則: else總是與它上面的,最近的,統(tǒng)一復(fù)合語(yǔ)句中的,未配對(duì)的if語(yǔ)句配對(duì)。例:If()if() 語(yǔ)句1elseif() 語(yǔ)句2else 語(yǔ)句3例:If()if() 語(yǔ)句1elseif() 語(yǔ)句2else 語(yǔ)句3當(dāng)當(dāng)ifif和和elseelse數(shù)目不同時(shí),可以加數(shù)目不同時(shí),可以加花括號(hào)花括號(hào)來(lái)確定配對(duì)關(guān)系。來(lái)確定配對(duì)關(guān)系。 -1 (x0)算法1: 算法2:輸入x 輸入x若x0,則y=-1 若x0,則y=1 若x=0,則y=0輸出y 若x0,則y=1 輸出y
19、#includevoid main() int x,y; scanf(“%d”,&x); 程序段 printf(“x=%d,y=%dn”,x,y); 上例中的程序段有四個(gè),請(qǐng)判斷哪個(gè)是正確的?程序1: 程序2: If(x=0) Y=-1; if(x0) y=1; Else else y=0; If(x=0) y=0; else y=-1; Else y=1;程序3: 程序4: Y=-1; y=0; If(x!=0) if(x=0) If(x0) y=1; if(x0) y=1; Else y=0; Else y=-1;正確正確4.3 4.3 條件表達(dá)式構(gòu)成的選擇結(jié)構(gòu)條件表達(dá)式構(gòu)成的選擇結(jié)構(gòu) 如
20、果在條件語(yǔ)句中,只執(zhí)行單個(gè)的賦值語(yǔ)句時(shí), ??墒褂脳l件表達(dá)式來(lái)實(shí)現(xiàn)。不但使程序簡(jiǎn)潔,也提高了運(yùn)行效率。 條件運(yùn)算符為?和:,它是一個(gè)三目運(yùn)算符,即有三個(gè)參與運(yùn)算的量。格式: 表達(dá)式?表達(dá)式表達(dá)式 功能: 判斷表達(dá)式1的值,如果成立就執(zhí)行表 達(dá)式2,否則就執(zhí)行表達(dá)式3使用場(chǎng)合:若在語(yǔ)句中,當(dāng)被判別的表達(dá)式的 值為“真”或“假” 時(shí),都執(zhí)行一個(gè)賦值語(yǔ) 句且向同一個(gè)變量賦值時(shí),可以用一個(gè) 條件運(yùn)算符來(lái)處理。 例: () =; ; 當(dāng)ab時(shí)將a的值賦給max,當(dāng)ab時(shí)將b的值賦給max,可以看到無(wú)論ab是否滿足,都是向同一個(gè)變量賦值。 可以用下面的條件運(yùn)算符來(lái)處理: ()?; 執(zhí)行該語(yǔ)句的語(yǔ)義是:如a
21、b為真,則把a(bǔ)賦予max,否則把b 賦予max。使用條件表達(dá)式時(shí),還應(yīng)注意以下幾點(diǎn):1)條件運(yùn)算符的運(yùn)算優(yōu)先級(jí)低于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符,但高于賦值符。因此 max=(ab)?a:b可以去掉括號(hào)而寫(xiě)為 max=ab?a:b2) 條件運(yùn)算符?和:是一對(duì)運(yùn)算符,不能分開(kāi)單獨(dú)使用。3) 條件運(yùn)算符的結(jié)合方向是自右至左自右至左。例如:例如: ab?a:cd?c:dab?a:cd?c:d應(yīng)理解為應(yīng)理解為 ab?a:(cd?c:d)ab?a:(cd?c:d)這也就是條件表達(dá)式嵌套的情形,即其中的表達(dá)式這也就是條件表達(dá)式嵌套的情形,即其中的表達(dá)式3 3又是一又是一個(gè)條件表達(dá)式。個(gè)條件表達(dá)式?!纠縨ain(
22、) int a,b,max; printf(n input two numbers: ); scanf(%d%d,&a,&b); printf(max=%d,ab?a:b); 用條件表達(dá)式對(duì)上例重新編程,輸出兩個(gè)數(shù)中的大數(shù)。例:例:輸入一個(gè)字符,判別它是否大寫(xiě)字母,如果是,將輸入一個(gè)字符,判別它是否大寫(xiě)字母,如果是,將它轉(zhuǎn)換成小寫(xiě)字母;如果不是,不轉(zhuǎn)換。然后輸出最后它轉(zhuǎn)換成小寫(xiě)字母;如果不是,不轉(zhuǎn)換。然后輸出最后得到的字符。得到的字符。 #include stdio#include .h void main ( ) void main ( ) char ch char ch; ; scanf
23、scanf(%c,& ch(%c,& ch);); ch ch= =(ch(ch=A& ch=A& ch=Z)?(ch+32):ch;=Z)?(ch+32):ch; printf printf(%cn,ch(%cn,ch);); 如果字符變量ch的值為大寫(xiě)字母,則條件表達(dá)式的值為(),即相應(yīng)的小寫(xiě)字母。如果ch的值不是大寫(xiě)字母,則條件表達(dá)式的值為,即不進(jìn)行轉(zhuǎn)換。 說(shuō)明:(1).(1).條件運(yùn)算符的執(zhí)行順序:先求解表達(dá)式,若為非(真)條件運(yùn)算符的執(zhí)行順序:先求解表達(dá)式,若為非(真) 則求解表達(dá)式,此時(shí)表達(dá)式的值就作為整個(gè)條件表達(dá)式則求解表達(dá)式,此時(shí)表達(dá)式的值就作為整個(gè)條件表達(dá)式 的值。若表達(dá)式的
24、值為(假),則求解表達(dá)式,表達(dá)的值。若表達(dá)式的值為(假),則求解表達(dá)式,表達(dá) 式的值就是整個(gè)條件表達(dá)式的值。式的值就是整個(gè)條件表達(dá)式的值。 (2).(2).條件運(yùn)算符優(yōu)先級(jí)高于賦值運(yùn)算符條件運(yùn)算符優(yōu)先級(jí)高于賦值運(yùn)算符 ,低于關(guān)系運(yùn)算符,低于關(guān)系運(yùn)算符 和算術(shù)運(yùn)算符。和算術(shù)運(yùn)算符。 (3).(3).條件運(yùn)算符的結(jié)合方向?yàn)闂l件運(yùn)算符的結(jié)合方向?yàn)椤白杂抑磷笞杂抑磷蟆薄?( (4).“4).“表達(dá)式表達(dá)式2”2”和和“表達(dá)式表達(dá)式3”3”不僅可以是數(shù)值表達(dá)式,還可以不僅可以是數(shù)值表達(dá)式,還可以 是賦值表達(dá)式或函數(shù)表達(dá)式。是賦值表達(dá)式或函數(shù)表達(dá)式。(5).(5).條件表達(dá)式中,表達(dá)式的類型可以與表達(dá)式和
25、表達(dá)條件表達(dá)式中,表達(dá)式的類型可以與表達(dá)式和表達(dá) 式的類型不同。式的類型不同。 4.4 4.4 switchswitch語(yǔ)句以及語(yǔ)句以及switchswitch語(yǔ)句和語(yǔ)句和breakbreak語(yǔ)語(yǔ) 句構(gòu)成的選擇結(jié)構(gòu)句構(gòu)成的選擇結(jié)構(gòu)switch語(yǔ)句的格式:(表達(dá)式) 常量表達(dá)式:語(yǔ)句 常量表達(dá)式:語(yǔ)句 常量表達(dá)式:語(yǔ)句 :語(yǔ)句 例:要求按照考試成績(jī)的等級(jí)輸出百分制分?jǐn)?shù)段,用switch語(yǔ)句實(shí)現(xiàn):()(); (); (); (); (); 說(shuō)明:(1)(1)后面括弧內(nèi)的后面括弧內(nèi)的“表達(dá)式表達(dá)式”, 標(biāo)準(zhǔn)允許標(biāo)準(zhǔn)允許 它為任何類型。它為任何類型。(2) (2) 當(dāng)表達(dá)式的值與某一個(gè)后面的常量表達(dá)式
26、的值相當(dāng)表達(dá)式的值與某一個(gè)后面的常量表達(dá)式的值相 等時(shí),就執(zhí)行此后面的語(yǔ)句,若所有的等時(shí),就執(zhí)行此后面的語(yǔ)句,若所有的 中的常量表達(dá)式的值都沒(méi)有與表達(dá)式的值匹配的,就執(zhí)行中的常量表達(dá)式的值都沒(méi)有與表達(dá)式的值匹配的,就執(zhí)行 后面的語(yǔ)句。后面的語(yǔ)句。(3) (3) 每一個(gè)的常量表達(dá)式的值必須互不相同,否則就每一個(gè)的常量表達(dá)式的值必須互不相同,否則就 會(huì)出現(xiàn)互相矛盾的現(xiàn)象(對(duì)表達(dá)式的同一個(gè)值,有兩種或會(huì)出現(xiàn)互相矛盾的現(xiàn)象(對(duì)表達(dá)式的同一個(gè)值,有兩種或 多種執(zhí)行方案)。多種執(zhí)行方案)。(4) (4) 各個(gè)和的出現(xiàn)次序不影響執(zhí)行結(jié)各個(gè)和的出現(xiàn)次序不影響執(zhí)行結(jié) 果。例如,可以先出現(xiàn)果。例如,可以先出現(xiàn)“:
27、”,再出現(xiàn),再出現(xiàn) “ “ :”,然后是,然后是“ :”。(5) (5) 執(zhí)行完一個(gè)后面的語(yǔ)句后,流程控制轉(zhuǎn)移到下一執(zhí)行完一個(gè)后面的語(yǔ)句后,流程控制轉(zhuǎn)移到下一 個(gè)繼續(xù)執(zhí)行。個(gè)繼續(xù)執(zhí)行?!俺A勘磉_(dá)式常量表達(dá)式”只是起語(yǔ)句只是起語(yǔ)句 標(biāo)號(hào)作用,并不是在該處進(jìn)行條件判斷。在執(zhí)行標(biāo)號(hào)作用,并不是在該處進(jìn)行條件判斷。在執(zhí)行 語(yǔ)句時(shí),根據(jù)后面表達(dá)式的值語(yǔ)句時(shí),根據(jù)后面表達(dá)式的值 找到匹配的入口標(biāo)號(hào),就從此標(biāo)號(hào)開(kāi)始執(zhí)行下去,不再進(jìn)找到匹配的入口標(biāo)號(hào),就從此標(biāo)號(hào)開(kāi)始執(zhí)行下去,不再進(jìn) 行判斷。行判斷。應(yīng)該在執(zhí)行一個(gè)分支后應(yīng)該在執(zhí)行一個(gè)分支后, ,可以用一個(gè)可以用一個(gè) 語(yǔ)句來(lái)終止語(yǔ)句來(lái)終止switchswitch
28、語(yǔ)句的執(zhí)行。語(yǔ)句的執(zhí)行。 (6) (6) 多個(gè)可以共用一組執(zhí)行語(yǔ)句。多個(gè)可以共用一組執(zhí)行語(yǔ)句。 【例】main() int a; printf(input integer number: ); scanf(%d,&a); switch (a) case 1:printf(Mondayn);case 2:printf(Tuesdayn);case 3:printf(Wednesdayn);case 4:printf(Thursdayn);case 5:printf(Fridayn);case 6:printf(Saturdayn);case 7:printf(Sundayn);default:p
29、rintf(errorn); 本程序是要求輸入一個(gè)數(shù)字,輸出一個(gè)英文單詞。但是當(dāng)輸入3之后,卻執(zhí)行了case3以及以后的所有語(yǔ)句,輸出了Wednesday 及以后的所有單詞。這當(dāng)然是不希望的。為什么會(huì)出現(xiàn)這種情況呢?這恰恰反應(yīng)了switch語(yǔ)句的一個(gè)特點(diǎn)。在switch語(yǔ)句中,“case 常量表達(dá)式”只相當(dāng)于一個(gè)語(yǔ)句標(biāo)號(hào), 表達(dá)式的值和某標(biāo)號(hào)相等則轉(zhuǎn)向該標(biāo)號(hào)執(zhí)行,但不能在執(zhí)行完該標(biāo)號(hào)的語(yǔ)句后自動(dòng)跳出整個(gè)switch 語(yǔ)句,所以出現(xiàn)了繼續(xù)執(zhí)行所有后面case語(yǔ)句的情況。 這是與前面介紹的if語(yǔ)句完全不同的,應(yīng)特別注意。為了避免上述情況,語(yǔ)言還提供了一種break語(yǔ)句,專用于跳出switch語(yǔ)句,
30、break 語(yǔ)句只有關(guān)鍵字break,沒(méi)有參數(shù)。在后面還將詳細(xì)介紹。修改例題的程序,在每一case語(yǔ)句之后增加break 語(yǔ)句, 使每一次執(zhí)行之后均可跳出switch語(yǔ)句,從而避免輸出不應(yīng)有的結(jié)果?!纠?main() int a; printf(input integer number: ); scanf(%d,&a); switch (a) case 1:printf(Mondayn);break; case 2:printf(Tuesdayn); break; case 3:printf(Wednesdayn);break; case 4:printf(Thursdayn);break;
31、 case 5:printf(Fridayn);break; case 6:printf(Saturdayn);break; case 7:printf(Sundayn);break; default:printf(errorn); 在使用switch語(yǔ)句時(shí)還應(yīng)注意以下幾點(diǎn):1) 在case后的各常量表達(dá)式的值不能相同,否則會(huì)出現(xiàn)錯(cuò)誤。2) 在case后,允許有多個(gè)語(yǔ)句,可以不用括起來(lái)。3) 各case和default子句的先后順序可以變動(dòng),而不會(huì)影響程序執(zhí)行結(jié)果。4) default子句可以省略不用。break語(yǔ)句語(yǔ)句 break語(yǔ)句通常用在循環(huán)語(yǔ)句和開(kāi)關(guān)語(yǔ)句中。當(dāng)break用于開(kāi)關(guān)語(yǔ)句sw
32、itch中時(shí),可使程序跳出switch而執(zhí)行switch以后的語(yǔ)句;循環(huán)語(yǔ)句中如果沒(méi)有break語(yǔ)句,則將成為一個(gè)死循環(huán)而無(wú)法退出。break在switch 中的用法已在前面介紹開(kāi)關(guān)語(yǔ)句時(shí)的例子中碰到,這里不再舉例。 break語(yǔ)句用于do-while、for、while循環(huán)語(yǔ)句中時(shí),可使程序終止循環(huán)而執(zhí)行循環(huán)后面的語(yǔ)句, 通常break語(yǔ)句總是與if語(yǔ)句聯(lián)在一起。即滿足條件時(shí)便跳出循環(huán)。下一章詳細(xì)介紹 【例】【例】 Main ( )Main ( ) int int i=0; i=0; char c; char c; while(1) / while(1) /* *設(shè)置循環(huán)設(shè)置循環(huán)* */ /
33、 c=0; / c=0; /* *變量賦初值變量賦初值* */ / while(c!=13&c!=27) / while(c!=13&c!=27) /* *鍵盤(pán)接收字符直到按回車或鍵盤(pán)接收字符直到按回車或EscEsc鍵鍵* */ / c=getch c=getch();(); printf printf(%cn, c);(%cn, c); if(c=27) if(c=27) break; / break; /* *判斷若按判斷若按EscEsc鍵則退出循環(huán)鍵則退出循環(huán)* */ / i+; i+; printf printf(The No. is %dn, i);(The No. is %dn,
34、i); printf printf(The end);(The end); 注意: 1) break語(yǔ)句對(duì)if-else的條件語(yǔ)句不起作用。 2) 在多層循環(huán)中, 一個(gè)break語(yǔ)句只向外跳一層。 4.5 4.5 語(yǔ)句標(biāo)號(hào)和語(yǔ)句標(biāo)號(hào)和gotogoto語(yǔ)句語(yǔ)句4.5.1 4.5.1 語(yǔ)句標(biāo)號(hào)語(yǔ)句標(biāo)號(hào)4.5.2 goto4.5.2 goto語(yǔ)句語(yǔ)句4.5.1 4.5.1 語(yǔ)句標(biāo)號(hào)語(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),如:flag1 :、stop:,該標(biāo)識(shí)符就成了一個(gè)語(yǔ)句標(biāo)號(hào)。 注意:在C語(yǔ)言中,語(yǔ)句標(biāo)號(hào)必須是標(biāo)識(shí)符必須是標(biāo)識(shí)符,因此不能
35、簡(jiǎn)單地使用10: 、15:等形式。標(biāo)號(hào)可以和變量同名。 通常,標(biāo)號(hào)用作goto 語(yǔ)句的轉(zhuǎn)向目標(biāo)。如: goto stop; 在C語(yǔ)言中,可以在任何語(yǔ)句前加上語(yǔ)句標(biāo)號(hào)。例如: stop: print(“ENDn”);4.5.2 goto4.5.2 goto語(yǔ)句語(yǔ)句 goto語(yǔ)句是一種無(wú)條件轉(zhuǎn)移語(yǔ)句, 與BASIC中的goto語(yǔ)句相似。goto 語(yǔ)句的使用格式為: goto 語(yǔ)句標(biāo)號(hào); 其中標(biāo)號(hào)是一個(gè)有效的標(biāo)識(shí)符,這個(gè)標(biāo)識(shí)符加上一個(gè)“:”一起出現(xiàn)在函數(shù)內(nèi)某處, 執(zhí)行g(shù)oto語(yǔ)句后,程序?qū)⑻D(zhuǎn)到該標(biāo)號(hào)處并執(zhí)行其后的語(yǔ)句。另外標(biāo)號(hào)必須與goto語(yǔ)句同處于一個(gè)函數(shù)中,但可以不在一個(gè)循環(huán)層中。通常goto
36、語(yǔ)句與if條件語(yǔ)句連用, 當(dāng)滿足某一條件時(shí), 程序跳到標(biāo)號(hào)處運(yùn)行。 goto語(yǔ)句通常不用,主要因?yàn)樗鼘⑹钩绦驅(qū)哟尾磺?且不易讀,但在多層嵌套退出時(shí), 用goto語(yǔ)句則比較合理。4.5.2 goto4.5.2 goto語(yǔ)句語(yǔ)句( (續(xù)續(xù)) ) 【例】用【例】用gotogoto語(yǔ)句和語(yǔ)句和ifif語(yǔ)句構(gòu)成循環(huán)語(yǔ)句構(gòu)成循環(huán), , 。 main()main() int int i,sum=0; i,sum=0; i=1; i=1; loop: if(i=100) loop: if(i=100) sum=sum+i; sum=sum+i; i+; i+; goto goto loop; loop; printf printf(%dn,sum);(%dn,sum); 1001nn課后習(xí)題課后習(xí)題P46-49 P46-49 習(xí)題習(xí)題
- 溫馨提示:
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. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024《增值稅法》全文學(xué)習(xí)解讀(規(guī)范增值稅的征收和繳納保護(hù)納稅人的合法權(quán)益)
- 2024《文物保護(hù)法》全文解讀學(xué)習(xí)(加強(qiáng)對(duì)文物的保護(hù)促進(jìn)科學(xué)研究工作)
- 銷售技巧培訓(xùn)課件:接近客戶的套路總結(jié)
- 20種成交的銷售話術(shù)和技巧
- 銷售技巧:接近客戶的8種套路
- 銷售套路總結(jié)
- 房產(chǎn)銷售中的常見(jiàn)問(wèn)題及解決方法
- 銷售技巧:值得默念的成交話術(shù)
- 銷售資料:讓人舒服的35種說(shuō)話方式
- 汽車銷售績(jī)效管理規(guī)范
- 銷售技巧培訓(xùn)課件:絕對(duì)成交的銷售話術(shù)
- 頂尖銷售技巧總結(jié)
- 銷售技巧:電話營(yíng)銷十大定律
- 銷售逼單最好的二十三種技巧
- 銷售最常遇到的10大麻煩