c程序設(shè)計(jì) 第五章選擇結(jié)構(gòu)程序設(shè)計(jì)_第1頁
c程序設(shè)計(jì) 第五章選擇結(jié)構(gòu)程序設(shè)計(jì)_第2頁
c程序設(shè)計(jì) 第五章選擇結(jié)構(gòu)程序設(shè)計(jì)_第3頁
c程序設(shè)計(jì) 第五章選擇結(jié)構(gòu)程序設(shè)計(jì)_第4頁
c程序設(shè)計(jì) 第五章選擇結(jié)構(gòu)程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第第5章章 選擇結(jié)構(gòu)程序設(shè)計(jì)選擇結(jié)構(gòu)程序設(shè)計(jì)要設(shè)計(jì)選擇結(jié)構(gòu)程序,要考慮兩個(gè)方面的問題:一要設(shè)計(jì)選擇結(jié)構(gòu)程序,要考慮兩個(gè)方面的問題:一是在是在C語言中如何來表示條件,二是在語言中如何來表示條件,二是在C語言中實(shí)現(xiàn)語言中實(shí)現(xiàn)選擇結(jié)構(gòu)用什么語句。選擇結(jié)構(gòu)用什么語句。在在C語言中表示條件,一般用關(guān)系表達(dá)式或邏輯表語言中表示條件,一般用關(guān)系表達(dá)式或邏輯表達(dá)式,實(shí)現(xiàn)選擇結(jié)構(gòu)用達(dá)式,實(shí)現(xiàn)選擇結(jié)構(gòu)用if語句或語句或switch語句。語句。 5.1 關(guān)系運(yùn)算及其表達(dá)式關(guān)系運(yùn)算及其表達(dá)式 5.2 邏輯運(yùn)算及其表達(dá)式邏輯運(yùn)算及其表達(dá)式 5.3 if語句語句 5.4 switch語句語句 5.5 選擇結(jié)構(gòu)程序舉例選擇

2、結(jié)構(gòu)程序舉例 5.1 關(guān)系運(yùn)算及其表達(dá)式關(guān)系運(yùn)算及其表達(dá)式所謂所謂“關(guān)系運(yùn)算關(guān)系運(yùn)算”實(shí)際上就是實(shí)際上就是“比較運(yùn)算比較運(yùn)算”,即將,即將兩個(gè)兩個(gè)數(shù)據(jù)進(jìn)行比較,判定兩個(gè)數(shù)據(jù)是否符合給定的關(guān)數(shù)據(jù)進(jìn)行比較,判定兩個(gè)數(shù)據(jù)是否符合給定的關(guān)系。系。 例如,例如,“a b”中的中的“”表示一個(gè)大于關(guān)系運(yùn)算。表示一個(gè)大于關(guān)系運(yùn)算。如如果果a的值是的值是5,b的值是的值是3,則大于關(guān)系運(yùn)算,則大于關(guān)系運(yùn)算“”的結(jié)的結(jié)果為果為“真真”,即條件成立;如果,即條件成立;如果a的值是的值是2,b的值的值是是3,則大于關(guān)系運(yùn)算,則大于關(guān)系運(yùn)算“”的結(jié)果為的結(jié)果為“假假”,即條件,即條件不成不成立。立。5.1.1 關(guān)系運(yùn)

3、算符及其優(yōu)先次序關(guān)系運(yùn)算符及其優(yōu)先次序1關(guān)系運(yùn)算符關(guān)系運(yùn)算符 C語言提供語言提供6種關(guān)系運(yùn)算符:種關(guān)系運(yùn)算符:, ,=, =, !=注意:在語言中,注意:在語言中,“等于等于”關(guān)系運(yùn)算符是雙等號(hào)關(guān)系運(yùn)算符是雙等號(hào)“= =”,而不是單等號(hào),而不是單等號(hào)“= ”(賦值運(yùn)算符)。(賦值運(yùn)算符)。5.1 關(guān)系運(yùn)算及其表達(dá)式關(guān)系運(yùn)算及其表達(dá)式2優(yōu)先級(jí)優(yōu)先級(jí) (1)在關(guān)系運(yùn)算符中,前)在關(guān)系運(yùn)算符中,前4個(gè)優(yōu)先級(jí)相同,后個(gè)優(yōu)先級(jí)相同,后2個(gè)也相個(gè)也相同,且前同,且前4個(gè)高于后個(gè)高于后2個(gè)。個(gè)。 (2)與其它種類運(yùn)算符的優(yōu)先級(jí)關(guān)系)與其它種類運(yùn)算符的優(yōu)先級(jí)關(guān)系關(guān)系運(yùn)算符的優(yōu)先級(jí),低于算術(shù)運(yùn)算符,但高于賦值運(yùn)

4、算符關(guān)系運(yùn)算符的優(yōu)先級(jí),低于算術(shù)運(yùn)算符,但高于賦值運(yùn)算符5.1.2 關(guān)系表達(dá)式關(guān)系表達(dá)式 1關(guān)系表達(dá)式的概念關(guān)系表達(dá)式的概念所謂關(guān)系表達(dá)式是指,用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起所謂關(guān)系表達(dá)式是指,用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起來,進(jìn)行關(guān)系運(yùn)算的式子。來,進(jìn)行關(guān)系運(yùn)算的式子。 例如,下面的關(guān)系表達(dá)式都是合法的:例如,下面的關(guān)系表達(dá)式都是合法的: ab,a+bc-d,(a=3)=b,(ab)= =(bc) 2關(guān)系表達(dá)式的值關(guān)系表達(dá)式的值邏輯值(非邏輯值(非“真真”即即“假假”)。)。 由于語言沒有邏輯型數(shù)據(jù),所以用整數(shù)由于語言沒有邏輯型數(shù)據(jù),所以用整數(shù)“”表示表示“邏邏輯輯真真”,用整數(shù),用整數(shù)“”

5、表示表示“邏輯假邏輯假”。5.1 關(guān)系運(yùn)算及其表達(dá)式關(guān)系運(yùn)算及其表達(dá)式例如,假設(shè)例如,假設(shè)num1=3,num2=4,num3=5,則:,則: (1)num1num2的值的值=0。 (2)(num1num2)!=num3的值的值=1。 (3)num1num2num3的值的值=1。 思考題:任意改變思考題:任意改變num1或或num2的值,會(huì)影響整的值,會(huì)影響整個(gè)表達(dá)式的值嗎?為什么?個(gè)表達(dá)式的值嗎?為什么? (4)(num1num2)+num3的值的值=6,因?yàn)?,因?yàn)?num1=0”。如。如果果需要描述需要描述“x=0”、同時(shí)、同時(shí)“x=0) & (x10)的值為的值為“真真”,(x5

6、)的值為的值為“假假”。5.2 邏輯運(yùn)算及其表達(dá)式邏輯運(yùn)算及其表達(dá)式2邏輯運(yùn)算符的運(yùn)算優(yōu)先級(jí)邏輯運(yùn)算符的運(yùn)算優(yōu)先級(jí) (1)邏輯非的優(yōu)先級(jí)最高,邏輯與次之,邏輯或最低,即:)邏輯非的優(yōu)先級(jí)最高,邏輯與次之,邏輯或最低,即:?。ǚ牵。ǚ牵?&(與)(與) |(或)(或) (2)與其它種類運(yùn)算符的優(yōu)先關(guān)系)與其它種類運(yùn)算符的優(yōu)先關(guān)系 ! 算術(shù)運(yùn)算算術(shù)運(yùn)算 關(guān)系運(yùn)算關(guān)系運(yùn)算 & | 賦值運(yùn)算賦值運(yùn)算 5.2.2 邏輯表達(dá)式邏輯表達(dá)式 1邏輯表達(dá)式的概念邏輯表達(dá)式的概念 所謂邏輯表達(dá)式是指,用邏輯運(yùn)算符將所謂邏輯表達(dá)式是指,用邏輯運(yùn)算符將1個(gè)或多個(gè)表達(dá)式個(gè)或多個(gè)表達(dá)式連接起來,進(jìn)行邏輯

7、運(yùn)算的式子。連接起來,進(jìn)行邏輯運(yùn)算的式子。在在C語言中,用邏輯表達(dá)語言中,用邏輯表達(dá)式表示多個(gè)條件的組合。式表示多個(gè)條件的組合。 例如,例如,(year%4=0)&(year%100!=0)|(year%400=0)就是一個(gè)判斷一個(gè)年份是否是閏年的邏輯表達(dá)式。就是一個(gè)判斷一個(gè)年份是否是閏年的邏輯表達(dá)式。5.2 邏輯運(yùn)算及其表達(dá)式邏輯運(yùn)算及其表達(dá)式邏輯表達(dá)式的值也是一個(gè)邏輯值(非邏輯表達(dá)式的值也是一個(gè)邏輯值(非“真真”即即“假假”)。)。 2邏輯量的真假判定邏輯量的真假判定和非和非 語言用整數(shù)語言用整數(shù)“”表示表示“邏輯真邏輯真”、用、用“”表示表示“邏邏輯假輯假”。但在判斷一個(gè)數(shù)據(jù)的但

8、在判斷一個(gè)數(shù)據(jù)的“真真”或或“假假”時(shí),卻以和非為根時(shí),卻以和非為根據(jù):據(jù):如果為,則判定為如果為,則判定為“邏輯假邏輯假”;如果為非,則判定為;如果為非,則判定為“邏邏輯真輯真”。即當(dāng)一個(gè)量(可以是基本類型的常量或變量)用作。即當(dāng)一個(gè)量(可以是基本類型的常量或變量)用作判斷時(shí),判斷時(shí),C編譯系統(tǒng)認(rèn)為:非編譯系統(tǒng)認(rèn)為:非0真,真,0假。假。 例如,假設(shè)例如,假設(shè)num=12,則:,則: !num的值的值= ,num=1 num31的值的值=1。3說明說明 (1)邏輯運(yùn)算符兩側(cè)的操作數(shù),除可以是和非的整數(shù))邏輯運(yùn)算符兩側(cè)的操作數(shù),除可以是和非的整數(shù)外,也可以是其它任何類型的數(shù)據(jù),如實(shí)型、字符型等

9、。外,也可以是其它任何類型的數(shù)據(jù),如實(shí)型、字符型等。5.2 邏輯運(yùn)算及其表達(dá)式邏輯運(yùn)算及其表達(dá)式(2)在計(jì)算邏輯表達(dá)式時(shí),只有在必須執(zhí)行下一)在計(jì)算邏輯表達(dá)式時(shí),只有在必須執(zhí)行下一個(gè)邏輯運(yùn)算符才能求出表達(dá)式的解時(shí),才執(zhí)行該運(yùn)個(gè)邏輯運(yùn)算符才能求出表達(dá)式的解時(shí),才執(zhí)行該運(yùn)算符(即并不是所有的表達(dá)式都被求解)。換句話算符(即并不是所有的表達(dá)式都被求解)。換句話說:說: 1)對(duì)于邏輯與運(yùn)算,如果第一個(gè)操作數(shù)被判定為)對(duì)于邏輯與運(yùn)算,如果第一個(gè)操作數(shù)被判定為“假假”,系統(tǒng)不再判定或求解第二操作數(shù)。,系統(tǒng)不再判定或求解第二操作數(shù)。 2)對(duì)于邏輯或運(yùn)算,如果第一個(gè)操作數(shù)被判定為)對(duì)于邏輯或運(yùn)算,如果第一個(gè)操

10、作數(shù)被判定為“真真”,系統(tǒng)不再判定或求解第二操作數(shù)。,系統(tǒng)不再判定或求解第二操作數(shù)。例如,假設(shè)例如,假設(shè)n1、n2、n3、n4、x、y的值分別為的值分別為1、2、3、4、1、1,則求解表達(dá)式,則求解表達(dá)式“(x=n1n2)&(y=n3n4)”后,后,x的值變?yōu)?,而的值變?yōu)?,而y的值不變,仍等于的值不變,仍等于1!5.3 if語句語句 一、一、if語句的三種形式語句的三種形式1、條件執(zhí)行、條件執(zhí)行 if(表達(dá)式)表達(dá)式) 語句語句 例:例:If(a0) printf(“A is positive.n”) 例:例:if(xy) z=y; y=x; x=z; 2、分支選擇、分支選擇 if(表

11、達(dá)式表達(dá)式) 語句語句1 else 語句語句2當(dāng)表達(dá)式為真值(非當(dāng)表達(dá)式為真值(非0)時(shí)執(zhí)行語句)時(shí)執(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部分不能獨(dú)立存在,即部分不能獨(dú)立存在,即else前一定有一個(gè)前一定有一個(gè)“;”,它必定是,它必定是if語句的一部分。語句的一部分。 (3

12、)在)在C語言中,表達(dá)式的值為非語言中,表達(dá)式的值為非0時(shí),系統(tǒng)均按真時(shí),系統(tǒng)均按真值處理。(表達(dá)式為單個(gè)的邏輯量時(shí))值處理。(表達(dá)式為單個(gè)的邏輯量時(shí)) 例如:例如: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.”);由此可見,表達(dá)式的類型不限于邏輯表達(dá)式,可以是任意的由此可見,表達(dá)式的類型不限于邏輯表達(dá)式,可以是任意的數(shù)值類型(包括整型、實(shí)型、字符型、指針型數(shù)據(jù))。數(shù)值類型(包括整型、實(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: 輸入一個(gè)整數(shù)輸入一個(gè)整數(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三個(gè)數(shù),按從大到小的順序輸出。三個(gè)數(shù),按從大到小的順序輸出。分析:分析:(1)對(duì)于任意兩個(gè)數(shù)對(duì)于任意兩個(gè)數(shù)a,b; 若若ab,則輸出,則輸出a,b 否則輸出否則輸出b,a(2)對(duì)于三個(gè)數(shù),有對(duì)于三個(gè)數(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;(要有一個(gè)中間變量)要有一個(gè)中間變量)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(表達(dá)式(表達(dá)式1)語句)語句1else if(表達(dá)式(表達(dá)式2)語句)語句2else if(表達(dá)式(表達(dá)式3)語句)語句3 else if(表達(dá)式(表達(dá)式n

17、)語句)語句n else 語句語句n+1系統(tǒng)從上到下的逐個(gè)判斷表達(dá)式是否成立,一旦發(fā)現(xiàn)某表達(dá)式系統(tǒng)從上到下的逐個(gè)判斷表達(dá)式是否成立,一旦發(fā)現(xiàn)某表達(dá)式i成立,則成立,則執(zhí)行與它有關(guān)的語句執(zhí)行與它有關(guān)的語句i,并跳過其他剩余的階梯。若所有條件均不滿足,并跳過其他剩余的階梯。若所有條件均不滿足,執(zhí)行最后一個(gè)執(zhí)行最后一個(gè)else語句或后續(xù)語句。語句或后續(xù)語句。5.3 if語句語句 例例5-5:評(píng)價(jià)學(xué)生的成績(jī):評(píng)價(jià)學(xué)生的成績(jī) 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è)平面上一點(diǎn):設(shè)平面上一點(diǎn)M,其坐標(biāo)為,其坐標(biāo)為(x,y),若若M落在圓心在落在圓心在坐標(biāo)原點(diǎn)的單位圓上,則置坐標(biāo)原點(diǎn)的單位

19、圓上,則置key=1,落在圓外置,落在圓外置key=2,落在落在圓內(nèi)置圓內(nèi)置key=0.分析:分析: 求點(diǎn)求點(diǎn)M到原點(diǎn)的距離到原點(diǎn)的距離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語句中又包含一個(gè)或多個(gè)語句中又包含一個(gè)或多個(gè)if語句稱為語句稱為if語句的嵌語句的嵌套。套。 形式:形式:if( p1 ) if( p2 ) 語句語句1 else 語句語句2 else if( p3 ) 語句語句3 else 語句語句4p1真假p2真假語句1語句2p3真假語句3語句45.3 if語句語句 例5-7:計(jì)算函數(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語句語句從上例可以看到,實(shí)際上,從上例可以看到,實(shí)際上, if語句的嵌套語句的嵌套實(shí)現(xiàn)了路分支。實(shí)現(xiàn)了路分支。在條件為真時(shí)在條件為真時(shí)可以分支,條件假時(shí)也可以分支,而我們前面講的可以分支,

22、條件假時(shí)也可以分支,而我們前面講的if.else語句只有兩語句只有兩個(gè)分支,個(gè)分支,else if形式只能在條件為假時(shí)才能分支。形式只能在條件為假時(shí)才能分支。注意:注意:我們前面講的我們前面講的if語句嵌套形式是一個(gè)比較理想的情況,即一個(gè)標(biāo)語句嵌套形式是一個(gè)比較理想的情況,即一個(gè)標(biāo)準(zhǔn)的形式,準(zhǔn)的形式,if塊有分支,塊有分支,else塊也有分支。在實(shí)際應(yīng)用當(dāng)中,并不是完塊也有分支。在實(shí)際應(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的配對(duì)關(guān)的配對(duì)關(guān)系?系?5.3 if語句語句注意:注意:if與與else的配對(duì)關(guān)系的配對(duì)關(guān)系if語句嵌套時(shí),語句嵌套時(shí),else子句與子句與if的匹配原則:的匹配原則:與在它上面、距它與在它上面、距它最近、且尚未匹配的最近、且尚未匹配的if配對(duì)。配對(duì)。為明確匹配關(guān)系,避免匹配錯(cuò)誤,為明確匹配關(guān)系,避

24、免匹配錯(cuò)誤,強(qiáng)烈建議強(qiáng)烈建議:將內(nèi)嵌的:將內(nèi)嵌的if語語句,一律用花括號(hào)括起來。句,一律用花括號(hào)括起來。例例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è)計(jì)的,當(dāng)然我們也可以用其他的形式,如用嵌套形式設(shè)計(jì)的,當(dāng)然我們也可以用其他的形式,如用else if形式設(shè)計(jì):形式設(shè)計(jì): 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)然,也可以用一個(gè)邏輯表達(dá)式包含所有的閏年條件,因此上述當(dāng)然,也可以用一個(gè)邏輯表達(dá)式包含所有的閏年條件,因此上述if語句語句用下面的用下面的if語句代替語句代替If(year%4=0&year%100!=0)|(year%400=0) leap=1;else lea

28、p=0;5.3 if語句語句總之,我們?cè)O(shè)計(jì)一個(gè)程序的方法多種多樣,比如,我們的例總之,我們?cè)O(shè)計(jì)一個(gè)程序的方法多種多樣,比如,我們的例7是用是用if嵌套嵌套的形式,當(dāng)然也可以用第一種的形式,當(dāng)然也可以用第一種if語句形式:語句形式: if(x=-3.0&x3) y=log10(x);這樣要比用這樣要比用if嵌套來得簡(jiǎn)潔,但是要注意條件的上下限。嵌套來得簡(jiǎn)潔,但是要注意條件的上下限。三、條件運(yùn)算符和條件表達(dá)式三、條件運(yùn)算符和條件表達(dá)式 1.條件運(yùn)算符條件運(yùn)算符 ?和:?和: C語言中唯一的一個(gè)三目運(yùn)算符語言中唯一的一個(gè)三目運(yùn)算符 2.條件表達(dá)式條件表達(dá)式 表達(dá)式表達(dá)式1?表達(dá)式?表達(dá)式2:

29、表達(dá)式:表達(dá)式3 如:如:ab?a:b x=1.0?1:sin(x)/x 3.執(zhí)行過程執(zhí)行過程 計(jì)算表達(dá)式計(jì)算表達(dá)式1 表達(dá)式表達(dá)式1的值為非的值為非0(真),計(jì)算并返回表達(dá)式(真),計(jì)算并返回表達(dá)式2的值否則計(jì)算并返的值否則計(jì)算并返回表達(dá)式回表達(dá)式3的值的值5.3 if語句語句 4.運(yùn)算順序運(yùn)算順序 高于賦值運(yùn)算,低于算術(shù)、關(guān)系、邏輯運(yùn)算高于賦值運(yùn)算,低于算術(shù)、關(guān)系、邏輯運(yùn)算如:如:y=x= =0.?1.0:sin(x)/x等價(jià)于:等價(jià)于:if(x= =0.) y=1.0; else y=sin(x)/x;5.條件運(yùn)算符的結(jié)合方向是條件運(yùn)算符的結(jié)合方向是”右結(jié)合右結(jié)合”。如:如:ab?a:c

30、d?c:d 等價(jià)與等價(jià)與 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兩個(gè)數(shù)中的大數(shù)。兩個(gè)數(shù)中的大數(shù)。思考:思考:n個(gè)數(shù)中如何找出最大數(shù)或最小數(shù)?個(gè)數(shù)中如何找出最大數(shù)或最小數(shù)?例例5-10: 任意輸入一個(gè)字符,若是大寫字母將其轉(zhuǎn)換成小寫任意輸入一個(gè)字符,若是大寫字母將其轉(zhuǎn)換成小寫字母字母分析:判斷一個(gè)字符是否為大寫字母的方法:分析:判斷一個(gè)字符是否為大寫字母的方法: 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)條件表達(dá)式中,表達(dá)式)條件表達(dá)式中,表達(dá)式1的類型可以與表達(dá)式的類型可以與表達(dá)式2和表達(dá)式和表達(dá)式3的類型不同。如:的類型不同。如:x ? a : b (x為整型為整型) (3)表達(dá)式)表達(dá)式2和表達(dá)式和表達(dá)式3的類型也可以不同,此時(shí)條件表達(dá)式的的類型也可以不同,此時(shí)條件表達(dá)式的值的類型為二者中較高的類型。如:值的類型為二者中較高的類型。如: xy ? 1 : 1.5請(qǐng)寫出num輸入值分別為5

33、、10、15時(shí)程序的運(yùn)行結(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語句實(shí)現(xiàn)多路分支問題,語句實(shí)現(xiàn)多路分支問題,其程序結(jié)構(gòu)清晰、易讀。其程序結(jié)構(gòu)清晰、易讀。一、一、switch語句的一般形式語句的一般形式 switch(表達(dá)式表達(dá)式) case 常量表達(dá)式常量表達(dá)式1:語句組;:語句組;break; case 常量表達(dá)式常量表達(dá)式

34、2:語句組;:語句組;break; . case 常量表達(dá)式:語句組;常量表達(dá)式:語句組;break; default:語句組;:語句組;break; 二、執(zhí)行過程二、執(zhí)行過程 (1)當(dāng))當(dāng)switch后面后面“表達(dá)式表達(dá)式”的值,與某個(gè)的值,與某個(gè)case后面的后面的“常常量表達(dá)式量表達(dá)式”的值相同時(shí),就執(zhí)行該的值相同時(shí),就執(zhí)行該case后面的語句(組);后面的語句(組);當(dāng)執(zhí)行到當(dāng)執(zhí)行到break語句時(shí),跳出語句時(shí),跳出switch語句,轉(zhuǎn)向執(zhí)行語句,轉(zhuǎn)向執(zhí)行switch語句的下一條。語句的下一條。5.4 switch語句語句(2)如果沒有任何一個(gè))如果沒有任何一個(gè)case后面的后面的“常

35、量表達(dá)式常量表達(dá)式”的值,的值,與與“表達(dá)式表達(dá)式”的值匹配,則執(zhí)行的值匹配,則執(zhí)行default 后面的語句(組)。后面的語句(組)。然然后,再執(zhí)行后,再執(zhí)行switch語句的下一條。語句的下一條。說明:說明:(1)switch后面的后面的“表達(dá)式表達(dá)式”,可以是,可以是int、char和枚舉型和枚舉型中中的一種。的一種。(2)每個(gè))每個(gè)case后面后面“常量表達(dá)式常量表達(dá)式”的值,必須各不相同,的值,必須各不相同,否否則會(huì)出現(xiàn)相互矛盾的現(xiàn)象(即對(duì)表達(dá)式的同一值,有兩種或則會(huì)出現(xiàn)相互矛盾的現(xiàn)象(即對(duì)表達(dá)式的同一值,有兩種或兩種以上的執(zhí)行方案)。兩種以上的執(zhí)行方案)。(3)case后面的常量表

36、達(dá)式僅起語句標(biāo)號(hào)作用,并不進(jìn)行后面的常量表達(dá)式僅起語句標(biāo)號(hào)作用,并不進(jìn)行條件判斷。條件判斷。系統(tǒng)一旦找到入口標(biāo)號(hào),就從此標(biāo)號(hào)開始執(zhí)行,系統(tǒng)一旦找到入口標(biāo)號(hào),就從此標(biāo)號(hào)開始執(zhí)行,不再進(jìn)行標(biāo)號(hào)判斷,所以必須加上不再進(jìn)行標(biāo)號(hào)判斷,所以必須加上break語句,以便結(jié)束語句,以便結(jié)束switch語句。語句。5.4 switch語句語句(4)各)各case及及default子句的先后次序,不影響程序執(zhí)行結(jié)子句的先后次序,不影響程序執(zhí)行結(jié)果。果。(5)多個(gè))多個(gè)case子句,可共用同一語句(組)。子句,可共用同一語句(組)。(6)用)用switch語句實(shí)現(xiàn)的多分支結(jié)構(gòu)程序,完全可以用語句實(shí)現(xiàn)的多分支結(jié)構(gòu)程序

37、,完全可以用if語語句或句或if語句的嵌套來實(shí)現(xiàn)。語句的嵌套來實(shí)現(xiàn)。例:例: switch(x) case 1: printf(“statement 1”); break; case 2: printf(“statement 2”); break; default: printf(“default”); 請(qǐng)寫出當(dāng)ch分別為1、2、3、4、5時(shí)程序的運(yùn)行結(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(評(píng)價(jià)學(xué)生的成績(jī))(評(píng)價(jià)學(xué)生的成績(jī)) #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)鍵:如何表示表達(dá)式表達(dá)式和和常量常量,常量的取值與表達(dá)式有關(guān),常量的取值與表達(dá)式有關(guān)5.4 switch語句語句例例5-12: 運(yùn)輸公司對(duì)用戶計(jì)算運(yùn)費(fèi)。收費(fèi)標(biāo)準(zhǔn)隨距離運(yùn)輸公司對(duì)用戶計(jì)算運(yùn)費(fèi)。收費(fèi)標(biāo)準(zhǔn)隨距離s變化如變化如下:下: s250 沒有折扣沒有折扣 250s500 2%折扣折扣 500s1000 5%折扣折扣 1000s2000 8%折扣折扣 2000s3000 10%折扣折扣 3000s 15%折扣折扣分析:計(jì)費(fèi)

40、是按照運(yùn)輸距離分析:計(jì)費(fèi)是按照運(yùn)輸距離s和貨物重量和貨物重量w進(jìn)行的。設(shè)每公進(jìn)行的。設(shè)每公里每噸貨物的基本運(yùn)費(fèi)為里每噸貨物的基本運(yùn)費(fèi)為p,考慮折扣,考慮折扣d時(shí),總運(yùn)費(fèi)的計(jì)算公時(shí),總運(yùn)費(fèi)的計(jì)算公式為:式為: f=p*w*s*(1-d)5.4 switch語句語句折扣變化圖:折扣變化圖:0246810121416250500100020003000124812折扣d()sc5.4 switch語句語句從上圖可以看到,折扣的變化是有規(guī)律的:從上圖可以看到,折扣的變化是有規(guī)律的:折扣的折扣的“變化點(diǎn)變化點(diǎn)”都是都是250的倍數(shù)(的倍數(shù)(250、500、1000、2000、3000)。利用這一特點(diǎn),可

41、以在橫軸上加一種坐標(biāo))。利用這一特點(diǎn),可以在橫軸上加一種坐標(biāo)c,c的值為的值為s/250。即。即c代表代表250的倍數(shù)。的倍數(shù)。當(dāng)當(dāng)c1時(shí),表示時(shí),表示s250,無折扣;無折扣;1c2時(shí),時(shí),以以此類推,此類推,c12時(shí),時(shí),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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論