《程序控制結(jié)構(gòu)》PPT課件.ppt
《《程序控制結(jié)構(gòu)》PPT課件.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《《程序控制結(jié)構(gòu)》PPT課件.ppt(36頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、第四講:控制結(jié)構(gòu)(二),講師: 程浩,學(xué)習(xí)目標(biāo):,1. 理解while語句的使用規(guī)則和相應(yīng)程序流程 2. 理解do-while語句的使用規(guī)則和相應(yīng)程序流程 3. 理解for語句的使用規(guī)則和相應(yīng)程序流程 4. 熟練應(yīng)用各種循環(huán)語句的組合使用 5. 理解break、continue語句的使用特性以及應(yīng)用范疇 6. 了解goto語句的使用方法,學(xué)習(xí)重點(diǎn):,各種循環(huán)語句的組合使用 break、continue語句的使用特性,學(xué)習(xí)難點(diǎn):,for語句的循環(huán)嵌套,什么是循環(huán)?,循環(huán)是程序中重復(fù)執(zhí)行,直到滿足指定條件才停止的一段代碼,一、 while語句(1),while語句的一般形式: while (條
2、件) 語句; 流程圖: while語句的執(zhí)行過程是:當(dāng)條件成立時(shí)執(zhí)行循環(huán)體中的語句,然后再次判斷條件,重復(fù)上述過程,直到條件不成立結(jié)束循環(huán)。while語句的特點(diǎn)是:當(dāng)一開始條件就不成立時(shí),一次也不執(zhí)行循環(huán)語句。,成立,不成立,一、 while語句(2),例4.1 求1+2+ +100的結(jié)果。 第一步, 計(jì)算 0+1; 第二步, 計(jì)算 (0+1)+2; 第 n 步, 計(jì)算 (0+1++n-1)+n; 第100步,計(jì)算 (0+1++99)+100; 所以只要定義一個(gè)變量s,初值為0,則第 1次循環(huán)加1,第n次循環(huán)加n,直到第100 次循環(huán)加100即可 偽代碼算法: 定義s、n存放累計(jì)的和以及循環(huán)次
3、數(shù) 累計(jì)和清零s=0; 循環(huán)變量賦初值n=1; while (n<=100) s=s+n; n=n+1; 輸出結(jié)果s,n<=100,,s=s+n; n=n+1;,,,,,,,,,,s=0; n=1;,定義s、n,開始,結(jié)束,輸出s,,,,成立,不成立,一、 while語句(3),#include void main() int s,n; s=0; n=1; while (n<=100) s=s+n; n=n+1; printf(1+2+3+ ...+100=%dn,s); ,一、 while語句(4),上例程序510行也可以改寫如下兩種常見形式: 形式一:s=1;n=2;形式二
4、:s=1;n=1; while (n<=100) while (n<100) s=s+n; n=n+1; n=n+1; s=s+n; 通過以上三種形式的比較,我們可以看到在循環(huán)結(jié)構(gòu)中,初值 (包括循環(huán)變量初值和計(jì)算結(jié)果初值等)與循環(huán)條件是相互影 響的,所以為了避免出錯(cuò),可以通過驗(yàn)算循環(huán)結(jié)構(gòu)開始和結(jié)束 的運(yùn)行狀態(tài),如上例中代入n=1、n=2以及n=99、n=100, 進(jìn)一步判斷是否符合要求。習(xí)慣上,累計(jì)求和初值為0、累計(jì)求 積初值為1,所以我們推薦例4.1的形式。 在循環(huán)結(jié)構(gòu)的設(shè)計(jì)中,特別需要注意的是:避免死循環(huán)。循環(huán) 體中必須有改變條件的語句,并且可以使程序執(zhí)行到某一時(shí)刻
5、 不滿足這個(gè)條件而結(jié)束循環(huán)。,舉一反三:從鍵盤輸入n,求1+2+ +n的結(jié)果并輸出。,二、 do-while語句(1),do-while語句的一般形式: do 循環(huán)體語句 while (條件) ; 流程圖: do-while語句的執(zhí)行過程:執(zhí)行循環(huán)體中的語句,然后判斷條件,條件成立再執(zhí)行循環(huán)體;重復(fù)上述過程,直到條件不成立時(shí)結(jié)束循環(huán) do-while語句的特點(diǎn)是:當(dāng)一開始條件就不成立時(shí),已經(jīng)執(zhí)行了一次循環(huán)語句。 此外特別注意while(條件)后面的分號不要省。,條件,,語句段,,,,,,,,,,成立,不成立,二、 do-while語句(2),例4.2 求1+2+ +100的結(jié)果
6、。 算法分析同例4.1。 偽代碼算法: 定義s、n存放累計(jì)的和以及循環(huán)次數(shù) 累計(jì)和清零s=0; 循環(huán)變量賦初值n=1; do s=s+n; n=n+1; while (n<=100); 輸出結(jié)果s;,n<=100,,s=s+n; n=n+1;,,,,,,,,,,s=0; n=1;,定義s、n,開始,結(jié)束,輸出s,,,,成立,不成立,二、 do-while語句(3),#include void main() int s,n; s=0; n=1; do s=s+n; n=n+1; while (n<=100); printf(1+2+3+ ...+100=%dn,s); ,n
7、<=100,,s=s+n; n=n+1;,,,,,,,,,,s=0; n=1;,定義s、n,開始,結(jié)束,輸出s,,,,成立,不成立,二、 do-while語句(4),#include void main() int s,n; s=0; n=1; do s=s+n; n=n+1; while (n<=100); printf(1+2+3+ ...+100=%dn,s); ,#include void main() int s,n; s=0; n=1; while (n<=100) s=s+n; n=n+1; printf(1+2+3+ ...+100=%dn,s)
8、; ,二、 do-while語句(5),通過例4.1和4.2可以看到用while語句可以轉(zhuǎn)換為do-while語句,二者唯一不同的是:當(dāng)一開始條件就不成立時(shí),while語句不執(zhí)行循環(huán)體,而do-while語句執(zhí)行一次循環(huán)體。 程序一:void main() 程序二:void main() int s=0,n=101; int s=0,n=101; while (n<=100) do s=s+n;n=n+1; s=s+n;n=n+1; printf (“n=%d,s=%d”,n,s); while (n<=100); printf (“n=%d,s=%d
9、”,n,s); 執(zhí)行結(jié)果: 執(zhí)行結(jié)果: n=101,s=0n=102,s=101,舉一反三:求2+4+ +100的結(jié)果并輸出,三、 for語句(1),for語句的一般形式: for (表達(dá)式1;條件;表達(dá)式2) 語句 for語句的執(zhí)行過程是:第一步執(zhí)行表達(dá)式1,第二步判斷條件,第三步當(dāng)條件成立時(shí)執(zhí)行循環(huán)體中的語句和表達(dá)式2;然后重復(fù)第二、三步直到條件不成立結(jié)束循環(huán)。 for語句可以改寫成while語句形式: 表達(dá)式1; while (條件) 語句 表達(dá)式2; ,條件,,語句,,,,,,,,,,成立,不成立,表達(dá)式1,表達(dá)式2,,,三、 for語句(2),例4.3 求1+2+
10、 +100的結(jié)果 算法分析同例4.1。 偽代碼算法: 定義s、n存放累計(jì)的和以及循環(huán)次數(shù); for (s=0,n=1;n<=100;n=n+1) s=s+n; 輸出結(jié)果s;,n<=100,,s=s+n;,,,,,,,,,,定義s、n,開始,結(jié)束,輸出s,,,,成立,不成立,s=0; n=1;,n=n+1;,,三、 for語句(3),#include void main() int s,n; for(s=0,n=1;n<=100;n=n+1) s=s+n; printf(1+2+3+ ...+100=%dn,s); ,n<=100,,s=s+n;,,,,,,,,,,定義s、n,開始,
11、結(jié)束,輸出s,,,,成立,不成立,s=0; n=1;,n=n+1;,,三、 for語句(4),for 語句中的表達(dá)式1,一般用于給循環(huán)前的某些變量賦初值的(超過一個(gè)語句用逗號間隔),如果在循環(huán)語句前已經(jīng)賦過初值,表達(dá)式1可以省略,但是其后的分號不能省略。所以上例for語句可以改寫如下: s=0;n=1; for ( ; n<=100; n=n+1) s=s+n; 表達(dá)式2可以是用于修改循環(huán)一次后循環(huán)變量,確保循環(huán)在某一時(shí)刻可以結(jié)束,如果循環(huán)體語句中已經(jīng)包含控制循環(huán)次數(shù)的內(nèi)容,表達(dá)式2可以省略,但是表達(dá)式2前面的分號不能省略。上例for語句可以變換如下: for (s=0,n=1; n<
12、=100 ; ) s=s+n; n=n+1;,三、 for語句(5),表達(dá)式1和表達(dá)式2也可以是與循環(huán)無關(guān)的量,甚至條件也可 以省略(如果條件省略,循環(huán)體中需要有跳出循環(huán)的語句,這 部分內(nèi)容我們將在下一節(jié)中介紹)。但是一般來說,for語句寫 成如下形式方便閱讀和理解: for (循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值) 循環(huán)體語句 以上我們介紹了C語言常用的循環(huán)語句while語句、do-while語句和for語句。一般情況下三種循環(huán)語句可以互相替換,只有當(dāng)一開始條件就不成立時(shí),while語句和for語句不執(zhí)行循環(huán)體,而do-while語句執(zhí)行一次循環(huán)體。這三種循環(huán)語句中for語句最靈
13、活,不僅循環(huán)變量的初始化可以放在表達(dá)式1中,而且循環(huán)變量的增值甚至整個(gè)循環(huán)體都可以放入表達(dá)式2中,所以在C語言中for語句最為常用。 舉一反三:求100+99+ +1的結(jié)果并輸出。,猴子吃桃,猴子吃桃:有一天,一只猴子摘了一些桃子。它吃掉了一半,又吃了一個(gè), 第二天也是這樣,吃了所有桃子的一半,又多吃了一個(gè)... 到了 第十天,小猴子一看,只有1個(gè)桃子了。 求最早的時(shí)候,小猴子摘了幾個(gè)桃子?,1534個(gè)桃子,四、 break和continue語句(1),break語句除了可以用在switch語句中,還可以用在循環(huán)體中。在循環(huán)體中遇見break語句,立即結(jié)束循環(huán),跳到循環(huán)體外,執(zhí)行循環(huán)結(jié)構(gòu)后面的
14、語句。一般形式為: break; 在循環(huán)體中break語句常與if語句搭配使用,并且break語句只能用在switch語句和循環(huán)語句中。,四、 break和continue語句(2),例4.4 判斷一個(gè)數(shù)n是否是素?cái)?shù)。 如果n不能被2到n-1中的任何一個(gè)數(shù)整除 n為素?cái)?shù),所以循環(huán)讓n除以i,i分別等于2 到n-1,如果n不是素?cái)?shù),則2到n-1中至 少存在一個(gè)數(shù)可以整除n,當(dāng)i等于第一個(gè) 這種數(shù)時(shí),除法運(yùn)算的余數(shù)為0,則提前結(jié) 束循環(huán),此時(shí)i小于n。如果n是素?cái)?shù),則 經(jīng)過2到n-1之間的除法運(yùn)算,沒有余數(shù) 為0的情況,循環(huán)由于不滿足條件i小于等 于n而結(jié)束。 偽代碼算法:定義n、i; 輸入數(shù)n;
15、 for (i=2;i 16、立,輸出是素?cái)?shù),,,,,,,成立,不成立,i=i+1,,,,四、break和continue語句(3),寫出下列兩段循環(huán)語句的輸出結(jié)果: for (k=1;k<5;k=k+1) for (k=1;k<5;k=k+1) printf(“******n”); if (k= =3) break; printf(“******n”); 在循環(huán)體中break語句常與if語句搭配使用,并且break語句只能用在switch語句和循環(huán)語句中。,四、break和continue語句(4),continue語句用于結(jié)束本次循環(huán),即在循環(huán)體中遇見continue語句,則循環(huán)體中con 17、tinue語句后面的語句不執(zhí)行,接著進(jìn)行下一次循環(huán)的判定。它的一般形式為: continue; continue語句只用于循環(huán)結(jié)構(gòu)的內(nèi)部,一般同if配合使用。,四、break和continue語句(5),例4.5 統(tǒng)計(jì)120之間不能被3整除的數(shù)的個(gè)數(shù)并輸出這些數(shù)。 算法分析: 當(dāng)n=1時(shí),輸出1,計(jì)數(shù)加1; 當(dāng)n=2時(shí),輸出2,計(jì)數(shù)加1;; 當(dāng)n=3時(shí),結(jié)束本次循環(huán), 轉(zhuǎn)到第4次循環(huán); 當(dāng)n=4時(shí),輸出4,計(jì)數(shù)加1;; 偽代碼算法: 定義n、s; for (n=1,s=0;n<=20;n=n+1) if (n%3= = 0) continue; printf(“%dt”,n); 18、 s=s+1; 輸出統(tǒng)計(jì)數(shù)s;,n<=20,,,,,,,,,n=1,s=0;,定義n、s,開始,結(jié)束,輸出n,,,,成立,不成立,n%3= =0,,,s=s+1,成立,不成立,輸出統(tǒng)計(jì)結(jié)果s,,,,n=n+1,四、break和continue語句(6),#include void main() int n,s; for (n=1,s=0;n<=20;n=n+1) if (n%3==0) continue; printf(%dt,n); s=s+1; printf(ntotal:%dn,s); ,n<=20,,,,,,,,,n=1,s=0;,定義n、s,開始,結(jié)束,輸出n,,, 19、,成立,不成立,n%3= =0,,,s=s+1,成立,不成立,輸出統(tǒng)計(jì)結(jié)果s,,,,n=n+1,四、break和continue語句(7),continue語句和break語句用在循環(huán)體中的作用是不同的。continue語句只取消本次循環(huán)的continue語句后面的內(nèi)容,而break語句終止了整個(gè)循環(huán)過程。 continue語句和break語句用在循環(huán)體中的作用是不同的。continue語句只取消本次循環(huán)的continue語句后面的內(nèi)容,而break語句終止了整個(gè)循環(huán)過程。如例4.5中如果continue換成break,則輸出結(jié)果為: 1 2 total:2,五、循環(huán)的嵌套(1),一 20、個(gè)循環(huán)語句的循環(huán)體內(nèi)包含另一個(gè)完整的循環(huán)語句,稱為循環(huán)的嵌套。While語句、do-while語句和for語句都可以互相嵌套,甚至可以多層嵌套。 例4.6 輸出下列圖形: 1 1 2 1 23 1 23 4 1 23 4 5 1 23 4 5 6 1 23 4 5 6 7 1 23 4 5 6 7 8 1 23 4 5 6 7 8 9,n 1 2 3 4 5 6 7 8 9,五、循環(huán)的嵌套(2),算法分析: 輸出共9行,行號變量為n,從1到9,為外循環(huán); 內(nèi)循環(huán)輸出1行中各個(gè)元素 我們知道: 第一行執(zhí)行輸出1次,輸出1 第二行執(zhí)行輸出2次,第1次輸出1,第二次輸出2; 第n行執(zhí)行輸出n次,第1 21、次輸出1,第二次輸出2, ,第n次輸出n。 所以內(nèi)循環(huán)變量m,執(zhí)行輸出操作從1到n次, 每次輸出結(jié)果是內(nèi)循環(huán)變量m的值,偽代碼算法: 定義m、n; for (n=1;n<=9;n=n+1) for (m=1;m<=n;m=m+1) printf(“%4d”,m); printf(“n”); ,五、循環(huán)的嵌套(3),#include void main() int m,n; for (n=1;n<=9;n=n+1) for(m=1;m<=n;m=m+1) printf(%-4d,m); printf(n); ,偽代碼算法: 定義m、n; for (n=1;n<=9;n=n 22、+1) for (m=1;m<=n;m=m+1) printf(“%4d”,m); printf(“n”); ,五、循環(huán)的嵌套(4),循環(huán)嵌套時(shí)注意內(nèi)循環(huán)變量的初始化問題。此外,break只能跳出一層循環(huán)(或者一層switch語句結(jié)構(gòu))。例如: 例4.7 輸出3100的所有素?cái)?shù)。 偽代碼算法: 定義n、i; for (n=3;n=n) 輸出n; ,,六、 goto語句(1),goto語句為無條件轉(zhuǎn)移語句,它的一般形式為 goto 語句標(biāo)號; 語句標(biāo)號的命名需要符合C語言對標(biāo)識符的命名規(guī)則,即語句標(biāo)號由字母、數(shù)字和下劃線組成,其中第一個(gè)字符不能是數(shù)字。 標(biāo)號必須加在某個(gè)語句的前 23、面,并且在標(biāo)號后面使用冒號。當(dāng)程序執(zhí)行到goto語句后,程序轉(zhuǎn)移到標(biāo)號指定的語句繼續(xù)執(zhí)行。 標(biāo)號只對goto語句有意義,當(dāng)其它場合下遇見語句標(biāo)號,則直接執(zhí)行語句而忽視標(biāo)號的存在。,六、 goto語句(2),例4.8 求1+2+ +100的結(jié)果。 #include void main() int n=1,s=0; loop: if (n<=100) s=s+n; n=n+1; goto loop ; printf(1+2+3+ ...+100=%dn,s); ,上機(jī)練習(xí)與課后作業(yè)(1),1用十進(jìn)制、八進(jìn)值、十六進(jìn)制、字符形式輸出ASCII碼表33126中的代碼。 2計(jì) 24、算右方公式的結(jié)果。 3計(jì)算1!+2!+ +10!的值 4用循環(huán)的嵌套輸出右方圖形:,* *** ***** ******* ********* ***********,上機(jī)練習(xí)與課后作業(yè)(2),5要求輸出右方菜單 如果選擇1,則顯示“請輸入”;選擇2,則顯示“請輸入查找學(xué)生學(xué)號”;選擇3,顯示“正在輸出”;選擇0,顯示“謝謝使用”;選擇其它則顯示“輸入錯(cuò)誤,請重新輸入”。 用循環(huán)語句實(shí)現(xiàn)用戶的重復(fù)輸入,直到輸入選擇為“0”時(shí),結(jié)束循環(huán),主菜單 ================ 1. 輸入學(xué)生成績 2. 查詢學(xué)生成績 3. 打印輸出成績 0. 退出系統(tǒng) ================ 請選擇 (15):,,
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 110中國人民警察節(jié)(筑牢忠誠警魂感受別樣警彩)
- 2025正字當(dāng)頭廉字入心爭當(dāng)公安隊(duì)伍鐵軍
- XX國企干部警示教育片觀后感筑牢信仰之基堅(jiān)守廉潔底線
- 2025做擔(dān)當(dāng)時(shí)代大任的中國青年P(guān)PT青年思想教育微黨課
- 2025新年工作部署會(huì)圍繞六個(gè)干字提要求
- XX地區(qū)中小學(xué)期末考試經(jīng)驗(yàn)總結(jié)(認(rèn)真復(fù)習(xí)輕松應(yīng)考)
- 支部書記上黨課筑牢清廉信念為高質(zhì)量發(fā)展?fàn)I造風(fēng)清氣正的環(huán)境
- 冬季消防安全知識培訓(xùn)冬季用電防火安全
- 2025加強(qiáng)政治引領(lǐng)(政治引領(lǐng)是現(xiàn)代政黨的重要功能)
- 主播直播培訓(xùn)直播技巧與方法
- 2025六廉六進(jìn)持續(xù)涵養(yǎng)良好政治生態(tài)
- 員工職業(yè)生涯規(guī)劃方案制定個(gè)人職業(yè)生涯規(guī)劃
- 2024年XX地區(qū)黨建引領(lǐng)鄉(xiāng)村振興工作總結(jié)
- XX中小學(xué)期末考試經(jīng)驗(yàn)總結(jié)(認(rèn)真復(fù)習(xí)輕松應(yīng)考)
- 幼兒園期末家長會(huì)長長的路慢慢地走