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

下載本文檔

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

文檔簡(jiǎn)介

1、1第 4章選擇結(jié)構(gòu)程序設(shè)計(jì) 4.1 關(guān)系運(yùn)算符與關(guān)系表達(dá)式 4.2 邏輯運(yùn)算符與邏輯表達(dá)式 4.3 選擇結(jié)構(gòu)控制語(yǔ)句 4.4 條件去處符和條件表達(dá)表 4.5 選擇結(jié)構(gòu)程序綜合舉例24.1 關(guān)系運(yùn)算符與關(guān)系表達(dá)式關(guān)系運(yùn)算也稱(chēng)為比較運(yùn)算,也就是對(duì)兩個(gè)運(yùn)算數(shù)的大小關(guān)系進(jìn)行比較,判定兩個(gè)數(shù)值之間的關(guān)系是否符合關(guān)系運(yùn)算符的要求的運(yùn)算。關(guān)系運(yùn)算的結(jié)果只有真和假兩種,由于C語(yǔ)言沒(méi)有設(shè)置邏輯類(lèi)型數(shù)據(jù),因此使用整數(shù)1表示真,整數(shù)0表示假,即如果關(guān)系表達(dá)式的運(yùn)算結(jié)果只能是1或0。運(yùn)算符作用運(yùn)算數(shù)結(jié)合性?xún)?yōu)先級(jí)小于雙目左結(jié)合10大于雙目左結(jié)合10=大于等于雙目左結(jié)合10=等于雙目左結(jié)合9!=不等于雙目左結(jié)合93例如:

2、(1) 比較整型變量k大于0,表達(dá)式為:k0(2) 比較考試成績(jī)score大于等于60,表達(dá)式為:score=60(3) 比較整型變量k模2等于0,即判斷k是否是偶數(shù):k%2=0(4) 比較字符變量ch的值等于A,表達(dá)式為:ch!=A由于關(guān)系運(yùn)算符經(jīng)常與算術(shù)運(yùn)算符和賦值運(yùn)算符等組成復(fù)雜的表達(dá)式,因此進(jìn)行運(yùn)算時(shí),需要考慮它們之間的優(yōu)先級(jí)關(guān)系,關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符,但是高于賦值運(yùn)算符。例如:(1) 表達(dá)式k%2=0等價(jià)于(k%2)=0,是判斷k%2的結(jié)果是否與0相等,這是一個(gè)關(guān)系表達(dá)式。(2) 表達(dá)式a=53等價(jià)于a=(53),是把53的結(jié)果1賦值給a,這是一個(gè)賦值表達(dá)式。例4-1:閱

3、讀程序 #include int main() int k=3,score=75; char ch = B; printf(k0的運(yùn)算結(jié)果: %dn,k0); printf(score=60的運(yùn)算結(jié)果: %dn,score=60); printf(k%2=0的運(yùn)算結(jié)果: %dn,k%2=0); printf(ch!=A的運(yùn)算結(jié)果: %dn,ch!=A); return 0; k0的運(yùn)算結(jié)果: 1score=60的運(yùn)算結(jié)果: 1k%2=0的運(yùn)算結(jié)果: 0ch!=A的運(yùn)算結(jié)果: 154.2 邏輯運(yùn)算符與邏輯表達(dá)式有時(shí)程序中需要判斷的條件比較復(fù)雜,是由多個(gè)簡(jiǎn)單條件組成的復(fù)合條件。C語(yǔ)言使用邏輯運(yùn)算符

4、和邏輯表達(dá)式解決復(fù)雜條件的表示。運(yùn)算符作用運(yùn)算數(shù)結(jié)合性?xún)?yōu)先級(jí)&邏輯與雙目左結(jié)合5|邏輯或雙目左結(jié)合4!邏輯非單目右結(jié)合146邏輯運(yùn)算符連接運(yùn)算數(shù)構(gòu)成的式子稱(chēng)為邏輯表達(dá)式。與關(guān)系運(yùn)算相同,邏輯表達(dá)式的運(yùn)算結(jié)果也只有真(1)和假(0)兩種,但是邏輯表達(dá)式要求其運(yùn)算數(shù)也必須是表示真和假的邏輯值。C語(yǔ)言中,判斷運(yùn)算數(shù)的真假時(shí),任何非0數(shù)值被判定為真,只有0才被判定為假。ab!aa&ba|b真(非0)真(非0)假(0)真(1)真(1)真(非0)真(非0)假(0)假(0)真(1)假(0)假(0)真(1)假(0)真(1)假(0)假(0)真(1)假(0)假(0)7例如:(1) 判斷整型變量k的值是否在0,10

5、0之間,表達(dá)式為:k=0&k=A&c0&k%2=1(4) 判斷年份y是否為閏年,表達(dá)式為:y%4=0&y%100!=0|y%400=0邏輯表達(dá)式計(jì)算過(guò)程中,為了提高程序運(yùn)行效率,C語(yǔ)言在邏輯運(yùn)算中使用了“短路運(yùn)算”規(guī)則。即除了要考慮表達(dá)式中各個(gè)運(yùn)算符的運(yùn)算規(guī)則、優(yōu)先級(jí)和結(jié)合性外,還需要遵循以下兩條規(guī)則:(1) 邏輯表達(dá)式從左向右依次計(jì)算各個(gè)運(yùn)算數(shù)的值。(2) 在上述從左向右計(jì)算過(guò)程中,任何時(shí)候只要能夠確定最終邏輯表達(dá)式的值,則計(jì)算過(guò)程結(jié)束。84.3 選擇結(jié)構(gòu)控制語(yǔ)句程序設(shè)計(jì)中選擇結(jié)構(gòu)程序?qū)?yīng)的常見(jiàn)問(wèn)題分為三種情況:(1) 決定某個(gè)操作做還是不做,稱(chēng)為單分支選擇結(jié)構(gòu),對(duì)某個(gè)問(wèn)題的處理經(jīng)常是根據(jù)某

6、個(gè)條件進(jìn)行判斷,如果條件成立,則執(zhí)行特定的語(yǔ)句來(lái)處理問(wèn)題,否則什么都不做。(2) 決定在兩個(gè)相關(guān)的操作中選擇哪一個(gè)來(lái)做,稱(chēng)為雙分支選擇結(jié)構(gòu),需要處理的兩個(gè)操作往往和同一個(gè)條件相關(guān),當(dāng)條件成立時(shí)做一個(gè)操作,當(dāng)條件不成立時(shí)做另外一個(gè)操作。(3) 確定在多個(gè)相關(guān)的操作中選擇哪一個(gè)來(lái)做,稱(chēng)為多分支選擇結(jié)構(gòu),該類(lèi)問(wèn)題相比前兩種問(wèn)題要復(fù)雜的多,它通常涉及多個(gè)條件的組合運(yùn)用,通常的做法是將多個(gè)條件合理安排,把多分支結(jié)構(gòu)處理成多個(gè)雙分支的結(jié)構(gòu)處理。C語(yǔ)言提供if和switch兩種選擇結(jié)構(gòu)控制語(yǔ)句,通過(guò)使用這兩種語(yǔ)句或語(yǔ)句組合解決上述三種情況的選擇結(jié)構(gòu)程序設(shè)計(jì)。語(yǔ)句真假表達(dá)式1. if語(yǔ)句的最簡(jiǎn)單形式:說(shuō)明:1

7、. 條件表達(dá)式的值為1或0,必須用( )括住 2. 若有多條語(yǔ)句(復(fù)合語(yǔ)句)時(shí),用 括住。 3. (條件表達(dá)式)后不要加;if (條件表達(dá)式) 語(yǔ)句;if (條件表達(dá)式) 語(yǔ)句; 語(yǔ)句; 例4-2:從鍵盤(pán)輸入一個(gè)整數(shù),計(jì)算并輸出其絕對(duì)值。 #include int main() int x; printf(Input an integer: ); scanf(%d, &x); if(x0) x=-x; /只有本句是if結(jié)構(gòu)的語(yǔ)句 printf(|x|=%dn,x); return 0; Input an integer: -10|x|=10Input an integer: 100|x|=10

8、0例4-3:從鍵盤(pán)輸入兩個(gè)整數(shù)a和b,要求程序按數(shù)值從大到小的順序輸出這個(gè)整數(shù)。思路分析:求解本題有多種方法,這里使用交換變量值的思路,(1) 輸入整數(shù)a和b的值。(2) 判斷條件ab是否成立,如果成立,則交換變量a和b的值,否則直接執(zhí)行下一步。(3) 按照先a后b的順序輸出兩個(gè)變量的值。 #include int main() int a,b,c; printf(Input 2 integers(a b):); scanf(%d%d,&a,&b); if(ab) /由于交換操作需要三條語(yǔ)句完成,所以使用復(fù)合語(yǔ)句 c=a; a=b; b=c; printf(%d,%dn,a,b); retur

9、n 0; Input 2 integers(a b):100 10100,10Input 2 integers(a b):10 100100,102.雙分支if語(yǔ)句if (表達(dá)式) 語(yǔ)句1else 語(yǔ)句2首先先判斷表達(dá)式的值若為非0則執(zhí)行語(yǔ)句1若為0則執(zhí)行語(yǔ)句2語(yǔ)句1真假語(yǔ)句2表達(dá)式執(zhí)行過(guò)程:if語(yǔ)句的雙分支形式,在語(yǔ)法上視為一條語(yǔ)句。例4-4:判斷整數(shù)的奇偶性。從鍵盤(pán)輸入一個(gè)整數(shù)x,根據(jù)其奇偶性輸出x是奇數(shù)或x是偶數(shù)。 #include int main() int x; printf(Input an integer: ); scanf(%d,&x); if(x%2=0) printf(%

10、d is odd number.n,x); /真分支 else printf(%d is even number.n,x); /假分支 return 0; Input an integer: 1212 is odd number.Input an integer: 55 is even number.例4-5:修改例3-6使用海倫公式計(jì)算三角形面積程序的要求,當(dāng)輸入的三個(gè)邊長(zhǎng)能夠構(gòu)成三角形時(shí),計(jì)算面積;否則,輸出不能構(gòu)成三角形。思路分析:三角形面積的計(jì)算過(guò)程與原例題相同,新要求是在“三個(gè)邊長(zhǎng)能構(gòu)成三角形”這一條件成立時(shí)才進(jìn)行計(jì)算面積,否則直接輸出提示信息。根據(jù)數(shù)學(xué)知識(shí),這一條件可以描述為“任意

11、兩個(gè)邊長(zhǎng)之和大于第三個(gè)邊長(zhǎng)”,輸入三個(gè)邊長(zhǎng)a、b、c后,條件可以使用如下的邏輯表達(dá)式描述:a+bc & a+cb & b+ca #include #include int main() double a,b,c,s,area; printf(Input a b c: ); scanf(%lf%lf%lf,&a,&b,&c); if(a+bc & a+cb & b+ca) /真分支使用復(fù)合語(yǔ)句 s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c); printf(area=%.2fn,area); else printf(Not a triangle.n); /假

12、分支只有一條語(yǔ)句 return 0; Input a b c: 3.5 4.5 5.5area=7.85Input a b c: 3.0 4.0 10.0Not a triangle.3.使用嵌套if語(yǔ)句實(shí)現(xiàn)多分支結(jié)構(gòu) if語(yǔ)句的語(yǔ)句1和語(yǔ)句2又稱(chēng)為if的執(zhí)行語(yǔ)句。if的執(zhí)行語(yǔ)句在語(yǔ)法上是一條語(yǔ)句,可以是任何類(lèi)型的語(yǔ)句,簡(jiǎn)單語(yǔ)句、復(fù)合語(yǔ)句、空語(yǔ)句、流程控制語(yǔ)句都可以作為if的執(zhí)行語(yǔ)句。 下面我們通過(guò)一個(gè)例子分別介紹用不同的語(yǔ)句作為if的執(zhí)行語(yǔ)句的情形:例:計(jì)算分段函數(shù):y=2*xx= -102+x-10 x=0 x-20 x10方法一:用簡(jiǎn)單語(yǔ)句#includemain( ) float x,

13、y; scanf(“%f”,&x); if(x=-10) y=2*x; if(-10 x&x=0) y=2+x; if(0 x&x10) y=x/10; printf(“ny=%f”,y); 方法二:用if語(yǔ)句做語(yǔ)句2#includemain( ) float x,y; scanf(“%f”,&x); if(x=-10) y=2*x; else if(x=0) y=2+x; else if(x=10) y=x-2; else y=x/10; printf(“ny=%f”,y); 這種用if語(yǔ)句作為上一層if語(yǔ)句的語(yǔ)句2的結(jié)構(gòu),稱(chēng)為if語(yǔ)句的多分支選擇結(jié)構(gòu)。if (表達(dá)式) 語(yǔ)句1 else i

14、f (表達(dá)式)語(yǔ)句2 else 先判斷表達(dá)式1的值非0就執(zhí)行下面的語(yǔ)句為0就執(zhí)行下一個(gè)判斷一直這樣做下去表達(dá)式1真語(yǔ)句1假表達(dá)式2表達(dá)式3語(yǔ)句4語(yǔ)句3語(yǔ)句2真真假假直到得出最后結(jié)果流程圖如左:方法三:語(yǔ)句1與語(yǔ)句2都為if語(yǔ)句#includemain( ) float x,y; scanf(“%f”,&x); if(x= -10) y=2+x; else y=2*x; else if(x=10) y=x-2; else y=x/10; printf(“ny=%f”,y); 這種用if語(yǔ)句作為上一層if語(yǔ)句的語(yǔ)句1和語(yǔ)句2的結(jié)構(gòu),稱(chēng)為if語(yǔ)句的嵌套。if 語(yǔ)句的二層嵌套結(jié)構(gòu)如下:if ( 表達(dá)式

15、1) if ( 表達(dá)式1_2) 語(yǔ)句1_1 else 語(yǔ)句1_2else if ( 表達(dá)式2_1) 語(yǔ)句2_1 else 語(yǔ)句2_2表達(dá)式1_2表達(dá)式1表達(dá)式1_2語(yǔ)句1_1語(yǔ)句1_2語(yǔ)句2_1語(yǔ)句2_2非000非00非0if (expr1) if (expr2) statement1 else statement2else if(expr3) statement3 else statement4內(nèi)嵌if內(nèi)嵌ifif (expr1) if (expr2) statement1 else statement2內(nèi)嵌ifif (expr1) if (expr2) statement1else sta

16、tement3 內(nèi)嵌ifif (expr1) statement1else if(expr3) statement3 else statement4內(nèi)嵌ifif語(yǔ)句嵌套if else 配對(duì)原則:C語(yǔ)言規(guī)定,else總是與前面離它最近的同一語(yǔ)句塊(復(fù)合語(yǔ)句)中的尚未匹配過(guò)的if進(jìn)行匹配。if()if()if()elseelseelse實(shí)現(xiàn)if else 正確配對(duì)方法例: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);修改: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);實(shí)現(xiàn)

17、if else 正確配對(duì)方法:加 3. switch語(yǔ)句使用if語(yǔ)句嵌套解決實(shí)際問(wèn)題中的多分支選擇時(shí),如果分支數(shù)目非常多,那么if語(yǔ)句的嵌套層數(shù)也會(huì)很多,使得程序代碼變得冗長(zhǎng)而且可讀性會(huì)下降。C語(yǔ)言提供了switch語(yǔ)句來(lái)處理多分支選擇。switch語(yǔ)句的語(yǔ)法形式如下:switch(表達(dá)式) case 常量1: 語(yǔ)句或語(yǔ)句組1; case 常量2: 語(yǔ)句或語(yǔ)句組2; case 常量n: 語(yǔ)句或語(yǔ)句組n; default: 語(yǔ)句或語(yǔ)句組n+1;例4-7:從鍵盤(pán)上輸入一個(gè)字符,判斷并輸出它是數(shù)字、空格還是其他字符,如果是數(shù)字,思路分析:從題目可知,需要判斷分支比較多,包括10個(gè)數(shù)字字符、1個(gè)空格字

18、符和其他字符共12個(gè)分支,使用switch語(yǔ)句解決該問(wèn)題比較方便,同時(shí)仔細(xì)分析可以發(fā)現(xiàn)10個(gè)數(shù)字字符的處理方式是相同的,因此這10個(gè)分支可以共用同一組語(yǔ)句,程序流程如圖4-10所示。同時(shí)輸出是哪一個(gè)數(shù)字。 #include int main() char ch; printf(Input a character: ); ch=getchar(); switch(ch) case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: printf(digit:%cn,ch); break; case

19、: printf(spacen); break; default: printf(othern); return 0; Input a character: 5digit:5Input a character: spaceInput a character: Aother使用switch語(yǔ)句的注意事項(xiàng)(1) switch后面表達(dá)式的值的類(lèi)型必須是整型、字符型或枚舉類(lèi)型。每一個(gè)case常量的類(lèi)型必須與表達(dá)式值的類(lèi)型相同,而且每個(gè)case常量的值必須是互不相同的。(2) default分支是可選的,當(dāng)一個(gè)switch語(yǔ)句中沒(méi)有default分支時(shí),如果沒(méi)有與switch表達(dá)式的值相同的case常量,則不執(zhí)行任何語(yǔ)句,程序轉(zhuǎn)移到switch語(yǔ)句的下一條語(yǔ)句執(zhí)行。(3) 各個(gè)case分支及default分支的出現(xiàn)次序可以交換,無(wú)論如果排列各個(gè)分支的次序,總是按照switch表達(dá)式的值來(lái)選擇某個(gè)分支執(zhí)行。(

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論