第4章循環(huán)結(jié)構(gòu)(C++版)ppt課件_第1頁(yè)
第4章循環(huán)結(jié)構(gòu)(C++版)ppt課件_第2頁(yè)
第4章循環(huán)結(jié)構(gòu)(C++版)ppt課件_第3頁(yè)
第4章循環(huán)結(jié)構(gòu)(C++版)ppt課件_第4頁(yè)
第4章循環(huán)結(jié)構(gòu)(C++版)ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩29頁(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),第一節(jié)for語(yǔ)句,第二節(jié)while語(yǔ)句,第三節(jié)do-while語(yǔ)句,第四節(jié)循環(huán)嵌套,第一節(jié)for語(yǔ)句,一、語(yǔ)句格式格式1,說(shuō)明:語(yǔ)句1是for循環(huán)語(yǔ)句的循環(huá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)判斷控制變量是否滿足“條件表達(dá)式”,若滿足條件則執(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=1;-i)(3)控制變量從7變到77,增量為7for(i=7;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=99intmain()for(inti=2;iusingnamespacestd;intmain()intsum=0;for(inti=1;i=100;+i)sum+=i;coutx;功能:當(dāng)輸入的數(shù)據(jù)小于0時(shí),重復(fù)讀數(shù)據(jù)。,第二節(jié)while語(yǔ)句,例4.5求s=1+2+3+n,當(dāng)加到第幾項(xiàng)時(shí),s的值會(huì)超過(guò)1000?程序如下:#includeusingnamespacestd;intmain()intn=0,s=0;while(s=1000)+n;s+=n;coutmn;r=m%n;while(r!=0)/也可以使用while(r),c+中非0即真m=n;n=r;r=m%n;cout最大公約數(shù)=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ě)出程序如下:#includeusingnamespacestd;intmain()inti=0;floats=0;while(s5)/當(dāng)s的值還未超過(guò)5時(shí)+i;s+=1.0/i;couti;return0;,若采用for循環(huán)來(lái)寫(xiě),則如下所示:#includeusingnamespacestd;intmain()inti;floats=0;for(i=1;s5;+i)s+=1.0/i;coutab)couta+bmn;do/輾轉(zhuǎn)相除法r=m%n;m=_;n=_;while(_);coutthegreatestcommondivisoris:_;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)算就可以了。#includeusingnamespacestd;intmain()inta=1,t=0;do+t;a=(a*92)%100;while(t!=1992);coutaendl;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è)不滿足,yes的值就會(huì)為假(false),就繼續(xù)循環(huán)。#includeusingnamespacestd;intmain()boolyes;intx=0;doyes=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的值為真coutAll=x;return0;程序中對(duì)每個(gè)x值,都先給yes賦真值,只有在循環(huán)體各句對(duì)x進(jìn)行判斷時(shí),都得到“通過(guò)”(此處不賦假值)才能保持真值。,【上機(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以內(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)椋?includeusingnamespacestd;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!couts;return0;以上程序是一個(gè)for循環(huán)的嵌套。這種方法是比較容易想到的,但實(shí)際上對(duì)于求i!,我們可以根據(jù)求出的(i-1)!乘上i即可得到,而無(wú)需重新從1再累乘到i。,第四節(jié)循環(huán)嵌套,第四節(jié)循環(huán)嵌套,因此程序可改為:#includeusingnamespacestd;intmain()intt=1,s=0;for(inti=1;i=10;+i)t*=i;/t為上一個(gè)數(shù)的i-1的階乘值,再乘以i即為i!s+=t;/累加i!couts;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值,看是否滿足條件。這里i的值可以是0到33,j的值可以0到50。源程序如下:#includeusingnamespacestd;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,#includeusingnamespacestd;intmain()for(inti=1;i=5;+i)/控制行數(shù)for(intj=1;j=i;+j)/輸出一行中的*數(shù)cout*;coutendl;/換行return0;,第四節(jié)循環(huán)嵌套,例4.15求100999中的水仙花數(shù)。若三位數(shù)ABC,ABC=A3+B3+C3,則稱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#include/調(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)coutsetw(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#includeusingnamespacestd;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)coutsetw(6)m;return0;,第四節(jié)循環(huán)嵌套,例4.16輸出100200中所有的素?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#include/在DevC+中可調(diào)用數(shù)學(xué)函數(shù)庫(kù)cmathusingnamespacestd;intmain()intx;for(inti=100;ifloor(sqrt(i)coutit;return0;,第四節(jié)循環(huán)嵌套,例4.17輸出所有形如aabb的四位完全平方數(shù)(即前兩位數(shù)字相等,后兩位數(shù)字也相等)?!痉治觥糠种Ш脱h(huán)結(jié)合在一起時(shí)威力特別強(qiáng)大:我們枚舉所有可能的aabb,然后判斷它們是否為完全平方數(shù)。注意,a的范圍是19,b可以是0。主程序如下:for(a=1;aintmain()intn=0,hi,lo;for(intx=1;+x)/可以直接從x=32開(kāi)始枚舉n=x*x;if(n9999)break;hi=n/100;lo=n%100;if(hi/10=hi%10,第四節(jié)循環(huán)嵌套,例4.18階乘之和輸入n,計(jì)算S=1!+2!+3!+n!的末6位(不含前導(dǎo)0)。nintmain()intn,s=0;scanf(%d,注意累乘器factorial(英文“階乘”的意思)定義在循環(huán)里面。換句話說(shuō),每執(zhí)行一次循環(huán)體,都要重新聲明一次factorial,并初始化為1(想一想,為什么不是0)。因?yàn)橹灰?位,所以輸出時(shí)對(duì)106取模。,第四節(jié)循環(huán)嵌套,當(dāng)n=100時(shí),輸出-961703,直覺(jué)告訴我們:乘法溢出了。這個(gè)直覺(jué)很容易通過(guò)“輸出中間變量”法得到驗(yàn)證,但若要解決這個(gè)問(wèn)題,還需要一點(diǎn)數(shù)學(xué)知識(shí)。試一下n=106時(shí)輸出什么?更會(huì)溢出,但是重點(diǎn)不在這里。事實(shí)上,它的速度太慢!讓我們把程序改成“每步取?!钡男问?,然后加一個(gè)“計(jì)時(shí)器”,看看它到底有多慢。#include#includeintmain()constintMOD=1000000;intn,s=0;scanf(%d,/輸出時(shí)間包含鍵盤(pán)輸入的時(shí)間,建議用文件輸入輸出,后面章節(jié)介紹文件這個(gè)程序真正的特別之處在于計(jì)時(shí)函數(shù)clock()的使用。該函數(shù)返回程序目前為止運(yùn)行的時(shí)間。這樣,在程序結(jié)束之前調(diào)用它,便可獲得整個(gè)程序的運(yùn)行時(shí)間。這個(gè)時(shí)間除以常數(shù)CLOCKS_PER_SEC之后得到的值以“秒”為單位。輸入100000,按Enter鍵,系統(tǒng)遲遲不輸出答案,原因在于程序中重復(fù)進(jìn)行了多次階乘運(yùn)算,浪費(fèi)了大量時(shí)間,具體優(yōu)化方法請(qǐng)參考例4.12。,【上機(jī)練習(xí)4.4】,1、求s=11+22+33+.+NN2、求s=1+1/2!+1/3!+1/10!3、輸入一個(gè)整數(shù),若是素?cái)?shù),輸出“YES”,否則輸出“NO”4、任給一個(gè)自然數(shù)n,求出這個(gè)自然數(shù)不同因數(shù)的個(gè)數(shù)。如:n=6時(shí),因?yàn)?,2,3,6這四個(gè)數(shù)均是6的因數(shù),故輸出為total=4。5、輸入一列圖形(字母金字塔)aababc.abcyz6、把一張一元鈔票換成一分,二分和五分的硬幣,每種至少一枚。問(wèn)有哪幾種換法?7、百雞問(wèn)題:一只公雞值5元,一只母雞值3元,而1元可買(mǎi)3只小雞?,F(xiàn)有100元錢(qián),想買(mǎi)100只雞。問(wèn)可買(mǎi)公雞、母雞、小雞各幾只?8、某人想將手中的一張面值100元的人民幣換成10元、5元、

溫馨提示

  • 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)論