C語(yǔ)言程序控制結(jié)構(gòu)ppt課件
《C語(yǔ)言程序控制結(jié)構(gòu)ppt課件》由會(huì)員分享,可在線閱讀,更多相關(guān)《C語(yǔ)言程序控制結(jié)構(gòu)ppt課件(100頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
第4章程序控制結(jié)構(gòu) 1 主要內(nèi)容 4 1C語(yǔ)言的執(zhí)行語(yǔ)句4 2順序結(jié)構(gòu)4 3選擇結(jié)構(gòu)4 4循環(huán)結(jié)構(gòu) 2 4 1C語(yǔ)言的執(zhí)行語(yǔ)句 C語(yǔ)言的語(yǔ)句分為聲明語(yǔ)句和執(zhí)行語(yǔ)句 第3章介紹的變量定義語(yǔ)句是最常見(jiàn)的聲明語(yǔ)句 聲明語(yǔ)句在編譯時(shí)處理 在程序運(yùn)行時(shí)不產(chǎn)生相應(yīng)的操作 執(zhí)行語(yǔ)句的作用是在程序運(yùn)行時(shí)向計(jì)算機(jī)系統(tǒng)發(fā)出操作命令 使計(jì)算機(jī)執(zhí)行特定的操作 C語(yǔ)句 以 作結(jié)束符 編譯后產(chǎn)生機(jī)器指令 C語(yǔ)句分類 表達(dá)式語(yǔ)句空語(yǔ)句控制語(yǔ)句復(fù)合語(yǔ)句 3 4 1 1表達(dá)式語(yǔ)句 表達(dá)式語(yǔ)句是在表達(dá)式的末尾加上分號(hào)構(gòu)成的語(yǔ)句 z x sin y a a a 賦值語(yǔ)句i 自增1語(yǔ)句x 0 y 1 逗號(hào)表達(dá)式語(yǔ)句x y 無(wú)意義printf ThisisaCprogram n 函數(shù)調(diào)用語(yǔ)句賦值語(yǔ)句和函數(shù)調(diào)用語(yǔ)句是使用最多的表達(dá)式語(yǔ)句 如 printf ThisisaCstatement func a 5 y max a b 4 4 1 2空語(yǔ)句 僅由一個(gè) 構(gòu)成的語(yǔ)句只是在邏輯上起到一個(gè)語(yǔ)句的作用 在編譯時(shí)不產(chǎn)生任何指令 在執(zhí)行時(shí)不產(chǎn)生任何操作 作用 構(gòu)成標(biāo)號(hào)語(yǔ)句 標(biāo)示流程的轉(zhuǎn)向點(diǎn) 構(gòu)成循環(huán)語(yǔ)句中空循環(huán)體 例如 while getchar n 只要從鍵盤上輸入的字符不是回車則重新輸入 5 4 1 3復(fù)合語(yǔ)句 用 括起來(lái)的一組語(yǔ)句 一般形式 執(zhí)行語(yǔ)句 說(shuō)明 后不加分號(hào)其中最后一個(gè)語(yǔ)句后也要加分號(hào)語(yǔ)法上和單一語(yǔ)句相同復(fù)合語(yǔ)句可嵌套 如 z x y t z 100 printf f t 如 z x y t z 100 printf f t 6 4 1 4控制語(yǔ)句 控制語(yǔ)句 完成一定的控制功能 如 if x y z x elsez y 7 4 2順序結(jié)構(gòu) 流程圖流程圖是表示算法的一種工具 用一些圖框來(lái)表示各種操作 一個(gè)流程圖包括以下幾部分 表示相應(yīng)操作的框 帶箭頭的流程線 框內(nèi)外必要的文字說(shuō)明 8 順序結(jié)構(gòu) 常用的流程圖符號(hào) N S流程圖 完全去掉了流程線 算法的每一步都用矩形框描述 把一個(gè)個(gè)矩形框按執(zhí)行的次序連接起來(lái)就是一個(gè)完整的算法描述 9 順序結(jié)構(gòu) 結(jié)構(gòu)化程序的三種基本結(jié)構(gòu)順序結(jié)構(gòu) 按書(shū)寫順序執(zhí)行的語(yǔ)句構(gòu)成的程序段 選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu) 10 例4 1輸入任意兩個(gè)整數(shù) 求它們的和及平均值 要求平均值取兩位小數(shù)輸出 例4 1 include includevoidmain intnum1 num2 floatsum aver printf Pleaseinputtwointegers n scanf d d 運(yùn)行情況 30000 5005 sum 35005 aver 17502 50 11 例4 2給定一個(gè)三位正整數(shù) 分別輸出其個(gè)位數(shù) 十位數(shù)和百位數(shù) includevoidmain intm m0 m1 m2 printf Inputanumber 100 999 scanf d 運(yùn)行結(jié)果 Inputanumber 100 999 263 輸出 3 6 2 12 例4 3取一個(gè)16位的二進(jìn)制數(shù)a的7 6 5 4四個(gè)位 如圖4 2中加陰影的部分 voidmain unsigneda b c d scanf x 以十六進(jìn)制輸出a和結(jié)果d 13 例4 4求ax2 bx c 0方程的根 a b c由鍵盤輸入 設(shè) 一元二次方程式的根為x1 x2 可以將上面的分式分為兩項(xiàng) p q 則x1 p q x2 p q 順序結(jié)構(gòu) 14 include includevoidmain floata b c disc x1 x2 p q scanf a f b f c f 運(yùn)行情況 輸入 a 1 b 3 c 2 輸出 x1 1 00 x2 2 00 15 4 3選擇結(jié)構(gòu) 選擇結(jié)構(gòu)是指在程序執(zhí)行過(guò)程中 根據(jù)指定條件的當(dāng)前值在兩條或多條路徑中選擇一條執(zhí)行 C語(yǔ)言的選擇控制語(yǔ)句有兩條 條件選擇語(yǔ)句 if語(yǔ)句開(kāi)關(guān)分支語(yǔ)句 switch語(yǔ)句 16 4 3 1if語(yǔ)句 1 if格式 單分支語(yǔ)句 if 判斷表達(dá)式 語(yǔ)句1 語(yǔ)句1可以是一條語(yǔ)句或復(fù)合語(yǔ)句 注意 滿足條件時(shí)想要執(zhí)行多條語(yǔ)句一定要用復(fù)合語(yǔ)句 當(dāng)判斷表達(dá)式值不為零 即 真 則執(zhí)行語(yǔ)句1 再執(zhí)行其后繼語(yǔ)句 否則 不執(zhí)行語(yǔ)句1 執(zhí)行其后繼語(yǔ)句 17 單分支語(yǔ)句 判斷表達(dá)式應(yīng)該是具有一定意義 有實(shí)用價(jià)值的表達(dá)式 因此 最常用關(guān)系表達(dá)式和邏輯表達(dá)式來(lái)表達(dá) 例如 if a b if a 0 等價(jià)于if a if a 0 等價(jià)于if a if a 5 a 10 例 輸入一個(gè)整數(shù) 求絕對(duì)值 main inti scanf d 例 執(zhí)行下列程序段后a的值是 inta 3 if 2 a 5 18 單分支語(yǔ)句 includemain charc printf inputaletter c getchar if c A 例4 5從鍵盤輸入一個(gè)字母 以小寫字母形式輸出該字母 19 單分支語(yǔ)句 例4 6從鍵盤輸入兩個(gè)整數(shù) 按升序輸出這兩個(gè)數(shù) includevoidmain inta b t scanf d d 20 例 輸入三個(gè)數(shù)a b c 要求按由小到大的順序輸出 Ifa b將a和b對(duì)換Ifa c將a和c對(duì)換Ifb c將b和c對(duì)換 單分支語(yǔ)句 21 單分支語(yǔ)句 includevoidmain floata b c t scanf f f f 必不可少 否則 會(huì)出現(xiàn)邏輯錯(cuò)誤 22 2 if 表達(dá)式 語(yǔ)句1else語(yǔ)句2 雙分支if else語(yǔ)句 例 if x y printf d x elseprintf d y 23 雙分支if else語(yǔ)句 說(shuō)明 在if和else后面可以只含有一條語(yǔ)句 也可以含有用花括號(hào) 括起來(lái)的復(fù)合語(yǔ)句 如 if a b c 24 例 輸入兩個(gè)數(shù)并判斷兩數(shù)是否相等 includevoidmain inta b printf Enterintegera scanf d 運(yùn)行結(jié)果 Enterintegera 12 Enterintegerb 12 a b 運(yùn)行結(jié)果 Enterintegera 12 Enterintegerb 9 a b 雙分支if else語(yǔ)句 25 分析以下程序的輸出結(jié)果 1 includevoidmain inta b scanf d 2 includevoidmain inta b t scanf d d 26 3 includevoidmain intx y scanf d 4 程序輸出結(jié)果 includevoidmain intx y scanf d 27 3 多分支語(yǔ)句 幾種形式 28 3 if 表達(dá)式1 語(yǔ)句1elseif 表達(dá)式2 語(yǔ)句2elseif 表達(dá)式3 語(yǔ)句3 elseif 表達(dá)式m 語(yǔ)句melse語(yǔ)句n 多分支語(yǔ)句 29 例 if number 500 cost 0 15 elseif number 300 cost 0 10 elseif number 100 cost 0 075 elseif number 50 cost 0 05 elsecost 0 多分支語(yǔ)句 30 多分支語(yǔ)句 匹配規(guī)則 Else總是與它上面的 最近的 統(tǒng)一復(fù)合語(yǔ)句中的 未配對(duì)的if語(yǔ)句配對(duì) 當(dāng)if和else數(shù)目不同時(shí) 可以加花括號(hào)來(lái)確定配對(duì)關(guān)系 例 if a b if b c printf a b c elseprintf a b 修改 if a b if b c printf a b c elseprintf a b 31 1 x0 算法1 算法1 輸入x輸入x若x0 則y 1若x 0 則y 0輸出y若x 0 則y 1輸出y 多分支語(yǔ)句 32 程序 includevoidmain intx y scanf d 33 程序1 程序2 if x 0 y 1 if x 0 y 1 elseelsey 0 if x 0 y 0 elsey 1 elsey 1 程序3 程序4 y 1 y 0 if x 0 if x 0 if x 0 y 1 if x 0 y 1 elsey 0 elsey 1 正確 正確 上例中的程序段有四個(gè) 請(qǐng)判斷哪個(gè)是正確的 X 0時(shí) y 0 X 0時(shí) y 1 34 多分支語(yǔ)句 例4 7 輸入百分制成績(jī) 要求輸出相應(yīng)的五級(jí)制成績(jī) 百分制成績(jī)與五級(jí)制成績(jī)之間的轉(zhuǎn)換標(biāo)準(zhǔn)為 90分以上為 A 80 89分為 B 70 79分為 C 60 69分為 D 60分以下為 E 35 If語(yǔ)句嵌套 voidmain intscore printf nPleaseinputthescore 0 100 scanf d 36 多分支語(yǔ)句 例4 8分段函數(shù)定義如右 根據(jù)所輸入的x的值 求函數(shù)值 main floatx y scanf f 37 4 3 2switch語(yǔ)句 switch語(yǔ)句的格式 switch 表達(dá)式 case常量表達(dá)式 語(yǔ)句 break case常量表達(dá)式 語(yǔ)句 break case常量表達(dá)式 語(yǔ)句 break default 語(yǔ)句 執(zhí)行過(guò)程 當(dāng)表達(dá)式的值與某一個(gè)case后面的常量表達(dá)式的值相等時(shí) 就從此case后面的語(yǔ)句開(kāi)始執(zhí)行下去 若所有的case中的常量表達(dá)式的值都沒(méi)有與表達(dá)式的值匹配的 就執(zhí)行default后面的語(yǔ)句 38 switch語(yǔ)句 39 switch語(yǔ)句 執(zhí)行流程 首先計(jì)算switch圓括號(hào)中表達(dá)式的值 然后將結(jié)果值按前后順序依次與各個(gè)case后的常量表達(dá)式進(jìn)行比較 當(dāng)表達(dá)式的值與某一個(gè)case后面的常量表達(dá)式的值相等時(shí) 就執(zhí)行該case后邊的語(yǔ)句組k 接著如果遇到break語(yǔ)句 則結(jié)束整個(gè)switch語(yǔ)句 即退出switch 如果不遇到break語(yǔ)句 則按順序執(zhí)行下面其他case后邊的語(yǔ)句組 直至遇到break語(yǔ)句或最后邊的 為止 才結(jié)束switch語(yǔ)句當(dāng)結(jié)果值與常量表達(dá)式k的值都不相等時(shí) 若有default 則執(zhí)行其后語(yǔ)句 若無(wú)default 則什么都沒(méi)執(zhí)行 40 switch語(yǔ)句 說(shuō)明 1 switch關(guān)鍵字 case也是關(guān)鍵字 與其后面的常量表達(dá)式合稱case語(yǔ)句標(biāo)號(hào) 常量表達(dá)式類型必須與switch后面表達(dá)式類型相匹配 且各case語(yǔ)句標(biāo)號(hào)的值各不相同 不能重復(fù) default也是關(guān)鍵字 起語(yǔ)句標(biāo)號(hào)的作用 代表除了以上所有case標(biāo)號(hào)之外的那些標(biāo)號(hào) 2 語(yǔ)句1 語(yǔ)句2可以是一條語(yǔ)句 也可以是若干條 在必要時(shí) case語(yǔ)句標(biāo)號(hào)后的語(yǔ)句可以省略不寫 3 switch的表達(dá)式通常是一個(gè)整型或字符型變量 也允許枚舉型變量 其結(jié)果為相應(yīng)的整數(shù) 字符或枚舉常量 4 break語(yǔ)句不是一定需要加上 執(zhí)行完一個(gè)case后面的語(yǔ)句 若沒(méi)有遇到break 就自動(dòng)進(jìn)入下一個(gè)case繼續(xù)執(zhí)行 而不再判斷是否與之匹配 41 當(dāng)程序在執(zhí)行時(shí) 如果輸入的是 A include stdio h main chara a getchar switch a case65 printf c A case66 printf c B default printf s n other 運(yùn)行結(jié)果 ABother 42 當(dāng)程序在執(zhí)行時(shí) 屏幕上輸出為 include stdio h main intk 2 switch k case1 printf d n k break case2 printf d k case3 printf d n k break cade4 printf d n k default printf Full n 運(yùn)行結(jié)果 23 43 switch語(yǔ)句 例 要求按照考試成績(jī)的等級(jí)輸出百分制分?jǐn)?shù)段 用switch語(yǔ)句實(shí)現(xiàn) 應(yīng)寫為 switch grade case A printf 85 100 n break case B printf 70 84 n break case C printf 60 69 n break case D printf 60 n break default printf error n 44 補(bǔ)充例 輸入成績(jī) 用A B C D F R分別表示優(yōu) 良 中 及格 不及格 補(bǔ)考 缺考 grade getchar switch grade case A case a printf 優(yōu) break case B case b printf 良 break case C case c printf 中 break case D case d printf 及格 break case F case f printf 不及格 此處沒(méi)有break語(yǔ)句 case R case r printf 請(qǐng)補(bǔ)考 break default printf 輸入錯(cuò) 45 switch語(yǔ)句 例 某幼兒園只收2至6歲的兒童 2 3歲入小班 4歲入中班 5 6歲入大班 根據(jù)輸入的年齡 求應(yīng)入的班級(jí) 分析 設(shè)年齡為age 當(dāng)age為2和3時(shí) 應(yīng)輸出同樣的內(nèi)容 入小班 age為5和6時(shí)輸出同樣的內(nèi)容 入大班 該題算法比較簡(jiǎn)單 46 switch語(yǔ)句 includevoidmain intage printf Pleaseenterage scanf d 47 voidmain intx y a 0 b 0 scanf x d y d 運(yùn)行結(jié)果 輸入 x 1 y 0 輸出 a 2b 2 switch語(yǔ)句的嵌套 48 選擇結(jié)構(gòu)程序舉例 例4 13輸入一個(gè)字符 判別該字符是數(shù)字 英文大寫字母 小寫字母還是其它字符 includevoidmain charc printf inputachar c getchar if c 0 49 選擇結(jié)構(gòu)程序舉例 例4 14輸入三角形三邊長(zhǎng) 求三角形面積 includevoidmain floata b c s area scanf f f f 50 選擇結(jié)構(gòu)程序舉例 例4 15輸入a b c三個(gè)整數(shù) 輸出最大數(shù)和最小數(shù) voidmain inta b c max min printf inputthreenumbers scanf d d d 51 課堂練習(xí) 1 以下程序的運(yùn)行結(jié)果是 main intn 5 if n 6 printf d n n elseprintf d n n 2 對(duì)于整型變量a 賦值語(yǔ)句a a 3 0 1 0 與 語(yǔ)句不等價(jià) A if a 3 0 a 1 elsea 0 B if a 3 0 a 0 elsea 1 C if a 3 a 0 elsea 1 D if a 3 a 1 elsea 0 52 課堂練習(xí) 3 以下程序的運(yùn)行結(jié)果是 main intn c switch n default printf error break case a case b printf good break case c printf pass case d printf warn 53 循環(huán)結(jié)構(gòu) 在許多問(wèn)題中需要用到循環(huán)控制 循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計(jì)的基本結(jié)構(gòu)之一 它和順序結(jié)構(gòu) 選擇結(jié)構(gòu)共同作為各種復(fù)雜程序的基本構(gòu)造單元 特點(diǎn) 當(dāng)給定的條件成立時(shí) 反復(fù)執(zhí)行某個(gè)程序段 直到條件不成立為止 給定的條件稱為循環(huán)條件 反復(fù)執(zhí)行的程序段稱為循環(huán)體 它由C的語(yǔ)句構(gòu)成 C語(yǔ)言提供了3種循環(huán)結(jié)構(gòu) while語(yǔ)句 do while語(yǔ)句 for語(yǔ)句 54 4 4 1用while語(yǔ)句實(shí)現(xiàn)循環(huán) while語(yǔ)句用來(lái)實(shí)現(xiàn) 當(dāng)型 循環(huán)結(jié)構(gòu) 一般形式 while 表達(dá)式 語(yǔ)句當(dāng)表達(dá)式為非0值時(shí) 執(zhí)行while語(yǔ)句中的內(nèi)嵌語(yǔ)句 其特點(diǎn)是 先判斷表達(dá)式 后執(zhí)行語(yǔ)句 1 與if的區(qū)別 if只一次 while反復(fù)判斷 反復(fù)執(zhí)行 2 while語(yǔ)句中通常有改變表達(dá)式的值的語(yǔ)句 55 用while語(yǔ)句實(shí)現(xiàn)循環(huán) 例4 18計(jì)算1 2 100 main inti 1 s 0 while i 100 s i i printf d d i s getch 1 如果缺少i 這一行會(huì)出現(xiàn)什么情況 2 若計(jì)算 n 該程序應(yīng)如何修改 56 例4 19根據(jù)公式計(jì)算 的值 includevoidmain inti 1 n doublepi 0 printf Inputaninteger n scanf d 57 用while語(yǔ)句實(shí)現(xiàn)循環(huán) 例4 21猴子吃桃問(wèn)題 猴子摘下了一堆桃子 第一天吃總數(shù)的一半多一個(gè) 第二天吃剩下的一半多一個(gè) 以后每天都吃前一天剩下的一半多一個(gè) 到第十天想再吃時(shí)剩一個(gè) 求猴子摘了多少個(gè)桃子 算法分析 設(shè)第i天未吃前有xi個(gè)桃子 由題意得 x1 2 1 x2x2 2 1 x3 x9 2 1 x10已知x10 1 我們有 x10 1xn 1 xn 1 2 voidmain intk x1 x2 k 1 x2 1 while k 9 x1 x2 1 2 x2 x1 k printf Totalnumber d n x1 58 用while語(yǔ)句實(shí)現(xiàn)循環(huán) 補(bǔ)充1 統(tǒng)計(jì)從鍵盤輸入的字符個(gè)數(shù) 以回車結(jié)束 補(bǔ)充2 從鍵盤輸入一個(gè)整數(shù) 至少大于9 求最高位的數(shù)字 includemain intcount 0 while getchar n count printf count d count 這種結(jié)構(gòu)的循環(huán)次數(shù)是不確定的 while d 9 d d 10 反復(fù)執(zhí)行d d 10 printf 最高位是 d d 也可寫成 while d 10 9 空循環(huán)體 反復(fù)執(zhí)行d d 10 printf 最高位是 d d 59 4 4 2用do while實(shí)現(xiàn)循環(huán) do while語(yǔ)句的特點(diǎn) 先執(zhí)行循環(huán)體 然后判斷循環(huán)條件是否成立 一般形式 do 循環(huán)體語(yǔ)句 while 表達(dá)式 執(zhí)行過(guò)程 先執(zhí)行一次指定的循環(huán)體語(yǔ)句 然后判別表達(dá)式 當(dāng)表達(dá)式的值為非零 真 時(shí) 返回重新執(zhí)行循環(huán)體語(yǔ)句 如此反復(fù) 直到表達(dá)式的值等于0為止 此時(shí)循環(huán)結(jié)束 60 用do while實(shí)現(xiàn)循環(huán) 用do while計(jì)算 1 2 100 main inti 1 s 0 do s s i i while i 100 printf d d i s getch 計(jì)算 1 3 5 7 101main inti 1 s 0 ints 1 t 1 do s s t i i i 2t t while i 101 printf d t s 61 用do while實(shí)現(xiàn)循環(huán) 例4 22利用格里高公式 求 直到最后一項(xiàng)的值小于10 6 voidmain ints 1 floatn 1 0 t 1 pi 0 do pi pi t n n 2 分母每循環(huán)一次增加2 s s 單項(xiàng)的正負(fù)號(hào)交替變化 t s n 下一項(xiàng)的值 while fabs t 1e 6 pi pi 4 printf pi 10 6f n pi 62 while和do while循環(huán)的比較 上述程序的功能是什么 比較 輸入5和11時(shí)兩個(gè)程序的輸出結(jié)果如何 includevoidmain inti sum 0 scanf d includevoidmain inti sum 0 scanf d 當(dāng)型循環(huán)最少執(zhí)行次數(shù)是多少 直到型循環(huán) 最少執(zhí)行次數(shù)是多少 63 4 4 3用for語(yǔ)句實(shí)現(xiàn)循環(huán) C語(yǔ)言中的for語(yǔ)句使用最為靈活 不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況 而且可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況 它完全可以代替while語(yǔ)句 一般形式 for 表達(dá)式1 表達(dá)式2 表達(dá)式3 循環(huán)體也可寫作 for 循環(huán)變量賦初值 循環(huán)條件 循環(huán)變量增值 循環(huán)體 for語(yǔ)句等價(jià)于如下的while循環(huán)形式 表達(dá)式1 while 表達(dá)式2 語(yǔ)句表達(dá)式3 64 用for語(yǔ)句實(shí)現(xiàn)循環(huán) for語(yǔ)句的執(zhí)行過(guò)程 1 先求解表達(dá)式1 2 求解表達(dá)式2 若其值為真 值為非0 則執(zhí)行for語(yǔ)句中指定的內(nèi)嵌語(yǔ)句 然后執(zhí)行下面第 3 步 若為假 值為0 則結(jié)束循環(huán) 轉(zhuǎn)到第 5 步 3 求解表達(dá)式3 4 轉(zhuǎn)回上面第 2 步驟繼續(xù)執(zhí)行 5 循環(huán)結(jié)束 執(zhí)行for語(yǔ)句下面的一個(gè)語(yǔ)句 65 用for循環(huán)計(jì)算 1 2 100 main inti s 0 for i 1 i 100 i 注意括號(hào)后沒(méi)有分號(hào) s s i 求和 1 2 3 100 printf d s 變量i用于控制循環(huán)次數(shù) 我們稱其為循環(huán)控制變量 1 最后i的值是多少 2 從1加到10000或更多呢 用for語(yǔ)句實(shí)現(xiàn)循環(huán) 66 說(shuō)明 表達(dá)式1 表達(dá)式2和表達(dá)式3之間必須用分號(hào)隔開(kāi) 但表達(dá)式3后面不能加分號(hào) 循環(huán)體如果包含一個(gè)以上的語(yǔ)句 應(yīng)該用花括弧括起來(lái) 以復(fù)合語(yǔ)句形式出現(xiàn) 循環(huán)體有可能一次也不執(zhí)行 循環(huán)體可以為空 表達(dá)式1和表達(dá)式3都可以為逗號(hào)表達(dá)式 例 表達(dá)式1 表達(dá)式2和表達(dá)式3都可省略 但不鼓勵(lì)省略表達(dá)式2和表達(dá)式3 例 省略表達(dá)式1 for語(yǔ)句循環(huán)與while循環(huán)可以互相轉(zhuǎn)換 但for循環(huán)的結(jié)構(gòu)更簡(jiǎn)潔 67 for語(yǔ)句的省略形式 例 1 i 1 for i 1000 i sum sum i 例 2 for i 1 i 1000 sum sum i i 例 3 for i 1 i if i 1000 break sum sum i 1 表達(dá)式1可省略 但分號(hào)不能省 在for語(yǔ)句前為變量賦初值 2 表達(dá)式3也可省略 但應(yīng)把其放入循環(huán)體內(nèi) 否則for無(wú)法正常結(jié)束 3 表達(dá)式2省略后 for語(yǔ)句將無(wú)限循環(huán)下去 可在循環(huán)體內(nèi)加退出循環(huán)的語(yǔ)句 68 for語(yǔ)句的省略形式 4 表達(dá)式1和表達(dá)式3可以是一個(gè)簡(jiǎn)單的表達(dá)式 也可以是一個(gè)逗號(hào)表達(dá)式 表達(dá)式1和表達(dá)式3也可以是與循環(huán)無(wú)關(guān)的任意表達(dá)式 5 三個(gè)表達(dá)式全省略 無(wú)終止執(zhí)行循環(huán)體 分號(hào)不能省 6 把循環(huán)體內(nèi)容放到表達(dá)式3 循環(huán)體為空語(yǔ)句 盡量避免此寫法 例 4 i 1 sum 0 for p 0 i 100 p 1 sum sum i i 例 6 for i 1 sum 0 i 1000 sum sum i i 例 5 i 1 sum 0 for sum sum i i if i 100 break 69 用for語(yǔ)句實(shí)現(xiàn)循環(huán) 例4 25求1 2 10 的值 voidmain inti n 10 longs t for i 1 t 1 s 0 i n i t i t為上一個(gè)數(shù)i 1的階乘值 再乘以i 即i i 1 i s t 累加i printf s ld n s 70 用for語(yǔ)句實(shí)現(xiàn)循環(huán) 例4 27編程輸出 斐波那契數(shù)列 的前20項(xiàng) 斐波那契數(shù)列 是意大利中世紀(jì)數(shù)學(xué)家列昂納多 斐波那契以兔子繁殖為例子而引入的 故又稱為 兔子數(shù)列 main inti x1 1 x2 1 for i 1 i 10 i 每次生成并輸出兩項(xiàng) 所以循環(huán)10次 printf 10d 10d x1 x2 if i 2 0 printf n 當(dāng)i為偶數(shù)時(shí)換行 即每四個(gè)換行 x1 x1 x2 x2 x2 x1 71 用for語(yǔ)句實(shí)現(xiàn)循環(huán) 最簡(jiǎn)單的寫法 main inti j k 10000 for i 1 j 0 i k i i j j i j printf d i 這里 i表示fibonacci n i i j 即第n項(xiàng) 第n 1項(xiàng) 第n 2項(xiàng)j i j 即第n 1項(xiàng) 第n項(xiàng) 第n 2項(xiàng)使i存放當(dāng)前項(xiàng) j存放前一項(xiàng) 程序運(yùn)行結(jié)果為 11235813213455891442333776109871597258441816765 72 4 4 4continue語(yǔ)句和break語(yǔ)句 1 break語(yǔ)句 1 在while for do while語(yǔ)句的循環(huán)體或switch語(yǔ)句的語(yǔ)句組中 使用break語(yǔ)句可使程序立即退出該結(jié)構(gòu) 故有中斷語(yǔ)句之稱 其語(yǔ)法格式如下 break 2 功能 用在循環(huán)語(yǔ)句或switch語(yǔ)句中 使得跳出循環(huán)體或分支 提前結(jié)束循環(huán)或分支 73 continue語(yǔ)句和break語(yǔ)句 includevoidmain inti for i 1 i if 512 i 15 13 break printf d d 512 n i 15 512 i 15 例4 28將數(shù)字512表示成兩個(gè)數(shù)的和 這兩個(gè)數(shù)分別為15和13的倍數(shù) 運(yùn)行結(jié)果 135 377 512 74 continue語(yǔ)句和break語(yǔ)句 說(shuō)明break只能終止并跳出最近一層的循環(huán)結(jié)構(gòu) break不能用于循環(huán)語(yǔ)句和switch語(yǔ)句之外的任何其它語(yǔ)句之中 在循環(huán)語(yǔ)句中 break總是與選擇語(yǔ)句配合使用 main inti s s 0 for i 1 i5 break printf d n s 運(yùn)行結(jié)果 13 75 continue語(yǔ)句和break語(yǔ)句 2 continue語(yǔ)句一般形式 continue 功能 用在循環(huán)語(yǔ)句中 使得結(jié)束本次循環(huán) 即跳過(guò)循環(huán)體中下面尚未執(zhí)行的語(yǔ)句 接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定 補(bǔ)充例題 for i 1 i 10 i if i 2 0 continue printf d i 該程序的功能是 只打印出單數(shù) 76 continue語(yǔ)句和break語(yǔ)句 說(shuō)明 continue只能終止本次循環(huán) 而不是終止整個(gè)循環(huán)的執(zhí)行 continue不能用于循環(huán)語(yǔ)句之外的任何其它語(yǔ)句之中 continue總是與選擇語(yǔ)句配合使用 例4 29 includevoidmain inti n 0 for i 100 i 200 i if i 7 0 例4 29輸出100 200之間所有能被7或9整除的數(shù) 77 continue語(yǔ)句和break語(yǔ)句 補(bǔ)充例 計(jì)算輸入的10個(gè)整數(shù)中正數(shù)的個(gè)數(shù)及正數(shù)平均值 main inti n a floats 0 0 printf 請(qǐng)輸入10個(gè)整數(shù) n for n 0 i 0 i0 下兩句要加 s a n printf 共有 d個(gè)正數(shù) 其平均值為 f n n s n 78 3 continue和break的區(qū)別 continue語(yǔ)句只是結(jié)束本次循環(huán) 而不是終止整個(gè)循環(huán)的執(zhí)行 而break語(yǔ)句則是結(jié)束整個(gè)循環(huán)過(guò)程 不再判斷條件是否成立 79 continue語(yǔ)句和break語(yǔ)句 main inti a 0 b 0 c 0 d 0 for i 1 i 4 i switch i case1 a 1 continue case2 b 2 case3 c 3 break case4 d 4 printf d d d d n a b c d main inti s s 0 for i 1 i5 break printf d n s 80 continue語(yǔ)句和break語(yǔ)句 main intk 4 n 0 clrscr for n k n if n 3 0 break k printf d d n k n 運(yùn)行結(jié)果 4 1 將break改為continue運(yùn)行結(jié)果 3 3 81 4 4 5循環(huán)的嵌套 循環(huán)的嵌套 一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu) 多層循環(huán) 內(nèi)嵌的循環(huán)中還可以嵌套循環(huán) 三種循環(huán) while循環(huán) do while循環(huán)和for循環(huán) 可以互相嵌套 層數(shù)不限 循環(huán)嵌套形式舉例 1 while 2 do 3 for while dofor while while 82 循環(huán)的嵌套 4 while 5 for 6 do dowhile for while while 外層循環(huán)可包含兩個(gè)以上內(nèi)循環(huán) 但不能相互交叉 嵌套循環(huán)的執(zhí)行流程例 for i 1 i n i for j 1 j 5 j s i j 83 例4 30在屏幕上輸出如下圖形 main inti j k for i 8 i 1 i 總共要輸出8行星號(hào) for j 1 j 8 i j printf 控制每行星號(hào)前面顯示的空格 for k 1 k 2 i 1 k printf 控制每行星號(hào)的個(gè)數(shù) printf n 控制輸出每行星號(hào)后換行 84 循環(huán)的嵌套 例4 31改寫例4 25求1 2 10 的程序 用嵌套的循環(huán)結(jié)構(gòu)來(lái)實(shí)現(xiàn) main inti n 10 j longs 0 t for i 1 i n i for t 1 j 1 j i j t j 每次循環(huán)都重新計(jì)算i s t 累加i printf s ld n s 85 程序舉例 窮舉法 例4 32三位自方冪數(shù)又稱水仙花數(shù) 用窮舉法求出所有水仙花數(shù) 如 13 53 33 153 main inti j k m1 m2 printf narcissusnumbersare for i 1 i 9 i for j 0 j 9 j for k 0 k 9 k m1 i 100 j 10 k m2 i i i j j j k k k if m1 m2 printf 4d m1 printf n 86 程序舉例 數(shù)的分離 例4 33編寫一個(gè)程序 輸入1 32767之間的整數(shù) 把這個(gè)整數(shù)顯示為一系列數(shù)字 每組數(shù)字都是用兩個(gè)空格分開(kāi) 例如 整數(shù)1234應(yīng)該顯示為 1234 main inti num counter temp counter 1 printf Enteraninteger scanf d 87 程序舉例 方程求根 例4 34用二分法求非線性方程f x x3 1 1x2 0 9x 1 4 0的根 voidmain floatx x1 x2 y1 y2 y do printf Inputx1 x2 n scanf f f 88 程序舉例 多項(xiàng)式計(jì)算 例4 35編程計(jì)算多項(xiàng)式的值 voidmain floatsum term x intn k sign printf Inputn x n scanf d f 89 程序舉例 數(shù)的判別 例4 36輸入一個(gè)數(shù) 判斷這個(gè)數(shù)是否為素?cái)?shù) voidmain intm i k printf Enteraninteger n scanf d 90 程序舉例 輾轉(zhuǎn)相除法 例4 37用輾轉(zhuǎn)相除法求兩個(gè)數(shù)的最大公約數(shù)和最小公倍數(shù) voidmain inta b m n temp c d printf Pleaseenter2integersn m n scanf d d 91 程序舉例 統(tǒng)計(jì)問(wèn)題 例4 38輸入十個(gè)數(shù) 求出最大數(shù) 最小數(shù)和奇數(shù) 偶數(shù)個(gè)數(shù) voidmain inti max min oldn 0 even 0 x for i 1 imax max x if x min min x printf max d mix d n max min printf Thereare devennumbers n even printf Thereare doldnumbers n oldn 92 程序舉例 面積問(wèn)題 例如 求曲線y2 x在3 x 15間圍成如右圖的陰影部分面積 曲線方程可轉(zhuǎn)化為 而求陰影部分的面積其實(shí)就是求下式積分的問(wèn)題 也就是接近將區(qū)域微分為足夠多的小矩形的面積和 當(dāng)然 一種方法就是從數(shù)學(xué)上求出它的積分 另一種可與C語(yǔ)言來(lái)描述 93 程序舉例 面積問(wèn)題 includemain doublex area 0 0 for x 3 x 15 x x 0 01 area area sqrt x 0 01 printf areais f n area getch 94 課堂練習(xí) 1 以下程序的運(yùn)行結(jié)果是 voidmain intsum 0 item 0 while item 6 break printf d n sum 2 以下程序的運(yùn)行結(jié)果是 voidmain intsum 0 item 0 while item 5 item if item 2 continue sum item printf d n sum 95 牛頓迭代法 方程f x 0 若滿足下列三個(gè)條件可使用牛頓迭代法 f x 在區(qū)間 a b 上的f x 及f x 都存在 f a f b 0 則可以使用牛頓迭代公式f xn 1 xn xn 1 f xn 1 96 牛頓迭代法 includemain floatx x0 f f1 x 2 do x0 x f x0 x0 x0 4 x0 x0 10 f1 3 x0 x0 8 x0 x x0 f f1 while fabs x x0 1e 6 printf therootis 5 2f n x 97 作業(yè) 編寫程序計(jì)算 2 P1214 223 P1224 25 98 課后習(xí)題 4 22 雞兔同籠 是一個(gè)中國(guó)古算題 最早出現(xiàn)在 孫子算經(jīng) 中 籠中有若干只雞和兔子 它們共有88個(gè)頭 244只腳 問(wèn)雞和兔各有多少只 4 25求1 999之間的所有同構(gòu)數(shù) 一個(gè)數(shù)出現(xiàn)在它的平方數(shù)的右端 這個(gè)數(shù)稱為同構(gòu)數(shù) 如 5出現(xiàn)在25右側(cè)5是同構(gòu)數(shù)25出現(xiàn)在625右側(cè)25也是同構(gòu)數(shù) 99 課后習(xí)題 補(bǔ)充下面程序 該程序的功能是求滿足以下條件的最大的n 1 2 3 n 1000voidmain intn s while s 1000 n s s printf n d n n getch 100- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
30 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 語(yǔ)言 程序控制 結(jié)構(gòu) ppt 課件
鏈接地址:http://weibangfood.com.cn/p-4971571.html