版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第第5章章 選擇結(jié)構(gòu)程序設(shè)計選擇結(jié)構(gòu)程序設(shè)計要設(shè)計選擇結(jié)構(gòu)程序,要考慮兩個方面的問題:一要設(shè)計選擇結(jié)構(gòu)程序,要考慮兩個方面的問題:一是在是在C語言中如何來表示條件,二是在語言中如何來表示條件,二是在C語言中實現(xiàn)語言中實現(xiàn)選擇結(jié)構(gòu)用什么語句。選擇結(jié)構(gòu)用什么語句。在在C語言中表示條件,一般用關(guān)系表達式或邏輯表語言中表示條件,一般用關(guān)系表達式或邏輯表達式,實現(xiàn)選擇結(jié)構(gòu)用達式,實現(xiàn)選擇結(jié)構(gòu)用if語句或語句或switch語句。語句。 5.1 關(guān)系運算及其表達式關(guān)系運算及其表達式 5.2 邏輯運算及其表達式邏輯運算及其表達式 5.3 if語句語句 5.4 switch語句語句 5.5 選擇結(jié)構(gòu)程序舉例選擇
2、結(jié)構(gòu)程序舉例 5.1 關(guān)系運算及其表達式關(guān)系運算及其表達式所謂所謂“關(guān)系運算關(guān)系運算”實際上就是實際上就是“比較運算比較運算”,即將,即將兩個兩個數(shù)據(jù)進行比較,判定兩個數(shù)據(jù)是否符合給定的關(guān)數(shù)據(jù)進行比較,判定兩個數(shù)據(jù)是否符合給定的關(guān)系。系。 例如,例如,“a b”中的中的“”表示一個大于關(guān)系運算。表示一個大于關(guān)系運算。如如果果a的值是的值是5,b的值是的值是3,則大于關(guān)系運算,則大于關(guān)系運算“”的結(jié)的結(jié)果為果為“真真”,即條件成立;如果,即條件成立;如果a的值是的值是2,b的值的值是是3,則大于關(guān)系運算,則大于關(guān)系運算“”的結(jié)果為的結(jié)果為“假假”,即條件,即條件不成不成立。立。5.1.1 關(guān)系運
3、算符及其優(yōu)先次序關(guān)系運算符及其優(yōu)先次序1關(guān)系運算符關(guān)系運算符 C語言提供語言提供6種關(guān)系運算符:種關(guān)系運算符:, ,=, =, !=注意:在語言中,注意:在語言中,“等于等于”關(guān)系運算符是雙等號關(guān)系運算符是雙等號“= =”,而不是單等號,而不是單等號“= ”(賦值運算符)。(賦值運算符)。5.1 關(guān)系運算及其表達式關(guān)系運算及其表達式2優(yōu)先級優(yōu)先級 (1)在關(guān)系運算符中,前)在關(guān)系運算符中,前4個優(yōu)先級相同,后個優(yōu)先級相同,后2個也相個也相同,且前同,且前4個高于后個高于后2個。個。 (2)與其它種類運算符的優(yōu)先級關(guān)系)與其它種類運算符的優(yōu)先級關(guān)系關(guān)系運算符的優(yōu)先級,低于算術(shù)運算符,但高于賦值運
4、算符關(guān)系運算符的優(yōu)先級,低于算術(shù)運算符,但高于賦值運算符5.1.2 關(guān)系表達式關(guān)系表達式 1關(guān)系表達式的概念關(guān)系表達式的概念所謂關(guān)系表達式是指,用關(guān)系運算符將兩個表達式連接起所謂關(guān)系表達式是指,用關(guān)系運算符將兩個表達式連接起來,進行關(guān)系運算的式子。來,進行關(guān)系運算的式子。 例如,下面的關(guān)系表達式都是合法的:例如,下面的關(guān)系表達式都是合法的: ab,a+bc-d,(a=3)=b,(ab)= =(bc) 2關(guān)系表達式的值關(guān)系表達式的值邏輯值(非邏輯值(非“真真”即即“假假”)。)。 由于語言沒有邏輯型數(shù)據(jù),所以用整數(shù)由于語言沒有邏輯型數(shù)據(jù),所以用整數(shù)“”表示表示“邏邏輯輯真真”,用整數(shù),用整數(shù)“”
5、表示表示“邏輯假邏輯假”。5.1 關(guān)系運算及其表達式關(guān)系運算及其表達式例如,假設(shè)例如,假設(shè)num1=3,num2=4,num3=5,則:,則: (1)num1num2的值的值=0。 (2)(num1num2)!=num3的值的值=1。 (3)num1num2num3的值的值=1。 思考題:任意改變思考題:任意改變num1或或num2的值,會影響整的值,會影響整個表達式的值嗎?為什么?個表達式的值嗎?為什么? (4)(num1num2)+num3的值的值=6,因為,因為 num1=0”。如。如果果需要描述需要描述“x=0”、同時、同時“x=0) & (x10)的值為的值為“真真”,(x5
6、)的值為的值為“假假”。5.2 邏輯運算及其表達式邏輯運算及其表達式2邏輯運算符的運算優(yōu)先級邏輯運算符的運算優(yōu)先級 (1)邏輯非的優(yōu)先級最高,邏輯與次之,邏輯或最低,即:)邏輯非的優(yōu)先級最高,邏輯與次之,邏輯或最低,即:?。ǚ牵。ǚ牵?&(與)(與) |(或)(或) (2)與其它種類運算符的優(yōu)先關(guān)系)與其它種類運算符的優(yōu)先關(guān)系 ! 算術(shù)運算算術(shù)運算 關(guān)系運算關(guān)系運算 & | 賦值運算賦值運算 5.2.2 邏輯表達式邏輯表達式 1邏輯表達式的概念邏輯表達式的概念 所謂邏輯表達式是指,用邏輯運算符將所謂邏輯表達式是指,用邏輯運算符將1個或多個表達式個或多個表達式連接起來,進行邏輯
7、運算的式子。連接起來,進行邏輯運算的式子。在在C語言中,用邏輯表達語言中,用邏輯表達式表示多個條件的組合。式表示多個條件的組合。 例如,例如,(year%4=0)&(year%100!=0)|(year%400=0)就是一個判斷一個年份是否是閏年的邏輯表達式。就是一個判斷一個年份是否是閏年的邏輯表達式。5.2 邏輯運算及其表達式邏輯運算及其表達式邏輯表達式的值也是一個邏輯值(非邏輯表達式的值也是一個邏輯值(非“真真”即即“假假”)。)。 2邏輯量的真假判定邏輯量的真假判定和非和非 語言用整數(shù)語言用整數(shù)“”表示表示“邏輯真邏輯真”、用、用“”表示表示“邏邏輯假輯假”。但在判斷一個數(shù)據(jù)的但
8、在判斷一個數(shù)據(jù)的“真真”或或“假假”時,卻以和非為根時,卻以和非為根據(jù):據(jù):如果為,則判定為如果為,則判定為“邏輯假邏輯假”;如果為非,則判定為;如果為非,則判定為“邏邏輯真輯真”。即當(dāng)一個量(可以是基本類型的常量或變量)用作。即當(dāng)一個量(可以是基本類型的常量或變量)用作判斷時,判斷時,C編譯系統(tǒng)認為:非編譯系統(tǒng)認為:非0真,真,0假。假。 例如,假設(shè)例如,假設(shè)num=12,則:,則: !num的值的值= ,num=1 num31的值的值=1。3說明說明 (1)邏輯運算符兩側(cè)的操作數(shù),除可以是和非的整數(shù))邏輯運算符兩側(cè)的操作數(shù),除可以是和非的整數(shù)外,也可以是其它任何類型的數(shù)據(jù),如實型、字符型等
9、。外,也可以是其它任何類型的數(shù)據(jù),如實型、字符型等。5.2 邏輯運算及其表達式邏輯運算及其表達式(2)在計算邏輯表達式時,只有在必須執(zhí)行下一)在計算邏輯表達式時,只有在必須執(zhí)行下一個邏輯運算符才能求出表達式的解時,才執(zhí)行該運個邏輯運算符才能求出表達式的解時,才執(zhí)行該運算符(即并不是所有的表達式都被求解)。換句話算符(即并不是所有的表達式都被求解)。換句話說:說: 1)對于邏輯與運算,如果第一個操作數(shù)被判定為)對于邏輯與運算,如果第一個操作數(shù)被判定為“假假”,系統(tǒng)不再判定或求解第二操作數(shù)。,系統(tǒng)不再判定或求解第二操作數(shù)。 2)對于邏輯或運算,如果第一個操作數(shù)被判定為)對于邏輯或運算,如果第一個操
10、作數(shù)被判定為“真真”,系統(tǒng)不再判定或求解第二操作數(shù)。,系統(tǒng)不再判定或求解第二操作數(shù)。例如,假設(shè)例如,假設(shè)n1、n2、n3、n4、x、y的值分別為的值分別為1、2、3、4、1、1,則求解表達式,則求解表達式“(x=n1n2)&(y=n3n4)”后,后,x的值變?yōu)?,而的值變?yōu)椋鴜的值不變,仍等于的值不變,仍等于1!5.3 if語句語句 一、一、if語句的三種形式語句的三種形式1、條件執(zhí)行、條件執(zhí)行 if(表達式)表達式) 語句語句 例:例:If(a0) printf(“A is positive.n”) 例:例:if(xy) z=y; y=x; x=z; 2、分支選擇、分支選擇 if(表
11、達式表達式) 語句語句1 else 語句語句2當(dāng)表達式為真值(非當(dāng)表達式為真值(非0)時執(zhí)行語句)時執(zhí)行語句1,否則執(zhí)行語句,否則執(zhí)行語句2或后或后續(xù)語句。續(xù)語句。例如:例如:if(a0) printf(“A is positive.n”); else printf(“A is not positive.n”);5.3 if語句語句 注意注意(1)語句)語句1和語句和語句2都可以是單一語句,也可以是復(fù)都可以是單一語句,也可以是復(fù)合語句。合語句。 (2)else部分不能獨立存在,即部分不能獨立存在,即else前一定有一個前一定有一個“;”,它必定是,它必定是if語句的一部分。語句的一部分。 (3
12、)在)在C語言中,表達式的值為非語言中,表達式的值為非0時,系統(tǒng)均按真時,系統(tǒng)均按真值處理。(表達式為單個的邏輯量時)值處理。(表達式為單個的邏輯量時) 例如:例如:if(a) printf(“o.k.”); x=-5;if(x) printf(“o.k.”); y=0;if(y=0) printf(“o.k.”); if(y) printf(“o.k.”);由此可見,表達式的類型不限于邏輯表達式,可以是任意的由此可見,表達式的類型不限于邏輯表達式,可以是任意的數(shù)值類型(包括整型、實型、字符型、指針型數(shù)據(jù))。數(shù)值類型(包括整型、實型、字符型、指針型數(shù)據(jù))。5.3 if語句語句例例5-2 讀程序
13、讀程序 #include void main( ) float x,y; printf(“enter x:”); scanf(“%f”,&x); if(x=0.) y=1; else y=(x*5+1)/x; printf(“nx=%4.1fty=%4.1fn”,x,y); Y=1;if(x!=0.) y=(x*5+1)/x;思考:如果將思考:如果將y=1與與if語句調(diào)換位置,程序結(jié)果是否相同?語句調(diào)換位置,程序結(jié)果是否相同?5.3 if語句語句 例例5-3: 輸入一個整數(shù)輸入一個整數(shù)a,判斷它是偶數(shù)還是奇數(shù)?,判斷它是偶數(shù)還是奇數(shù)?分析:分析:a為輸入量,為輸入量, 判斷方法:判斷方
14、法:a%2=0 #include void main( ) int a; printf(“tinput a number: ”); scanf(“%d”,&a); if(a%2=0) printf(“nt%d is evenn”,a); else printf(“nt%d is oddn”,a); 5.3 if語句語句 例例5-4:任給:任給a,b,c三個數(shù),按從大到小的順序輸出。三個數(shù),按從大到小的順序輸出。分析:分析:(1)對于任意兩個數(shù)對于任意兩個數(shù)a,b; 若若ab,則輸出,則輸出a,b 否則輸出否則輸出b,a(2)對于三個數(shù),有對于三個數(shù),有6種可能:種可能: abc, ac
15、b, bac, bca, cab, cba(3)使用判斷交換法使用判斷交換法 若若ab, 則交換則交換a和和b 若若ac, 則交換則交換a和和c 結(jié)果結(jié)果a最大最大 若若bbc交換方法:設(shè)交換方法:設(shè)a=5,b=8 思考:思考: a=b;b=a;可以交換嗎?可以交換嗎? t=a; a=b; b=t;(要有一個中間變量)要有一個中間變量)5.3 if語句語句 N-S圖圖 輸入輸入a,b,cab?是是否否t=a; a=b; b=t;ac?是是否否t=a; a=c; c=t;bc?是是否否t=b; b=c; c=t;輸出輸出a,b,c5.3 if語句語句 # include void main( )
16、 int a,b,c,t; printf(“input a, b, c:”); scanf(“%d,%5d,%d”,&a,&b,&c); if(ab) t=a; a=b; 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); 5.3 if語句語句3、else if形式(階梯式的形式(階梯式的ifelse語句)語句)if(表達式(表達式1)語句)語句1else if(表達式(表達式2)語句)語句2else if(表達式(表達式3)語句)語句3 else if(表達式(表達式n
17、)語句)語句n else 語句語句n+1系統(tǒng)從上到下的逐個判斷表達式是否成立,一旦發(fā)現(xiàn)某表達式系統(tǒng)從上到下的逐個判斷表達式是否成立,一旦發(fā)現(xiàn)某表達式i成立,則成立,則執(zhí)行與它有關(guān)的語句執(zhí)行與它有關(guān)的語句i,并跳過其他剩余的階梯。若所有條件均不滿足,并跳過其他剩余的階梯。若所有條件均不滿足,執(zhí)行最后一個執(zhí)行最后一個else語句或后續(xù)語句。語句或后續(xù)語句。5.3 if語句語句 例例5-5:評價學(xué)生的成績:評價學(xué)生的成績 score90 優(yōu)秀,優(yōu)秀, score80 良好良好 ,score70 中中 score60 及格,及格,score60 不及格不及格 #include void main( )
18、 int score; printf(“input a score: ”); scanf(“%d”,&score); if(score=90 ) printf(“優(yōu)秀優(yōu)秀n”); else if(score=80) printf(“良好良好n”); else if(score=70) printf(“中中n”); else if(score=60) printf(“及格及格n”); else printf(“不及格不及格n”); 5.3 if語句語句 例例5-6:設(shè)平面上一點:設(shè)平面上一點M,其坐標(biāo)為,其坐標(biāo)為(x,y),若若M落在圓心在落在圓心在坐標(biāo)原點的單位圓上,則置坐標(biāo)原點的單位
19、圓上,則置key=1,落在圓外置,落在圓外置key=2,落在落在圓內(nèi)置圓內(nèi)置key=0.分析:分析: 求點求點M到原點的距離到原點的距離r 比較比較r和單位圓半徑的大小,從而得到相應(yīng)的和單位圓半徑的大小,從而得到相應(yīng)的key值。值。5.3 if語句語句 N-S圖圖輸入輸入x, yyxr22r1?是是否否Key=2r=1?是是否否Key=1Key=0輸出輸出key5.3 if語句語句 #include #include void main( ) float x, y, r; int key; printf(“input x, y:”); scanf(“%f,%f”,&x,&y);
20、 r=sqrt(x*x+y*y); if(r1) key=2; else if(r=1) key=1; else key=0; printf(“(%.1f,%.1f):%dn”,x,y,key); 5.3 if語句語句 二二 if語句的嵌套語句的嵌套 含義:在含義:在if語句中又包含一個或多個語句中又包含一個或多個if語句稱為語句稱為if語句的嵌語句的嵌套。套。 形式:形式:if( p1 ) if( p2 ) 語句語句1 else 語句語句2 else if( p3 ) 語句語句3 else 語句語句4p1真假p2真假語句1語句2p3真假語句3語句45.3 if語句語句 例5-7:計算函數(shù)3l
21、og33931102xxxxyxx5.3 if語句語句 #include #include void main( ) float x, y; printf(“t input x: ”); scanf(“%f”,&x); if(x=-3.0&x=3.0) y=sqrt(9.0-x*x); else y=log10(x); printf(“tx=%.1fty=%.1fn”,x,y); 5.3 if語句語句從上例可以看到,實際上,從上例可以看到,實際上, if語句的嵌套語句的嵌套實現(xiàn)了路分支。實現(xiàn)了路分支。在條件為真時在條件為真時可以分支,條件假時也可以分支,而我們前面講的可以分支,
22、條件假時也可以分支,而我們前面講的if.else語句只有兩語句只有兩個分支,個分支,else if形式只能在條件為假時才能分支。形式只能在條件為假時才能分支。注意:注意:我們前面講的我們前面講的if語句嵌套形式是一個比較理想的情況,即一個標(biāo)語句嵌套形式是一個比較理想的情況,即一個標(biāo)準(zhǔn)的形式,準(zhǔn)的形式,if塊有分支,塊有分支,else塊也有分支。在實際應(yīng)用當(dāng)中,并不是完塊也有分支。在實際應(yīng)用當(dāng)中,并不是完全使用這種形式,它還有一些改良的形式,如:全使用這種形式,它還有一些改良的形式,如:if(p1) A if(p1)else if(p2) A if(p3) C else B else D els
23、e C大家注意了,正是由于這些改良的形式,如果不當(dāng)心就容易出現(xiàn)問題。大家注意了,正是由于這些改良的形式,如果不當(dāng)心就容易出現(xiàn)問題。如:如:if(p1) if(p1) if(p2) A if(p2) A else else if(p3) C if(p3) C else D else Dif與與else的配對關(guān)的配對關(guān)系?系?5.3 if語句語句注意:注意:if與與else的配對關(guān)系的配對關(guān)系if語句嵌套時,語句嵌套時,else子句與子句與if的匹配原則:的匹配原則:與在它上面、距它與在它上面、距它最近、且尚未匹配的最近、且尚未匹配的if配對。配對。為明確匹配關(guān)系,避免匹配錯誤,為明確匹配關(guān)系,避
24、免匹配錯誤,強烈建議強烈建議:將內(nèi)嵌的:將內(nèi)嵌的if語語句,一律用花括號括起來。句,一律用花括號括起來。例例5-8 判斷某年是閏年。判斷某年是閏年。 分析:判別閏年的方法分析:判別閏年的方法 年份年份year能被能被4整除,但不能被整除,但不能被100整除;或能被整除;或能被400整除整除 用變量用變量leap代表是否閏年的信息。若閏年,令代表是否閏年的信息。若閏年,令leap1;非閏年,非閏年,leap=0。最后判斷。最后判斷l(xiāng)eap是否為是否為1(真),若是,則(真),若是,則輸出輸出“閏年閏年”信息。信息。5.3 if語句語句 N-S圖year能被4整除真假year被100整除假真lea
25、p=1year被400整除真假leap=1leap=0leap=0leap真假輸出“閏年”輸出“非閏年”5.3 if語句語句程序如下:程序如下: #include void main( ) int year,leap; scanf(“%d”,&year); if(year%4= =0) if(year%100= =0) if(year%400= =0) leap=1; else leap=0; else leap=1; else leap=0; if(leap) printf(“%d is ”,year); else printf(“%d is not”,year); printf(“
26、a leap year.n”); 5.3 if語句語句程序程序2: #include void main( ) int year,leap; printf(“”Which year?”); scanf(“%d”,&year); if(year%400=0) leap=1; else if(year%4=0) if(year%100=0) leap=0; else leap =1; else leap=0; if(leap=1) printf(“%d年是閏年年是閏年n”,year); else printf(“%d年不是閏年年不是閏年n”,year); 5.3 if語句語句上例我們用上例
27、我們用if嵌套形式設(shè)計的,當(dāng)然我們也可以用其他的形式,如用嵌套形式設(shè)計的,當(dāng)然我們也可以用其他的形式,如用else if形式設(shè)計:形式設(shè)計: if(year%4!=0) leap=0; else if(year%100!=0) leap=1; else if(year%400!=0) leap=0; else leap=1;當(dāng)然,也可以用一個邏輯表達式包含所有的閏年條件,因此上述當(dāng)然,也可以用一個邏輯表達式包含所有的閏年條件,因此上述if語句語句用下面的用下面的if語句代替語句代替If(year%4=0&year%100!=0)|(year%400=0) leap=1;else lea
28、p=0;5.3 if語句語句總之,我們設(shè)計一個程序的方法多種多樣,比如,我們的例總之,我們設(shè)計一個程序的方法多種多樣,比如,我們的例7是用是用if嵌套嵌套的形式,當(dāng)然也可以用第一種的形式,當(dāng)然也可以用第一種if語句形式:語句形式: if(x=-3.0&x3) y=log10(x);這樣要比用這樣要比用if嵌套來得簡潔,但是要注意條件的上下限。嵌套來得簡潔,但是要注意條件的上下限。三、條件運算符和條件表達式三、條件運算符和條件表達式 1.條件運算符條件運算符 ?和:?和: C語言中唯一的一個三目運算符語言中唯一的一個三目運算符 2.條件表達式條件表達式 表達式表達式1?表達式?表達式2:
29、表達式:表達式3 如:如:ab?a:b x=1.0?1:sin(x)/x 3.執(zhí)行過程執(zhí)行過程 計算表達式計算表達式1 表達式表達式1的值為非的值為非0(真),計算并返回表達式(真),計算并返回表達式2的值否則計算并返的值否則計算并返回表達式回表達式3的值的值5.3 if語句語句 4.運算順序運算順序 高于賦值運算,低于算術(shù)、關(guān)系、邏輯運算高于賦值運算,低于算術(shù)、關(guān)系、邏輯運算如:如:y=x= =0.?1.0:sin(x)/x等價于:等價于:if(x= =0.) y=1.0; else y=sin(x)/x;5.條件運算符的結(jié)合方向是條件運算符的結(jié)合方向是”右結(jié)合右結(jié)合”。如:如:ab?a:c
30、d?c:d 等價與等價與 ab?a:(cd?c:d)5.3 if語句語句例例5-9:讀程序,寫出程序完成的功能:讀程序,寫出程序完成的功能 #include void main( ) int a,b,imax; printf(“input data to a and b: ”); scanf(“%d,%d”,&a,&b); imax=ab?a:b; printf(“The max is %dn”,imax); /*/ printf(“max=%dn”,imax=ab?a:b); /*/ printf(“max=%dn”,ab?a:b)5.3 if語句語句此程序的功能是找出此程序
31、的功能是找出a與與b兩個數(shù)中的大數(shù)。兩個數(shù)中的大數(shù)。思考:思考:n個數(shù)中如何找出最大數(shù)或最小數(shù)?個數(shù)中如何找出最大數(shù)或最小數(shù)?例例5-10: 任意輸入一個字符,若是大寫字母將其轉(zhuǎn)換成小寫任意輸入一個字符,若是大寫字母將其轉(zhuǎn)換成小寫字母字母分析:判斷一個字符是否為大寫字母的方法:分析:判斷一個字符是否為大寫字母的方法: ch=A & ch=65 & ch=90大寫字母轉(zhuǎn)換為小寫字母的方法:大寫字母轉(zhuǎn)換為小寫字母的方法: ch+32 ch+(a-A)5.3 if語句語句程序如下:程序如下: #include void main( ) char ch; ch=getchar( );
32、ch=(ch=A & ch=65 & ch=A & chb ? (a=100) : (b=100) ab ? printf(“%d”,a) : printf(“%d”,b) (2)條件表達式中,表達式)條件表達式中,表達式1的類型可以與表達式的類型可以與表達式2和表達式和表達式3的類型不同。如:的類型不同。如:x ? a : b (x為整型為整型) (3)表達式)表達式2和表達式和表達式3的類型也可以不同,此時條件表達式的的類型也可以不同,此時條件表達式的值的類型為二者中較高的類型。如:值的類型為二者中較高的類型。如: xy ? 1 : 1.5請寫出num輸入值分別為5
33、、10、15時程序的運行結(jié)果:1、if (num6) if (num6) if (num12) printf (“youre close!n”); else printf (“sorry,you lose a turn!n”);5.4 switch語句語句亦稱開關(guān)語句或多分支語句,它比用嵌套的亦稱開關(guān)語句或多分支語句,它比用嵌套的if語句實現(xiàn)多路分支問題,語句實現(xiàn)多路分支問題,其程序結(jié)構(gòu)清晰、易讀。其程序結(jié)構(gòu)清晰、易讀。一、一、switch語句的一般形式語句的一般形式 switch(表達式表達式) case 常量表達式常量表達式1:語句組;:語句組;break; case 常量表達式常量表達式
34、2:語句組;:語句組;break; . case 常量表達式:語句組;常量表達式:語句組;break; default:語句組;:語句組;break; 二、執(zhí)行過程二、執(zhí)行過程 (1)當(dāng))當(dāng)switch后面后面“表達式表達式”的值,與某個的值,與某個case后面的后面的“常常量表達式量表達式”的值相同時,就執(zhí)行該的值相同時,就執(zhí)行該case后面的語句(組);后面的語句(組);當(dāng)執(zhí)行到當(dāng)執(zhí)行到break語句時,跳出語句時,跳出switch語句,轉(zhuǎn)向執(zhí)行語句,轉(zhuǎn)向執(zhí)行switch語句的下一條。語句的下一條。5.4 switch語句語句(2)如果沒有任何一個)如果沒有任何一個case后面的后面的“常
35、量表達式常量表達式”的值,的值,與與“表達式表達式”的值匹配,則執(zhí)行的值匹配,則執(zhí)行default 后面的語句(組)。后面的語句(組)。然然后,再執(zhí)行后,再執(zhí)行switch語句的下一條。語句的下一條。說明:說明:(1)switch后面的后面的“表達式表達式”,可以是,可以是int、char和枚舉型和枚舉型中中的一種。的一種。(2)每個)每個case后面后面“常量表達式常量表達式”的值,必須各不相同,的值,必須各不相同,否否則會出現(xiàn)相互矛盾的現(xiàn)象(即對表達式的同一值,有兩種或則會出現(xiàn)相互矛盾的現(xiàn)象(即對表達式的同一值,有兩種或兩種以上的執(zhí)行方案)。兩種以上的執(zhí)行方案)。(3)case后面的常量表
36、達式僅起語句標(biāo)號作用,并不進行后面的常量表達式僅起語句標(biāo)號作用,并不進行條件判斷。條件判斷。系統(tǒng)一旦找到入口標(biāo)號,就從此標(biāo)號開始執(zhí)行,系統(tǒng)一旦找到入口標(biāo)號,就從此標(biāo)號開始執(zhí)行,不再進行標(biāo)號判斷,所以必須加上不再進行標(biāo)號判斷,所以必須加上break語句,以便結(jié)束語句,以便結(jié)束switch語句。語句。5.4 switch語句語句(4)各)各case及及default子句的先后次序,不影響程序執(zhí)行結(jié)子句的先后次序,不影響程序執(zhí)行結(jié)果。果。(5)多個)多個case子句,可共用同一語句(組)。子句,可共用同一語句(組)。(6)用)用switch語句實現(xiàn)的多分支結(jié)構(gòu)程序,完全可以用語句實現(xiàn)的多分支結(jié)構(gòu)程序
37、,完全可以用if語語句或句或if語句的嵌套來實現(xiàn)。語句的嵌套來實現(xiàn)。例:例: switch(x) case 1: printf(“statement 1”); break; case 2: printf(“statement 2”); break; default: printf(“default”); 請寫出當(dāng)ch分別為1、2、3、4、5時程序的運行結(jié)果: Switch (ch) case1; case2: printf (“How do you do!n”); break; case3: printf (“Quite right!n”); case4: printf (“Good show
38、!n”); break; default : printf (“Have a nice day!n”); 5.4 switch語句語句例例5-11:用用switch語句重做例語句重做例5-5(評價學(xué)生的成績)(評價學(xué)生的成績) #include void main( ) int score; printf(“input a score: ”); scanf(“%d”,&score); switch(score/10) case 10: case 9: printf(“優(yōu)秀優(yōu)秀n”); break; case 8: printf(“良好良好n”); break; case 7: prin
39、tf(“中中n”); break; case 6: printf(“及格及格n”); break; default: printf(“不及格不及格n”);); 關(guān)鍵:如何表示關(guān)鍵:如何表示表達式表達式和和常量常量,常量的取值與表達式有關(guān),常量的取值與表達式有關(guān)5.4 switch語句語句例例5-12: 運輸公司對用戶計算運費。收費標(biāo)準(zhǔn)隨距離運輸公司對用戶計算運費。收費標(biāo)準(zhǔn)隨距離s變化如變化如下:下: s250 沒有折扣沒有折扣 250s500 2%折扣折扣 500s1000 5%折扣折扣 1000s2000 8%折扣折扣 2000s3000 10%折扣折扣 3000s 15%折扣折扣分析:計費
40、是按照運輸距離分析:計費是按照運輸距離s和貨物重量和貨物重量w進行的。設(shè)每公進行的。設(shè)每公里每噸貨物的基本運費為里每噸貨物的基本運費為p,考慮折扣,考慮折扣d時,總運費的計算公時,總運費的計算公式為:式為: f=p*w*s*(1-d)5.4 switch語句語句折扣變化圖:折扣變化圖:0246810121416250500100020003000124812折扣d()sc5.4 switch語句語句從上圖可以看到,折扣的變化是有規(guī)律的:從上圖可以看到,折扣的變化是有規(guī)律的:折扣的折扣的“變化點變化點”都是都是250的倍數(shù)(的倍數(shù)(250、500、1000、2000、3000)。利用這一特點,可
41、以在橫軸上加一種坐標(biāo))。利用這一特點,可以在橫軸上加一種坐標(biāo)c,c的值為的值為s/250。即。即c代表代表250的倍數(shù)。的倍數(shù)。當(dāng)當(dāng)c1時,表示時,表示s250,無折扣;無折扣;1c2時,時,以以此類推,此類推,c12時,時,d=15%.據(jù)此程序如下:據(jù)此程序如下:5.4 switch語句語句#includevoid main( ) int c,s; float p,w,d,f; scanf(“%f,%f,%d”,&p,&w,&s); if(s=3000) c=12 else c=s/250; switch(c) case 0: d=0; break; case 1: d=2; break; case 2: case 3: d=5; break; case 4: case 5: case 6: case 7;d=8; break; case 8: case 9: case 10: case 11: d=10; break; case 12: d=15; break;5
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司換部門合同范本
- 年度渦輪機葉片表面改性材料競爭策略分析報告
- 年度特種用途鋼絲及鋼絲繩競爭策略分析報告
- 2025屆云南省昆明市官渡區(qū)六校物理高二上期末考試試題含解析
- 河南省許平汝九校聯(lián)盟2025屆物理高一第一學(xué)期期中學(xué)業(yè)水平測試試題含解析
- 江蘇省鹽城市濱??h蔡橋初級中學(xué)等三校2025屆物理高二第一學(xué)期期末復(fù)習(xí)檢測模擬試題含解析
- 黑龍江省重點中學(xué)2025屆物理高一上期中綜合測試模擬試題含解析
- 云南省曲靖市宜良縣第八中學(xué)2025屆物理高一第一學(xué)期期中檢測試題含解析
- 巢湖市重點中學(xué)2025屆高二物理第一學(xué)期期末教學(xué)質(zhì)量檢測模擬試題含解析
- 2025屆吉林省汪清縣汪清四中物理高三第一學(xué)期期末經(jīng)典試題含解析
- 【高中班主任育人方略】《以德樹人、以情聚人、以理律人》課件
- 中醫(yī)護理方案考核標(biāo)準(zhǔn)
- 一例肺癌術(shù)后并發(fā)肺栓塞患者的個案護理
- 2022版新課標(biāo)初中數(shù)學(xué)《數(shù)與代數(shù)、圖形與幾何》解讀
- 心房顫動診斷和治療中國指南(2023) 解讀
- 期中模擬試卷(試題)2023-2024學(xué)年外研版(一起)英語五年級上冊
- 唐宋名家詞智慧樹知到期末考試答案2024年
- 2024年4月貴州省高三年級適應(yīng)性考試歷史試卷
- 臨“震”不慌+守護生命安全-防震減災(zāi)安全教育原創(chuàng)
- 2023年紹興市嵊州市事業(yè)單位招聘考試真題及答案
- 隱蔽致災(zāi)因素培訓(xùn)課件
評論
0/150
提交評論