C程序設(shè)計(jì)第6章選擇結(jié)構(gòu)程序設(shè)計(jì).ppt
第6章選擇結(jié)構(gòu)程序設(shè)計(jì),選擇結(jié)構(gòu)的N-S流程圖如圖6.1所示。,圖6.1選擇結(jié)構(gòu)的N-S流程圖,P為選擇的條件,對(duì)于執(zhí)行A還是B要根據(jù)條件P的判斷結(jié)果來決定,如果條件P的結(jié)果為真則執(zhí)行A,如果條件P的結(jié)果為假則執(zhí)行B。這里條件P的結(jié)果就成為執(zhí)行A還是B的關(guān)鍵所在。P是一個(gè)判斷的條件,其結(jié)果為真或者假,將其稱為“邏輯量”。C語(yǔ)言中沒有提供邏輯型變量,可以使用整型數(shù)據(jù)去描述1表示真,0表示假。在C語(yǔ)言中任意確定的值都可作為邏輯量處理,當(dāng)作為邏輯量處理時(shí),如果該值為非0,則表示真(1),如果該值為0,則表示假(0)。下面講述條件P的邏輯量表示方法。,6.1邏輯量的表示方法6.2if語(yǔ)句6.3switch語(yǔ)句6.4選擇結(jié)構(gòu)程序設(shè)計(jì)舉例,6.1邏輯量的表示方法C語(yǔ)言中邏輯量是用整型數(shù)據(jù)來表示的,用來表示真或成立,用來表示假或不成立。邏輯量的表示是非常靈活的,具體表示方法有以下幾種方式。,6.1.1關(guān)系表達(dá)式,1關(guān)系運(yùn)算符關(guān)系運(yùn)算是一種比較運(yùn)算符兩側(cè)運(yùn)算對(duì)象大小的運(yùn)算,完成兩個(gè)運(yùn)算對(duì)象比較,運(yùn)算結(jié)果為成立與不成立,用1和0表示。關(guān)系運(yùn)算符有以下6種:>,>=,<,b,3+7!=10,a>aa+>(b=a+)都是合法的C語(yǔ)言關(guān)系表達(dá)式。關(guān)系表達(dá)式的求解遵循表達(dá)式求解規(guī)則,關(guān)系運(yùn)算的結(jié)果只有兩種可能,要么關(guān)系成立為真(1),要么關(guān)系不成立為假(0)。,例如有整型變量a,b,且a3,b5,求解表達(dá)式:ab>a算術(shù)運(yùn)算符“”的優(yōu)先級(jí)高于關(guān)系運(yùn)算符“>”,因此先計(jì)算ab的值為8,之后運(yùn)算8>a,而a參加運(yùn)算時(shí)需轉(zhuǎn)換為整型數(shù)97運(yùn)算,實(shí)際運(yùn)算的是8>97,判斷后其結(jié)果為不成立,表達(dá)式的運(yùn)算結(jié)果為0。若有關(guān)系表達(dá)式0<x<10,則其運(yùn)算結(jié)果為邏輯量1。表達(dá)式中兩個(gè)<運(yùn)算的優(yōu)先級(jí)相同,于是首先運(yùn)算0<x,x的值無論是多少,運(yùn)算結(jié)果只能是1或者0;然后要么運(yùn)算1<10,要么運(yùn)算0b)?a:b的求解過程如下:此表達(dá)式右邊為一條件表達(dá)式,由于條件運(yùn)算符的優(yōu)先級(jí)高于賦值運(yùn)算符,應(yīng)先計(jì)算條件表達(dá)式的值,再通過賦值運(yùn)算符把得到的值賦給max。在條件表達(dá)式中,首先計(jì)算表達(dá)式a>b的邏輯量值,根據(jù)題意,a>b表達(dá)式的邏輯量值為1,則a為條件表達(dá)式的結(jié)果,為5,那么條件表達(dá)式的值為5,可得max的值為5。,6.3switch語(yǔ)句,如果題目中的多條件是有規(guī)律的,則可以采用switch語(yǔ)句來實(shí)現(xiàn)。switch語(yǔ)句稱為分支語(yǔ)句,又稱為開關(guān)語(yǔ)句。switch的具體形式如下:switch(表達(dá)式)case整型常量表達(dá)式1:語(yǔ)句組1breakcase整型常量表達(dá)式2:語(yǔ)句組2breakcase整型常量表達(dá)式n:語(yǔ)句組nbreakdefault:語(yǔ)句組n+1switch,case,default和break都是構(gòu)成多分支語(yǔ)句的關(guān)鍵字。表示break可有可無。,其中表達(dá)式是任意類型的表達(dá)式,但運(yùn)算結(jié)果會(huì)自動(dòng)轉(zhuǎn)換為整型。整型常量表達(dá)式只能由整型常量構(gòu)成。break語(yǔ)句的作用是結(jié)束switch語(yǔ)句,執(zhí)行switch的后續(xù)語(yǔ)句。語(yǔ)句組可以是單條語(yǔ)句,也可以是多條語(yǔ)句,多條語(yǔ)句無需用復(fù)合語(yǔ)句去表示。而在ifelse結(jié)構(gòu)中的語(yǔ)句1和語(yǔ)句2只能是單條語(yǔ)句。switch語(yǔ)句中的一對(duì)花括號(hào)是必須書寫的,是switch語(yǔ)句構(gòu)成的必要部分。,switch語(yǔ)句的具體執(zhí)行過程為:根據(jù)switch表達(dá)式的值,尋找switch語(yǔ)句的執(zhí)行入口。自上而下和case后的整型常量表達(dá)式的值進(jìn)行比較,如果相等則執(zhí)行其后的語(yǔ)句組,假定入口是整型常量表達(dá)式2,那么該語(yǔ)句執(zhí)行語(yǔ)句組2,當(dāng)語(yǔ)句組2執(zhí)行完畢后,若有break語(yǔ)句,則中斷switch語(yǔ)句的執(zhí)行,否則繼續(xù)執(zhí)行語(yǔ)句組3;如果沒有和表達(dá)式的值相匹配的整型常量表達(dá)式,則執(zhí)行default后的語(yǔ)句組。case后的整型常量表達(dá)式的值實(shí)際上就是switch后括號(hào)內(nèi)的表達(dá)式的各種可能的取值。如果能窮盡表達(dá)式各種可能的取值,則語(yǔ)句中可省去default分支;否則最好不要省略default,因?yàn)閐efault表示的是switch語(yǔ)句在沒有找到匹配入口時(shí)的語(yǔ)句執(zhí)行入口。,例6.6輸入一同學(xué)的成績(jī),判斷其成績(jī)等級(jí)。等級(jí)范圍為:90以上等級(jí)為A8980等級(jí)為B7970等級(jí)為C6960等級(jí)為D60以下等級(jí)為E,假定成績(jī)?yōu)閟core,可以得到表達(dá)式(int)(score/10)。當(dāng)表達(dá)式的值為10和9時(shí),對(duì)應(yīng)于90分以上的條件分支,為8時(shí)對(duì)應(yīng)于8980分段的條件分支,以下的取值和對(duì)應(yīng)的分支可以依次類推。60分以下可用switch中default分支來描述。程序如下:main()floatscore;scanf(%f,score/10中score得到的結(jié)果為浮點(diǎn)型,系統(tǒng)會(huì)自動(dòng)轉(zhuǎn)換為整型。常量表達(dá)式為10的分支,由于與9的分支均為A級(jí),利用switch的特點(diǎn)可以不寫值為10的分支對(duì)應(yīng)的語(yǔ)句。,使用switch語(yǔ)句應(yīng)注意以下幾點(diǎn)。(1)switch語(yǔ)句中表達(dá)式可為任意類型,但運(yùn)算結(jié)果為整型。case后的表達(dá)式必須是整型常量表達(dá)式。(2)每個(gè)case后的常量表達(dá)式的值不能相同,否則會(huì)自相矛盾,無法判斷。(3)case及default的順序?qū)\(yùn)行結(jié)果不產(chǎn)生影響。(4)若無break語(yǔ)句進(jìn)行switch語(yǔ)句的強(qiáng)制跳出,則從該處順序執(zhí)行其余語(yǔ)句,直至跳出或執(zhí)行結(jié)束。(5)case和其后的整型常量表達(dá)式中間應(yīng)有空格,6.4選擇結(jié)構(gòu)程序設(shè)計(jì)舉例,例6.10批發(fā)鋼材,每噸批發(fā)金額為1000元,計(jì)算批發(fā)金額,批發(fā)折扣如表6-3所示。表6-3例6.10折扣表表6-4例6.10折扣規(guī)律表1,main()floatt,d,m;scanf("%f",/*x9d是字符¥的ASCII碼*/,main()floatt,d,m;scanf(%f,