




已閱讀5頁(yè),還剩47頁(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)介
第5章循環(huán)結(jié)構(gòu) 1 5 1 5 52學(xué)時(shí)2 5 62學(xué)時(shí) 問(wèn)題的提出 對(duì)于這樣的一類(lèi)問(wèn)題 問(wèn)題1 從鍵盤(pán)輸入10個(gè)學(xué)生的成績(jī) 求總成績(jī) 問(wèn)題2 求100以內(nèi)的素?cái)?shù)問(wèn)題3 求1 2 3 10 用前面所學(xué)知識(shí)來(lái)解決這些問(wèn)題是非常麻煩的對(duì)于問(wèn)題1的一個(gè)笨辦法 設(shè)一個(gè)變量 每次輸入一個(gè)學(xué)生成績(jī) 累加后再輸入下一個(gè)學(xué)生成績(jī) 如下 scanf f 這樣重復(fù)10次 然后輸出s的值 循環(huán)結(jié)構(gòu)特點(diǎn) 在給定條件 循環(huán)條件 成立時(shí) 反復(fù)執(zhí)行某程序段 又稱(chēng)循環(huán)體 直到條件不成立為止 C語(yǔ)言可實(shí)現(xiàn)循環(huán)的語(yǔ)句 while語(yǔ)句Do while語(yǔ)句for語(yǔ)句 while 表達(dá)式 循環(huán)體語(yǔ)句 執(zhí)行流程 一般形式 5 1while循環(huán)結(jié)構(gòu) 特點(diǎn) 先判斷表達(dá)式 后執(zhí)行循環(huán)體說(shuō)明 循環(huán)體有可能一次也不執(zhí)行循環(huán)體可為任意類(lèi)型語(yǔ)句下列情況 退出while循環(huán)條件表達(dá)式不成立 為零 循環(huán)體內(nèi)遇break return goto無(wú)限循環(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 例 問(wèn)題1的解決方法1 采用while循環(huán)結(jié)構(gòu)main intcount 1 total 0 grade while count 10 printf inputthegrade scanf d 應(yīng)注意 1 計(jì)數(shù)器和累加器的初值 2 一次循環(huán)后 循環(huán)控制變量的變化情況 3 跳出循環(huán)時(shí)循環(huán)控制變量的值應(yīng)為多少 如果count初值為10 20時(shí)呢 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 運(yùn)行結(jié)果 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)體內(nèi)必須有所改變 例如 請(qǐng)問(wèn)下例中循環(huán)結(jié)束時(shí)i值為多少 i 1 while i 100 putchar i 這個(gè)循環(huán)永遠(yuǎn)不會(huì)結(jié)束 因?yàn)檠h(huán)控制變量i沒(méi)有在循環(huán)體內(nèi)被改變 i 不屬于循環(huán)語(yǔ)句 i 應(yīng)該在循環(huán)體內(nèi)改變 do循環(huán)體語(yǔ)句 while 表達(dá)式 執(zhí)行流程 一般形式 5 2do while循環(huán)結(jié)構(gòu) 特點(diǎn) 先執(zhí)行循環(huán)體 后判斷表達(dá)式說(shuō)明 至少執(zhí)行一次循環(huán)體do while可轉(zhuǎn)化成while結(jié)構(gòu) 例用do while循環(huán)求 includemain inti sum 0 i 1 do sum i i while i 100 printf d sum 例 問(wèn)題1的解決方法2 采用do while循環(huán)結(jié)構(gòu) 源程序 main intcount 1 total 0 grade do printf inputthegrade scanf d 應(yīng)注意 1 一次循環(huán)后 循環(huán)控制變量的變化情況 2 跳出循環(huán)時(shí)循環(huán)控制變量的值應(yīng)為多少 如果count初值為10 20時(shí)呢 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)時(shí)循環(huán)控制變量的值應(yīng)為多少 如果輸入值為1 10 20時(shí)呢 2 輸出結(jié)果呢 1 while結(jié)構(gòu)與do while循環(huán)結(jié)構(gòu)相類(lèi)似 2 但要注意區(qū)別 前者 先判斷表達(dá)式 再執(zhí)行語(yǔ)句 至少要執(zhí)行0次后者 先執(zhí)行語(yǔ)句 再判斷表達(dá)式 至少要執(zhí)行1次 3 也就是說(shuō)用兩種循環(huán)結(jié)構(gòu)處理同一問(wèn)題時(shí) 若二者的循環(huán)體部分是一樣的 當(dāng)while后面表達(dá)式的第一次的值為 真 非0 時(shí) 兩種循環(huán)結(jié)構(gòu)得到的結(jié)果相同 否則二者的結(jié)果不相同 While與do while循環(huán)結(jié)構(gòu)的比較 for 表達(dá)式1 表達(dá)式2 表達(dá)式3 循環(huán)體語(yǔ)句 執(zhí)行流程 for 循環(huán)變量賦初值 循環(huán)條件 改變循環(huán)變量 表達(dá)式1 循環(huán)體 T F 一般形式 5 3for循環(huán)結(jié)構(gòu) for語(yǔ)句一般應(yīng)用形式 for 循環(huán)變量賦初值 循環(huán)條件 循環(huán)變量增值 循環(huán)體語(yǔ)句 說(shuō)明 for語(yǔ)句中expr1 expr2 expr3類(lèi)型任意 都可省略 但分號(hào) 不可省無(wú)限循環(huán) for for語(yǔ)句可以轉(zhuǎn)換成while結(jié)構(gòu) expr1 while expr2 循環(huán)體語(yǔ)句 expr3 例 includemain inti for i 0 i 10 i putchar a i 運(yùn)行結(jié)果 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 逗號(hào)運(yùn)算符的主要應(yīng)用在for語(yǔ)句中的表達(dá)式1或表達(dá)式3 建議為了增強(qiáng)程序的可讀性 盡量不省略for結(jié)構(gòu)中的表達(dá)式 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)結(jié)構(gòu)的嵌套 在循環(huán)體語(yǔ)句中又包含另一個(gè)完整的循環(huán)結(jié)構(gòu)的形式 稱(chēng)為循環(huán)結(jié)構(gòu)的嵌套 嵌套在循環(huán)體內(nèi)的循環(huán)體稱(chēng)為內(nèi)循環(huán) 外面的循環(huán)體稱(chēng)為外循環(huán) 如果內(nèi)循環(huán)中又有嵌套的循環(huán)語(yǔ)句 則構(gòu)成多重循環(huán) while do while for循環(huán)結(jié)構(gòu)既可以自身嵌套又可以相互嵌套 20 循環(huán)的嵌套三種循環(huán)可互相嵌套 層數(shù)不限外層循環(huán)可包含兩個(gè)以上內(nèi)循環(huán) 但不能相互交叉嵌套循環(huán)的執(zhí)行流程 嵌套循環(huán)的跳轉(zhuǎn)禁止 從外層跳入內(nèi)層跳入同層的另一循環(huán) 21 includemain inti j for i 1 i 5 i 控制行數(shù) for j 1 j i j 控制每一行中 的個(gè)數(shù)printf printf n 22 例 編寫(xiě)程序輸出如下圖形 思考 如何輸出右側(cè)圖形 for j 1 j 10 i j 控制每一行中空格的個(gè)數(shù)printf 例 編寫(xiě)程序求解 百錢(qián)買(mǎi)百雞 問(wèn)題 算經(jīng) 一書(shū)中提出 百雞問(wèn)題 雞翁一值錢(qián)五 雞母一值錢(qián)三 雞雛三值錢(qián)一 百錢(qián)買(mǎi)百雞 問(wèn)雞翁 母 雛各幾何 分析 設(shè)變量a b分別代表雞翁 雞母的個(gè)數(shù) 則雞雛的個(gè)數(shù)為100 a b 通過(guò)分析可知 a b可能取值的范圍為 a在0 19 b在0 33 則雞翁 雞母 雞雛可能的組合有20 34 680種 對(duì)每一種組合都用是否符合百錢(qián)的條件進(jìn)行測(cè)試 若符合 則該組合就是問(wèn)題的一個(gè)解 因此解可能不唯一 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輔助控制語(yǔ)句break語(yǔ)句功能 在循環(huán)語(yǔ)句和switch語(yǔ)句中 終止并跳出循環(huán)體或開(kāi)關(guān)體說(shuō)明 break只能終止并跳出最近一層的結(jié)構(gòu)break不能用于循環(huán)語(yǔ)句和switch語(yǔ)句之外的任何其它語(yǔ)句之中 例break舉例 輸出圓面積 面積大于100時(shí)停止 definePI3 14159main intr floatarea for r 1 r100 break printf r d area 2f n r area 例break舉例 小寫(xiě)字母轉(zhuǎn)換成大寫(xiě)字母 直至輸入非字母字符 includemain charc while 1 c getchar if c a c 32c a A 例判斷m是否素?cái)?shù) include includemain intm i k scanf d 例判斷m是否素?cái)?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語(yǔ)句功能 結(jié)束本次循環(huán) 跳過(guò)循環(huán)體中尚未執(zhí)行的語(yǔ)句 進(jìn)行下一次是否執(zhí)行循環(huán)體的判斷僅用于循環(huán)語(yǔ)句中 例求輸入的十個(gè)整數(shù)中正數(shù)的個(gè)數(shù)及其平均值 includemain inti num 0 a floatsum 0 for i 0 i 10 i scanf d 5 6第4 5章實(shí)例解析 例 編程輸入若干個(gè)學(xué)生的成績(jī) 用負(fù)數(shù)結(jié)束輸入 統(tǒng)計(jì)并輸出最高分和最低分 分析 該題對(duì)若干個(gè)學(xué)生的成績(jī)的輸入采用循環(huán)控制 然后在循環(huán)體內(nèi)用條件判斷語(yǔ)句比較成績(jī)的高低即可 源程序 main intgrade max min printf inputthegrade scanf d 課堂任務(wù) 1 用do while改寫(xiě) 源程序 用do while改寫(xiě) 并用了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)后 重要變量的變化情況 例 計(jì)算1 3 5 99 分析 該題實(shí)質(zhì)上是一個(gè)累加求和的問(wèn)題 而且已知其循環(huán)的次數(shù)因此可以用for語(yǔ)句來(lái)實(shí)現(xiàn) 對(duì)于累加應(yīng)有選擇地進(jìn)行 即只對(duì)奇數(shù)項(xiàng)求和 可以用if語(yǔ)句和continue語(yǔ)句組合來(lái)進(jìn)行選擇性地累加 返回 源程序 main intn 1 nwhile n 10 if n 6 continue printf 4d n n 請(qǐng)問(wèn) 跳出循環(huán)時(shí)循環(huán)控制變量的值應(yīng)為多少 運(yùn)行結(jié)果呢 該程序有何問(wèn)題 如果有該如何改正 無(wú)限循環(huán) 運(yùn)行結(jié)果 12345 6 6 6 6 6 5 4 3 2 n 9 8 7 6 5 4 3 2 1 次數(shù) 每次循環(huán)后 重要變量的變化情況 例 閱讀程序并回答問(wè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 請(qǐng)寫(xiě)出輸出結(jié)果 例執(zhí)行語(yǔ)句段 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 課堂練習(xí) 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 課堂練習(xí) i 0j 0 i 1j 0 1 i 2j 0 1 2 i 3j 0 1 2 3 算法 從i 3開(kāi)始做分別用2 3 4 i除i 可參考數(shù)論知識(shí) 如果i被某個(gè)數(shù)整除 i是合數(shù) i 測(cè)試下一個(gè)i 例編程求出3至1000內(nèi)的全部的質(zhì)數(shù) includemain inti j count 0 flag 用flag作標(biāo)志 for i 3 i 1000 i flag 0 設(shè)標(biāo)志為0 for j 2 j sqrt i j if i j 0 測(cè)試j能夠整數(shù)i flag 1 break 能 則不是素?cái)?shù) 標(biāo)志為1 i測(cè)試完畢 if flag 0 i是素?cái)?shù) 則輸出 printf 4d i count if count 8 0 printf n 每行輸出8個(gè) 測(cè)試下一個(gè)i main longintf1 1 f2 1 f3 n for n 3 n 40 n f3 f1 f2 f1 f2 準(zhǔn)備下次循環(huán) f2 f3 準(zhǔn)備下次循環(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ù)列相鄰的三項(xiàng) 初值f1 1 f2 1 用變量n從3到40循環(huán) f3 f1 f2 f1 f2 f2 f3 循環(huán)次數(shù) 每運(yùn)行語(yǔ)句f3 f1 f2后的變量情況 作業(yè) 求14萬(wàn)之內(nèi)的最大的f n 例 求1000以內(nèi)最大的完數(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)結(jié)束 判斷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)后 控制變量的變化情況 請(qǐng)問(wèn) 跳出循環(huán)時(shí)循環(huán)控制變量的值應(yīng)為多少 如果i j的初值分別為1
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于蛋白質(zhì)組學(xué)研究疏肝通竅法對(duì)肝郁證青光眼大鼠視網(wǎng)膜神經(jīng)節(jié)細(xì)胞的作用機(jī)制
- 地方文化題材微紀(jì)錄片的網(wǎng)感化敘事研究-兼談畢業(yè)作品《守藝廬州》
- 我愛(ài)爸爸媽媽心理健康
- 痛經(jīng)防治與健康管理講座
- CRRT健康教育比賽
- 干細(xì)胞治療腫瘤的臨床應(yīng)用與研究進(jìn)展
- 百草枯中毒的病例討論
- 頸椎健康科普課件
- 餐飲促銷(xiāo)主題活動(dòng)策劃方案
- 顱腦外傷護(hù)理課件
- 高空作業(yè)安全操作規(guī)程
- 2025年輔警招聘考試真題(含答案)
- 《電化學(xué)儲(chǔ)能電站安全驗(yàn)收規(guī)程》(征求意見(jiàn)稿)
- 湖北省八校聯(lián)考2024-2025學(xué)年高一下學(xué)期6月期末生物試卷(含答案)
- 2025至2030中國(guó)碳納米管行業(yè)市場(chǎng)發(fā)展分析及風(fēng)險(xiǎn)與對(duì)策報(bào)告
- 艾滋病患者的心理與護(hù)理
- 2025年中國(guó)花生粕市場(chǎng)調(diào)查研究報(bào)告
- ?六年級(jí)奧數(shù)練習(xí) 全國(guó)版 含答案
- 2025至2030中國(guó)密織防水透氣紡織品行業(yè)發(fā)展趨勢(shì)分析與未來(lái)投資戰(zhàn)略咨詢研究報(bào)告
- 2025-2030年中國(guó)鍋爐水處理化學(xué)品行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 高中體育專(zhuān)項(xiàng)化教學(xué)對(duì)學(xué)生身心發(fā)展的促進(jìn)作用研究論文
評(píng)論
0/150
提交評(píng)論