C語(yǔ)言第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì).ppt_第1頁(yè)
C語(yǔ)言第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì).ppt_第2頁(yè)
C語(yǔ)言第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì).ppt_第3頁(yè)
C語(yǔ)言第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì).ppt_第4頁(yè)
C語(yǔ)言第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì).ppt_第5頁(yè)
已閱讀5頁(yè),還剩85頁(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)介

第五章循環(huán)結(jié)構(gòu)程序設(shè)計(jì) 5 1概述 前面已介紹了順序結(jié)構(gòu) 選擇結(jié)構(gòu) 本章介紹循環(huán)結(jié)構(gòu) 如 sum 1 2 3 100 實(shí)際問(wèn)題 一組重復(fù)執(zhí)行的語(yǔ)句 則用循環(huán)結(jié)構(gòu)解決 C語(yǔ)言用四種形式循環(huán) 2 do while語(yǔ)句 3 For語(yǔ)句 4 break continue和goto語(yǔ)句 1 While語(yǔ)句 5 2while語(yǔ)句 while語(yǔ)句在C語(yǔ)言中用得比較多 它是通過(guò)判斷循環(huán)控制條件是否滿足來(lái)決定是否繼續(xù)循環(huán) 又稱 當(dāng)型 循環(huán) 形式 while 表達(dá)式 循環(huán)體語(yǔ)句 2 執(zhí)行過(guò)程 先判斷表達(dá)式的值 若 0 則執(zhí)行其后面的語(yǔ)句 否則while執(zhí)行完畢 專門的當(dāng)型循環(huán)語(yǔ)句 while語(yǔ)句 3 流程圖 將上述例子用while語(yǔ)句寫(xiě)出while i 100 sum i i 語(yǔ)句中應(yīng)有使表達(dá)式 0的語(yǔ)句 否則會(huì)出現(xiàn)無(wú)限循環(huán) 死 循環(huán) 注 while后面的語(yǔ)句一般為復(fù)合語(yǔ)句 即 加 我們來(lái)看下面的例子例5 1寫(xiě)一個(gè)程序 輸入一個(gè)班學(xué)生的成績(jī) 求全班的平均成績(jī) 分析 輸入成績(jī) 計(jì)算平均成績(jī)都是一個(gè)重復(fù)性過(guò)程 因此可以用循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn) 在這里 我們并不知有多少個(gè)學(xué)生 也就是說(shuō)不知循環(huán)到底有多少次 但考慮到成績(jī)沒(méi)有負(fù)數(shù) 這樣就可以把循環(huán)條件定為 每當(dāng)輸入的分?jǐn)?shù)大于等于0時(shí)就繼續(xù)輸入成績(jī) 輸入的分?jǐn)?shù)小于0時(shí)就停止輸入 解題步驟如下 1 輸入一個(gè)分?jǐn)?shù) 2 當(dāng) 分?jǐn)?shù) 0 時(shí) 做下列工作 累計(jì)總分 人數(shù)加一 輸入下一分?jǐn)?shù) 3 重復(fù)第 2 步 直到 分?jǐn)?shù) 0 程序 includemain floatscore average 0 average存放平均成績(jī) 初值為0 intn 0 n用來(lái)存放學(xué)生數(shù) 初值為0 scanf f 輸入下一個(gè)學(xué)生的分?jǐn)?shù) if n 0 average average n 求平均成績(jī) average printf 6 2f average 輸出平均成績(jī)average 保留兩位小數(shù) 在使用while語(yǔ)句的時(shí)候 我們要注意以下兩個(gè)問(wèn)題 1 循環(huán)體如果包含一個(gè)以上的語(yǔ)句 應(yīng)該用花括號(hào)括起來(lái) 以復(fù)合語(yǔ)句的形式出現(xiàn) 如果不加花括號(hào) 則while語(yǔ)句的范圍只到while后面的第一個(gè)分號(hào)處 比如上例中 while語(yǔ)句中如無(wú)花括號(hào) 則while語(yǔ)句范圍只到 average score 2 在循環(huán)體中應(yīng)有使循環(huán)趨向于結(jié)束的語(yǔ)句 比如上例中 循環(huán)結(jié)束的條件是 score 0 那么當(dāng)我們把這個(gè)班的成績(jī)?nèi)枯斎胪旰?一定要輸入一個(gè)負(fù)數(shù) 才能使程序往下執(zhí)行 3 循環(huán)體語(yǔ)句有可能一次也不執(zhí)行 比如說(shuō)上例中 當(dāng)?shù)谝淮屋斎氲姆謹(jǐn)?shù)就為負(fù)數(shù)時(shí) 則循環(huán)體一次也不執(zhí)行 5 3do while語(yǔ)句 do while語(yǔ)句的特點(diǎn)是 先執(zhí)行循環(huán)體中的語(yǔ)句 再通過(guò)判斷表達(dá)式的值來(lái)決定是否繼續(xù)循環(huán) 循環(huán)條件的測(cè)試是在循環(huán)的尾部進(jìn)行的 它是一種專門的 直到型 循環(huán)語(yǔ)句 它的一般形式為 do循環(huán)體語(yǔ)句while 表達(dá)式 3 流程 對(duì)于例5 1用do while語(yǔ)句編寫(xiě)程序如下 includemain floatscore average 0 intn 0 do 不進(jìn)行判斷 先進(jìn)入循環(huán) scanf f 輸入學(xué)生的分?jǐn)?shù) if score 0 average score n while score 0 表達(dá)式為非0 則繼續(xù) if n 0 average n 求平均成績(jī) average printf 6 2f average 輸出平均成績(jī)average 保留兩位小數(shù) 例5 2編程序求1 3 5 7 9 這樣的數(shù)之和 如果累加數(shù)大于750時(shí) 則程序終止并輸出結(jié)果 main inti 1 sum 0 while sum 750 sum sum i i i 2 printf n d sum 例5 3用do while語(yǔ)句求1至1000之間滿足 用3除余2 用5除余3 用7除余2 的數(shù) 且一行只打印五個(gè)數(shù) 分析 判斷一個(gè)數(shù)被另一個(gè)數(shù)除 用取模運(yùn)算 三個(gè)條件是 與 的關(guān)系 一行打印五個(gè)數(shù) 可以通過(guò)計(jì)數(shù)到5再回車換行 程序代碼如下 includemain inti 1 j 0 do if i 3 2 注意 1 do while語(yǔ)句的循環(huán)體語(yǔ)句至少要被執(zhí)行一次 因?yàn)樗沁M(jìn)入循環(huán)后再判別表達(dá)式 而while語(yǔ)句卻是首先判別表達(dá)式 如果表達(dá)式值為0 則一次循環(huán)也不執(zhí)行 2 循環(huán)控制變量必須在循環(huán)體內(nèi)有所改變 才能使while和do while語(yǔ)句的循環(huán)控制條件表達(dá)式的值不斷改變 直至循環(huán)結(jié)束 否則會(huì)造成死循環(huán) 例如 i 1 while i 100 putchar i 這個(gè)循環(huán)永遠(yuǎn)不會(huì)結(jié)束 因?yàn)?i 語(yǔ)句不屬于循環(huán)體中的語(yǔ)句 循環(huán)控制變量i沒(méi)有在循環(huán)體內(nèi)被改變 程序應(yīng)該作如下改變 i 1 while i 100 putchar i 這條循環(huán)語(yǔ)句執(zhí)行的結(jié)果是輸出100個(gè) 還可以將它改成do while語(yǔ)句 i 1 do putchar i while i 100 大家可以看到 對(duì)于同一個(gè)問(wèn)題 既可以用while語(yǔ)句處理 也可以用do while語(yǔ)句處理 那么 它們到底有什么區(qū)別呢 while語(yǔ)句與do while語(yǔ)句的區(qū)別 當(dāng)?shù)谝淮螆?zhí)行時(shí) 若表達(dá)式 0時(shí) 則while語(yǔ)句與do while有所不同 do while執(zhí)行一次后面的語(yǔ)句 而while不執(zhí)行 5 3for語(yǔ)句 1 一般形式 首先計(jì)算表達(dá)式1 接著執(zhí)行表達(dá)式2 若表達(dá)式2的值 0 則執(zhí)行語(yǔ)句 接著計(jì)算表達(dá)式3 再判斷表達(dá)式2的值 依此重復(fù)下去 直到表達(dá)式2的值 0 假 for語(yǔ)句是C語(yǔ)言中最有特色的循環(huán)語(yǔ)句 使用最為靈活方便 for 表達(dá)式1 表達(dá)式2 表達(dá)式3 循環(huán)體語(yǔ)句 2 流程 計(jì)算表達(dá)式1 求表達(dá)式2值 語(yǔ)句 計(jì)算表達(dá)式3 0 假 0 真 2 執(zhí)行過(guò)程 1 先求解表達(dá)式1 2 求解表達(dá)式2 若其值為真 值非0 則執(zhí)行for語(yǔ)句中指定的循環(huán)體語(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ǔ)句 用for語(yǔ)句寫(xiě)出上述例子 for用while代替的流程表達(dá)式1 while 表達(dá)式2 語(yǔ)句表達(dá)式3 for i 1 i 100 i sum i for語(yǔ)句完全可以用while代替 但for直觀 簡(jiǎn)單 方便 for語(yǔ)句中的各表達(dá)式含義 1 表達(dá)式1 初值表達(dá)式 用于在循環(huán)開(kāi)始前 為循環(huán)變量設(shè)置初始值 2 表達(dá)式2 循環(huán)控制邏輯表達(dá)式 它控制循環(huán)執(zhí)行的條件 決定循環(huán)次數(shù) 3 表達(dá)式3 循環(huán)控制變量修改表達(dá)式 定義了循環(huán)一次 循環(huán)控制變量的變化情況 注意 表達(dá)式1 表達(dá)式2 表達(dá)式3必須用分號(hào)隔開(kāi) 只要條件為真 for循環(huán)就一直執(zhí)行 一旦條件變?yōu)榧?程序就從緊跟在for循環(huán)后面的語(yǔ)句重新開(kāi)始執(zhí)行 循環(huán)體語(yǔ)句 被重復(fù)執(zhí)行的語(yǔ)句 下面通過(guò)一個(gè)例子來(lái)看for語(yǔ)句的執(zhí)行過(guò)程 例5 4在屏幕上打印1到100的數(shù)字 當(dāng)然解決這個(gè)問(wèn)題我們可以用100個(gè)printf語(yǔ)句實(shí)現(xiàn) 但當(dāng)要打印的數(shù)字量很大時(shí) 采用這種方式顯然是不合適的 我們可以用for循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn) 程序如下 includemain intx for x 1 x 100 x printf d x 在這個(gè)程序中 x經(jīng)初始化置為1 因?yàn)閤小于100 調(diào)用printf語(yǔ)句x 1 并且測(cè)試x 看其是否仍然小于或等于100 重復(fù)進(jìn)行這個(gè)過(guò)程 直到x大于100 循環(huán)結(jié)束 在這個(gè)例子中 x是循環(huán)控制變量 循環(huán)每重復(fù)一次x發(fā)生變化 并對(duì)x進(jìn)行檢查 例5 5寫(xiě)程序計(jì)算s 1 2 3 100分析 此題可用循環(huán)語(yǔ)句來(lái)編寫(xiě)程序 循環(huán)控制變量i從1增加到100 設(shè)s的初值為0 則循環(huán)體為 s s i i l 2 100 程序 includemain ints 0 i for i l i 100 i s s i 循環(huán)體語(yǔ)句 printf s d s 上面程序中 for語(yǔ)句的執(zhí)行過(guò)程為 計(jì)算表達(dá)式1 i l 得到循環(huán)控制變量的初值 求解表達(dá)式2 若表達(dá)式2的值為零 當(dāng)x 100 則結(jié)束for循環(huán) 執(zhí)行循環(huán)體語(yǔ)句 s s i 求解表達(dá)式3 i 然后轉(zhuǎn)向步驟 對(duì)于for循環(huán) 有一點(diǎn)非常重要 即條件測(cè)試永遠(yuǎn)是在循環(huán)開(kāi)始時(shí)進(jìn)行 如果在循環(huán)開(kāi)始時(shí)條件為假 那么循環(huán)體語(yǔ)句就不會(huì)被執(zhí)行 如 inti 10 for k 10 k i k printf d k printf d k 在這個(gè)循環(huán)程序段中 循環(huán)開(kāi)始時(shí) 由于i k 所以根本不會(huì)執(zhí)行 正是由于條件表達(dá)式取值為假 循環(huán)體語(yǔ)句和循環(huán)的增量部分都不執(zhí)行 因此 k一直為10 最后屏幕上輸出的數(shù)字也是10 例5 6寫(xiě)程序計(jì)算s 1 3 5 7 99 101 這個(gè)例子也可看成是數(shù)的累加 但與上面的例子稍有差別 就是相加的數(shù)一個(gè)為正數(shù) 一個(gè)為負(fù)數(shù) 程序代碼如下 includemain inti t 1 s 0 for i 1 i 101 i 2 t t i s s t t t i 正1 負(fù)1交叉 printf d n s for語(yǔ)句與while語(yǔ)句的比較for語(yǔ)句等價(jià)于下列語(yǔ)句序列 表達(dá)式1 while 表達(dá)式2 語(yǔ)句 表達(dá)式3 相比之下 for語(yǔ)句顯得結(jié)構(gòu)整齊 緊湊 清晰 for語(yǔ)句的變形1 表達(dá)式的省略如果在for語(yǔ)句之前給循環(huán)變量賦了初值 則表達(dá)式1可以省略 但其后的分號(hào)不可省略 對(duì)于例5 2 其循環(huán)語(yǔ)句可以寫(xiě)成如下形式 i 1 在for語(yǔ)句之前給循環(huán)變量賦初值 for i 100 i s s i 如果省略表達(dá)式3 則應(yīng)在for語(yǔ)句的循環(huán)體內(nèi)修改循環(huán)控制變量 例如 for i 1 i 100 s s i i 修改循環(huán)控制變量 如果表達(dá)式1和表達(dá)式3都省略 則for語(yǔ)句就相當(dāng)于while語(yǔ)句 例如 i l for語(yǔ)句之前給循環(huán)變量賦初值 for i 100 s s i i 修改循環(huán)控制變量 就相當(dāng)于 i 1 while i 100 s s i i 如果三個(gè)表達(dá)式都省略 則for是無(wú)循環(huán)終止條件的循環(huán) 因此有可能形成無(wú)限循環(huán) 如下例所示 for printf Iwillrunforever n 實(shí)際上 for 語(yǔ)句也不能保證一個(gè)循環(huán)無(wú)限進(jìn)行 當(dāng)在循環(huán)體中遇到break語(yǔ)句時(shí) 將立即引起循環(huán)退出 例如 i l for s s i i if i 100 break 如果i 100 則退出循環(huán) 2 for語(yǔ)句中的逗號(hào)表達(dá)式逗號(hào)運(yùn)算符的主要應(yīng)用就是在for語(yǔ)句中 for語(yǔ)句中的表達(dá)式l和表達(dá)式3可以是逗號(hào)表達(dá)式 特別是在有兩個(gè)循環(huán)變量參與對(duì)循環(huán)控制的情況下 若表達(dá)式1和表達(dá)式3為逗號(hào)表達(dá)式 將使程序顯得非常清晰 例如 includemain inti j for i 1 j 10 i j i j printf i d j d n i j 運(yùn)行結(jié)果是 i 1 j l0i 2 j 9i 3 j 8i 4 j 7i 5 j 6以上程序中 i和j都是循環(huán)控制變量 for語(yǔ)句的表達(dá)式l是逗號(hào)表達(dá)式 它為兩個(gè)循環(huán)變量賦初值 i l j 10 表達(dá)式3也是逗號(hào)表達(dá)式 它們的作用是修正兩個(gè)循環(huán)控制變量的值 i j 3 循環(huán)體為空語(yǔ)句C語(yǔ)言的句法允許一個(gè)語(yǔ)句為空 這就意味著上述類型的for循環(huán) 或其它循環(huán) 的循環(huán)體也可以為空 對(duì)for語(yǔ)句 循環(huán)體為空語(yǔ)句的一般形式為 for 表達(dá)式1 表達(dá)式2 表達(dá)式3 例如 求s 1 2 3 100可以用如下循環(huán)語(yǔ)句完成 for sum 0 i 1 i 100 sum i i 上述for語(yǔ)句的循環(huán)體為空語(yǔ)句 不作任何操作 實(shí)際上已把求累加和的運(yùn)算放入表達(dá)式3中了 5 4break continue和goto語(yǔ)句 這一類語(yǔ)句的功能是改變程序的結(jié)構(gòu) 使程序從其所在的位置轉(zhuǎn)向另一處 break語(yǔ)句 break語(yǔ)句的形式為break break語(yǔ)句是限定轉(zhuǎn)向語(yǔ)句 它使流程跳出所在的結(jié)構(gòu) 把流程轉(zhuǎn)向所在結(jié)構(gòu)之后 我們已經(jīng)在switch語(yǔ)句中使用過(guò)break語(yǔ)句 使流程跳出switch結(jié)構(gòu) break語(yǔ)句在循環(huán)結(jié)構(gòu)中的作用是相同的 跳出所在的循環(huán)結(jié)構(gòu) 轉(zhuǎn)向執(zhí)行該循環(huán)結(jié)構(gòu)后面的語(yǔ)句 例如 main ints 0 i l for s s i i if i 100 break 如果i 100 則退出循環(huán) printf s d s 在本程序執(zhí)行中 當(dāng)i 100時(shí) 強(qiáng)行終止for循環(huán) 繼續(xù)執(zhí)行for語(yǔ)句的下一條語(yǔ)句printf s d s 再比如 main inti for i 0 i 100 i printf d i if i 10 break 這段程序?qū)⒃谄聊簧巷@示0 10的數(shù)字 雖然循環(huán)條件是i 100 但因?yàn)橛辛薭reak語(yǔ)句 導(dǎo)致程序在i 10的時(shí)候從循環(huán)中立即退出 循環(huán)也終止了 例5 8用for循環(huán)語(yǔ)句編程 將輸入的多個(gè)正數(shù)累加 當(dāng)輸入的數(shù)據(jù)為負(fù)數(shù)時(shí) 則程序結(jié)束 分析 多個(gè)正數(shù)的和用變量sum存放 初始值sum 0 每次輸入的數(shù)據(jù)存入x 如果x 0則sum x 否則終止 程序 voidmain longsum 0 intx for scanf d 在一個(gè)switch 語(yǔ)句中使用break 只會(huì)影響switch 而不會(huì)影響它所在的循環(huán) 另外 一個(gè)break只能跳出最內(nèi)層的循環(huán) 例如 for i 0 i 100 i count 1 for printf d count count if count 10 break 這個(gè)程序?qū)⒃谄聊簧巷@示數(shù)字1到10共100次 每當(dāng)編譯程序碰到break語(yǔ)句 控制就回到for循環(huán)的外層 continue語(yǔ)句 continue語(yǔ)句的形式為 continue continue語(yǔ)句被稱為繼續(xù)語(yǔ)句 該語(yǔ)句的功能是使本次循環(huán)提前結(jié)束 即跳過(guò)循環(huán)體中continue語(yǔ)句后面尚未執(zhí)行的循環(huán)體語(yǔ)句 繼續(xù)進(jìn)行下一次循環(huán)的條件判別 例5 9輸出100以內(nèi)能被9整除的數(shù) includemain intn for n 9 n 100 n if n 9 0 continue printf d n 在本例中 對(duì)9 100的每一個(gè)數(shù)進(jìn)行測(cè)試 如該數(shù)不能被9整除 即模運(yùn)算不為0 則由continue語(yǔ)句轉(zhuǎn)去下一次循環(huán) 只有模運(yùn)算為0時(shí) 才能執(zhí)行后面的printf語(yǔ)句 輸出能被9整除的數(shù) 例5 10顯示輸入的字符 如果按的是Esc鍵 則退出循環(huán) 如果按的是Enter鍵 則不做任何處理 繼續(xù)輸入下一個(gè)字符 include conio h main charch for ch getch 字符輸入函數(shù) if ch 27 break Esc鍵的ASCII碼為27 if ch 13 continue 按的是Enter鍵 跳過(guò)字符輸出語(yǔ)句 putch ch 顯示輸入的字符 getch 讓程序停一下 按任意鍵繼續(xù) 說(shuō)明 getch 和putch 的作用與getchar 和putchar 相似 不同的是 1 getch 不顯示鍵盤(pán)輸入的字符 2 getchar 輸入字符時(shí) 要按Enter鍵 計(jì)算機(jī)才會(huì)響應(yīng) 而用getch 時(shí) 輸入字符不需要回車 goto語(yǔ)句 goto語(yǔ)句被稱為無(wú)條件轉(zhuǎn)移語(yǔ)句 它的一般形式為 goto標(biāo)號(hào) 執(zhí)行g(shù)oto語(yǔ)句使流程轉(zhuǎn)移到相應(yīng)標(biāo)號(hào)所在的語(yǔ)句 并從該語(yǔ)句繼續(xù)執(zhí)行 語(yǔ)句標(biāo)號(hào)用標(biāo)識(shí)符表示 即以字母或下劃線開(kāi)頭 由字母 數(shù)字和下劃線組成 標(biāo)號(hào)語(yǔ)句的形式是 標(biāo)號(hào) 語(yǔ)句 下面我們用goto語(yǔ)句來(lái)實(shí)現(xiàn)求平均成績(jī)的任務(wù) include stdio h main floatscore average 0 intn 0 scanf f if score 0 表示式為非0 轉(zhuǎn)移到loop標(biāo)號(hào)處 gotoloop average average n 求平均成績(jī)average end printf 6 2f average 輸出平均成績(jī)average 保留兩位小數(shù) if score 0 表示式為非0 轉(zhuǎn)移到loop標(biāo)號(hào)處 gotoloop average average n 求平均成績(jī)average end printf 6 2f average 輸出平均成績(jī)average 保留兩位小數(shù) goto語(yǔ)句只能使流程在函數(shù)內(nèi)轉(zhuǎn)移 不得轉(zhuǎn)移到該函數(shù)外 break語(yǔ)句只能終止循環(huán)層 需要從多重循環(huán)的內(nèi)層一下轉(zhuǎn)移到最外層時(shí) 可以使用goto語(yǔ)句 從上面使用goto語(yǔ)句進(jìn)行循環(huán)的程序可以看出 goto語(yǔ)句使程序的結(jié)構(gòu)性和可讀性都變差 要盡量避免使用goto語(yǔ)句 5 循環(huán)的嵌套 在循環(huán)體語(yǔ)句中又包含有另一個(gè)完整的循環(huán)結(jié)構(gòu)的形式 稱為循環(huán)的嵌套 嵌套在循環(huán)體內(nèi)的循環(huán)體稱為內(nèi)循環(huán) 外面的循環(huán)體稱為外循環(huán) 如果內(nèi)循環(huán)體中又有嵌套的循環(huán)語(yǔ)句 則構(gòu)成多重循環(huán) While do while for三種循環(huán)都可以互相嵌套 例5 11輸出n n個(gè)字符 分析 1 n行 的輸出 可用下列循環(huán)控制 for i 1 i n i 2 每行n個(gè) 的輸出 可用下列循環(huán)語(yǔ)句實(shí)現(xiàn) for j 1 j n j putchar putchar n 所以輸出n n行 可用雙重循環(huán)語(yǔ)句實(shí)現(xiàn)如下 for i 1 i n i for j 1 j n j putchar 輸出一行 putchar n 換行 這是循環(huán)控制變量之間沒(méi)有依賴關(guān)系的多重循環(huán) 許多情況下 內(nèi)循環(huán)的循環(huán)控制變量的初值或終值依賴于外循環(huán)控制變量 例5 12編寫(xiě)程序輸出如下圖形 分析 用循環(huán)控制變量i 1 i 5 控制輸出行 for i 1 i 5 i 2 每行上的 個(gè)數(shù)是隨著行控制變量i的值變化而變化的 i 1時(shí) 執(zhí)行1次putchar i 2時(shí) 執(zhí)行2次putchar i 5時(shí) 執(zhí)行5次putchar 輸出第i行時(shí)執(zhí)行i次 putchar 所以內(nèi)循環(huán)體語(yǔ)句應(yīng)如下 for j 1 j i j putchar 輸出一行 輸出該圖形的完整的二重循環(huán)結(jié)構(gòu)如下 for i 1 i 5 i for j 1 j i j putchar 輸出第i行 putchar n 以上兩個(gè)例子都是兩重for循環(huán)嵌套 另外 三種循環(huán)語(yǔ)句也可以互相嵌套 例如 1 while for 2 do while while 循環(huán)嵌套的程序中 要求內(nèi)循環(huán)必須被包含在外層循環(huán)的循環(huán)體中 不允許出現(xiàn)內(nèi)外層循環(huán)體交叉的情況 如圖5 5所 圖5 5循環(huán)交叉為非法結(jié)構(gòu) 在do while循環(huán)體內(nèi)開(kāi)始while 循環(huán) 但是do while循環(huán)結(jié)束在while 循環(huán)體內(nèi) 它們互相交叉 這是非法結(jié)構(gòu) 圖5 5循環(huán)交叉為非法結(jié)構(gòu)do while while 5 6程序舉例 實(shí)際問(wèn)題是復(fù)雜的 解決實(shí)際問(wèn)題的程序需要多種結(jié)構(gòu)復(fù)合 復(fù)合結(jié)構(gòu)指的是在循環(huán)體包含選擇結(jié)構(gòu) 或在選擇結(jié)構(gòu)中含有循環(huán)結(jié)構(gòu) 含有復(fù)合結(jié)構(gòu)的程序稱為復(fù)合結(jié)構(gòu)程序 復(fù)合結(jié)構(gòu)程序必須做到嵌套層次清楚 嵌套層次之間不能相互交叉 例5 13下面的程序計(jì)算100至1000之間有多少個(gè)數(shù)其各位數(shù)字之和是5 程序 includemain inti s k count 0 for i 100 i 1000 i s 0 k i while k s s k 10 首先取得該數(shù)的個(gè)位 k 10 除10以后可以將最后一位數(shù)去掉 if s 5 continue 如果不等于5 則判斷下一個(gè)數(shù) elsecount 等于5 則計(jì)數(shù)器加1 printf d count 例5 14編寫(xiě)給多個(gè)學(xué)生的成績(jī)?cè)u(píng)定等級(jí)的程序 分析 用循環(huán)結(jié)構(gòu)控制多個(gè)學(xué)生的分?jǐn)?shù)處理 輸入的分?jǐn)?shù)小于0 循環(huán)結(jié)束 對(duì)于每個(gè)學(xué)生的分?jǐn)?shù)用選擇結(jié)構(gòu)完成評(píng)級(jí) 程序 voldmain inti score scanf d while score 0 循環(huán)結(jié)構(gòu) switch score 10 循環(huán)體嵌套選擇結(jié)構(gòu) case10 case9 printf d A n score break case8 case7 printf d B n score break case6 printf d C n score break default printf d D n score scanf d 輸入下一個(gè)學(xué)生的成績(jī) 例5 15找出3 1000中的全部素?cái)?shù) 分析 1 素?cái)?shù)是除1和它本身之外不能被任何 個(gè)整數(shù)所整除的自然數(shù) 1除外 如2 3 5 7是素?cái)?shù) 1 4 6 8 10不是素?cái)?shù) 2 判斷某數(shù)i是否為素?cái)?shù)的一個(gè)簡(jiǎn)單辦法是用2 3 4 i 1這些數(shù)據(jù)逐個(gè)去除i 只要被其中的一個(gè)數(shù)整除了 則i就不是素?cái)?shù) 數(shù)學(xué)上已證明 對(duì)于自然數(shù)i只需用2 3 4 i1 2測(cè)試 3 外層循環(huán)控制 for i 3 i 1000 i 4 用j 2 i1 2測(cè)試i 如果i能被這些數(shù)中的某一個(gè)整除 i就不是素?cái)?shù) 否則i就是素?cái)?shù) 測(cè)試過(guò)程如下 flag 0 設(shè)標(biāo)志 for j 2 j sqrt i j if i j 0 被j整除 i不是素?cái)?shù) flag 1 break 標(biāo)志設(shè)為1 停止測(cè)試 內(nèi)循環(huán) 程序流程圖如圖5 6 圖5 6例5 15程序流程圖 includemain unsignedinti j

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論