第五講循環(huán)結(jié)構(gòu)(C++版)_第1頁(yè)
第五講循環(huán)結(jié)構(gòu)(C++版)_第2頁(yè)
第五講循環(huán)結(jié)構(gòu)(C++版)_第3頁(yè)
第五講循環(huán)結(jié)構(gòu)(C++版)_第4頁(yè)
第五講循環(huán)結(jié)構(gòu)(C++版)_第5頁(yè)
已閱讀5頁(yè),還剩40頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第三章循環(huán)結(jié)構(gòu)第一節(jié)for語(yǔ)句第二節(jié)while語(yǔ)句第三節(jié)do-while語(yǔ)句第四節(jié)循環(huán)嵌套for語(yǔ)句for(表達(dá)式1、表達(dá)式2、表達(dá)式3)語(yǔ)句或語(yǔ)句組for(i=0、i<10、i++)

{cout<<“welcome”<<endl;}求解表達(dá)式1表達(dá)式2語(yǔ)句求解表達(dá)式3For語(yǔ)句的下一語(yǔ)句假真第一節(jié)for語(yǔ)句一、語(yǔ)句格式格式1說(shuō)明:語(yǔ)句1是for循環(huán)語(yǔ)句的循環(huán)體,它將在滿(mǎn)足條件的情況下被重復(fù)執(zhí)行。格式2說(shuō)明:循環(huán)體部分由多個(gè)語(yǔ)句構(gòu)成,應(yīng)由一對(duì)花括號(hào)括起來(lái),構(gòu)成一個(gè)語(yǔ)句塊的形式程序風(fēng)格提示:寫(xiě)for循環(huán)語(yǔ)句時(shí),循環(huán)體的語(yǔ)句相對(duì)于for縮進(jìn)兩格。第一節(jié)for語(yǔ)句二、語(yǔ)句執(zhí)行過(guò)程for語(yǔ)句的執(zhí)行過(guò)程可由以下4步來(lái)描述。(1)執(zhí)行“控制變量初始化語(yǔ)句”,使控制變量獲得一個(gè)初值。(2)判斷控制變量是否滿(mǎn)足“條件表達(dá)式”,若滿(mǎn)足條件則執(zhí)行一遍循環(huán)體,否則結(jié)束整個(gè)for語(yǔ)句,繼續(xù)執(zhí)行for循環(huán)下面的句子。(3)根據(jù)增量表達(dá)式,計(jì)算出控制變量所得到的新值(4)自動(dòng)轉(zhuǎn)到第(2)步。第一節(jié)for語(yǔ)句三、語(yǔ)句格式舉例(1)將控制變量從1變到100,增量為1for(i=1;i<=100;++i)(2)將控制變量從100變到1,增量為-1for(i=100;i>=1;--i)(3)控制變量從7變到77,增量為7for(i=7;i<=77;i+=7)(4)控制變量從20變到2,增量為-2for(inti=20;i>=2;i-=2)(5)按所示數(shù)列改變控制變量值:99、88、77、66、55、44、33、22、11、0,增量為-11for(intj=99;j>=0;j-=11)(6)控制變量i和j共同進(jìn)行循環(huán)控制,i從1變到99,j從2變到100,增量均為2。for(inti=1,j=2;i<=99&&j<=100;i+=2,j+=2)需要說(shuō)明的是:可以在for循環(huán)“控制變量初始化語(yǔ)句”中聲明變量(如上面最后3個(gè)例子),這些變量只在for循環(huán)結(jié)構(gòu)中有效,離開(kāi)了該for結(jié)構(gòu),變量就無(wú)效了。第一節(jié)for語(yǔ)句例4.1

輸出1—100之間所有偶數(shù)。#include<iostream>usingnamespacestd;intmain(){for(inti=2;i<=100;i+=2)cout<<i<<"";

return0;}例4.2

利用for循環(huán),計(jì)算輸出1+2+…+100的和#include<iostream>usingnamespacestd;intmain(){intsum=0;for(inti=1;i<=100;++i)sum+=i;

cout<<sum;return0;}循環(huán)語(yǔ)句循環(huán)控制語(yǔ)句包括:循環(huán)語(yǔ)句:for當(dāng)型循環(huán)語(yǔ)句:while直到型循環(huán)語(yǔ)句:do-while循環(huán)語(yǔ)句for循環(huán)語(yǔ)句for(另一種當(dāng)型循環(huán))

for

(初始條件表達(dá)式;循環(huán)控制表達(dá)式;循環(huán)操作表達(dá)式)

語(yǔ)句/{語(yǔ)句組}一次for循環(huán)執(zhí)行過(guò)程首先執(zhí)行初始條件表達(dá)式(第一次):可以為空循環(huán)控制表達(dá)式:一定是一個(gè)數(shù)值表達(dá)式,也可以為空如果表達(dá)式值為真,條件成立,執(zhí)行循環(huán)體一次如果表達(dá)式值為假,條件不成立,退出循環(huán)如果省略,默認(rèn)值為真,直到遇到break,return語(yǔ)句退出循環(huán)循環(huán)操作表達(dá)式:也可為空初始條件表達(dá)式語(yǔ)句/語(yǔ)句組循環(huán)操作表達(dá)式循環(huán)控制表達(dá)式循環(huán)語(yǔ)句for循環(huán)語(yǔ)句for例,計(jì)算從0到100的整數(shù)中有多少個(gè)數(shù)是偶數(shù)(包括0),奇數(shù)中有多少數(shù)是3的倍數(shù)#include<iostream>usingnamespacestd;intmain(){inti,n2=0,n3=0;for(i=0;i<=100;i++){if(i%2==0)n2++;elseif(i%3==0)n3++;}cout<<n2<<“”<<n3<<endl;return0;}第一節(jié)for語(yǔ)句例4.3

利用for循環(huán)計(jì)算n!的值。分析:n?。?*2*3…*n#include<iostream>usingnamespacestd;intmain(){longlongs;//Noip2010開(kāi)始C++語(yǔ)言中l(wèi)onglong類(lèi)型允許使用intn;//n不能定義為longlong,否則for語(yǔ)句死循環(huán)s=1;

cin>>n;for(inti=1;i<=n;++i)//若s定義為int,當(dāng)n=13時(shí)s的值就溢出了s*=i;

cout<<s;return0;}【說(shuō)明】:當(dāng)n>=13時(shí),s值超過(guò)了int類(lèi)型的表示范圍。還有一種比int更大的類(lèi)型,稱(chēng)為longlong,它的表示范圍是-263~263-1,比-1019~1019略窄,而我們一直使用的int范圍是-231~231-1,只比-2*109~2*109略寬。輸入輸出longlong也可以借助于printf和scanf語(yǔ)句,但對(duì)應(yīng)的占位符卻是和平臺(tái)與編譯器相關(guān)的:在linux中,gcc很統(tǒng)一的用%lld;在windows中,MinGW的gcc和VC6都需要用%I64d;但VS2008卻是用%lld。第一節(jié)for語(yǔ)句例4.4

利用for循環(huán),分別計(jì)算1—100中奇數(shù)的和、偶數(shù)的和。#include<iostream>usingnamespacestd;intmain(){intjssum=0;intossum=0;for(intjs=1,os=2;js<=99&&os<=100;js+=2,os+=2){jssum+=js;ossum+=os;}cout<<"thesumofoddnumbers1to100is:"<<jssum<<endl;cout<<"thesumofevennumbers1to100is:"<<ossum<<endl;return0;}說(shuō)明:

我們也可以在for循環(huán)初始化或增值表達(dá)式部分中放一條以上的語(yǔ)句,中間用逗號(hào)隔開(kāi)。【上機(jī)練習(xí)4.1】1、求12+22+32+…+10022、求s=1+1/2+1/3+…+1/1003、計(jì)算100之內(nèi)所有的奇數(shù)之和。4、求10個(gè)數(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,13,21,……第二節(jié)while語(yǔ)句一、語(yǔ)句格式格式1說(shuō)明:循環(huán)體部分由多個(gè)語(yǔ)句構(gòu)成,應(yīng)由一對(duì)花括號(hào)括起來(lái),構(gòu)成一個(gè)語(yǔ)句塊的形式。程序風(fēng)格提示:寫(xiě)while循環(huán)語(yǔ)句時(shí),循環(huán)體的語(yǔ)句相對(duì)于while縮進(jìn)兩格。說(shuō)明:語(yǔ)句1是while循環(huán)語(yǔ)句的循環(huán)體,它將在滿(mǎn)足條件的情況下被重復(fù)執(zhí)行。格式2循環(huán)語(yǔ)句while循環(huán)語(yǔ)句while(當(dāng)型循環(huán)) while

(表達(dá)式)

語(yǔ)句/{語(yǔ)句組}表達(dá)式必須是數(shù)值表達(dá)式一次循環(huán)計(jì)算表達(dá)式的值如果表達(dá)式值為真,執(zhí)行循環(huán)體,為假退出循環(huán)表達(dá)式語(yǔ)句/語(yǔ)句組第二節(jié)while語(yǔ)句二、語(yǔ)句執(zhí)行過(guò)程(1)計(jì)算作為循環(huán)控制條件表達(dá)式的值,得到邏輯真或假,假定用M表示。(2)若M為真,則執(zhí)行了一遍循環(huán)體,否則離開(kāi)循環(huán),結(jié)束整個(gè)while語(yǔ)句的執(zhí)行。(3)循環(huán)體的所有語(yǔ)句執(zhí)行結(jié)束后,自動(dòng)轉(zhuǎn)向第(1)步執(zhí)行。三、格式舉例(1)i=0;while(i<10)++i;功能:當(dāng)i的值小于10,重復(fù)執(zhí)行++i語(yǔ)句(2)cin>>x;while(x<0)cin>>x;功能:當(dāng)輸入的數(shù)據(jù)小于0時(shí),重復(fù)讀數(shù)據(jù)。循環(huán)語(yǔ)句while計(jì)算從1到100的所有整數(shù)的平方和#include<iostream>usingnamespacestd;intmain(){inti=100;intsum=0;while(i>0){sum=sum+i*i;i--;}printf(“sum=%d\n”,sum);return0;}循環(huán)語(yǔ)句while第二節(jié)while語(yǔ)句例4.5求s=1+2+3……+n,當(dāng)加到第幾項(xiàng)時(shí),s的值會(huì)超過(guò)1000?程序如下:#include<iostream>usingnamespacestd;intmain(){intn=0,s=0;while(s<=1000){++n;s+=n;}cout<<n;return0;}第二節(jié)while語(yǔ)句例4.6求兩個(gè)正整數(shù)m,n的最大公約數(shù)。分析:求兩個(gè)整數(shù)的最大公約數(shù)可以采用輾轉(zhuǎn)相除法。以下是輾轉(zhuǎn)相除法的算法:分別用m,n,r表示被除數(shù)、除數(shù)、余數(shù);1)求m除以n的余數(shù)r;2)當(dāng)r!=0,執(zhí)行第3)步;若r==0,則n為最大公約數(shù),算法結(jié)束。3)將n的值賦給m,將r的值賦給n;再求m除以n的余數(shù)r。4)轉(zhuǎn)到第2)步#include<iostream>usingnamespacestd;intmain(){intm,n,r;cin>>m>>n;r=m%n;while(r!=0)//也可以使用while(r),c++中非0即真{m=n;n=r;r=m%n;}cout<<"最大公約數(shù)="<<n<<endl;return0;}第二節(jié)while語(yǔ)句例4.7

編一程序求滿(mǎn)足不等式1+1/2+1/3…+1/n>=5的最小n值。分析:此題不等式的左邊是一個(gè)求和的算式,該和式中的數(shù)據(jù)項(xiàng)個(gè)數(shù)是未知的,也正是要求出的。對(duì)于和式中的每個(gè)數(shù)據(jù)項(xiàng),對(duì)應(yīng)的通式為1/i,i=1,2,…n。所以可采用循環(huán)累加的方法來(lái)計(jì)算出它的值。設(shè)循環(huán)變量為i,它應(yīng)從1開(kāi)始取值,每次增加1,直到和式的值不小于5為止,此時(shí)的i值就是所求的n。設(shè)累加變量為s,在循環(huán)體內(nèi)把1/i的值累加到s上。根據(jù)以上分析,采用while循環(huán)編寫(xiě)出程序如下:#include<iostream>usingnamespacestd;intmain(){inti=0;floats=0;while(s<5)//當(dāng)s的值還未超過(guò)5時(shí){++i;s+=1.0/i;}cout<<i;return0;}若采用for循環(huán)來(lái)寫(xiě),則如下所示:#include<iostream>usingnamespacestd;intmain(){inti;floats=0;for(i=1;s<5;++i)s+=1.0/i;cout<<i-1;return0;}第二節(jié)while語(yǔ)句例4.8

數(shù)據(jù)統(tǒng)計(jì)輸入一些整數(shù),求出它們的最小值、最大值和平均值(保留3位小數(shù))。輸入保證這些數(shù)都是不超過(guò)1000的整數(shù)。樣例輸入:28351736樣例輸出:184.375【參考程序】#include<cstdio>intmain(){intx,n=0,min,max,s=0;while(scanf(“%d”,&x)==1)//當(dāng)有輸入的時(shí)候,表達(dá)式為真,即==1,執(zhí)行循環(huán){s+=x;if(x<min)min=x;if(x>max)max=x;++n;}printf("%d%d%.3lf\n",min,max,(double)s/n);return0;}第二節(jié)while語(yǔ)句最后,我們來(lái)更仔細(xì)地研究一下輸入輸出。研究對(duì)象就是經(jīng)典的“A+B”問(wèn)題:輸入若干對(duì)整數(shù),輸出每對(duì)之和。假設(shè)每個(gè)整數(shù)不超過(guò)109,一共不超過(guò)106個(gè)數(shù)對(duì)。第1種方法是:#include<cstdio>intmain(){inta,b;while(scanf("%d%d",&a,&b)==2)printf("%d\n",a+b);return0;}第2種方法也許更加常用(你再也不用記住%d、%lf等惱人的占位符了):#include<iostream>usingnamespacestd;intmain(){inta,b;while(cin>>a>>b)cout<<a+b<<endl;return0;}課堂練習(xí)以下的for循環(huán)(

)。

for(x=0,y=0;(y!=123)&&(x<4);x++)

;A執(zhí)行3次

B執(zhí)行4次

C循環(huán)次數(shù)不定

D是無(wú)限循環(huán)已知:inta=5;執(zhí)行語(yǔ)句while(a-->0);a的值是()。

A.5 B.0 C.–1 D.-2BC【上機(jī)練習(xí)4.2】1、用while循環(huán)完成如下3題:①求s=1+2+3+4+…+10②求s=1+1/2+1/3+…+1/100③計(jì)算n!,其中n由鍵盤(pán)輸入。2、輸入任意的自然數(shù)A,

B,

求A

,

B的最小公倍數(shù)。3、小球從100高處自由落下,著地后又彈回高度的一半再落下。求第20次著地時(shí),

小球共通過(guò)多少路程?4、Faibonacci數(shù)列前幾項(xiàng)為:

0,1,1,2,3,5,8,…,其規(guī)律是從第三項(xiàng)起,

每項(xiàng)均等于前兩項(xiàng)之和。求前30項(xiàng),并以每行5個(gè)數(shù)的格式輸出。第三節(jié)do-while語(yǔ)句一、語(yǔ)句格式格式1說(shuō)明:語(yǔ)句1是do-while的循環(huán)體。格式2說(shuō)明:循環(huán)體部分由多個(gè)語(yǔ)句構(gòu)成,應(yīng)由一對(duì)花括號(hào)括起來(lái),構(gòu)成一個(gè)語(yǔ)句塊的形式。二、語(yǔ)句執(zhí)行過(guò)程(1)執(zhí)行一遍循環(huán)體。(2)求出作為循環(huán)條件的“條件表達(dá)式”的值,若為邏輯值真則自動(dòng)轉(zhuǎn)向第(1)步,否則結(jié)束do循環(huán)的執(zhí)行過(guò)程,繼續(xù)執(zhí)行其后面的語(yǔ)句。在do語(yǔ)句的循環(huán)體中也可以使用break語(yǔ)句,用它來(lái)非正常結(jié)束循環(huán)的執(zhí)行。循環(huán)語(yǔ)句do-while循環(huán)語(yǔ)句do-while(直到型循環(huán))do{語(yǔ)句/語(yǔ)句組}while

(表達(dá)式);一次循環(huán)執(zhí)行一次循環(huán)體計(jì)算表達(dá)式,條件成立再執(zhí)行一次循環(huán)體,

否則退出循環(huán)語(yǔ)句/語(yǔ)句組表達(dá)式循環(huán)語(yǔ)句do-while循環(huán)語(yǔ)句do-while計(jì)算從1到100的所有整數(shù)的平方和#include<iostream>usingnamespacestd;intmain(){inti=100;intsum=0;do{sum=sum+i*i;i--;}while(i>0);cout<<sum<<endl;return0;}第三節(jié)do-while語(yǔ)句三、實(shí)例例4.9

對(duì)于求兩個(gè)正整數(shù)m,n的最大公約數(shù)可以用do—while實(shí)現(xiàn)。代碼如下,請(qǐng)完善:#include<iostream>usingnamespacestd;intmain(){intm,n,r;cin>>m>>n;do//輾轉(zhuǎn)相除法{r=m%n;m=____;n=_____;}while(_______);cout<<"thegreatestcommondivisoris:"<<______;return0;}第三節(jié)do-while語(yǔ)句例4.10

求1992個(gè)1992的乘積的末兩位數(shù)是多少?【分析】積的個(gè)位與十位數(shù)只與被乘數(shù)與乘數(shù)的個(gè)位與十位數(shù)字有關(guān),所以本題相當(dāng)于求1992個(gè)92相乘,而且本次的乘積是下一次相乘的被乘數(shù),因此也只需取末兩位參與運(yùn)算就可以了。#include<iostream>usingnamespacestd;intmain(){inta=1,t=0;do{++t;a=(a*92)%100;}while(t!=1992);cout<<a<<endl;return0;}第三節(jié)do-while語(yǔ)句例4.11校體操隊(duì)到操場(chǎng)集合,排成每行2人,最后多出1人;排成每行3人,也多出1人;分別按每行排4,5,6人,都多出1人;當(dāng)排成每行7人時(shí),正好不多。求校體操隊(duì)至少多少人?【分析】①設(shè)校體操隊(duì)為x人,根據(jù)題意x應(yīng)是7的倍數(shù),因此x的初值為7,以后用x+=7)改變x值;②為了控制循環(huán),用邏輯變量yes為真(true)使循環(huán)結(jié)束;③如果諸條件中有一個(gè)不滿(mǎn)足,yes的值就會(huì)為假(false),就繼續(xù)循環(huán)。#include<iostream>usingnamespacestd;intmain(){boolyes;intx=0;do{yes=true;x+=7;if(x%2!=1)yes=false;if(x%3!=1)yes=false;if(x%4!=1)yes=false;if(x%5!=1)yes=false;if(x%6!=1)yes=false;}while(yes==false);//直到y(tǒng)es的值為真cout<<"All="<<x;return0;}程序中對(duì)每個(gè)x值,都先給yes賦真值,只有在循環(huán)體各句對(duì)x進(jìn)行判斷時(shí),都得到“通過(guò)”(此處不賦假值)才能保持真值?!旧蠙C(jī)練習(xí)4.3】1、用do-while循環(huán)完成如下3題:①求s=1+2+3+4+…+10②求s=1+1/2+1/3+…+1/100③計(jì)算n!,其中n由鍵盤(pán)輸入。2、讀一組實(shí)數(shù),遇零終止,打印其中正、負(fù)數(shù)的個(gè)數(shù)及各自的總和。3、用輾轉(zhuǎn)相除法求兩個(gè)自然數(shù)的最大公約數(shù)。4、找出被2、3、5除時(shí)余數(shù)為1的最小的十個(gè)數(shù)。5、將一根長(zhǎng)為369cm的鋼管截成長(zhǎng)為69cm和39cm兩種規(guī)格的短料。在這兩種規(guī)格的短料至少各截一根的前提下,如何截才能余料最少?第四節(jié)循環(huán)嵌套例4.12

求S=1!+2!+3!+....+10!分析:這個(gè)問(wèn)題是求10以?xún)?nèi)自然數(shù)的階乘之和,可以用for循環(huán)來(lái)實(shí)現(xiàn)。程序結(jié)構(gòu)如下:for(i=1;i<=10;++i){(1)i階乘的值存到t;//t=i!(2)累加t到s中;//s+=t}顯然根據(jù)以上結(jié)構(gòu),通過(guò)10次的循環(huán)可以求出1!,2!,…10!,并不斷累加起來(lái),求出s。而求t=i!,又可以用一個(gè)for循環(huán)來(lái)實(shí)現(xiàn):t=1;for(j=1;j<=i;++j)t*=j;

因此整個(gè)程序?yàn)椋?include<iostream>usingnamespacestd;intmain(){intt,s;s=0;for(inti=1;i<=10;++i){t=1;for(intj=1;j<=i;++j)//求i!t*=j;s+=t;//累加i!}cout<<s;return0;}以上程序是一個(gè)for循環(huán)的嵌套。這種方法是比較容易想到的,但實(shí)際上對(duì)于求i!,我們可以根據(jù)求出的(i-1)!乘上i即可得到,而無(wú)需重新從1再累乘到i。第四節(jié)循環(huán)嵌套第四節(jié)循環(huán)嵌套因此程序可改為:#include<iostream>usingnamespacestd;intmain(){intt=1,s=0;for(inti=1;i<=10;++i){t*=i;//t為上一個(gè)數(shù)的i-1的階乘值,再乘以i即為i!s+=t;//累加i!}cout<<s;return0;}顯然第二個(gè)程序的效率要比第一個(gè)高得多。第一個(gè)程序要進(jìn)行1+2+3+…+10=55次循環(huán),而第二程序進(jìn)行10次循環(huán)。若題目中求的是1!+2!+…+1000!,則兩個(gè)程序的效率區(qū)別更明顯。第四節(jié)循環(huán)嵌套例4.13一個(gè)炊事員上街采購(gòu),用500元錢(qián)買(mǎi)了90只雞,其中母雞一只15元,公雞一只10元,小雞一只5元,正好把錢(qián)買(mǎi)完。問(wèn)母雞,公雞,小雞各買(mǎi)了多少只?【分析】設(shè)母雞i只,公雞j只,則小雞為90-i-j只,則15*i+10*j+(90-i-j)*5=500,顯然一個(gè)方程求兩個(gè)未知數(shù)是不能直接求解。必須組合出所有可能的i,j值,看是否滿(mǎn)足條件。這里i的值可以是0到33,j的值可以0到50。源程序如下:#include<iostream>usingnamespacestd;intmain(){intk;for(inti=0;i<=33;++i) //枚舉母雞的數(shù)量for(intj=0;j<=50;++j)//枚舉公雞的數(shù)量{k=90-i-j;if(15*i+10*j+k*5==500){cout<<"母雞有"<<i<<"只,"<<"公雞有"<<j<<"只,"<<"小雞有"<<k<<"只"<<endl;}}return0;}第四節(jié)循環(huán)嵌套例4.14

利用for循環(huán)語(yǔ)句輸出圖4-1中的三角形。 * ** *** **** ***** 圖4-1#include<iostream>usingnamespacestd;intmain(){for(inti=1;i<=5;++i)//控制行數(shù){for(intj=1;j<=i;++j)//輸出一行中的*數(shù)cout<<"*";cout<<endl;//換行}return0;}第四節(jié)循環(huán)嵌套例4.15

求100-999中的水仙花數(shù)。若三位數(shù)ABC,ABC=A3+B3+C3,則稱(chēng)ABC為水仙花數(shù)。例如153,13+53+33=1+125+27=153,則153是水仙花數(shù)?!痉治觥扛鶕?jù)題意,采用三重循環(huán)來(lái)求解。由于循環(huán)次數(shù)一定,用for循環(huán)最為簡(jiǎn)單。程序如下:#include<iostream>#include<iomanip>//調(diào)用setw函數(shù)需注明使用該庫(kù)usingnamespacestd;intmain(){for(inta=1;a<=9;++a)for(intb=0;b<=9;++b)for(intc=0;c<=9;++c){if(a*a*a+b*b*b+c*c*c==a*100+b*10+c)cout<<setw(6)<<a*100+b*10+c;

//setw函數(shù)控制輸出場(chǎng)寬}return0;}運(yùn)行結(jié)果:153370371407第四節(jié)循環(huán)嵌套同時(shí)也可以采用一個(gè)for循環(huán)來(lái)求解,表面上看好像優(yōu)于三重循環(huán),實(shí)際上卻比上面的程序效率低,請(qǐng)同學(xué)們自己分析。程序如下:#include<iostream>#include<iomanip>usingnamespacestd;intmain(){inta,b,c;for(intm=100;m<=999;++m){a=m/100; //m的百位b=(m%100)/10; //m的十位c=m%10;//m的個(gè)位if(a*a*a+b*b*b+c*c*c==m)cout<<setw(6)<<m;}return0;}第四節(jié)循環(huán)嵌套例4.16

輸出100—200中所有的素?cái)?shù)。分析:我們可對(duì)100-200之間的每一個(gè)整數(shù)進(jìn)行判斷,若它是為素?cái)?shù),則輸出。而對(duì)于任意整數(shù)i,根據(jù)素?cái)?shù)定義,我們從2開(kāi)始,到sqrt(i),找i的第一個(gè)約數(shù),若找到第一個(gè)約數(shù),則i必然不是素?cái)?shù)。程序如下:#include<iostream>#include<cmath>//在DevC++中可調(diào)用數(shù)學(xué)函數(shù)庫(kù)cmathusingnamespacestd;intmain(){intx;for(inti=100;i<=200;++i){x=2;while(x<=floor(sqrt(i))&&(i%x!=0))//floor為取整函數(shù),需調(diào)用math.h庫(kù)x=x+1;//在枚舉的范圍內(nèi)并且沒(méi)有出現(xiàn)約數(shù)則繼續(xù)枚舉if(x>floor(sqrt(i)))cout<<i<<"\t";}return0;}第四節(jié)循環(huán)嵌套例4.17

輸出所有形如aabb的四位完全平方數(shù)(即前兩位數(shù)字相等,后兩位數(shù)字也相等)?!痉治觥糠种Ш脱h(huán)結(jié)合在一起時(shí)威力特別強(qiáng)大:我們枚舉所有可能的aabb,然后判斷它們是否為完全平方數(shù)。注意,a的范圍是1~9,b可以是0。主程序如下:for(a=1;a<=9;a++)for(b=0;b<=9;b++)if(aabb是完全平方數(shù))printf("%d\n",aabb);另一個(gè)思路是枚舉平方根x,參考程序如下:#include<cstdio>intmain(){ intn=0,hi,lo; for(intx=1;;++x)//可以直接從x=32開(kāi)始枚舉 { n=x*x; if(n<1000)continue; if(n>9999)break; hi=n/100; lo=n%100; if(hi/10==hi%10&&lo/10==lo%10)printf("%d\n",n); } return0;}第四節(jié)循環(huán)嵌套例4.18

階乘之和輸入n,計(jì)算S=1!+2!+3!+…+n!的末6位(不含前導(dǎo)0)。n<=106,n!表示前n個(gè)正整數(shù)之積。樣例輸入:10樣例輸出:37913【分析】這個(gè)任務(wù)并不難,引入累加變量S之后,核心算法只有一句話:for(i=1;i<=n;i++)S+=i!。不過(guò)C++語(yǔ)言并沒(méi)有階乘運(yùn)算符,所以這句話只是偽代碼,而不是真正的代碼。事實(shí)上,我們還需要一次循環(huán)來(lái)計(jì)算i!:for(j=1;j<=i;++j)factorial*=j;。代碼如下:#include<cstdio>intmain(){ intn,s=0; scanf("%d",&n); for(inti=1;i<=n;++i) { intfactorial=1; for(intj=1;j<=i;++j) factorial*=j; s+=factorial; } printf("%d\n",s%1000000); return0;}注意累乘器factorial(英文“階乘”的意思)定義在循環(huán)里面。換句話說(shuō),每執(zhí)行一次循環(huán)體,都要重新聲明一次factorial,并初始化為1(想一想,為什么不是0)。因

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論