




已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第六章循環(huán)控制 6 1概述6 2goto語句以及用goto語句構(gòu)成循環(huán)6 3while語句和do while語句6 4for語句6 5循環(huán)的嵌套6 6break和continue語句 6 1循環(huán)控制概述 循環(huán)結(jié)構(gòu)的特點 在給定條件成立時 反復(fù)執(zhí)行某程序段 直到條件不成立為止 語言提供的循環(huán)結(jié)構(gòu)類型如下 1 用goto語句和if語句構(gòu)成循環(huán) 2 用while語句 3 用do while語句 4 用for語句 循環(huán)條件 循環(huán)體 6 2goto語句以及用goto語句構(gòu)成循環(huán) 6 2 1形式 goto語句標號 6 2 2功能 一進入執(zhí)行g(shù)oto語句 立即轉(zhuǎn)向去執(zhí)行其后面標號所指示的語句 gotojump loop 語句1語句1語句2語句2 語句n語句njump 語句n 1gotoloop 用標識符表示 分號 冒號 冒號 6 2 3注意 結(jié)構(gòu)化程序設(shè)計方法主張限制使用goto語句 一般只在下面兩種結(jié)構(gòu)中表示循環(huán)一 loop if 表達式 語句gotoloop 表達式值為零時 立即停止循環(huán)二 loop 語句if 表達式 gotoloop 表達式值非零時 立即停止循環(huán) 例 用goto語句和if語句構(gòu)成循環(huán) 例用goto語句和if語句構(gòu)成循環(huán) voidmain inti sum 0 i 1 loop if i 100 sum sum i i gotoloop printf d n sum 運行結(jié)果 5050 i 101 形式 while 表達式 語句表達式值為零時 立即停止循環(huán)形式 do語句while 表達式 表達式值為零時 立即停止循環(huán) 至少執(zhí)行一次循環(huán)語句 6 3while和dowhile語句 分號 while 表達式 do語句while 表達式 例1 寫出下面程序的運行結(jié)果 1 voidmain inti 1 while i 3 printf d n i i 2 voidmain inti 1 while i 3 printf d n i i 結(jié)果123 結(jié)果死循環(huán) 循環(huán)體 空語句 注意 若把上面 去掉也死循環(huán) 復(fù)合語句作為循環(huán)體語句 3 voidmain intk 1 n 1 sum 0 do sum n n if sum 10 k 0 while k 1 printf sum d n sum 改為while k 1 死循環(huán) 0 1 1 2 3 3 6 4 10 結(jié)果 sum 10 例2用while語句和do while語句求 傳統(tǒng)流程圖表示算法 N S圖表示算法 100 voidmain inti sum 0 i 1 運行結(jié)果 5050while i 100 sum i i printf d n sum voidmain inti sum 0 i 1 do sum i i while i 100 printf d n sum 注意 i和sum的初值i的終值 例3統(tǒng)計從鍵盤輸入一行字符的個數(shù) includevoidmain intn 0 printf inputastring n while getchar n n printf d n 只要從鍵盤輸入的字符不是回車就繼續(xù)循環(huán) 完成對輸入字符個數(shù)計數(shù) 輸入 ascdf 輸出 5 例4 計算p 1 2 3 nvoidmain inti n longp scanf d 不用long會溢出 重復(fù)到n次 也可以寫成i n 1 例5 計算s 1 2 3 n n 0 voidmain inti n longs t scanf d 保證達到計算n次 t 1 1 2 3 S 1 1 2 1 2 3 例6 計算下面二十個數(shù)的和 13 8 65 68 9 342 987voidmain inti 1 floatx sum 0 while i 20 scanf f 注 執(zhí)行程序時輸入13 8 6568 9 342 987 i 40 i 2 while語句中的表達式一般是關(guān)系表達或邏輯表達式 也可以是其它表達式 只要表達式的值為真 非0 即可繼續(xù)循環(huán) 例7 voidmain inta 0 n printf ninputn scanf d 執(zhí)行n次 每執(zhí)行1次 n減1 a 2 a 輸入 8 輸出 02468101214 例8 while和do while循環(huán)比較 voidmain intsum 0 i scanf d do sum sum i i while i 10 輸入 8 輸入 11 sum 0 sum 11 6 4for語句 代替while語句 6 4 1形式 for 表達式1 表達式2 表達式3 語句要正確表達循環(huán)結(jié)構(gòu)應(yīng)注意三方面要求 1 循環(huán)控制變量的初始化 2 循環(huán)的條件 3 循環(huán)控制變量的值的更新 for語句在書寫形式上集中體現(xiàn)了這三方面要求 6 4 2功能 for語句完全可以取代while語句 for 表達式1 表達式2 表達式3 語句它的執(zhí)行過程如下 1 先求解表達式1 2 求解表達式2 若其值為真 非0 則執(zhí)行for語句中指定的內(nèi)嵌語句 然后執(zhí)行第3 步 若其值為假 0 則結(jié)束循環(huán) 轉(zhuǎn)到第5 步 3 求解表達式3 4 轉(zhuǎn)回第2 步繼續(xù)執(zhí)行 5 循環(huán)結(jié)束 執(zhí)行for語句下面的一個語句 用for語句改寫前面的例2 例4 例5 例7 例2 求voidmain inti sum 0 i 1 do sum i i while i 100 printf d n sum voidmain inti sum 0 for i 1 i 100 i sum i printf d n sum 例4 計算p 1 2 3 nvoidmain inti n longp scanf d for i 1 p 1 i n i P i 中間用逗號 for i 1 p 1 i n P i i 例5 計算s 1 2 3 n n 0 voidmain inti n longs t scanf d for i 1 t 1 s 0 i n i t i s t 例7 計算下面二十個數(shù)的和 13 8 65 68 9 342 987voidmain inti 1 floatx sum 0 while i 20 scanf f for i 1 i 20 i scanf f for語句形式 for 循環(huán)變量賦初值 循環(huán)條件 循環(huán)變量增量 語句 總是一個賦值語句 它用來給循環(huán)控制變量賦初值 總是一個表達式 它用來判別循環(huán)是否終止 定義循環(huán)控制變量每循環(huán)一次后按什么方式變化 這三個部分之間用 分開 對于for循環(huán)中語句的一般形式 for 表達式1 表達式2 表達式3 語句就是如下的while循環(huán)形式 表達式1 while 表達式2 語句表達式3 例1 寫出下面程序的輸出結(jié)果 includevoidmain charc for c getchar putchar c c為 值為0 結(jié)束 可以是任意表達式 輸入 a56 3h hj 輸出 a56 3h 例2 下面程序的輸出結(jié)果是 voidmain intx 10 y 10 i for i 0 x 8 y i printf 3d 3d x y A 10192B 9876C 101091D 10990 表達式1只做一次 9 1 8 C 2 注意 1 for循環(huán)中的 表達式1 表達式2 循環(huán)條件 和 表達式3 可以缺省 但 不能缺省 2 省略了 表達式1 表示不對循環(huán)控制變量賦初值 可在for循環(huán)里面或外面對其賦初值 例如 i 1 for i 20 i scanf f 4 省略了 表達式3 循環(huán)變量增量 則不對循環(huán)控制變量進行操作 這時可在語句體中加入修改循環(huán)控制變量的語句 例如 for i 1 i 100 sum sum i i 5 省略了 表達式1 和 表達式3 例如 for i 100 sum sum i i 相當于 while i 100 sum sum i i 6 3個表達式都可以省略 例如 for 語句相當于 while 1 語句7 表達式1可以是設(shè)置循環(huán)變量的初值的賦值表達式 也可以是其他表達式 例如 for sum 0 i 100 i sum sum i 8 表達式1和表達式3可以是一個簡單表達式也可以是逗號表達式 for sum 0 i 1 i 100 i sum sum i 或 for i 0 j 100 i 100 i j k i j 9 表達式2一般是關(guān)系表達式或邏輯表達式 但也可是數(shù)值表達式或字符表達式 只要其值非零 就執(zhí)行循環(huán)體 例如 for i 0 c getchar n i c 又如 for c getchar n printf c c 6 5循環(huán)的嵌套 1 各種循環(huán)結(jié)構(gòu)的循環(huán)體中可以包含任一種完整的循環(huán)結(jié)構(gòu) 選擇結(jié)構(gòu) 2 選擇結(jié)構(gòu)的任一分支中也可以包含任一種完整的循環(huán)結(jié)構(gòu) 選擇結(jié)構(gòu) 3 且它們可多層嵌套 例1 while x y z for k 1 k 2 k if a 5 w 1 elseif a 5 switch結(jié)構(gòu) else for s 0 n 0 n 3 n s n 6 6break語句和continue語句 switch結(jié)構(gòu)中的break 提前結(jié)束該結(jié)構(gòu)循環(huán)結(jié)構(gòu)中的break 提前結(jié)束該結(jié)構(gòu) while循環(huán) do while循環(huán) for循環(huán) 循環(huán)結(jié)構(gòu)中的continue 提前結(jié)束本次循環(huán) 若在多層嵌套中使用break或continue 它只影響包含它的最內(nèi)層結(jié)構(gòu) 例1 寫出以下程序的運行結(jié)果 voidmain intn for n 1 n 10 n if n 3 0 break printf 4d n printf n voidmain intn for n 1 n 10 n if n 3 0 cotinue printf 4d n printf n 結(jié)果 12 結(jié)果 12457810 例2 把100 200之間的不能被3整除的數(shù)輸出 includevoidmain intn for n 100 n 200 n if n 3 0 continue printf d n printf n 能被3整除 則進行下一次循環(huán) 例3 計算下面若干個數(shù)的和 13 8 65 68 9 342 987 并統(tǒng)計個數(shù) 個數(shù) 100 includevoidmain inti 1 floatx sum 0 while i 100 scanf f 注 執(zhí)行程序時輸入13 8 6568 9 342 9871e36 求絕對值 理論上相等 實際上有誤差 位置不能錯 i 1 例4 voidmain intk j x 0 for k 1 k 4 k x if k 3 0 break for j k j 5 j x x printf d n x 結(jié)果 14 程序舉例 例1 輸出10 1000中所有十位數(shù)為3的數(shù)voidmain inti for i 10 i 1000 i if i 10 10 3 printf 5d i 如 i 1234i 10 123整數(shù)123 10 3 if i 10 103 continue printf 5d i 例2 voidmain intk for k 2 k 10 k 3 printf 4d k printf 4d k 運行結(jié)果 25811 例3 voidmain intk j 99 for k 1 k 2 k printf 1 d 5d n k j for j 5 j 7 j printf 2 d 5d n k j printf 3 d 5d n k j printf 4 d 5d n k j 例4 voidmain inti j k printf ijk n for i 0 i 2 i for j 0 j 2 j for k 0 k 2 k printf d d d n i j k 1 2 1 2 例5 輸出100 200中所有素數(shù)m是素數(shù) m不被2 3 4 m 1中任一個整除結(jié)果 101103107109113127131137139149151157163173173179181191193197199 執(zhí)行m 11 m 15 k m 1 k m 1 for i 2 iki kk 10 i 11k 3i 3 i k 結(jié)束for循環(huán) m i 0 break voidmain intm i k for m 100 m 200 m k m 1 for i 2 i k i if m i 0 break if i k printf disnotaprimenumber n m elseprintf disaprimenumber n m 只要有一個整除 后面無需判斷 強迫循環(huán)結(jié)束 此時i k 循環(huán)正常結(jié)束 i k說明都不能整除 改為輸入一個數(shù) 判斷是否為素數(shù) m 1 includevoidmain intm i k scanf d 輸入 3 輸入 6 例6 輸出所有由1 2 3組成的三位數(shù) 111211311112212312113213313121221321122222322123223323131231331132231332133233333 voidmain inti j k for i 1 i 3 i for j 1 j 3 j for k 1 k 3 k printf d d d i j k d d d沒有空格和逗號 起分隔符作用 上面改為不出現(xiàn)重復(fù)數(shù)字的三位數(shù)voidmain inti j k for i 1 i 3 i for j 1 j 3 j for k 1 k 3 k if i j 上面改為不出現(xiàn)重復(fù)字母的由X Y Z組成的三個子符的字符串voidmain inti j k for i X i Z i for j X j Z j for k X k Z k if i j 與int一樣 例7 P1216 15 voidmain 甲隊乙隊 inti j k XAfor
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年嵌入式系統(tǒng)開發(fā)核心試題及答案
- 財務(wù)管理邏輯與思維的實踐試題及答案
- 2025年嵌入式開發(fā)實務(wù)案例試題及答案
- 邏輯分析在財務(wù)評估中的作用試題及答案
- 協(xié)議書最后寫什么合同
- 合同多付退還協(xié)議書
- 財務(wù)成本管理的邏輯推導(dǎo)題及答案分析
- 財務(wù)管理課程中邏輯的特殊考量試題及答案
- 自動化測試工具比較試題及答案
- 2025年計算機C語言學(xué)習新視角試題及答案
- 紡織機械操作知識掌握策略試題及答案
- 煙臺科目一試題及答案
- 2025年廣東佛山市三水海江建設(shè)投資有限公司招聘筆試參考題庫含答案解析
- 初中英語人教新目標 (Go for it) 版七年級下冊Unit 7 Its raining!Section A教學(xué)設(shè)計
- 民法典物權(quán)編詳細解讀課件
- 列車緊制不緩解故障處理湖南鐵道賀婷課件
- 2025年地理會考簡答題思路模板
- 2025年矯形器裝配工競賽考試題(附答案)
- 2025年行政執(zhí)法證資格考試必刷經(jīng)典題庫及答案(共150題)
- 2025代謝相關(guān)脂肪性肝病基層診療與管理指南解讀課件
- 2024年山東棗莊事業(yè)單位招聘考試真題
評論
0/150
提交評論