C語(yǔ)言選擇結(jié)構(gòu).ppt_第1頁(yè)
C語(yǔ)言選擇結(jié)構(gòu).ppt_第2頁(yè)
C語(yǔ)言選擇結(jié)構(gòu).ppt_第3頁(yè)
C語(yǔ)言選擇結(jié)構(gòu).ppt_第4頁(yè)
C語(yǔ)言選擇結(jié)構(gòu).ppt_第5頁(yè)
已閱讀5頁(yè),還剩42頁(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、第3章 選擇結(jié)構(gòu),計(jì)算機(jī)系,西南交通大學(xué),內(nèi)容提要,西南交通大學(xué),3.1結(jié)構(gòu)化程序設(shè)計(jì)概述,結(jié)構(gòu)化程序設(shè)計(jì)是為使程序具有合理的結(jié)構(gòu),以保證程序正確性而規(guī)定的一套程序設(shè)計(jì)的方法,是人們多年來(lái)研究與實(shí)踐的結(jié)晶。 1. 結(jié)構(gòu)化程序設(shè)計(jì)目的 通過(guò)設(shè)計(jì)結(jié)構(gòu)良好的程序,以程序的靜態(tài)良好結(jié)構(gòu)保證程序動(dòng)態(tài)執(zhí)行的正確,使程序易理解、易調(diào)試、易維護(hù),以提高軟件開(kāi)發(fā)的效率,減少出錯(cuò)率。 2. 結(jié)構(gòu)化程序設(shè)計(jì)的三個(gè)基本步驟 (1)分析問(wèn)題 (2)畫(huà)出程序的基本輪廓 (3)編寫(xiě)源碼程序,西南交通大學(xué),3.1 結(jié)構(gòu)化程序設(shè)計(jì),3.三種基本結(jié)構(gòu),本章介紹選擇結(jié)構(gòu)。 選擇結(jié)構(gòu)也叫分支結(jié)構(gòu),它的作用是根據(jù)給定的條件是真還是假,

2、決定后面的操作或做進(jìn)一步的判斷。,西南交通大學(xué),引例,任意輸入一個(gè)整數(shù),判斷這個(gè)數(shù)是不是位于30到100之間的一個(gè)奇數(shù),如果是則在屏幕上輸出“通過(guò)驗(yàn)證”;如果不是則在屏幕上輸出“該數(shù)不合法”。 借助關(guān)系表達(dá)式和邏輯表達(dá)式來(lái)實(shí)現(xiàn): (x=30,西南交通大學(xué),3.3 邏輯運(yùn)算符與邏輯表達(dá)式,C語(yǔ)言提供了 三種邏輯運(yùn)算符,分別為: ! 邏輯非 求下列表達(dá)式的值及各變量的值: (1)a a=1;b=2; if(ab) max=a; if(a=b) max=b; printf(%d,max); return 0; 該法思路較明確,接近我們平時(shí)的思維模式。,演示例3.1.1,西南交通大學(xué),單分支if語(yǔ)句

3、舉例,法二: #include int main(void) int a,b,max; a=1;b=2; max=a; if(ab,則跳過(guò)max=b,直接執(zhí)行print,輸出max為a的值。,演示例3.1.2,西南交通大學(xué),單分支if語(yǔ)句 舉例,【例3.2】輸入一個(gè)三位數(shù),求其各位上數(shù)字能組成最大的三位數(shù)。如:輸入263,則輸出為:632。 解題思路: (1)輸入一個(gè)三位數(shù),存入變量x; (2)然后將這個(gè)三位數(shù)的各位數(shù)字分離出來(lái): 個(gè)位賦給x0,十位賦給x10,百位賦給x100; (3)用if語(yǔ)句比較三個(gè)數(shù)的大小,三條if語(yǔ)句執(zhí)行完后:最大的放在x100中,次大的放在x10中,最小的放在x0中

4、; (4)計(jì)算后將結(jié)果賦給max,最后輸出max的值。,演示例3. 2,西南交通大學(xué),單分支if語(yǔ)句 舉例,#include int main(void) int x0,x10,x100,x,t,max; printf(請(qǐng)輸入一個(gè)三位數(shù):); scanf(%d, ,西南交通大學(xué),3.5.2 雙分支if語(yǔ)句,1. 語(yǔ)法格式 if(條件) 語(yǔ)句1 else 語(yǔ)句2 2. 說(shuō)明 (1)執(zhí)行過(guò)程: 當(dāng)條件為“真”時(shí),執(zhí)行語(yǔ)句1; 為“假”時(shí),執(zhí)行語(yǔ)句2。 (2)語(yǔ)句1和語(yǔ)句2都可為復(fù)合語(yǔ)句。,西南交通大學(xué),雙分支if語(yǔ)句 舉例,【例3.3】比較a、b兩個(gè)數(shù)的大小,將較大數(shù)賦給max。,演示例3. 3,

5、int a,b,max;a=1;b=2; if(ab) max=a; else max=b; printf(%d,max);,該題可用“條件運(yùn)算”、“單分支if”、“雙分支if”三種方法來(lái)做,下面列出這幾種語(yǔ)句的部分程序,請(qǐng)讀者比較其語(yǔ)法結(jié)構(gòu)上的區(qū)別:,西南交通大學(xué),雙分支if語(yǔ)句 舉例,推薦寫(xiě)法,這樣層次結(jié)構(gòu)更清晰,西南交通大學(xué),雙分支if語(yǔ)句 舉例,【例3.4】判斷用變量year表示的某年是否為閏年。,#include int main(void) int year; printf(請(qǐng)輸入年份:); scanf(%d, ,if后的條件可以不用寫(xiě)=1,直接寫(xiě)成: if(year%4=0 /*

6、保存輸入的百分制成績(jī)*/ char grade; /*保存五級(jí)計(jì)分制成績(jī) */ printf(輸入一個(gè)成績(jī):); scanf(%d, ,判斷輸入的數(shù)據(jù)是否有效,若無(wú)效則跳出程序,演示例3. 6,西南交通大學(xué),多分支if語(yǔ)句 舉例,if(score=90) grade=A; /*L1*/ else if(score=80) grade=B; else if(score=70) grade=C; else if(score=60) grade=D; else grade=E; /*L2*/ printf(%d分,等級(jí)為%cn, score,grade); return 0; ,若把L1L2換成下面

7、幾種形式,是否正確? if(score=90) grade=A; else if(score=80) grade=B; else if(score=70) grade=C; else if(score=60) grade=D; else grade=E;,if(score60) grade=E; else if(score70) grade=D; else if(score80) grade=C; else if(score90) grade=B; else grade=A;,if(score=90) grade=A; if(score=80) grade=B; if(score=70) gr

8、ade=C; if(score=60) grade=D; if(score=0) grade=E;,if(score=0) grade=E; if(score=60) grade=D; if(score=70) grade=C; if(score=80) grade=B; if(score=90) grade=A;,但此法含義不明確,容易出錯(cuò),不推薦這種做法!,西南交通大學(xué),3.5.4 if語(yǔ)句嵌套,在if語(yǔ)句中又包含一個(gè)或多個(gè)if語(yǔ)句稱(chēng)為if語(yǔ)句的嵌套。 1. 語(yǔ)法格式 if(條件) 內(nèi)嵌if語(yǔ)句 else 內(nèi)嵌if語(yǔ)句,可為if語(yǔ)句3中基本形式的任意一種,可為if語(yǔ)句3中基本形式的任意一種

9、,可為if語(yǔ)句3中基本形式的任意一種,可為if語(yǔ)句3中基本形式的任意一種,西南交通大學(xué),3.5.4 if語(yǔ)句嵌套,2. 說(shuō)明 (1)內(nèi)嵌形式 “內(nèi)嵌的if語(yǔ)句”可以為前面講的三種基本形式(單分支、雙分支、多分支)中的任意一種。 (2)配對(duì)關(guān)系 if語(yǔ)句的嵌套形式中,可能會(huì)出現(xiàn)多個(gè)if和多個(gè)else重疊的情況,這時(shí)要特別注意if和else的配對(duì)問(wèn)題。 語(yǔ)言規(guī)定: else 總是與它前面最近的還沒(méi)有配對(duì)的if配對(duì)。,西南交通大學(xué),if語(yǔ)句嵌套形式比較,如果沒(méi)有任何縮進(jìn),我們應(yīng)準(zhǔn)確判斷出if和else的配對(duì)關(guān)系,在下表中同時(shí)給出了正確的嵌套形式和錯(cuò)誤的嵌套形式,結(jié)果是不同。,西南交通大學(xué),if語(yǔ)句嵌

10、套 舉例,【例3.7】比較a、b、c三個(gè)數(shù)的大小,將最大值賦給max。 法一:用“if語(yǔ)句的嵌套”形式實(shí)現(xiàn)。請(qǐng)根據(jù)下面N-S流程圖寫(xiě)出程序。 該題用這種方法做并不是最好的,但希望讀者從這個(gè)例子看出嵌套的結(jié)構(gòu)特點(diǎn)。,法二: 本題也可以用“if語(yǔ)句單分支”形式來(lái)做,參考例3.2,演示例3. 7,西南交通大學(xué),3.6 switch語(yǔ)句,1. 語(yǔ)法格式 switch(表達(dá)式) case 常量表達(dá)式1: 語(yǔ)句序列1; break; case 常量表達(dá)式2: 語(yǔ)句序列2; break; case 常量表達(dá)式n: 語(yǔ)句序列n; break; default:語(yǔ)句序列 ,2. 要點(diǎn)(1)執(zhí)行順序:當(dāng)表達(dá)式的值

11、與某一個(gè)case后面的常量表達(dá)式的值相等時(shí),就執(zhí)行此case后面的語(yǔ)句;如果遇到break語(yǔ)句,就結(jié)束整個(gè)switch語(yǔ)句;若所有的case中的常量表達(dá)式的值都沒(méi)有與表達(dá)式的值匹配的,就執(zhí)行default后面的語(yǔ)句。,西南交通大學(xué),3.6 switch語(yǔ)句,(2)switch后括號(hào)內(nèi)的表達(dá)式,為任意復(fù)合C語(yǔ)言語(yǔ)法規(guī)則的表達(dá)式,但其值只能是整型或字符型。 (3)每個(gè)case只能列舉一個(gè)整型常量或一個(gè)字符常量。 (4)每個(gè)case后的常量表達(dá)式的值必須互不相同,否則就會(huì)出現(xiàn)互相矛盾的現(xiàn)象。 (5)語(yǔ)句執(zhí)行時(shí)碰到break才會(huì)停止,否則從執(zhí)行處接著往后執(zhí)行,不會(huì)再判斷條件。 (6)“default”

12、和各個(gè)“case”出現(xiàn)的次序不影響執(zhí)行結(jié)果;如果不需要,default可省略不寫(xiě)。,西南交通大學(xué),switch語(yǔ)句 舉例,【例3.8】輸入年份,判斷該年的生肖。 程序分析: 該程序思路是,假設(shè)已經(jīng)知道2008年為鼠年,那么以該年為基準(zhǔn),以12為周期進(jìn)行推算。,演示例3. 8,西南交通大學(xué),switch語(yǔ)句 舉例,#include int main(void) int year; scanf(%d,西南交通大學(xué),switch語(yǔ)句 舉例,switch(year) case 0:printf(鼠);break; case 1:printf(牛);break; case 2:printf(虎);bre

13、ak; case 3:printf(兔);break; case 4:printf(龍);break; case 5:printf(蛇);break; case 6:printf(馬);break; case 7:printf(羊);break; case 8:printf(猴);break; case 9:printf(雞);break; case 10:printf(狗);break; case 11:printf(豬);break; return 0;,西南交通大學(xué),switch語(yǔ)句 舉例,程序說(shuō)明: 如果去掉case 8和case 9后的break; 語(yǔ)句,那么當(dāng)變量year的值為8時(shí)

14、,程序?qū)?huì)輸出 猴雞狗 因?yàn)閏ase后如沒(méi)有break語(yǔ)句,程序就不停止,一直執(zhí)行到break才會(huì)停止,否則一直執(zhí)行到整個(gè)switch語(yǔ)句結(jié)束。,西南交通大學(xué),switch語(yǔ)句 舉例,【例3.9】判斷輸入字符是元音字符、空白字符還是其它。 #include int main(void) char c; printf(輸入一個(gè)字符:); scanf(%c,演示例3. 9,西南交通大學(xué),switch語(yǔ)句 舉例,switch(c) default: printf(這是其它字符n); case a: case A: case e: case E: case i: case I: case o: case O: case u: case U: printf(這是元音字母n);break; case : case n: case t: printf(這是空白符n);break; return 0;,西南交通大學(xué),switch語(yǔ)句 舉例,程序說(shuō)明: (1)注意case后的常量的寫(xiě)法。每個(gè)case后只能寫(xiě)一個(gè)常量,每種情況都要單獨(dú)用一個(gè)case寫(xiě)出來(lái)。 (2)ca

溫馨提示

  • 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)論