c++6循環(huán)結(jié)構(gòu)_第1頁
c++6循環(huán)結(jié)構(gòu)_第2頁
c++6循環(huán)結(jié)構(gòu)_第3頁
c++6循環(huán)結(jié)構(gòu)_第4頁
c++6循環(huán)結(jié)構(gòu)_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第四章 循環(huán)結(jié)構(gòu)第一節(jié) for語句第二節(jié) while語句第三節(jié) do-while語句第四節(jié) 循環(huán)嵌套第一節(jié) for語句一、語句格式一、語句格式格式格式1 1說明:語句說明:語句1 1是是forfor循環(huán)語句的循環(huán)體,它將在滿足條件的情況下被重復執(zhí)行。循環(huán)語句的循環(huán)體,它將在滿足條件的情況下被重復執(zhí)行。格式格式2 2說明:循環(huán)體部分由多個語句構(gòu)成,應由一對花括號括起來,構(gòu)成一個語句塊的說明:循環(huán)體部分由多個語句構(gòu)成,應由一對花括號括起來,構(gòu)成一個語句塊的形式程序風格提示:寫形式程序風格提示:寫for循環(huán)語句時,循環(huán)體的語句相對于循環(huán)語句時,循環(huán)體的語句相對于for縮進兩格??s進兩格。第一節(jié) fo

2、r語句 二、語句執(zhí)行過程 for語句的執(zhí)行過程可由以下4步來描述。 (1)執(zhí)行“控制變量初始化語句”,使控制變量獲得一個初值。 (2)判斷控制變量是否滿足“條件表達式”,若滿足條件則執(zhí)行一遍循環(huán)體,否則結(jié)束整個for語句,繼續(xù)執(zhí)行for循環(huán)下面的句子。 (3)根據(jù)增量表達式,計算出控制變量所得到的新值 (4)自動轉(zhuǎn)到第(2)步。第一節(jié) for語句三、語句格式舉例三、語句格式舉例 (1) (1)將控制變量從將控制變量從1 1變到變到100100,增量為,增量為1 1 for(i=1;i=100;+i) for(i=1;i=1;-i)for(i=7;i=77;i+=7) 即即for(i=7;i=2

3、;i-=2)for(int j=99;j=0;j-=11)for(int i=1,j=2;i=99&j=100;i+=2,j+=2)需要說明的是:可以在需要說明的是:可以在for循環(huán)循環(huán)“ 控制變量初始化語句控制變量初始化語句”中聲明變量(如上面最后中聲明變量(如上面最后3個例子),這些變量只在個例子),這些變量只在for循環(huán)結(jié)構(gòu)中有效,離開了該循環(huán)結(jié)構(gòu)中有效,離開了該for結(jié)構(gòu),變量就無效了。結(jié)構(gòu),變量就無效了。 第一節(jié) for語句利用利用forfor循環(huán)循環(huán), ,計算輸出計算輸出1+2+1+2+100+100的和的和#include using namespace std;int

4、main () int sum=0; for (int i=1; i=100 ; +i) sum+=i; cout sum;return 0;第一節(jié) for語句例例4.1 4.1 輸出輸出1 1100100之間所有偶數(shù)。之間所有偶數(shù)。#include #include using namespace std;using namespace std;int main ()int main () for (int i=2; i=100 ; i+=2) for (int i=2; i=100 ; i+=2) cout i ; cout i ;return 0;return 0; 第一節(jié) for語句例

5、例4.3 4.3 利用利用forfor循環(huán)計算循環(huán)計算n n!的值。!的值。分析:分析:n n!1 1* *2 2* *3 3* *n n#include #include using namespace std;using namespace std;int main ()int main () long long s; /Noip2010 long long s; /Noip2010開始開始C+C+語言中語言中l(wèi)ong longlong long類型允許使用類型允許使用 int n; /nint n; /n不能定義為不能定義為long longlong long,否則,否則forfor語句

6、死循環(huán)語句死循環(huán) s=1;s=1; cinn; cinn; for (int i=1; i=n ; +i) / for (int i=1; i=n ; +i) /若若s s定義為定義為intint,當,當n=13n=13時時s s的值就溢出了的值就溢出了 s s* *=i;=i; cout =13n=13時,時,s s值超過了值超過了intint類型的表示范圍。還有一種比類型的表示范圍。還有一種比intint更大的類型,稱為更大的類型,稱為long longlong long,它的表,它的表示范圍是示范圍是-2-263632 26363-1-1,比,比-10-10191910101919略窄,

7、而我們一直使用的略窄,而我們一直使用的intint范圍是范圍是-2-231312 23131-1,-1,只比只比-2-2* *10109 92 2* *10109 9略寬。略寬。 輸入輸出輸入輸出long longlong long也可以借助于也可以借助于printfprintf和和scanfscanf語句,但對應的占位符卻是和平臺與編譯器相語句,但對應的占位符卻是和平臺與編譯器相關(guān)的:在關(guān)的:在linuxlinux中,中,gccgcc很統(tǒng)一的用很統(tǒng)一的用%lld%lld;在;在windowswindows中,中,MinGWMinGW的的gccgcc和和VC6VC6都需要用都需要用%I64d%

8、I64d;但;但VS2008VS2008卻是用卻是用%lld%lld。第一節(jié) for語句例例4.44.4 利用利用forfor循環(huán)循環(huán), ,分別計算分別計算1 1100100中奇數(shù)的和、偶數(shù)的和。中奇數(shù)的和、偶數(shù)的和。#include #include using namespace std;using namespace std;int main ( )int main ( ) int jssum=0; int jssum=0; int ossum=0; int ossum=0; for (int js=1,os=2;js=99&os=100;js+=2 ,os+=2 ) for (

9、int js=1,os=2;js=99&os=100;js+=2 ,os+=2 ) jssum+=js; jssum+=js; ossum+=os; ossum+=os; cout the sum of odd numbers 1 to 100 is : jssumendl; cout the sum of odd numbers 1 to 100 is : jssumendl; cout the sum of even numbers 1 to 100 is : ossumendl; cout the sum of even numbers 1 to 100 is : ossumen

10、dl; return 0;return 0; 說明:說明: 我們也可以在我們也可以在forfor循環(huán)初始化或增值表達式部分中放一條以上的語句,中間用逗號隔開。循環(huán)初始化或增值表達式部分中放一條以上的語句,中間用逗號隔開?!旧蠙C練習4.1】 1、求12+22+32+1002。 2、計算100之內(nèi)所有的偶數(shù)之和。 3、求s=1+1/2+1/3+1/100。 4、求10個數(shù)中的最大值和最小值。 5、按字母表的順序,從字母A到Z順序打印輸出。 6、求菲波拉契數(shù)列a0,a1,a2,a20。 a0=0,a1=1,a2=a1+a0,a3=a2+a1, an=an-1+an-2。 如0,1,1,2,3,5,8

11、,13,21,第二節(jié) while語句一、語句格式一、語句格式格式格式1 1 說明:循環(huán)體部分由多個語句構(gòu)成,應由一對花括號括起來,構(gòu)成一個語句塊的形式。說明:循環(huán)體部分由多個語句構(gòu)成,應由一對花括號括起來,構(gòu)成一個語句塊的形式。程序風格提示:寫程序風格提示:寫whilewhile循環(huán)語句時,循環(huán)體的語句相對于循環(huán)語句時,循環(huán)體的語句相對于whilewhile縮進兩格??s進兩格。說明:語句說明:語句1是是while循環(huán)語句的循環(huán)體,它將在滿足條件的情況下被重復執(zhí)行。循環(huán)語句的循環(huán)體,它將在滿足條件的情況下被重復執(zhí)行。格式格式2第二節(jié) while語句二、語句執(zhí)行過程二、語句執(zhí)行過程(1)(1)計算

12、作為循環(huán)控制條件表達式的值,得到邏輯真或假,假定用計算作為循環(huán)控制條件表達式的值,得到邏輯真或假,假定用M M表示。表示。(2)(2)若若M M為真,則執(zhí)行了一遍循環(huán)體,否則離開循環(huán),結(jié)束整個為真,則執(zhí)行了一遍循環(huán)體,否則離開循環(huán),結(jié)束整個whilewhile語句的執(zhí)行。語句的執(zhí)行。(3)(3)循環(huán)體的所有語句執(zhí)行結(jié)束后,自動轉(zhuǎn)向第循環(huán)體的所有語句執(zhí)行結(jié)束后,自動轉(zhuǎn)向第(1)(1)步執(zhí)行。步執(zhí)行。三、格式舉例三、格式舉例(1) i=0;(1) i=0; while (i10) while (ix;(2) cinx; while while(x0 xx; cinx;功能:當輸入的數(shù)據(jù)小于功能:當

13、輸入的數(shù)據(jù)小于0 0時,重復讀數(shù)據(jù)。時,重復讀數(shù)據(jù)。第二節(jié) while語句例例4.5 4.5 求求s=1 +2 +3s=1 +2 +3+n+n,當加到第幾項時,當加到第幾項時,s s的值會超過的值會超過10001000?程序如下:程序如下: #include #include using namespace std;using namespace std;int main ()int main () int n=0,s=0; int n=0,s=0; while (s=1000) while (s=1000) +n; +n; s+=n; s+=n; coutn; coutn; system(“

14、pause); return 0; return 0; 第二節(jié) while語句例例4.6 4.6 求兩個正整數(shù),的最大公約數(shù)。求兩個正整數(shù),的最大公約數(shù)。分析:求兩個整數(shù)的最大公約數(shù)可以采用輾轉(zhuǎn)相除法。以下是輾轉(zhuǎn)相除法的算法:分別用分析:求兩個整數(shù)的最大公約數(shù)可以采用輾轉(zhuǎn)相除法。以下是輾轉(zhuǎn)相除法的算法:分別用m m,n n,r r表示被除數(shù)、除數(shù)、余數(shù);表示被除數(shù)、除數(shù)、余數(shù);1)1)求求m m除以除以n n的余數(shù)的余數(shù)r r;2)2)當當r!=0,r!=0,執(zhí)行第執(zhí)行第3)3)步;若步;若r=0r=0,則,則n n為最大公約數(shù)為最大公約數(shù), ,算法結(jié)束。算法結(jié)束。3)3)將將n n的值賦給的

15、值賦給m m,將,將r r的值賦給的值賦給n n;再求;再求m m除以除以n n的余數(shù)的余數(shù)r r。4)4)轉(zhuǎn)到第轉(zhuǎn)到第2)2)步步#include #include using namespace std;using namespace std;int main ()int main () int m,n,r; int m,n,r; cinmn; cinmn; r =m % n; r =m % n; while (r!=0) / while (r!=0) /也可以使用也可以使用 while (r),c+ while (r),c+中中 非非0 0即真即真 m=n; m=n; n=r; n=r;

16、 r=m % n; r=m % n; cout cout最大公約數(shù)最大公約數(shù)=nendl;=n=5+1/n =5的最小的最小n n值。值。分析:此題不等式的左邊是一個求和的算式,該和式中的數(shù)據(jù)項個數(shù)是未知的,也正是要分析:此題不等式的左邊是一個求和的算式,該和式中的數(shù)據(jù)項個數(shù)是未知的,也正是要求出的。對于和式中的每個數(shù)據(jù)項,對應的通式為求出的。對于和式中的每個數(shù)據(jù)項,對應的通式為1/i1/i,i=1i=1,2 2,n n。所以可采用循環(huán)累加的方法來計算出它的值。設(shè)循環(huán)變量為所以可采用循環(huán)累加的方法來計算出它的值。設(shè)循環(huán)變量為i i,它應從,它應從1 1開始取值,每次增開始取值,每次增加加1 1

17、,直到和式的值不小于,直到和式的值不小于5 5為止,此時的為止,此時的i i值就是所求的值就是所求的n n。設(shè)累加變量為。設(shè)累加變量為s s,在循環(huán)體內(nèi),在循環(huán)體內(nèi)把把1/i1/i的值累加到的值累加到s s上。上。根據(jù)以上分析,采用根據(jù)以上分析,采用whilewhile循環(huán)編寫出程序如下:循環(huán)編寫出程序如下:#include #include using namespace std;using namespace std;int main ()int main () int i=0; int i=0; float s=0; float s=0; while(s5) / while(s5) /當

18、當s s的值還未超過的值還未超過5 5時時 +i; +i; s+=1.0/i; s+=1.0/i; couti; couti; system(“pause); return 0; return 0; 若采用若采用forfor循環(huán)來寫,則如下所示:循環(huán)來寫,則如下所示:#include #include using namespace std;using namespace std;int main ()int main () int i; int i; float s=0; float s=0; for(i=1;s5;+i) for(i=1;s5;+i) s+=1.0/i; s+=1.0/i;

19、 couti-1; couti-1; system(“pause); return 0;return 0; 【上機練習4.2】 1、用while循環(huán)完成如下3題: 求s=1+2+3+4+10 求s=1+1/2+1/3+1/100 計算n!,其中n由鍵盤輸入。 2、輸入任意的自然數(shù)A, B, 求A , B的最小公倍數(shù)。 3、小球從100高處自由落下,著地后又彈回高度的一半再落下。求第20次著地時, 小球共通過多少路程? 4、Faibonacci數(shù)列前幾項為: 0,1,1,2,3,5,8,其規(guī)律是從第三項起, 每項均等于前兩項之和。求前30項,并以每行5個數(shù)的格式輸出。第三節(jié) do-while語句

20、一、語句格式一、語句格式格式格式1說明:語句說明:語句1 1是是do-whiledo-while的循環(huán)體。的循環(huán)體。格式格式2說明:循環(huán)體部分由多個語句構(gòu)成,應由一對花括號括起來,構(gòu)成一個語句塊的形式。說明:循環(huán)體部分由多個語句構(gòu)成,應由一對花括號括起來,構(gòu)成一個語句塊的形式。二、語句執(zhí)行過程二、語句執(zhí)行過程(1)(1)執(zhí)行一遍循環(huán)體。執(zhí)行一遍循環(huán)體。(2)(2)求出作為循環(huán)條件的求出作為循環(huán)條件的“條件表達式條件表達式”的值,若為邏輯值真則自動轉(zhuǎn)向第的值,若為邏輯值真則自動轉(zhuǎn)向第(1)(1)步,否則結(jié)束步,否則結(jié)束dodo循環(huán)的執(zhí)循環(huán)的執(zhí)行過程,繼續(xù)執(zhí)行其后面的語句。行過程,繼續(xù)執(zhí)行其后面的

21、語句。在在dodo語句的循環(huán)體中也可以使用語句的循環(huán)體中也可以使用breakbreak語句,用它來非正常結(jié)束循環(huán)的執(zhí)行。語句,用它來非正常結(jié)束循環(huán)的執(zhí)行。第三節(jié) do-while語句三、實例三、實例例例4.9 4.9 對于求兩個正整數(shù),的最大公約數(shù)可以用對于求兩個正整數(shù),的最大公約數(shù)可以用dodowhilewhile實現(xiàn)。實現(xiàn)。代碼如下,請完善:代碼如下,請完善: #include #include using namespace std;using namespace std;int main ()int main () int m int m,n n,r;r; cinmn; cinmn;

22、do / do /輾轉(zhuǎn)相除法輾轉(zhuǎn)相除法 r =m % n; r =m % n; m=_; m=_; n=_; n=_; while ( _ ); while ( _ ); coutthe greatest common divisor is:_; coutthe greatest common divisor is:_; return 0;return 0; 第三節(jié) do-while語句例例4.104.10 求求19921992個個19921992的乘積的末兩位數(shù)是多少?的乘積的末兩位數(shù)是多少?【分析】積的個位與十位數(shù)只與被乘數(shù)與乘數(shù)的個位與十位數(shù)字有關(guān),所以本題相當于求【分析】積的個位與十位

23、數(shù)只與被乘數(shù)與乘數(shù)的個位與十位數(shù)字有關(guān),所以本題相當于求19921992個個9292相乘,而且本次的乘積是下一次相乘的被乘數(shù),因此也只需取末兩位參與運算就相乘,而且本次的乘積是下一次相乘的被乘數(shù),因此也只需取末兩位參與運算就可以了??梢粤?。 #includeusing namespace std;int main() int a=1,t=0; do +t; a=(a*92)%100; while (t!=1992); coutaendl; return 0;第三節(jié) do-while語句例例4.11 4.11 校體操隊到操場集合校體操隊到操場集合, ,排成每行排成每行2 2人人, ,最后多出最后

24、多出1 1人人; ;排成每行排成每行3 3人人, ,也多出也多出1 1人人; ;分別按每行排分別按每行排4,5,64,5,6人人, ,都多出都多出1 1人人; ;當當排成每行排成每行7 7人時人時, ,正好不多。求校體操隊至少多少人正好不多。求校體操隊至少多少人? ?【分析】設(shè)校體操隊為【分析】設(shè)校體操隊為x x人人, ,根據(jù)題意根據(jù)題意x x應是應是7 7的倍數(shù)的倍數(shù), ,因此因此x x的初值為的初值為7,7,以后用以后用x+=7)x+=7)改變改變x x值;值; 為了控制循環(huán)為了控制循環(huán), , 用邏輯變量用邏輯變量yesyes為真為真(true) (true) 使循環(huán)結(jié)束;使循環(huán)結(jié)束; 如

25、果諸條件中有一個不滿足如果諸條件中有一個不滿足, yes , yes 的值就會為假的值就會為假(false)(false),就繼續(xù)循環(huán)。,就繼續(xù)循環(huán)。 #include#includeusing namespace std;using namespace std;int main()int main() bool yes; bool yes; int x=0; int x=0; do do yes=true; yes=true; x+=7; x+=7; if (x%2!=1) yes=false; if (x%2!=1) yes=false; if (x%3!=1) yes=false; if

26、 (x%3!=1) yes=false; if (x%4!=1) yes=false; if (x%4!=1) yes=false; if (x%5!=1) yes=false; if (x%5!=1) yes=false; if (x%6!=1) yes=false; if (x%6!=1) yes=false; while (yes=false); / while (yes=false); /直到直到y(tǒng)esyes的值為真的值為真 coutAll=x; coutAll=x; return 0; return 0; 程序中對每個程序中對每個x x值,都先給值,都先給yes yes 賦真值,只有

27、在循環(huán)體各句對賦真值,只有在循環(huán)體各句對x x進行判斷時,都得到進行判斷時,都得到“通過通過”(此處不賦假值)才能保持(此處不賦假值)才能保持真值。真值?!旧蠙C練習4.3】1 1、用、用do-whiledo-while循環(huán)完成如下循環(huán)完成如下3 3題:題:求求s=1+2+3+4+s=1+2+3+4+10+10求求s=1+1/2+1/3+s=1+1/2+1/3+1/100+1/100計算計算n n!,其中!,其中n n由鍵盤輸入。由鍵盤輸入。2 2、讀一組實數(shù)、讀一組實數(shù), ,遇零終止遇零終止, ,打印其中正、負數(shù)的個數(shù)及各自的總和。打印其中正、負數(shù)的個數(shù)及各自的總和。3 3、用輾轉(zhuǎn)相除法求兩個

28、自然數(shù)的最大公約數(shù)。、用輾轉(zhuǎn)相除法求兩個自然數(shù)的最大公約數(shù)。4 4、找出被、找出被2 2、3 3、5 5除時余數(shù)為除時余數(shù)為1 1的最小的十個數(shù)。的最小的十個數(shù)。5 5、將一根長為、將一根長為369cm369cm的鋼管截成長為的鋼管截成長為69cm69cm和和39cm39cm兩種規(guī)格的短料。在這兩種規(guī)兩種規(guī)格的短料。在這兩種規(guī)格的短料至少各截一根的前提下格的短料至少各截一根的前提下, , 如何截才能余料最少?如何截才能余料最少?第四節(jié) 循環(huán)嵌套 例例4.12 4.12 求求 S=1!+2!+3!+.+10! S=1!+2!+3!+.+10! 分析:這個問題是求分析:這個問題是求1010以內(nèi)自然

29、數(shù)的階乘之和,可以用以內(nèi)自然數(shù)的階乘之和,可以用forfor循環(huán)來實現(xiàn)。程序結(jié)構(gòu)如下:循環(huán)來實現(xiàn)。程序結(jié)構(gòu)如下: for(i=1;i=10;+i) for(i=1;i=10;+i) (1)i (1)i階乘的值存到階乘的值存到t t; /t=i! /t=i! (2) (2)累加累加t t到到s s中;中; /s+=t /s+=t 顯然根據(jù)以上結(jié)構(gòu),通過顯然根據(jù)以上結(jié)構(gòu),通過1010次的循環(huán)可以求出次的循環(huán)可以求出1 1!,!,2 2!,!,10!,10!,并不斷累加起來,求出并不斷累加起來,求出s s。而求。而求t=i!,t=i!,又可以用一個又可以用一個forfor循環(huán)來實現(xiàn):循環(huán)來實現(xiàn): t

30、=1; t=1; for (j=1;j=i;+j) for (j=1;j=i;+j) t t* *=j;=j; 因此整個程序為:因此整個程序為:#include #include using namespace std;using namespace std;int main ()int main () int t,s; int t,s; s=0; s=0; for(int i=1;i=10;+i) for(int i=1;i=10;+i) t=1; t=1; for (int j=1;j=i;+j) / for (int j=1;j=i;+j) /求求i!i! t t* *=j;=j; s+

31、=t; / s+=t; /累加累加i!i! couts; couts; return 0; return 0; 以上程序是一個以上程序是一個forfor循環(huán)的嵌套。這種方法是比較容易想到的,但實際上對于求循環(huán)的嵌套。這種方法是比較容易想到的,但實際上對于求i i!,我們!,我們可以根據(jù)求出的(可以根據(jù)求出的(i-1i-1)!乘上)!乘上i i即可得到,而無需重新從即可得到,而無需重新從1 1再累乘到再累乘到i i。第四節(jié) 循環(huán)嵌套第四節(jié) 循環(huán)嵌套因此程序可改為因此程序可改為: :#include #include using namespace std;using namespace std;

32、int main ()int main () int t=1,s=0; int t=1,s=0; for(int i=1;i=10;+i) for(int i=1;i=10;+i) t t* *=i; /t=i; /t為上一個數(shù)的為上一個數(shù)的i-1i-1的階乘值,再乘以的階乘值,再乘以i i即為即為i!i! s+=t; / s+=t; /累加累加i!i! couts; couts; return 0; return 0; 顯然第二個程序的效率要比第一個高得多。第一個程序要進行顯然第二個程序的效率要比第一個高得多。第一個程序要進行1+2+3+10=551+2+3+10=55次循環(huán),而次循環(huán),而第

33、二程序進行第二程序進行1010次循環(huán)。若題目中求的是次循環(huán)。若題目中求的是1 1!+2+2!+1000+1000!,則兩個程序的效率區(qū)別更!,則兩個程序的效率區(qū)別更明顯。明顯。第四節(jié) 循環(huán)嵌套例例4.13 4.13 一個炊事員上街采購,用一個炊事員上街采購,用500500元錢買了元錢買了9090只雞,其中母雞一只只雞,其中母雞一只1515元元, ,公雞一只公雞一只1010元,元,小雞一只小雞一只5 5元,正好把錢買完。問母雞,公雞,小雞各買了多少只?元,正好把錢買完。問母雞,公雞,小雞各買了多少只?【分析】設(shè)母雞【分析】設(shè)母雞i i只只, ,公雞公雞j j只只, ,則小雞為則小雞為90-i-j

34、90-i-j只只, ,則則1515* *i+ 10i+ 10* * j+(90-i-j) j+(90-i-j)* *5=500,5=500,顯然一顯然一個方程求兩個未知數(shù)是不能直接求解。必須組合出所有可能的個方程求兩個未知數(shù)是不能直接求解。必須組合出所有可能的i,ji,j值,看是否滿足條件。值,看是否滿足條件。這里這里i i的值可以是的值可以是0 0到到3333,j j的值可以的值可以0 0到到5050。源程序如下:。源程序如下:#include #include using namespace std;using namespace std;int main ()int main () in

35、t k; int k; for (int i=0;i=33;+i) for (int i=0;i=33;+i) / /枚舉母雞的數(shù)量枚舉母雞的數(shù)量 for (int j=0;j=50;+j) / for (int j=0;j=50;+j) /枚舉公雞的數(shù)量枚舉公雞的數(shù)量 k=90-i-j; k=90-i-j; if (15 if (15* *i+10i+10* *j+kj+k* *5=500)5=500) cout cout母雞有母雞有ii只只,公雞有公雞有jj只只,小雞有小雞有kk只只 endl; endl; return 0;return 0; 第四節(jié) 循環(huán)嵌套例例4.14 4.14 利用

36、利用forfor循環(huán)語句輸出圖循環(huán)語句輸出圖4-4-1 1中的三角形。中的三角形。*圖圖4-1#include #include using namespace std;using namespace std;int main ()int main () for (int i=1; i=5; +i) / for (int i=1; i=5; +i) /控制行數(shù)控制行數(shù) for (int j=1; j=i; +j) / for (int j=1; j=i; +j) /輸出一行中的輸出一行中的* *數(shù)數(shù) cout cout* *; coutendl; / coutendl; /換行換行 retur

37、n 0;return 0; 第四節(jié) 循環(huán)嵌套例例4.15 4.15 求求100100999999中的水仙花數(shù)。若三位數(shù)中的水仙花數(shù)。若三位數(shù)ABCABC,ABC=AABC=A3 3+B+B3 3+C+C3 3,則稱,則稱ABCABC為水仙花數(shù)。為水仙花數(shù)。例如例如153153,1 13 3+5+53 3+3+33 3=1+125+27=153=1+125+27=153,則,則153153是水仙花數(shù)。是水仙花數(shù)?!痉治觥俊痉治觥?根據(jù)題意,采用三重循環(huán)來求解。由于循環(huán)次數(shù)一定,用根據(jù)題意,采用三重循環(huán)來求解。由于循環(huán)次數(shù)一定,用forfor循環(huán)最為簡單。程循環(huán)最為簡單。程序如下:序如下:#inc

38、lude#include#include /#include /調(diào)用調(diào)用setw函數(shù)需注明使用該庫函數(shù)需注明使用該庫using namespace std;using namespace std;int main()int main() for (int a=1; a=9; +a) for (int a=1; a=9; +a) for (int b=0; b=9; +b) for (int b=0; b=9; +b) for (int c=0; c=9; +c) for (int c=0; c=9; +c) if (a if (a* *a a* *a+ba+b* *b b* *b+cb+c*

39、*c c* *c=ac=a* *100+b100+b* *10+c) 10+c) coutsetw(6)a coutsetw(6)a* *100+b100+b* *10+c;10+c; / /setw函數(shù)控制輸出場寬函數(shù)控制輸出場寬 return 0;return 0; 運行結(jié)果:運行結(jié)果:153153370370371371407407第四節(jié) 循環(huán)嵌套同時也可以采用一個同時也可以采用一個for循環(huán)來求解,表面上看好像優(yōu)于三重循環(huán),實際上卻比循環(huán)來求解,表面上看好像優(yōu)于三重循環(huán),實際上卻比上面的程序效率低,請同學們自己分析。上面的程序效率低,請同學們自己分析。程序如下:程序如下:#includ

40、e#includeusing namespace std;int main() int a,b,c; for (int m=100; m=999; +m) a=m/100; /m的百位 b=(m%100)/10; /m的十位 c=m%10; /m的個位 if (a*a*a+b*b*b+c*c*c=m) coutsetw(6)m; return 0;第四節(jié) 循環(huán)嵌套例例4.16 4.16 輸出輸出100200100200中所有的素數(shù)。中所有的素數(shù)。分析:我們可對100-200之間的每一個整數(shù)進行判斷,若它是為素數(shù),則輸出。而對于任意整數(shù)i,根據(jù)素數(shù)定義,我們從2開始,到sqrt(i),找i的第一

41、個約數(shù),若找到第一個約數(shù),則i必然不是素數(shù)。程序如下:#include #include /在Dev C+中可調(diào)用數(shù)學函數(shù)庫cmathusing namespace std;int main () int x; for (int i=100;i=200;+i) x=2; while(xfloor(sqrt(i) coutit; return 0;第四節(jié) 循環(huán)嵌套例例4.174.17 輸出所有形如輸出所有形如aabbaabb的四位完全平方數(shù)(即前兩位數(shù)字相等,后兩位數(shù)字也相等)。的四位完全平方數(shù)(即前兩位數(shù)字相等,后兩位數(shù)字也相等)?!痉治觥俊痉治觥糠种Ш脱h(huán)結(jié)合在一起時威力特別強大:我們枚舉所

42、有可能的分支和循環(huán)結(jié)合在一起時威力特別強大:我們枚舉所有可能的aabbaabb,然后判斷它們是否為完全平方數(shù)。注意,然后判斷它們是否為完全平方數(shù)。注意,a a的范圍是的范圍是1 19 9,b b可以是可以是0 0。主程序如下:。主程序如下: for (a=1; a=9; a+) for (a=1; a=9; a+) for (b=0; b=9; b+) for (b=0; b=9; b+) if (aabb if (aabb是完全平方數(shù)是完全平方數(shù)) printf(%dn,aabb);) printf(%dn,aabb);另一個思路是枚舉平方根另一個思路是枚舉平方根x x,參考程序如下:,參考程序如下:#include#includeint main()int main() int n=0,hi,lo;int n=0,hi,lo;for (int x=1 ; ; +x) /for (int x=1 ; ; +x) /可以直接從可以直接從x=32x=32開始枚舉開始枚舉 n=xn=x* *x;x; if (n1000) continue;if (n99

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論