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

下載本文檔

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

文檔簡(jiǎn)介

1、C語(yǔ)言教學(xué)組語(yǔ)言教學(xué)組E-mail:Tel: 回顧一下上一章編寫的體質(zhì)指數(shù)計(jì)算程序,代碼如下:需求補(bǔ)充:根據(jù)計(jì)算結(jié)果輸出對(duì)應(yīng)的評(píng)價(jià)BMI值值評(píng)價(jià)評(píng)價(jià)25過(guò)重任務(wù)分析:根據(jù)計(jì)算結(jié)果輸出不同的選擇,就需要用到選擇結(jié)構(gòu)算法設(shè)計(jì):程序?qū)崿F(xiàn):方法一:程序?qū)崿F(xiàn):方法二:1. 關(guān)系運(yùn)算關(guān)系運(yùn)算實(shí)際上是兩個(gè)量的比較,比較的結(jié)果只有兩種可能:成立(真)、不成立(假) 例如 a 3 ? l 當(dāng)a的值為5時(shí),比較的結(jié)果為真l 當(dāng)a的值為1時(shí),比較的結(jié)果為假關(guān)系運(yùn)算的結(jié)果是一個(gè)邏輯值,非真(1)即假(0)關(guān)系運(yùn)算符關(guān)系運(yùn)算符含義含義 優(yōu)先級(jí)優(yōu)先級(jí)結(jié)合性結(jié)合性 = =小于小于小于或等于小于或等于大于大于大于或等于大于或

2、等于6 6 左左 右右=!=!=等于等于 不等于不等于7 7左左 右右算術(shù)運(yùn)算符關(guān)系運(yùn)算符賦值運(yùn)算符高低2.關(guān)系運(yùn)算符及其優(yōu)先級(jí)3.關(guān)系表達(dá)式例:a=3,b=2,c=1,則: (ab) = c 值為真(即1) b+cbc f的值為假(即0)!4. 邏輯運(yùn)算邏輯運(yùn)算:產(chǎn)生真假值的運(yùn)算 邏輯運(yùn)算符l & 邏輯與l | 邏輯或l !邏輯非 “&”和“|”是雙目運(yùn)算符,要求兩個(gè)運(yùn)算量。 如:(ab) & (xy), (ab)|(xy) “!”是一元運(yùn)算符,要求一個(gè)運(yùn)算量。 如:!(ab)5. 邏輯運(yùn)算符的優(yōu)先級(jí) ! & |! ! 算術(shù)算術(shù) 關(guān)系關(guān)系 邏輯邏輯 賦值賦值

3、ab & xy ab & xy 相當(dāng)于相當(dāng)于: : (ab) & (xy)(ab) & (xy)n a=b|x=y a=b|x=y 相當(dāng)于相當(dāng)于: : (a=b) | (x=y) (a=b) | (x=y)n !a | ab !a | ab 相當(dāng)于相當(dāng)于: : (!a ) | (ab)(!a ) | (ab)6. 邏輯表達(dá)式用邏輯運(yùn)算符將關(guān)系表達(dá)式或邏輯量連接起來(lái)就是邏輯表達(dá)式。在C語(yǔ)言中,當(dāng)判斷一個(gè)量的真假時(shí),一切非數(shù)均被當(dāng)成“真 ”來(lái)處理;而0為“假” 。例如: 若a=4,!a的值為? !a為 若a=4, b=5, 則a & b的值為? a&

4、b為if用來(lái)判斷給定條件的真假,并決定執(zhí)行哪一種操作。 if語(yǔ)句的三種形式 1. if(表達(dá)式) 語(yǔ)句A 表達(dá)式為真時(shí),執(zhí)行語(yǔ)句A; 表達(dá)式為假時(shí),越過(guò)語(yǔ)句A,往下執(zhí)行。例如:如果輸入的是正數(shù),則打印出來(lái)。if(x0) printf(“%d”,x);PYNA 2. if (表達(dá)式) 語(yǔ)句A else 語(yǔ)句BPYNAB例如:輸出兩個(gè)數(shù)中較大的一個(gè)if ( x y ) printf( “%d” , x );else printf( “%d” , y ); 3. if (表達(dá)式1) 語(yǔ)句1 else if (表達(dá)式2) 語(yǔ)句2 else if (表達(dá)式3) 語(yǔ)句3 else if (表達(dá)式4) 語(yǔ)句

5、4 else 語(yǔ)句5P1語(yǔ)句語(yǔ)句5P2P3P4P5語(yǔ)語(yǔ)句句1語(yǔ)句語(yǔ)句2語(yǔ)句語(yǔ)句4語(yǔ)句語(yǔ)句3YYYYYNNNN例如:編寫程序找出3個(gè)整數(shù)中的最大值并輸出方法一:例如:編寫程序找出3個(gè)整數(shù)中的最大值并輸出方法一:例如:編寫程序找出3個(gè)整數(shù)中的最大值并輸出方法二:例如:編寫程序找出3個(gè)整數(shù)中的最大值并輸出方法三:1.2.說(shuō)明:1. 條件設(shè)定中的表達(dá)式通常是關(guān)系表達(dá)式或邏輯表達(dá)式,條件滿足指的是表達(dá)式的值為真,即表達(dá)式的值是一個(gè)非值。2. 例如:if(3) printf(“OK”); if(a) printf(“%d”,a); if(0) printf(“false”); 3. if的條件滿足后執(zhí)行的

6、語(yǔ)句并非指單一的一條語(yǔ)句,可以是多個(gè)語(yǔ)句,只要用 括起即可。輸出輸出OK OK ( (永真永真) )輸出輸出97 97 ( (永真永真) )無(wú)輸出無(wú)輸出( (永假永假) )if 語(yǔ)句的嵌套if ( ) if ( ) 語(yǔ)句1 else 語(yǔ)句2 else if ( ) 語(yǔ)句3 else 語(yǔ)句4內(nèi)嵌內(nèi)嵌ifif內(nèi)嵌內(nèi)嵌ififelse總是從最內(nèi)層開(kāi)始結(jié)合if ( a ) if ( b ) 語(yǔ)句1 else 語(yǔ)句2 內(nèi)嵌內(nèi)嵌ififelse else 總是與最總是與最近的一近的一個(gè)沒(méi)有個(gè)沒(méi)有配對(duì)的配對(duì)的ifif配對(duì)配對(duì)ifif的三種語(yǔ)句可以的三種語(yǔ)句可以任意嵌套任意嵌套例如:把引例部分的體質(zhì)指數(shù)計(jì)算的

7、任務(wù)加上出錯(cuò)處理?xiàng)l件運(yùn)算符是三目運(yùn)算符 格式:表達(dá)式1 ? 表達(dá)式2 : 表達(dá)式 3 功能:表達(dá)式1成立則表達(dá)式2的值為最終結(jié)果否則表達(dá)式3的值作為最終結(jié)果例如:max=(ab)?a:b; 當(dāng)(ab)為真時(shí),表達(dá)式取a的值 當(dāng)(ab)為假時(shí),表達(dá)式取b的值條件運(yùn)算符的結(jié)合方向?yàn)椤皬挠蚁蜃蟆崩纾?ab?a:cd?c:d相當(dāng)于 ab?a:(cd?c:d)如果 a=1,b=2,c=3,d=4,則條件表達(dá)式的值為4例輸入一個(gè)字符,判斷大小寫,如是大寫,則轉(zhuǎn)換成小寫,輸出。#include int main(void) char ch; scanf(“%c”,&ch); ch=(ch= A &

8、amp; ch=A & ch=Z) ch=ch+32; else ch=ch;一般形式: switch (表達(dá)式) case 常量表達(dá)式1:語(yǔ)句序列1 case 常量表達(dá)式2:語(yǔ)句序列2 case 常量表達(dá)式n:語(yǔ)句序列n default :語(yǔ)句序列n+1 表達(dá)式值表達(dá)式值=時(shí)時(shí)該開(kāi)關(guān)合該開(kāi)關(guān)合上上計(jì)算表達(dá)式值計(jì)算表達(dá)式值.語(yǔ)系語(yǔ)系1語(yǔ)系語(yǔ)系2語(yǔ)系語(yǔ)系n 語(yǔ)系語(yǔ)系n+1表達(dá)式值與某常表達(dá)式值與某常量表達(dá)式值相匹量表達(dá)式值相匹配配,則對(duì)應(yīng)開(kāi)關(guān)合則對(duì)應(yīng)開(kāi)關(guān)合上上,執(zhí)行對(duì)應(yīng)語(yǔ)句執(zhí)行對(duì)應(yīng)語(yǔ)句系列系列注: 功能: (條件: 語(yǔ)句系列1-語(yǔ)句系列n 后均有 break 語(yǔ)句 )n例如:編寫一個(gè)簡(jiǎn)單

9、的點(diǎn)菜程序。根據(jù)用戶選擇的菜單項(xiàng),輸出對(duì)應(yīng)菜譜的價(jià)格??梢园讯鄠€(gè)case分支合并。例如:編寫程序查詢北京市某時(shí)間段車輛的限行時(shí)間關(guān)于關(guān)于switchswitch: switchswitch后面的表達(dá)式通常應(yīng)該是后面的表達(dá)式通常應(yīng)該是有序型有序型的量,的量,目前學(xué)到的目前學(xué)到的有序型有序型是是整型整型、字符型字符型。常量表達(dá)式常量表達(dá)式的值的值必須必須互不相同互不相同??梢允褂每梢允褂胋reakbreak語(yǔ)句以終止語(yǔ)句以終止多個(gè)多個(gè)casecase連續(xù)執(zhí)行連續(xù)執(zhí)行, ,否則只要有一個(gè)否則只要有一個(gè)casecase滿足后滿足后, ,以下的語(yǔ)句全以下的語(yǔ)句全部無(wú)條件執(zhí)行。部無(wú)條件執(zhí)行?!纠纠?.1

10、】編程設(shè)計(jì)一個(gè)簡(jiǎn)單的猜數(shù)游戲:先由】編程設(shè)計(jì)一個(gè)簡(jiǎn)單的猜數(shù)游戲:先由計(jì)算機(jī)計(jì)算機(jī)“想想”一個(gè)一個(gè)1100之間的整數(shù)請(qǐng)玩家之間的整數(shù)請(qǐng)玩家猜,如果玩家猜對(duì)了,則計(jì)算機(jī)給出提示猜,如果玩家猜對(duì)了,則計(jì)算機(jī)給出提示“恭喜您!猜對(duì)了!恭喜您!猜對(duì)了!”,否則提示,否則提示“錯(cuò)!錯(cuò)!”,并告訴玩家所猜的數(shù)相比計(jì)算機(jī)并告訴玩家所猜的數(shù)相比計(jì)算機(jī)“想想”的數(shù),的數(shù),是大了還是小了。是大了還是小了。1.分析問(wèn)題分析問(wèn)題:本本例中的難點(diǎn)是如何讓計(jì)算機(jī)例中的難點(diǎn)是如何讓計(jì)算機(jī)“想想”一個(gè)數(shù)。一個(gè)數(shù)。“想想”反映了一種隨機(jī)性,可以用反映了一種隨機(jī)性,可以用C的的標(biāo)準(zhǔn)庫(kù)函數(shù)標(biāo)準(zhǔn)庫(kù)函數(shù)rand()產(chǎn)生計(jì)算機(jī)產(chǎn)生計(jì)算機(jī)“

11、想想”的數(shù)。的數(shù)。函數(shù)函數(shù)rand()產(chǎn)生一個(gè)產(chǎn)生一個(gè)0,RAND_MAX之間的之間的隨機(jī)數(shù),隨機(jī)數(shù),RAND_MAX是在頭文件是在頭文件stdlib.h中定義的中定義的符號(hào)符號(hào)常量常量。2. 程序設(shè)計(jì)程序設(shè)計(jì) 數(shù)據(jù)描述數(shù)據(jù)描述int magic;/存儲(chǔ)計(jì)算機(jī)存儲(chǔ)計(jì)算機(jī)“想想”的數(shù)的數(shù)int guess;/存儲(chǔ)玩家輸入的存儲(chǔ)玩家輸入的數(shù)數(shù) 算法設(shè)計(jì)算法設(shè)計(jì)3. 程序?qū)崿F(xiàn)程序?qū)崿F(xiàn)4. 完善設(shè)計(jì)完善設(shè)計(jì) 其實(shí)其實(shí)函數(shù)函數(shù)rand()生成的隨機(jī)數(shù)只是個(gè)偽隨機(jī)生成的隨機(jī)數(shù)只是個(gè)偽隨機(jī)數(shù),默認(rèn)情況下,連續(xù)調(diào)用數(shù),默認(rèn)情況下,連續(xù)調(diào)用rand()函數(shù)所產(chǎn)生的函數(shù)所產(chǎn)生的一系列數(shù)都是相同的。那么如何使程序每

12、次執(zhí)行一系列數(shù)都是相同的。那么如何使程序每次執(zhí)行產(chǎn)生不同的隨機(jī)數(shù)呢?可以通過(guò)調(diào)用標(biāo)準(zhǔn)庫(kù)函數(shù)產(chǎn)生不同的隨機(jī)數(shù)呢?可以通過(guò)調(diào)用標(biāo)準(zhǔn)庫(kù)函數(shù)srand()為函數(shù)為函數(shù)rand()設(shè)置隨機(jī)數(shù)種子來(lái)實(shí)現(xiàn)。設(shè)置隨機(jī)數(shù)種子來(lái)實(shí)現(xiàn)。4. 完善設(shè)計(jì)完善設(shè)計(jì) 【例【例5.2】從鍵盤輸入三個(gè)整數(shù)】從鍵盤輸入三個(gè)整數(shù)a、b、c,按從小到按從小到大的順序排序后輸出。大的順序排序后輸出。1. 分析分析問(wèn)題問(wèn)題:將將用戶按任意順序輸入的三個(gè)數(shù)用戶按任意順序輸入的三個(gè)數(shù)排序,可以通過(guò)將所有的數(shù)兩兩比較,將最排序,可以通過(guò)將所有的數(shù)兩兩比較,將最小的數(shù)放在小的數(shù)放在a中,次小的數(shù)放在中,次小的數(shù)放在b中,最大的中,最大的數(shù)放在數(shù)

13、放在c中,然后按中,然后按“a、b、c”的順序輸出,的順序輸出,即可實(shí)現(xiàn)既定的目標(biāo)。即可實(shí)現(xiàn)既定的目標(biāo)。2. 程序設(shè)計(jì)程序設(shè)計(jì) 數(shù)據(jù)描述數(shù)據(jù)描述int a,b,c; /要排序的三個(gè)對(duì)象要排序的三個(gè)對(duì)象int temp; /用于交換兩變量值的第三方用于交換兩變量值的第三方變量變量 算法設(shè)計(jì)算法設(shè)計(jì)3. 程序?qū)崿F(xiàn)程序?qū)崿F(xiàn)【例5.3】編寫一個(gè)運(yùn)算器程序,輸入x Operator y,輸出運(yùn)算結(jié)果。1. 分析問(wèn)題 首先需要考慮要處理的對(duì)象有哪些?表達(dá)式如“10+20”中的運(yùn)算對(duì)象和符號(hào)都是要在程序中處理的對(duì)象,其中符號(hào)“+”應(yīng)該存儲(chǔ)在字符型的變量中。除此之外,可以定義一個(gè)存放結(jié)果的對(duì)象。 其次,需要考

14、慮“10+20”這樣的表達(dá)式應(yīng)該如何輸入?由于符號(hào)是存儲(chǔ)在字符型變量中,因此,輸入格式字符串應(yīng)該是“%lf%c%lf”(運(yùn)算對(duì)象定義成double類型)。輸入完成后,應(yīng)根據(jù)符號(hào)的情況,做相應(yīng)的計(jì)算,如符號(hào)是“+”,則計(jì)算兩數(shù)之和。關(guān)于多種符號(hào)的判斷,既可以用if語(yǔ)句實(shí)現(xiàn),也可以用switch 語(yǔ)句實(shí)現(xiàn)。2.程序設(shè)計(jì)程序設(shè)計(jì) 數(shù)據(jù)描述。數(shù)據(jù)描述。double number1,number2,result; /number1和和number2存放兩個(gè)運(yùn)算的存放兩個(gè)運(yùn)算的數(shù),數(shù),result存放結(jié)果存放結(jié)果char operator;/operator用于存放運(yùn)算符用于存放運(yùn)算符 算法設(shè)計(jì)。根據(jù)前面

15、的分析,算法步驟如下:算法設(shè)計(jì)。根據(jù)前面的分析,算法步驟如下:步驟步驟1:以:以“%lf%c%lf”的格式輸入的格式輸入number1、operator、number2的的值。值。步驟步驟2:判斷符號(hào):判斷符號(hào)operator如果是如果是“+”,執(zhí)行加法運(yùn)算,執(zhí)行加法運(yùn)算如果是如果是“-”,執(zhí)行減法運(yùn)算,執(zhí)行減法運(yùn)算如果是如果是“*”,執(zhí)行乘法運(yùn)算,執(zhí)行乘法運(yùn)算如果是如果是“/”,判斷,判斷number2是否是零是否是零如果如果number2等于零,輸出等于零,輸出“除數(shù)不為零!除數(shù)不為零!”,并結(jié)束程序的執(zhí),并結(jié)束程序的執(zhí)行行否則,執(zhí)行除法運(yùn)算否則,執(zhí)行除法運(yùn)算否則,輸出否則,輸出“運(yùn)算符超

16、出可計(jì)算的范圍運(yùn)算符超出可計(jì)算的范圍”,并結(jié)束程序的執(zhí)行,并結(jié)束程序的執(zhí)行步驟步驟3:輸出運(yùn)算結(jié)果:輸出運(yùn)算結(jié)果3. 程序?qū)崿F(xiàn)一:3. 程序?qū)崿F(xiàn)二:if-elseif-else比比switchswitch的條件控制更強(qiáng)大一些的條件控制更強(qiáng)大一些 if-elseif-else可以依照各種邏輯進(jìn)行流程控制可以依照各種邏輯進(jìn)行流程控制 switchswitch只能進(jìn)行只能進(jìn)行=判斷,并且只能是判斷,并且只能是整數(shù)整數(shù)判等判等switchswitch比比if-elseif-else更更清晰清晰兩者都要盡量避免用得兩者都要盡量避免用得過(guò)多過(guò)多、過(guò)長(zhǎng)過(guò)長(zhǎng),尤其不要,尤其不要嵌套得太多嵌套得太多 它們大大增

17、加程序的分支,使邏輯關(guān)系顯得混它們大大增加程序的分支,使邏輯關(guān)系顯得混亂,不易維護(hù),易出錯(cuò)亂,不易維護(hù),易出錯(cuò)1.任務(wù)描述任務(wù)描述本章本章繼續(xù)實(shí)現(xiàn)繼續(xù)實(shí)現(xiàn)“學(xué)生成績(jī)管理系統(tǒng)學(xué)生成績(jī)管理系統(tǒng)”的框架結(jié)構(gòu)的框架結(jié)構(gòu)。上一章完成了上一章完成了“主菜單的顯示主菜單的顯示”功能功能,本章實(shí)現(xiàn)用戶選,本章實(shí)現(xiàn)用戶選擇菜單的功能:擇菜單的功能:如如用戶輸入用戶輸入“1”字符,則程序輸出:字符,則程序輸出:您選擇了您選擇了“1創(chuàng)建成績(jī)單創(chuàng)建成績(jī)單”。2.數(shù)據(jù)描述數(shù)據(jù)描述由于程序要讀入并處理用戶輸入的菜單選項(xiàng),因此由于程序要讀入并處理用戶輸入的菜單選項(xiàng),因此需要定義一個(gè)存放菜單項(xiàng)的變量。菜單項(xiàng)變量的取值是需要定義一個(gè)存放菜單項(xiàng)的變量。菜單項(xiàng)變量的取值是08的數(shù)字,因

溫馨提示

  • 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. 人人文庫(kù)網(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)論