




已閱讀5頁,還剩47頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第5章循環(huán)結構 1 5 1 5 52學時2 5 62學時 問題的提出 對于這樣的一類問題 問題1 從鍵盤輸入10個學生的成績 求總成績 問題2 求100以內的素數(shù)問題3 求1 2 3 10 用前面所學知識來解決這些問題是非常麻煩的對于問題1的一個笨辦法 設一個變量 每次輸入一個學生成績 累加后再輸入下一個學生成績 如下 scanf f 這樣重復10次 然后輸出s的值 循環(huán)結構特點 在給定條件 循環(huán)條件 成立時 反復執(zhí)行某程序段 又稱循環(huán)體 直到條件不成立為止 C語言可實現(xiàn)循環(huán)的語句 while語句Do while語句for語句 while 表達式 循環(huán)體語句 執(zhí)行流程 一般形式 5 1while循環(huán)結構 特點 先判斷表達式 后執(zhí)行循環(huán)體說明 循環(huán)體有可能一次也不執(zhí)行循環(huán)體可為任意類型語句下列情況 退出while循環(huán)條件表達式不成立 為零 循環(huán)體內遇break return goto無限循環(huán) while 1 循環(huán)體 例用while循環(huán)求 includemain inti sum 0 i 1 while i 100 sum sum i i printf d sum go 例 問題1的解決方法1 采用while循環(huán)結構main intcount 1 total 0 grade while count 10 printf inputthegrade scanf d 應注意 1 計數(shù)器和累加器的初值 2 一次循環(huán)后 循環(huán)控制變量的變化情況 3 跳出循環(huán)時循環(huán)控制變量的值應為多少 如果count初值為10 20時呢 11 10 9 8 7 6 5 4 3 2 count 10 9 8 7 6 5 4 3 2 1 次數(shù) 每次循環(huán)后 控制變量count的變化情況 例顯示1 10的平方 includemain inti 1 while i 10 printf d d d n i i i i i 運行結果 1 1 12 2 43 3 94 4 165 5 256 6 367 7 498 8 649 9 8110 10 100 注意 循環(huán)控制變量值在循環(huán)體內必須有所改變 例如 請問下例中循環(huán)結束時i值為多少 i 1 while i 100 putchar i 這個循環(huán)永遠不會結束 因為循環(huán)控制變量i沒有在循環(huán)體內被改變 i 不屬于循環(huán)語句 i 應該在循環(huán)體內改變 do循環(huán)體語句 while 表達式 執(zhí)行流程 一般形式 5 2do while循環(huán)結構 特點 先執(zhí)行循環(huán)體 后判斷表達式說明 至少執(zhí)行一次循環(huán)體do while可轉化成while結構 例用do while循環(huán)求 includemain inti sum 0 i 1 do sum i i while i 100 printf d sum 例 問題1的解決方法2 采用do while循環(huán)結構 源程序 main intcount 1 total 0 grade do printf inputthegrade scanf d 應注意 1 一次循環(huán)后 循環(huán)控制變量的變化情況 2 跳出循環(huán)時循環(huán)控制變量的值應為多少 如果count初值為10 20時呢 11 10 9 8 7 6 5 4 3 2 count 10 9 8 7 6 5 4 3 2 1 次數(shù) 每次循環(huán)后 控制變量的變化情況 例while和do while比較 includemain inti sum 0 scanf d includemain inti sum 0 scanf d 1 跳出循環(huán)時循環(huán)控制變量的值應為多少 如果輸入值為1 10 20時呢 2 輸出結果呢 1 while結構與do while循環(huán)結構相類似 2 但要注意區(qū)別 前者 先判斷表達式 再執(zhí)行語句 至少要執(zhí)行0次后者 先執(zhí)行語句 再判斷表達式 至少要執(zhí)行1次 3 也就是說用兩種循環(huán)結構處理同一問題時 若二者的循環(huán)體部分是一樣的 當while后面表達式的第一次的值為 真 非0 時 兩種循環(huán)結構得到的結果相同 否則二者的結果不相同 While與do while循環(huán)結構的比較 for 表達式1 表達式2 表達式3 循環(huán)體語句 執(zhí)行流程 for 循環(huán)變量賦初值 循環(huán)條件 改變循環(huán)變量 表達式1 循環(huán)體 T F 一般形式 5 3for循環(huán)結構 for語句一般應用形式 for 循環(huán)變量賦初值 循環(huán)條件 循環(huán)變量增值 循環(huán)體語句 說明 for語句中expr1 expr2 expr3類型任意 都可省略 但分號 不可省無限循環(huán) for for語句可以轉換成while結構 expr1 while expr2 循環(huán)體語句 expr3 例 includemain inti for i 0 i 10 i putchar a i 運行結果 abcdefghij 例 includemain inti 0 for i 10 i putchar a i 例 includemain inti 0 for i 10 putchar a i 例 includemain inti 0 for i 10 putchar a i i 逗號運算符的主要應用在for語句中的表達式1或表達式3 建議為了增強程序的可讀性 盡量不省略for結構中的表達式 main inti j k s 0 for i 1 j 100 i j i j k i j s s i j printf d d d n i j k printf d n s includemain charc for c getchar n printf c c includemain inti c for i 0 c getchar n i 3 printf c i c 例 雙循環(huán)變量求 如輸入 abc 則輸出 abc 如輸入 abc 則輸出 aei 5 4循環(huán)結構的嵌套 在循環(huán)體語句中又包含另一個完整的循環(huán)結構的形式 稱為循環(huán)結構的嵌套 嵌套在循環(huán)體內的循環(huán)體稱為內循環(huán) 外面的循環(huán)體稱為外循環(huán) 如果內循環(huán)中又有嵌套的循環(huán)語句 則構成多重循環(huán) while do while for循環(huán)結構既可以自身嵌套又可以相互嵌套 20 循環(huán)的嵌套三種循環(huán)可互相嵌套 層數(shù)不限外層循環(huán)可包含兩個以上內循環(huán) 但不能相互交叉嵌套循環(huán)的執(zhí)行流程 嵌套循環(huán)的跳轉禁止 從外層跳入內層跳入同層的另一循環(huán) 21 includemain inti j for i 1 i 5 i 控制行數(shù) for j 1 j i j 控制每一行中 的個數(shù)printf printf n 22 例 編寫程序輸出如下圖形 思考 如何輸出右側圖形 for j 1 j 10 i j 控制每一行中空格的個數(shù)printf 例 編寫程序求解 百錢買百雞 問題 算經(jīng) 一書中提出 百雞問題 雞翁一值錢五 雞母一值錢三 雞雛三值錢一 百錢買百雞 問雞翁 母 雛各幾何 分析 設變量a b分別代表雞翁 雞母的個數(shù) 則雞雛的個數(shù)為100 a b 通過分析可知 a b可能取值的范圍為 a在0 19 b在0 33 則雞翁 雞母 雞雛可能的組合有20 34 680種 對每一種組合都用是否符合百錢的條件進行測試 若符合 則該組合就是問題的一個解 因此解可能不唯一 23 includemain inta b c for a 0 a 19 a for b 0 b 33 b c 100 a b if 5 0 a 3 0 b c 3 0 100 printf a d b d c d n a b c 5 5輔助控制語句break語句功能 在循環(huán)語句和switch語句中 終止并跳出循環(huán)體或開關體說明 break只能終止并跳出最近一層的結構break不能用于循環(huán)語句和switch語句之外的任何其它語句之中 例break舉例 輸出圓面積 面積大于100時停止 definePI3 14159main intr floatarea for r 1 r100 break printf r d area 2f n r area 例break舉例 小寫字母轉換成大寫字母 直至輸入非字母字符 includemain charc while 1 c getchar if c a c 32c a A 例判斷m是否素數(shù) include includemain intm i k scanf d 例判斷m是否素數(shù) include includemain intm i k scanf d 除數(shù)i的取值范圍 優(yōu)化 2 sqrt m 半優(yōu)化 2 m 2 不優(yōu)化 2 m 1 continue語句功能 結束本次循環(huán) 跳過循環(huán)體中尚未執(zhí)行的語句 進行下一次是否執(zhí)行循環(huán)體的判斷僅用于循環(huán)語句中 例求輸入的十個整數(shù)中正數(shù)的個數(shù)及其平均值 includemain inti num 0 a floatsum 0 for i 0 i 10 i scanf d 5 6第4 5章實例解析 例 編程輸入若干個學生的成績 用負數(shù)結束輸入 統(tǒng)計并輸出最高分和最低分 分析 該題對若干個學生的成績的輸入采用循環(huán)控制 然后在循環(huán)體內用條件判斷語句比較成績的高低即可 源程序 main intgrade max min printf inputthegrade scanf d 課堂任務 1 用do while改寫 源程序 用do while改寫 并用了breakmain intgrade max 1 min 1000 為何這樣取初值 do printf inputthenextgrade scanf d main intn longt 1 sum 0 注意累乘器及累加器的初值for n 1 n 100 n t t n if n 2 0 continue sum sum t printf sum ld n sum 每次循環(huán)后 重要變量的變化情況 例 計算1 3 5 99 分析 該題實質上是一個累加求和的問題 而且已知其循環(huán)的次數(shù)因此可以用for語句來實現(xiàn) 對于累加應有選擇地進行 即只對奇數(shù)項求和 可以用if語句和continue語句組合來進行選擇性地累加 返回 源程序 main intn 1 nwhile n 10 if n 6 continue printf 4d n n 請問 跳出循環(huán)時循環(huán)控制變量的值應為多少 運行結果呢 該程序有何問題 如果有該如何改正 無限循環(huán) 運行結果 12345 6 6 6 6 6 5 4 3 2 n 9 8 7 6 5 4 3 2 1 次數(shù) 每次循環(huán)后 重要變量的變化情況 例 閱讀程序并回答問題 main longinti s 0 for i 10 i 150 i if i 3 0 i 7 0 s s i i printf n ld s 例 10 150 之間 能被3或7整除的數(shù)的平方和 分析 用變量s求和 s初值為0 用變量i從10到150循環(huán) 如果i能被3或7整除 i 3 0 i 7 0 則s s i i 000102030405101112131415202122232425303132333435404142434445505152535455 請寫出輸出結果 例執(zhí)行語句段 for i 0 i 6 i for j 0 j 6 j printf 3d d i j putchar n i 0j 0 1 2 3 4 5 i 1j 0 1 2 3 4 5 i 2j 0 1 2 3 4 5 i 3j 0 1 2 3 4 5 i 0j 0 1 2 3 4 5 i 0j 0 1 2 3 4 5 includemain inti j sum 0 for i 0 i 3 i for j 0 j 5 j sum sum j printf sum d n sum includemain inti j sum 0 for i 0 i 3 i for j 0 j 5 j sum sum j printf sum d n sum sum 6 sum 60 課堂練習 includemain inti j sum 0 for i 0 i 3 i for j 0 j i j sum sum j printf sum d n sum sum 10 課堂練習 i 0j 0 i 1j 0 1 i 2j 0 1 2 i 3j 0 1 2 3 算法 從i 3開始做分別用2 3 4 i除i 可參考數(shù)論知識 如果i被某個數(shù)整除 i是合數(shù) i 測試下一個i 例編程求出3至1000內的全部的質數(shù) includemain inti j count 0 flag 用flag作標志 for i 3 i 1000 i flag 0 設標志為0 for j 2 j sqrt i j if i j 0 測試j能夠整數(shù)i flag 1 break 能 則不是素數(shù) 標志為1 i測試完畢 if flag 0 i是素數(shù) 則輸出 printf 4d i count if count 8 0 printf n 每行輸出8個 測試下一個i main longintf1 1 f2 1 f3 n for n 3 n 40 n f3 f1 f2 f1 f2 準備下次循環(huán) f2 f3 準備下次循環(huán) printf nf3 ld f3 例 Fibonacci數(shù)列1 1 2 3 5 8 有f n f n 1 f n 2 f 1 1 f 2 1 求f 40 分析 用變量f1 f2 f3作為數(shù)列相鄰的三項 初值f1 1 f2 1 用變量n從3到40循環(huán) f3 f1 f2 f1 f2 f2 f3 循環(huán)次數(shù) 每運行語句f3 f1 f2后的變量情況 作業(yè) 求14萬之內的最大的f n 例 求1000以內最大的完數(shù) 完數(shù)就是其真因子的和等于其本身的數(shù) main inta i s for a 1000 a 1 a s 0 for i 1 i a i if a i 0 s s i if a s break printf n d a 分析 用變量a從1000到1循環(huán) 如果a等于其真因子的和 則循環(huán)結束 判斷a是否等于其真因子的和 用變量s求a的真因子的和 s初值為0 用變量i從1到a 1循環(huán) 如果a i 0 則s s i 得出s值后 若a s 則a為所求 例 求1 99 2 98 1 main floats 0 0 inti j for i 1 j 99 i j i j s s float i j printf resultis f s 每次循環(huán)后 控制變量的變化情況 請問 跳出循環(huán)時循環(huán)控制變量的值應為多少 如果i j的初值分別為1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025二手汽車買賣合同
- 2025工業(yè)污染控制合同
- 2025企業(yè)合同管理表格:試用與履行
- 甘肅省武威市2023?2024學年高一下冊期末考試數(shù)學試卷附解析
- 2025屆浙江省臺州市黃巖區(qū)中考二模數(shù)學試卷
- 身份驗證漏洞管理基礎知識點歸納
- 社區(qū)社區(qū)發(fā)展規(guī)劃管理基礎知識點歸納
- 石大學前兒童保育學課外必讀:我的第一章練習題幼兒生理的特點
- 2025年計算機網(wǎng)絡技術試題
- 能源管理信息系統(tǒng)集成方案-洞察闡釋
- 北京市海淀區(qū)2024-2025學年七年級下學期期中地理試題(解析版)
- 2025年中考押題預測卷:生物(福建卷01)(考試版)
- 人工智能提示詞工程師試題含答案
- 2025-2030中國風能風電行業(yè)市場深度調研及競爭格局與投資前景研究報告
- 人力資源管理2025年考試試卷及答案
- 安徽省合肥市廬江縣2023-2024學年七年級下學期6月期末數(shù)學試題
- 2025年氯硝西泮項目市場調查研究報告
- DB31/T 920-2015產(chǎn)業(yè)園區(qū)服務規(guī)范
- 2025年大學輔導員招聘考試題庫:學生綜合素質評價體系與輔導員思想政治教育試題
- 2025年高純活性氧化鎂項目市場調查研究報告
- 個體商合伙協(xié)議書
評論
0/150
提交評論