C語言程序控制結(jié)構(gòu)ppt課件
《C語言程序控制結(jié)構(gòu)ppt課件》由會(huì)員分享,可在線閱讀,更多相關(guān)《C語言程序控制結(jié)構(gòu)ppt課件(100頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
第4章程序控制結(jié)構(gòu) 1 主要內(nèi)容 4 1C語言的執(zhí)行語句4 2順序結(jié)構(gòu)4 3選擇結(jié)構(gòu)4 4循環(huán)結(jié)構(gòu) 2 4 1C語言的執(zhí)行語句 C語言的語句分為聲明語句和執(zhí)行語句 第3章介紹的變量定義語句是最常見的聲明語句 聲明語句在編譯時(shí)處理 在程序運(yùn)行時(shí)不產(chǎn)生相應(yīng)的操作 執(zhí)行語句的作用是在程序運(yùn)行時(shí)向計(jì)算機(jī)系統(tǒng)發(fā)出操作命令 使計(jì)算機(jī)執(zhí)行特定的操作 C語句 以 作結(jié)束符 編譯后產(chǎn)生機(jī)器指令 C語句分類 表達(dá)式語句空語句控制語句復(fù)合語句 3 4 1 1表達(dá)式語句 表達(dá)式語句是在表達(dá)式的末尾加上分號(hào)構(gòu)成的語句 z x sin y a a a 賦值語句i 自增1語句x 0 y 1 逗號(hào)表達(dá)式語句x y 無意義printf ThisisaCprogram n 函數(shù)調(diào)用語句賦值語句和函數(shù)調(diào)用語句是使用最多的表達(dá)式語句 如 printf ThisisaCstatement func a 5 y max a b 4 4 1 2空語句 僅由一個(gè) 構(gòu)成的語句只是在邏輯上起到一個(gè)語句的作用 在編譯時(shí)不產(chǎn)生任何指令 在執(zhí)行時(shí)不產(chǎn)生任何操作 作用 構(gòu)成標(biāo)號(hào)語句 標(biāo)示流程的轉(zhuǎn)向點(diǎn) 構(gòu)成循環(huán)語句中空循環(huán)體 例如 while getchar n 只要從鍵盤上輸入的字符不是回車則重新輸入 5 4 1 3復(fù)合語句 用 括起來的一組語句 一般形式 執(zhí)行語句 說明 后不加分號(hào)其中最后一個(gè)語句后也要加分號(hào)語法上和單一語句相同復(fù)合語句可嵌套 如 z x y t z 100 printf f t 如 z x y t z 100 printf f t 6 4 1 4控制語句 控制語句 完成一定的控制功能 如 if x y z x elsez y 7 4 2順序結(jié)構(gòu) 流程圖流程圖是表示算法的一種工具 用一些圖框來表示各種操作 一個(gè)流程圖包括以下幾部分 表示相應(yīng)操作的框 帶箭頭的流程線 框內(nèi)外必要的文字說明 8 順序結(jié)構(gòu) 常用的流程圖符號(hào) N S流程圖 完全去掉了流程線 算法的每一步都用矩形框描述 把一個(gè)個(gè)矩形框按執(zhí)行的次序連接起來就是一個(gè)完整的算法描述 9 順序結(jié)構(gòu) 結(jié)構(gòu)化程序的三種基本結(jié)構(gòu)順序結(jié)構(gòu) 按書寫順序執(zhí)行的語句構(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í)行過程中 根據(jù)指定條件的當(dāng)前值在兩條或多條路徑中選擇一條執(zhí)行 C語言的選擇控制語句有兩條 條件選擇語句 if語句開關(guān)分支語句 switch語句 16 4 3 1if語句 1 if格式 單分支語句 if 判斷表達(dá)式 語句1 語句1可以是一條語句或復(fù)合語句 注意 滿足條件時(shí)想要執(zhí)行多條語句一定要用復(fù)合語句 當(dāng)判斷表達(dá)式值不為零 即 真 則執(zhí)行語句1 再執(zhí)行其后繼語句 否則 不執(zhí)行語句1 執(zhí)行其后繼語句 17 單分支語句 判斷表達(dá)式應(yīng)該是具有一定意義 有實(shí)用價(jià)值的表達(dá)式 因此 最常用關(guān)系表達(dá)式和邏輯表達(dá)式來表達(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 單分支語句 includemain charc printf inputaletter c getchar if c A 例4 5從鍵盤輸入一個(gè)字母 以小寫字母形式輸出該字母 19 單分支語句 例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ì)換 單分支語句 21 單分支語句 includevoidmain floata b c t scanf f f f 必不可少 否則 會(huì)出現(xiàn)邏輯錯(cuò)誤 22 2 if 表達(dá)式 語句1else語句2 雙分支if else語句 例 if x y printf d x elseprintf d y 23 雙分支if else語句 說明 在if和else后面可以只含有一條語句 也可以含有用花括號(hào) 括起來的復(fù)合語句 如 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語句 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 多分支語句 幾種形式 28 3 if 表達(dá)式1 語句1elseif 表達(dá)式2 語句2elseif 表達(dá)式3 語句3 elseif 表達(dá)式m 語句melse語句n 多分支語句 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 多分支語句 30 多分支語句 匹配規(guī)則 Else總是與它上面的 最近的 統(tǒng)一復(fù)合語句中的 未配對(duì)的if語句配對(duì) 當(dāng)if和else數(shù)目不同時(shí) 可以加花括號(hào)來確定配對(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 多分支語句 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 多分支語句 例4 7 輸入百分制成績 要求輸出相應(yīng)的五級(jí)制成績 百分制成績與五級(jí)制成績之間的轉(zhuǎn)換標(biāo)準(zhǔn)為 90分以上為 A 80 89分為 B 70 79分為 C 60 69分為 D 60分以下為 E 35 If語句嵌套 voidmain intscore printf nPleaseinputthescore 0 100 scanf d 36 多分支語句 例4 8分段函數(shù)定義如右 根據(jù)所輸入的x的值 求函數(shù)值 main floatx y scanf f 37 4 3 2switch語句 switch語句的格式 switch 表達(dá)式 case常量表達(dá)式 語句 break case常量表達(dá)式 語句 break case常量表達(dá)式 語句 break default 語句 執(zhí)行過程 當(dāng)表達(dá)式的值與某一個(gè)case后面的常量表達(dá)式的值相等時(shí) 就從此case后面的語句開始執(zhí)行下去 若所有的case中的常量表達(dá)式的值都沒有與表達(dá)式的值匹配的 就執(zhí)行default后面的語句 38 switch語句 39 switch語句 執(zhí)行流程 首先計(jì)算switch圓括號(hào)中表達(dá)式的值 然后將結(jié)果值按前后順序依次與各個(gè)case后的常量表達(dá)式進(jìn)行比較 當(dāng)表達(dá)式的值與某一個(gè)case后面的常量表達(dá)式的值相等時(shí) 就執(zhí)行該case后邊的語句組k 接著如果遇到break語句 則結(jié)束整個(gè)switch語句 即退出switch 如果不遇到break語句 則按順序執(zhí)行下面其他case后邊的語句組 直至遇到break語句或最后邊的 為止 才結(jié)束switch語句當(dāng)結(jié)果值與常量表達(dá)式k的值都不相等時(shí) 若有default 則執(zhí)行其后語句 若無default 則什么都沒執(zhí)行 40 switch語句 說明 1 switch關(guān)鍵字 case也是關(guān)鍵字 與其后面的常量表達(dá)式合稱case語句標(biāo)號(hào) 常量表達(dá)式類型必須與switch后面表達(dá)式類型相匹配 且各case語句標(biāo)號(hào)的值各不相同 不能重復(fù) default也是關(guān)鍵字 起語句標(biāo)號(hào)的作用 代表除了以上所有case標(biāo)號(hào)之外的那些標(biāo)號(hào) 2 語句1 語句2可以是一條語句 也可以是若干條 在必要時(shí) case語句標(biāo)號(hào)后的語句可以省略不寫 3 switch的表達(dá)式通常是一個(gè)整型或字符型變量 也允許枚舉型變量 其結(jié)果為相應(yīng)的整數(shù) 字符或枚舉常量 4 break語句不是一定需要加上 執(zhí)行完一個(gè)case后面的語句 若沒有遇到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語句 例 要求按照考試成績的等級(jí)輸出百分制分?jǐn)?shù)段 用switch語句實(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ǔ)充例 輸入成績 用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 不及格 此處沒有break語句 case R case r printf 請(qǐng)補(bǔ)考 break default printf 輸入錯(cuò) 45 switch語句 例 某幼兒園只收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)容 入大班 該題算法比較簡單 46 switch語句 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語句的嵌套 48 選擇結(jié)構(gòu)程序舉例 例4 13輸入一個(gè)字符 判別該字符是數(shù)字 英文大寫字母 小寫字母還是其它字符 includevoidmain charc printf inputachar c getchar if c 0 49 選擇結(jié)構(gòu)程序舉例 例4 14輸入三角形三邊長 求三角形面積 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 賦值語句a a 3 0 1 0 與 語句不等價(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) 在許多問題中需要用到循環(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的語句構(gòu)成 C語言提供了3種循環(huán)結(jié)構(gòu) while語句 do while語句 for語句 54 4 4 1用while語句實(shí)現(xiàn)循環(huán) while語句用來實(shí)現(xiàn) 當(dāng)型 循環(huán)結(jié)構(gòu) 一般形式 while 表達(dá)式 語句當(dāng)表達(dá)式為非0值時(shí) 執(zhí)行while語句中的內(nèi)嵌語句 其特點(diǎn)是 先判斷表達(dá)式 后執(zhí)行語句 1 與if的區(qū)別 if只一次 while反復(fù)判斷 反復(fù)執(zhí)行 2 while語句中通常有改變表達(dá)式的值的語句 55 用while語句實(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語句實(shí)現(xiàn)循環(huán) 例4 21猴子吃桃問題 猴子摘下了一堆桃子 第一天吃總數(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語句實(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語句的特點(diǎn) 先執(zhí)行循環(huán)體 然后判斷循環(huán)條件是否成立 一般形式 do 循環(huán)體語句 while 表達(dá)式 執(zhí)行過程 先執(zhí)行一次指定的循環(huán)體語句 然后判別表達(dá)式 當(dāng)表達(dá)式的值為非零 真 時(shí) 返回重新執(zhí)行循環(huán)體語句 如此反復(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語句實(shí)現(xiàn)循環(huán) C語言中的for語句使用最為靈活 不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況 而且可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況 它完全可以代替while語句 一般形式 for 表達(dá)式1 表達(dá)式2 表達(dá)式3 循環(huán)體也可寫作 for 循環(huán)變量賦初值 循環(huán)條件 循環(huán)變量增值 循環(huán)體 for語句等價(jià)于如下的while循環(huán)形式 表達(dá)式1 while 表達(dá)式2 語句表達(dá)式3 64 用for語句實(shí)現(xiàn)循環(huán) for語句的執(zhí)行過程 1 先求解表達(dá)式1 2 求解表達(dá)式2 若其值為真 值為非0 則執(zhí)行for語句中指定的內(nèi)嵌語句 然后執(zhí)行下面第 3 步 若為假 值為0 則結(jié)束循環(huán) 轉(zhuǎn)到第 5 步 3 求解表達(dá)式3 4 轉(zhuǎn)回上面第 2 步驟繼續(xù)執(zhí)行 5 循環(huán)結(jié)束 執(zhí)行for語句下面的一個(gè)語句 65 用for循環(huán)計(jì)算 1 2 100 main inti s 0 for i 1 i 100 i 注意括號(hào)后沒有分號(hào) s s i 求和 1 2 3 100 printf d s 變量i用于控制循環(huán)次數(shù) 我們稱其為循環(huán)控制變量 1 最后i的值是多少 2 從1加到10000或更多呢 用for語句實(shí)現(xiàn)循環(huán) 66 說明 表達(dá)式1 表達(dá)式2和表達(dá)式3之間必須用分號(hào)隔開 但表達(dá)式3后面不能加分號(hào) 循環(huán)體如果包含一個(gè)以上的語句 應(yīng)該用花括弧括起來 以復(fù)合語句形式出現(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語句循環(huán)與while循環(huán)可以互相轉(zhuǎn)換 但for循環(huán)的結(jié)構(gòu)更簡潔 67 for語句的省略形式 例 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語句前為變量賦初值 2 表達(dá)式3也可省略 但應(yīng)把其放入循環(huán)體內(nèi) 否則for無法正常結(jié)束 3 表達(dá)式2省略后 for語句將無限循環(huán)下去 可在循環(huán)體內(nèi)加退出循環(huán)的語句 68 for語句的省略形式 4 表達(dá)式1和表達(dá)式3可以是一個(gè)簡單的表達(dá)式 也可以是一個(gè)逗號(hào)表達(dá)式 表達(dá)式1和表達(dá)式3也可以是與循環(huán)無關(guān)的任意表達(dá)式 5 三個(gè)表達(dá)式全省略 無終止執(zhí)行循環(huán)體 分號(hào)不能省 6 把循環(huán)體內(nèi)容放到表達(dá)式3 循環(huán)體為空語句 盡量避免此寫法 例 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語句實(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語句實(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語句實(shí)現(xiàn)循環(huá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語句和break語句 1 break語句 1 在while for do while語句的循環(huán)體或switch語句的語句組中 使用break語句可使程序立即退出該結(jié)構(gòu) 故有中斷語句之稱 其語法格式如下 break 2 功能 用在循環(huán)語句或switch語句中 使得跳出循環(huán)體或分支 提前結(jié)束循環(huán)或分支 73 continue語句和break語句 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語句和break語句 說明break只能終止并跳出最近一層的循環(huán)結(jié)構(gòu) break不能用于循環(huán)語句和switch語句之外的任何其它語句之中 在循環(huán)語句中 break總是與選擇語句配合使用 main inti s s 0 for i 1 i5 break printf d n s 運(yùn)行結(jié)果 13 75 continue語句和break語句 2 continue語句一般形式 continue 功能 用在循環(huán)語句中 使得結(jié)束本次循環(huán) 即跳過循環(huán)體中下面尚未執(zhí)行的語句 接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定 補(bǔ)充例題 for i 1 i 10 i if i 2 0 continue printf d i 該程序的功能是 只打印出單數(shù) 76 continue語句和break語句 說明 continue只能終止本次循環(huán) 而不是終止整個(gè)循環(huán)的執(zhí)行 continue不能用于循環(huán)語句之外的任何其它語句之中 continue總是與選擇語句配合使用 例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語句和break語句 補(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語句只是結(jié)束本次循環(huán) 而不是終止整個(gè)循環(huán)的執(zhí)行 而break語句則是結(jié)束整個(gè)循環(huán)過程 不再判斷條件是否成立 79 continue語句和break語句 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語句和break語句 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)來實(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è)空格分開 例如 整數(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ì)問題 例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 程序舉例 面積問題 例如 求曲線y2 x在3 x 15間圍成如右圖的陰影部分面積 曲線方程可轉(zhuǎn)化為 而求陰影部分的面積其實(shí)就是求下式積分的問題 也就是接近將區(qū)域微分為足夠多的小矩形的面積和 當(dāng)然 一種方法就是從數(shù)學(xué)上求出它的積分 另一種可與C語言來描述 93 程序舉例 面積問題 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è)中國古算題 最早出現(xiàn)在 孫子算經(jīng) 中 籠中有若干只雞和兔子 它們共有88個(gè)頭 244只腳 問雞和兔各有多少只 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)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
30 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 語言 程序控制 結(jié)構(gòu) ppt 課件
鏈接地址:http://m.appdesigncorp.com/p-4971571.html