版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C提供的循環(huán)語(yǔ)句有:提供的循環(huán)語(yǔ)句有:l whilel do-whilel for控制循環(huán)語(yǔ)句執(zhí)行的語(yǔ)句有:控制循環(huán)語(yǔ)句執(zhí)行的語(yǔ)句有:l breakl continue5.1 while語(yǔ)句語(yǔ)句3. 說(shuō)明說(shuō)明(1)while語(yǔ)句的特點(diǎn)是先判斷語(yǔ)句的特點(diǎn)是先判斷“表達(dá)式表達(dá)式”的值,在為真時(shí)方才的值,在為真時(shí)方才執(zhí)行其循環(huán)體,因此,如果執(zhí)行其循環(huán)體,因此,如果“表達(dá)式表達(dá)式”的值一開始就為假,則循環(huán)的值一開始就為假,則循環(huán)體一次也不執(zhí)行。體一次也不執(zhí)行。 (2)當(dāng)循環(huán)體由多個(gè)語(yǔ)句組成時(shí),必須用左、右花括號(hào)括起來(lái),)當(dāng)循環(huán)體由多個(gè)語(yǔ)句組成時(shí),必須用左、右
2、花括號(hào)括起來(lái),使其形成復(fù)合語(yǔ)句。例如:使其形成復(fù)合語(yǔ)句。例如: int i=1,s=0; while (i=10) s=s+i;i+; (3)為了使循環(huán)最終能夠結(jié)束,而不至于產(chǎn)生)為了使循環(huán)最終能夠結(jié)束,而不至于產(chǎn)生“死循環(huán)死循環(huán)”,每,每執(zhí)行一次循環(huán)體,表達(dá)式的值都應(yīng)該有所變化,這既可以在表達(dá)式執(zhí)行一次循環(huán)體,表達(dá)式的值都應(yīng)該有所變化,這既可以在表達(dá)式本身中實(shí)現(xiàn),也可以在循環(huán)體中實(shí)現(xiàn)。本身中實(shí)現(xiàn),也可以在循環(huán)體中實(shí)現(xiàn)。1. while語(yǔ)句語(yǔ)法格式語(yǔ)句語(yǔ)法格式while語(yǔ)句的語(yǔ)法格式如下:語(yǔ)句的語(yǔ)法格式如下: while (表達(dá)式表達(dá)式) 語(yǔ)句;語(yǔ)句;/*循環(huán)體循環(huán)體*/2. while語(yǔ)句的
3、執(zhí)行過(guò)程語(yǔ)句的執(zhí)行過(guò)程其執(zhí)行過(guò)程如右圖所示。其執(zhí)行過(guò)程如右圖所示。 【例【例5.1】 編寫一個(gè)程序,使用編寫一個(gè)程序,使用while語(yǔ)句計(jì)算語(yǔ)句計(jì)算6!之值。之值。解:用解:用i作為循環(huán)變量。程序如下:作為循環(huán)變量。程序如下:/*FileName:exam5_1.cpp*/#include void main() int i=1,s=1; while (i=6) s=s*i; i+;/*循環(huán)變量循環(huán)變量i發(fā)生了改變發(fā)生了改變*/ printf(%d!=%dn,i-1,s);程序執(zhí)行結(jié)果如下:程序執(zhí)行結(jié)果如下:6!=720 【例【例5.3】 編寫一個(gè)程序,將輸入的十進(jìn)制正整數(shù)轉(zhuǎn)換成十六進(jìn)制整數(shù)編
4、寫一個(gè)程序,將輸入的十進(jìn)制正整數(shù)轉(zhuǎn)換成十六進(jìn)制整數(shù)后輸出。后輸出。 解:采用輾轉(zhuǎn)相除法(求解:采用輾轉(zhuǎn)相除法(求16的余數(shù)得到十六進(jìn)制各位,再整除的余數(shù)得到十六進(jìn)制各位,再整除16直到直到0為止)實(shí)現(xiàn)進(jìn)制的轉(zhuǎn)換,如十進(jìn)制數(shù)為止)實(shí)現(xiàn)進(jìn)制的轉(zhuǎn)換,如十進(jìn)制數(shù)5678轉(zhuǎn)換為十六進(jìn)制整數(shù)的過(guò)程如下:轉(zhuǎn)換為十六進(jìn)制整數(shù)的過(guò)程如下:因此,輸出的十六進(jìn)制數(shù)應(yīng)為因此,輸出的十六進(jìn)制數(shù)應(yīng)為162E。 /*FileName:exam5_3.cpp*/#include void main() int n,b20,i=0,j;/*b存放轉(zhuǎn)換成的十六進(jìn)制數(shù)的各位存放轉(zhuǎn)換成的十六進(jìn)制數(shù)的各位*/ printf(輸入一個(gè)正
5、整數(shù)輸入一個(gè)正整數(shù):); scanf(%d,&n); while (n0) bi+=n%16; n=n/16; printf(對(duì)應(yīng)的對(duì)應(yīng)的16進(jìn)制數(shù)進(jìn)制數(shù):); for (j=i-1;j=0;j-)/*輸出十六進(jìn)制數(shù)各位輸出十六進(jìn)制數(shù)各位*/ if (bj=9)/*0-9的數(shù)字直接輸出的數(shù)字直接輸出*/ printf(%d,bj); else/*輸出輸出AF數(shù)字位數(shù)字位*/ switch(bj) case 10:printf(A);break; case 11:printf(B);break; case 12:printf(C);break; case 13:printf(D);bre
6、ak; case 14:printf(E);break; printf(n);5.2 do-while循環(huán)語(yǔ)句循環(huán)語(yǔ)句1. do-while語(yǔ)句語(yǔ)法格式語(yǔ)句語(yǔ)法格式 do-while語(yǔ)句的語(yǔ)法格式如下:語(yǔ)句的語(yǔ)法格式如下: do語(yǔ)句語(yǔ)句;/*循環(huán)體循環(huán)體*/ while (表達(dá)式表達(dá)式);2. 執(zhí)行過(guò)程執(zhí)行過(guò)程 執(zhí)行過(guò)程如右圖所示。執(zhí)行過(guò)程如右圖所示。3. 說(shuō)明說(shuō)明(1)由于)由于do-while語(yǔ)句是先執(zhí)行循環(huán)體,然后再判斷語(yǔ)句是先執(zhí)行循環(huán)體,然后再判斷“表達(dá)式表達(dá)式”的值,的值,所以,無(wú)論一開始所以,無(wú)論一開始“表達(dá)式表達(dá)式”的值為真或假,都至少執(zhí)行循環(huán)體一次,這的值為真或假,都至少執(zhí)行循
7、環(huán)體一次,這一點(diǎn)與一點(diǎn)與while語(yǔ)句是有區(qū)別的。語(yǔ)句是有區(qū)別的。 (2)如果)如果do-while語(yǔ)句中的循環(huán)體是由多個(gè)語(yǔ)句組成的話,則必須用語(yǔ)句中的循環(huán)體是由多個(gè)語(yǔ)句組成的話,則必須用左、右花括號(hào)括起來(lái),使其形成復(fù)合語(yǔ)句。左、右花括號(hào)括起來(lái),使其形成復(fù)合語(yǔ)句。 (3)do-while語(yǔ)句也和語(yǔ)句也和while語(yǔ)句一樣,是在語(yǔ)句一樣,是在“表達(dá)式表達(dá)式”的值為真時(shí)重的值為真時(shí)重復(fù)執(zhí)行循環(huán)體。復(fù)執(zhí)行循環(huán)體?!纠纠?.4】 采用采用do-while語(yǔ)句改寫語(yǔ)句改寫5.1的程序。的程序。解:程序如下:解:程序如下:/*FileName:exam5_4.cpp*/#include void mai
8、n() int i=1,s=1; do s=s*i; i+; while (i=6); printf(%d!=%dn,i-1,s);5.3 for語(yǔ)句語(yǔ)句1. for語(yǔ)句語(yǔ)法格式語(yǔ)句語(yǔ)法格式 for語(yǔ)句的語(yǔ)法格式如下:語(yǔ)句的語(yǔ)法格式如下: for (表達(dá)式表達(dá)式1;表達(dá)式表達(dá)式2;表達(dá)式表達(dá)式3) 語(yǔ)句語(yǔ)句;/*循環(huán)體循環(huán)體*/2. 執(zhí)行過(guò)程執(zhí)行過(guò)程 計(jì)算計(jì)算“表達(dá)式表達(dá)式1”后進(jìn)行第一輪循環(huán):計(jì)算后進(jìn)行第一輪循環(huán):計(jì)算“表達(dá)式表達(dá)式2”,若為假,則退出循環(huán);否則執(zhí)行循環(huán)體;計(jì)算,若為假,則退出循環(huán);否則執(zhí)行循環(huán)體;計(jì)算“表表達(dá)式達(dá)式3”;再進(jìn)行第二輪循環(huán):計(jì)算;再進(jìn)行第二輪循環(huán):計(jì)算“表達(dá)式
9、表達(dá)式2”,若為假,若為假,則退出循環(huán);否則執(zhí)行循環(huán)體;計(jì)算則退出循環(huán);否則執(zhí)行循環(huán)體;計(jì)算“表達(dá)式表達(dá)式3”;。其執(zhí)行過(guò)程如右圖所示。其執(zhí)行過(guò)程如右圖所示。 在在for語(yǔ)句中用于控制循環(huán)執(zhí)行次數(shù)的變量稱為循語(yǔ)句中用于控制循環(huán)執(zhí)行次數(shù)的變量稱為循環(huán)變量。環(huán)變量。3. 說(shuō)明說(shuō)明(1)“表達(dá)式表達(dá)式1”用作初始化循環(huán)變量,可以省略,用作初始化循環(huán)變量,可以省略,此時(shí)應(yīng)在該語(yǔ)句之前給循環(huán)變量賦初值。其后的分號(hào)此時(shí)應(yīng)在該語(yǔ)句之前給循環(huán)變量賦初值。其后的分號(hào)不能省略。不能省略。(2)“表達(dá)式表達(dá)式2”可以省略,即不繼續(xù)判定條件,循可以省略,即不繼續(xù)判定條件,循環(huán)無(wú)終止進(jìn)行下去。需要在循環(huán)體中用環(huán)無(wú)終止進(jìn)
10、行下去。需要在循環(huán)體中用break等語(yǔ)句退等語(yǔ)句退出循環(huán)。出循環(huán)。(3)“表達(dá)式表達(dá)式3”可以省略,這樣需要在循環(huán)體中讓可以省略,這樣需要在循環(huán)體中讓循環(huán)變量變化,以保證循環(huán)能正常結(jié)束。循環(huán)變量變化,以保證循環(huán)能正常結(jié)束。(4)“表達(dá)式表達(dá)式1”和和“表達(dá)式表達(dá)式3”可以同時(shí)省略,這樣可以同時(shí)省略,這樣為(為(1)和()和(3)兩種情況同時(shí)出現(xiàn)。需要使用相關(guān)語(yǔ))兩種情況同時(shí)出現(xiàn)。需要使用相關(guān)語(yǔ)句保證循環(huán)結(jié)束。句保證循環(huán)結(jié)束。(5)三個(gè)表達(dá)式都可省略,這樣為()三個(gè)表達(dá)式都可省略,這樣為(2)和()和(4)兩)兩種情況同時(shí)出現(xiàn)。需要使用相關(guān)語(yǔ)句保證循環(huán)結(jié)束。種情況同時(shí)出現(xiàn)。需要使用相關(guān)語(yǔ)句保證循
11、環(huán)結(jié)束。 【例【例5.8】 采用采用for語(yǔ)句改寫例語(yǔ)句改寫例5.1的程序。的程序。解:程序如下:解:程序如下:/*FileName:exam5_8.cpp*/#include void main() int i,s=1; for (i=1;i=6;i+) s=s*i; printf(%d!=%dn,i-1,s);【例【例5.10】 編寫一個(gè)程序,輸入編寫一個(gè)程序,輸入10個(gè)整數(shù),求出其中的最大數(shù)。個(gè)整數(shù),求出其中的最大數(shù)。/*FileName:exam5_10.cpp*/#include void main()int i,max,n; printf(輸入輸入10個(gè)整數(shù)個(gè)整數(shù):); scanf
12、(%d,&n); max=n; for (i=2;imax) max=n; printf(最大數(shù)最大數(shù):%dn,max);三種循環(huán)語(yǔ)句的比較三種循環(huán)語(yǔ)句的比較如下:如下:(1)while和和do-while循環(huán)沒有本質(zhì)上的區(qū)別。循環(huán)沒有本質(zhì)上的區(qū)別。while循環(huán)先判循環(huán)先判斷后執(zhí)行,而斷后執(zhí)行,而do-while循環(huán)先執(zhí)行,后判斷。循環(huán)先執(zhí)行,后判斷。(2)for循環(huán)通常用于循環(huán)次數(shù)已知的問題中,循環(huán)通常用于循環(huán)次數(shù)已知的問題中,while和和do-while循環(huán)往往用于循環(huán)終止條件已知,而循環(huán)次數(shù)未知的情況下。循環(huán)往往用于循環(huán)終止條件已知,而循環(huán)次數(shù)未知的情況下。(3)三種循環(huán)在功
13、能上是相等的,采用)三種循環(huán)在功能上是相等的,采用while和和do-while循環(huán)循環(huán)實(shí)現(xiàn)的功能,可以通過(guò)實(shí)現(xiàn)的功能,可以通過(guò)for循環(huán)和循環(huán)和ifbreak的配合,同樣可以實(shí)的配合,同樣可以實(shí)現(xiàn)?,F(xiàn)。5.4 break和和continue語(yǔ)句語(yǔ)句5.4.1 break語(yǔ)句語(yǔ)句 break語(yǔ)句只能用于循環(huán)語(yǔ)句和語(yǔ)句只能用于循環(huán)語(yǔ)句和switch語(yǔ)句中,其使用格式如下:語(yǔ)句中,其使用格式如下: break; break語(yǔ)句用以跳出它所在的那一層的循環(huán)語(yǔ)句或語(yǔ)句用以跳出它所在的那一層的循環(huán)語(yǔ)句或switch語(yǔ)句,轉(zhuǎn)語(yǔ)句,轉(zhuǎn)向循環(huán)語(yǔ)句或向循環(huán)語(yǔ)句或switch語(yǔ)句之后的語(yǔ)句去執(zhí)行。語(yǔ)句之后的語(yǔ)句去
14、執(zhí)行。5.4.1 break語(yǔ)句語(yǔ)句break語(yǔ)句只能用于循環(huán)語(yǔ)句和語(yǔ)句只能用于循環(huán)語(yǔ)句和switch語(yǔ)句中,其使用格式如下:語(yǔ)句中,其使用格式如下:break;break語(yǔ)句用以跳出它所在的那一層的循環(huán)語(yǔ)句或語(yǔ)句用以跳出它所在的那一層的循環(huán)語(yǔ)句或switch語(yǔ)句,轉(zhuǎn)向循環(huán)語(yǔ)句,轉(zhuǎn)向循環(huán)語(yǔ)句或語(yǔ)句或switch語(yǔ)句之后的語(yǔ)句去執(zhí)行。對(duì)于語(yǔ)句之后的語(yǔ)句去執(zhí)行。對(duì)于for循環(huán),跳過(guò)循環(huán)體其余語(yǔ)句,循環(huán),跳過(guò)循環(huán)體其余語(yǔ)句,轉(zhuǎn)向修改循環(huán)變量的表達(dá)式轉(zhuǎn)向修改循環(huán)變量的表達(dá)式3,如圖,如圖5.4(a)示;對(duì)于)示;對(duì)于while和和do-while循環(huán),循環(huán),跳過(guò)循環(huán)體其余語(yǔ)句,轉(zhuǎn)向循環(huán)條件的判定語(yǔ)句,
15、分別如圖跳過(guò)循環(huán)體其余語(yǔ)句,轉(zhuǎn)向循環(huán)條件的判定語(yǔ)句,分別如圖5.4(b)和()和(c)所示。圖中的虛線部分表示遇到所示。圖中的虛線部分表示遇到continue語(yǔ)句后的轉(zhuǎn)向。語(yǔ)句后的轉(zhuǎn)向。5.4.3 break和和continue語(yǔ)句的區(qū)別語(yǔ)句的區(qū)別break和和continue語(yǔ)句對(duì)循環(huán)控制的影響是不同的:語(yǔ)句對(duì)循環(huán)控制的影響是不同的:continue語(yǔ)句只結(jié)束語(yǔ)句只結(jié)束本次循環(huán),而不是終止整個(gè)循環(huán)的執(zhí)行,而本次循環(huán),而不是終止整個(gè)循環(huán)的執(zhí)行,而break語(yǔ)句則是結(jié)束整個(gè)循環(huán)過(guò)語(yǔ)句則是結(jié)束整個(gè)循環(huán)過(guò)程,不再判斷執(zhí)行循環(huán)的條件是否成立。如對(duì)于以下兩個(gè)循環(huán)結(jié)構(gòu):程,不再判斷執(zhí)行循環(huán)的條件是否成立。
16、如對(duì)于以下兩個(gè)循環(huán)結(jié)構(gòu):程序(程序(1)的流程圖如圖)的流程圖如圖5.5(a)所示,而程序(所示,而程序(2)的流程圖如圖)的流程圖如圖5.5(b)所示。注意兩圖中當(dāng)所示。注意兩圖中當(dāng)“表達(dá)式表達(dá)式2”為真時(shí)流程圖的轉(zhuǎn)向是不同的。為真時(shí)流程圖的轉(zhuǎn)向是不同的。 【例【例5.12】 編寫一個(gè)程序,輸出編寫一個(gè)程序,輸出100200之間能同時(shí)被之間能同時(shí)被3、5和和7整除的整除的整數(shù)。整數(shù)。 解:采用解:采用for循環(huán)語(yǔ)句,循環(huán)語(yǔ)句,n取值取值100200,當(dāng),當(dāng)n%3!=0、n%5!=0、n%7!=0之中有一個(gè)成立時(shí),則取下一個(gè)之中有一個(gè)成立時(shí),則取下一個(gè)n繼續(xù)判斷,否則表示它同時(shí)被繼續(xù)判斷,否則
17、表示它同時(shí)被3、5和和7整除,此時(shí)輸出整除,此時(shí)輸出n。程序如下:。程序如下:/*FileName:exam5_12.cpp*/#include void main() int n; for (n=100;n=200;n+) if (n%3!=0 | n%5!=0 | n%7!=0)continue; /*有一個(gè)條件不成立便進(jìn)入下一輪循環(huán)有一個(gè)條件不成立便進(jìn)入下一輪循環(huán)*/ printf(%d ,n); printf(n);本程序的執(zhí)行結(jié)果如下:本程序的執(zhí)行結(jié)果如下:105【例【例5.13】 分析以下程序的執(zhí)行結(jié)果。分析以下程序的執(zhí)行結(jié)果。/*FileName:exam5_13.cpp*/#i
18、nclude void main() int i,j,k,s; i=0,j=10,k=2,s=0; for (;) i+=k; if (ij) printf(s=%dn,s); break; s=s+i; 程序輸出為:程序輸出為:s=30。 5.5 循環(huán)結(jié)構(gòu)的嵌套循環(huán)結(jié)構(gòu)的嵌套 若循環(huán)語(yǔ)句中的循環(huán)體內(nèi)又完整地包含另一個(gè)或多個(gè)循環(huán)語(yǔ)句,稱為若循環(huán)語(yǔ)句中的循環(huán)體內(nèi)又完整地包含另一個(gè)或多個(gè)循環(huán)語(yǔ)句,稱為循環(huán)嵌套。前面介紹的三種循環(huán)都可以相互嵌套。循環(huán)的嵌套可以多層,循環(huán)嵌套。前面介紹的三種循環(huán)都可以相互嵌套。循環(huán)的嵌套可以多層,但每一層循環(huán)在邏輯上必須是完整的。例如,兩層循環(huán)嵌套(又稱兩重循但每一層
19、循環(huán)在邏輯上必須是完整的。例如,兩層循環(huán)嵌套(又稱兩重循環(huán))的各種結(jié)構(gòu)如下:環(huán))的各種結(jié)構(gòu)如下: 【例【例5.15】 在屏幕上輸出如圖在屏幕上輸出如圖5.6所示的九九乘法表。所示的九九乘法表。解:解:先輸出第一行的先輸出第一行的19的數(shù)字,然后使用兩重的數(shù)字,然后使用兩重for循環(huán)輸出乘法表。循環(huán)輸出乘法表。/*FileName:exam5_15.cpp*/#include void main() int i,j; printf( ); for (i=1;i=9;i+) printf(%3d,i); printf(n); for (i=1;i=9;i+) printf(%3d,i);/*輸出每
20、行前的數(shù)字輸出每行前的數(shù)字*/ for (j=1;j=9;j+)/*輸出每行的其他數(shù)輸出每行的其他數(shù)*/if (j=i)/*只輸出下三角部分只輸出下三角部分*/ printf(%3d,i*j);printf(n); 【例【例5.17】 編寫一個(gè)程序,輸出從編寫一個(gè)程序,輸出從3n(n由用戶輸入)的所有素?cái)?shù)。由用戶輸入)的所有素?cái)?shù)。解:解:對(duì)于一個(gè)正整數(shù)對(duì)于一個(gè)正整數(shù)i,判定其為素?cái)?shù)的條件是不被,判定其為素?cái)?shù)的條件是不被2之間的所有整之間的所有整數(shù)整除。使用兩重?cái)?shù)整除。使用兩重for循環(huán)求解。循環(huán)求解。/*FileName:exam5_17.cpp*/#include #include /*包括
21、包括sqrt()函數(shù)聲明函數(shù)聲明*/void main() int n,m,flag,i,j,num=1; printf(n:); scanf(%d,&n); printf(從從3到到%d的所有素?cái)?shù)如下的所有素?cái)?shù)如下:n,n); for (i=3;i=n;i+)/*循環(huán)查找素素?cái)?shù)循環(huán)查找素素?cái)?shù)*/ flag=1; m=(int)sqrt(i);/*sqrt(i)求求i的平方根的平方根*/ for (j=2;j=m;j+)if (i%j=0)/*條件為真時(shí)表示不是素?cái)?shù),退出條件為真時(shí)表示不是素?cái)?shù),退出for循環(huán)循環(huán)*/ flag=0; break; if (flag=1) /*條件為真時(shí)
22、表示條件為真時(shí)表示i是素?cái)?shù)是素?cái)?shù)*/ printf(%4d,i); if (num+%10=0) /*每行最多輸出每行最多輸出10個(gè)數(shù)個(gè)數(shù)*/ printf(n); printf(n);5.6 goto語(yǔ)句語(yǔ)句1. 語(yǔ)句標(biāo)號(hào)語(yǔ)句標(biāo)號(hào) 語(yǔ)句標(biāo)號(hào)是用戶任意選取的一個(gè)標(biāo)識(shí)符后跟一個(gè)語(yǔ)句標(biāo)號(hào)是用戶任意選取的一個(gè)標(biāo)識(shí)符后跟一個(gè)“:”,可以放,可以放在程序中任意一條語(yǔ)句之前,作為該語(yǔ)句的一個(gè)代號(hào)。在程序中任意一條語(yǔ)句之前,作為該語(yǔ)句的一個(gè)代號(hào)。2. goto語(yǔ)句語(yǔ)句 goto語(yǔ)句格式如下:語(yǔ)句格式如下: goto 語(yǔ)句標(biāo)號(hào);語(yǔ)句標(biāo)號(hào); 其中的其中的“語(yǔ)句標(biāo)號(hào)語(yǔ)句標(biāo)號(hào)”所標(biāo)識(shí)的語(yǔ)句只能出現(xiàn)在本語(yǔ)句所在的函數(shù)
23、或所標(biāo)識(shí)的語(yǔ)句只能出現(xiàn)在本語(yǔ)句所在的函數(shù)或復(fù)合語(yǔ)句中。復(fù)合語(yǔ)句中。3. 功能功能 goto語(yǔ)句強(qiáng)制中斷執(zhí)行本語(yǔ)句后面的語(yǔ)句,跳轉(zhuǎn)到語(yǔ)句標(biāo)號(hào)所標(biāo)識(shí)語(yǔ)句強(qiáng)制中斷執(zhí)行本語(yǔ)句后面的語(yǔ)句,跳轉(zhuǎn)到語(yǔ)句標(biāo)號(hào)所標(biāo)識(shí)的語(yǔ)句繼續(xù)執(zhí)行程序。的語(yǔ)句繼續(xù)執(zhí)行程序。【例【例5.18】采用采用goto語(yǔ)句改寫例語(yǔ)句改寫例5.1的程序。的程序。解:解:程序如下:程序如下:/*FileName:exam5_18.cpp*/#include void main() int s=1,i=1;loop:s=s*i;i+; if (i=6) goto loop; printf(%d!=%dn,i-1,s);上述程序中,上述程序中,“l(fā)
24、oop:”為語(yǔ)句標(biāo)號(hào)。為語(yǔ)句標(biāo)號(hào)。5.7 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)應(yīng)用循環(huán)結(jié)構(gòu)程序設(shè)計(jì)應(yīng)用5.7.1 窮舉法窮舉法 窮舉法也稱為枚舉法,它是算法設(shè)計(jì)中最常用的方法之一。窮舉的基窮舉法也稱為枚舉法,它是算法設(shè)計(jì)中最常用的方法之一。窮舉的基本思想是,對(duì)問題的所有可能狀態(tài)一一測(cè)試,直到找到解或?qū)⑷伎赡鼙舅枷胧牵瑢?duì)問題的所有可能狀態(tài)一一測(cè)試,直到找到解或?qū)⑷伎赡軤顟B(tài)都測(cè)試為止。狀態(tài)都測(cè)試為止。 在窮舉法編程中,主要是使用循環(huán)語(yǔ)句和選擇語(yǔ)句,循環(huán)語(yǔ)句用于窮在窮舉法編程中,主要是使用循環(huán)語(yǔ)句和選擇語(yǔ)句,循環(huán)語(yǔ)句用于窮舉所有可能的情況,而選擇語(yǔ)句判定當(dāng)前的條件是否為所求的解。其基舉所有可能的情況,而選擇語(yǔ)句判定
25、當(dāng)前的條件是否為所求的解。其基本格式如下:本格式如下: for (循環(huán)變量循環(huán)變量x取所有可能的值取所有可能的值) if (x滿足指定的條件滿足指定的條件)輸出輸出x; 【例【例5.19】 編寫一個(gè)程序,輸出編寫一個(gè)程序,輸出21000之間的所有完全數(shù)。所謂完全之間的所有完全數(shù)。所謂完全數(shù),是指這樣的數(shù),該數(shù)的各因子(除該數(shù)本身外)之和正好等于該數(shù)數(shù),是指這樣的數(shù),該數(shù)的各因子(除該數(shù)本身外)之和正好等于該數(shù)本身,例如:本身,例如: 6=1+2+3 28=1+2+4+7+14 解:解:先考慮對(duì)于一個(gè)整數(shù)先考慮對(duì)于一個(gè)整數(shù)m,如何判斷它是否為完全數(shù)。從數(shù)學(xué)知識(shí),如何判斷它是否為完全數(shù)。從數(shù)學(xué)知識(shí)
26、可知:一個(gè)數(shù)可知:一個(gè)數(shù)m的除該數(shù)本身外的所有因子都在的除該數(shù)本身外的所有因子都在1m/2之間。算法中要之間。算法中要取得因子之和,只要在取得因子之和,只要在1m/2之間找到所有整除之間找到所有整除m的數(shù),將其累加起來(lái)的數(shù),將其累加起來(lái)即可。如果累加和與即可。如果累加和與m本身相等,則表示本身相等,則表示m是一個(gè)完全數(shù),可以將是一個(gè)完全數(shù),可以將m輸出。輸出。其循環(huán)格式為:其循環(huán)格式為: for (m=2;m=1000;m+) 求出求出m的所有因子之和的所有因子之和s; if (m=s) 輸出輸出s; /*FileName:exam5_19.cpp*/#include void main()
27、int m,i,s; for (m=2;m=1000;m+) s=0; for (i=1;i=m/2;i+) if (m%i=0) s+=i;/*i是是m的一個(gè)因子的一個(gè)因子*/ if (m=s) printf(%d ,m); printf(n);本程序的執(zhí)行結(jié)果如下:本程序的執(zhí)行結(jié)果如下:6 28 4965.7.2 迭代法迭代法迭代是一個(gè)不斷用新值取代變量的舊值;或由舊值遞推出變量的新值的迭代是一個(gè)不斷用新值取代變量的舊值;或由舊值遞推出變量的新值的過(guò)程。迭代機(jī)制需要以下一些要素:過(guò)程。迭代機(jī)制需要以下一些要素:(1)迭代表達(dá)式;)迭代表達(dá)式;(2)迭代變量;)迭代變量;(3)迭代初值;)迭代初值;(4)迭代終止條件。)迭代終止條件。當(dāng)一個(gè)問題的求解過(guò)程能夠由一個(gè)初值,使用一個(gè)迭代表達(dá)式,進(jìn)行反復(fù)當(dāng)一個(gè)問題的求解過(guò)程能夠由一個(gè)初值,使用一個(gè)迭代表達(dá)式,進(jìn)行反復(fù)的迭代時(shí),便可以用效率極高的重復(fù)程序描述,所以迭代也是用循環(huán)結(jié)構(gòu)的迭代時(shí),便可以用效率極高的重復(fù)程序描述,所以迭代也是用循環(huán)結(jié)構(gòu)實(shí)現(xiàn),只不過(guò)要重復(fù)的操作是不斷從一個(gè)變量的舊值出發(fā)計(jì)算它的新值。實(shí)現(xiàn),只不過(guò)要重復(fù)的操作是不斷從一個(gè)變量的舊值出發(fā)計(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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 專業(yè)軟件銷售協(xié)議條款范本(2024年度)版B版
- 2025年度快遞業(yè)務(wù)運(yùn)費(fèi)標(biāo)準(zhǔn)合同范本3篇
- 北京市中考語(yǔ)文模擬試卷二套【附參考答案】
- 3 認(rèn)識(shí)方向(說(shuō)課稿)-2023-2024學(xué)年二年級(jí)上冊(cè)數(shù)學(xué) 蘇教版
- 2024招投標(biāo)法規(guī)與協(xié)議管理實(shí)務(wù)操作指南版
- 2024毛竹山竹林碳匯項(xiàng)目承包合作協(xié)議3篇
- 16《新年的禮物》第一課時(shí)(說(shuō)課稿)-2023-2024學(xué)年道德與法治一年級(jí)上冊(cè)統(tǒng)編版
- 2024版買賣合同協(xié)議書
- 4 說(shuō)說(shuō)我們的學(xué)校(說(shuō)課稿)2024-2025學(xué)年統(tǒng)編版道德與法治三年級(jí)上冊(cè)
- 醫(yī)院內(nèi)分泌科改善護(hù)理服務(wù)行動(dòng)用“心”控糖 共筑健康
- 湖南省部分地區(qū)高三下學(xué)期語(yǔ)文三模試題匯編:文學(xué)類文本閱讀
- 城市軌道交通安全防范系統(tǒng)技術(shù)要求
- 電科院:儲(chǔ)能構(gòu)網(wǎng)控制及并網(wǎng)測(cè)試
- 廣東省初級(jí)中學(xué)學(xué)生學(xué)籍表
- 生鮮超市供貨超市供貨服務(wù)方案
- 銀行營(yíng)銷拆遷戶活動(dòng)方案
- 智能養(yǎng)老app項(xiàng)目商業(yè)計(jì)劃書
- 25道長(zhǎng)江存儲(chǔ)固件工程師崗位常見面試問題含HR常問問題考察點(diǎn)及參考回答
- 《交通規(guī)劃原理》課件
- (完整版)四年級(jí)口算題大全100道
- 警察急救能力培訓(xùn)課件模板
評(píng)論
0/150
提交評(píng)論