




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
會(huì)計(jì)學(xué)1c循環(huán)結(jié)構(gòu)解析實(shí)用第一節(jié)for語句一、語句格式格式1說明:語句1是for循環(huán)語句的循環(huán)體,它將在滿足條件的情況下被重復(fù)執(zhí)行。格式2說明:循環(huán)體部分由多個(gè)語句構(gòu)成,應(yīng)由一對花括號括起來,構(gòu)成一個(gè)語句塊的形式程序風(fēng)格提示:寫for循環(huán)語句時(shí),循環(huán)體的語句相對于for縮進(jìn)兩格。第1頁/共30頁第一節(jié)for語句二、語句執(zhí)行過程for語句的執(zhí)行過程可由以下4步來描述。(1)執(zhí)行“控制變量初始化語句”,使控制變量獲得一個(gè)初值。(2)判斷控制變量是否滿足“條件表達(dá)式”,若滿足條件則執(zhí)行一遍循環(huán)體,否則結(jié)束整個(gè)for語句,繼續(xù)執(zhí)行for循環(huán)下面的句子。(3)根據(jù)增量表達(dá)式,計(jì)算出控制變量所得到的新值(4)自動(dòng)轉(zhuǎn)到第(2)步。第2頁/共30頁第一節(jié)for語句三、語句格式舉例(1)將控制變量從1變到100,增量為1for(i=1;i<=100;++i)(2)將控制變量從100變到1,增量為-1
(3)控制變量從7變到77,增量為7(4)控制變量從20變到2,增量為-2(5)按所示數(shù)列改變控制變量值:99、88、77、66、55、44、33、22、11、0,增量為-11(6)控制變量i和j共同進(jìn)行循環(huán)控制,i從1變到99,j從2變到100,增量均為2。
for(i=100;i>=1;--i)for(i=7;i<=77;i+=7)
即for(i=7;i<=77;i=i+7)
for(inti=20;i>=2;i-=2)for(intj=99;j>=0;j-=11)for(inti=1,j=2;i<=99&&j<=100;i+=2,j+=2)需要說明的是:可以在for循環(huán)“控制變量初始化語句”中聲明變量(如上面最后3個(gè)例子),這些變量只在for循環(huán)結(jié)構(gòu)中有效,離開了該for結(jié)構(gòu),變量就無效了。
第3頁/共30頁第一節(jié)for語句利用for循環(huán),計(jì)算輸出1+2+…+100的和#include<iostream>usingnamespacestd;intmain(){intsum=0;for(inti=1;i<=100;++i)sum+=i;
cout<<sum;return0;}第4頁/共30頁第一節(jié)for語句例4.1
輸出1—100之間所有偶數(shù)。#include<iostream>usingnamespacestd;intmain(){for(inti=2;i<=100;i+=2)cout<<i<<"";
return0;}第5頁/共30頁第一節(jié)for語句例4.3
利用for循環(huán)計(jì)算n!的值。分析:n?。?*2*3…*n#include<cstdio>usingnamespacestd;intmain(){longlongs;//Noip2010開始C++語言中l(wèi)onglong類型允許使用
intn;//n不能定義為longlong,否則for語句死循環(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;}【說明】:當(dāng)n>=13時(shí),s值超過了int類型的表示范圍。還有一種比int更大的類型,稱為longlong,它的表示范圍是-263~263-1,比-1019~1019略窄,而我們一直使用的int范圍是-231~231-1,只比-2*109~2*109略寬。輸入輸出longlong也可以借助于printf和scanf語句,但對應(yīng)的占位符卻是和平臺(tái)與編譯器相關(guān)的:在linux中,gcc很統(tǒng)一的用%lld;在windows中,MinGW的gcc和VC6都需要用%I64d;但VS2008卻是用%lld。第6頁/共30頁第一節(jié)for語句例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;}說明:
我們也可以在for循環(huán)初始化或增值表達(dá)式部分中放一條以上的語句,中間用逗號隔開。第7頁/共30頁【上機(jī)練習(xí)4.1】1、求12+22+32+…+1002。2、計(jì)算100之內(nèi)所有的偶數(shù)之和。3、求s=1+1/2+1/3+…+1/100。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,……第8頁/共30頁第二節(jié)while語句一、語句格式格式1說明:循環(huán)體部分由多個(gè)語句構(gòu)成,應(yīng)由一對花括號括起來,構(gòu)成一個(gè)語句塊的形式。程序風(fēng)格提示:寫while循環(huán)語句時(shí),循環(huán)體的語句相對于while縮進(jìn)兩格。說明:語句1是while循環(huán)語句的循環(huán)體,它將在滿足條件的情況下被重復(fù)執(zhí)行。格式2第9頁/共30頁第二節(jié)while語句二、語句執(zhí)行過程(1)計(jì)算作為循環(huán)控制條件表達(dá)式的值,得到邏輯真或假,假定用M表示。(2)若M為真,則執(zhí)行了一遍循環(huán)體,否則離開循環(huán),結(jié)束整個(gè)while語句的執(zhí)行。(3)循環(huán)體的所有語句執(zhí)行結(jié)束后,自動(dòng)轉(zhuǎn)向第(1)步執(zhí)行。三、格式舉例(1)i=0;while(i<10)++i;功能:當(dāng)i的值小于10,重復(fù)執(zhí)行++i語句(2)cin>>x;while(x<0)cin>>x;功能:當(dāng)輸入的數(shù)據(jù)小于0時(shí),重復(fù)讀數(shù)據(jù)。第10頁/共30頁第二節(jié)while語句例4.5求s=1+2+3……+n,當(dāng)加到第幾項(xiàng)時(shí),s的值會(huì)超過1000?程序如下:#include<iostream>usingnamespacestd;intmain(){intn=0,s=0;while(s<=1000){++n;s+=n;}cout<<n;system(“pause");return0;}第11頁/共30頁第二節(jié)while語句例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;
system(“pause");
return0;}第12頁/共30頁第二節(jié)while語句例4.7
編一程序求滿足不等式1+1/2+1/3…+1/n>=5的最小n值。分析:此題不等式的左邊是一個(gè)求和的算式,該和式中的數(shù)據(jù)項(xiàng)個(gè)數(shù)是未知的,也正是要求出的。對于和式中的每個(gè)數(shù)據(jù)項(xiàng),對應(yīng)的通式為1/i,i=1,2,…n。所以可采用循環(huán)累加的方法來計(jì)算出它的值。設(shè)循環(huán)變量為i,它應(yīng)從1開始取值,每次增加1,直到和式的值不小于5為止,此時(shí)的i值就是所求的n。設(shè)累加變量為s,在循環(huán)體內(nèi)把1/i的值累加到s上。根據(jù)以上分析,采用while循環(huán)編寫出程序如下:#include<iostream>usingnamespacestd;intmain(){inti=0;floats=0;while(s<5)//當(dāng)s的值還未超過5時(shí){++i;s+=1.0/i;}cout<<i;system(“pause");return0;}若采用for循環(huán)來寫,則如下所示:#include<iostream>usingnamespacestd;intmain(){inti;floats=0;for(i=1;s<5;++i)s+=1.0/i;cout<<i-1;system(“pause");
return0;}第13頁/共30頁【上機(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由鍵盤輸入。2、輸入任意的自然數(shù)A,
B,
求A
,
B的最小公倍數(shù)。3、小球從100高處自由落下,著地后又彈回高度的一半再落下。求第20次著地時(shí),
小球共通過多少路程?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ù)的格式輸出。第14頁/共30頁第三節(jié)do-while語句一、語句格式格式1說明:語句1是do-while的循環(huán)體。格式2說明:循環(huán)體部分由多個(gè)語句構(gòu)成,應(yīng)由一對花括號括起來,構(gòu)成一個(gè)語句塊的形式。二、語句執(zhí)行過程(1)執(zhí)行一遍循環(huán)體。(2)求出作為循環(huán)條件的“條件表達(dá)式”的值,若為邏輯值真則自動(dòng)轉(zhuǎn)向第(1)步,否則結(jié)束do循環(huán)的執(zhí)行過程,繼續(xù)執(zhí)行其后面的語句。在do語句的循環(huán)體中也可以使用break語句,用它來非正常結(jié)束循環(huán)的執(zhí)行。第15頁/共30頁第三節(jié)do-while語句三、實(shí)例例4.9
對于求兩個(gè)正整數(shù)m,n的最大公約數(shù)可以用do—while實(shí)現(xiàn)。代碼如下,請完善:#include<iostream>usingnamespacestd;intmain(){intm,n,r;cin>>m>>n;do//輾轉(zhuǎn)相除法{r=m%n;m=____;n=_____;}while(_______);cout<<"thegreatestcommondivisoris:"<<______;return0;}第16頁/共30頁第三節(jié)do-while語句例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;}第17頁/共30頁第三節(jié)do-while語句例4.11校體操隊(duì)到操場集合,排成每行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)。#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;}程序中對每個(gè)x值,都先給yes賦真值,只有在循環(huán)體各句對x進(jìn)行判斷時(shí),都得到“通過”(此處不賦假值)才能保持真值。第18頁/共30頁【上機(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由鍵盤輸入。2、讀一組實(shí)數(shù),遇零終止,打印其中正、負(fù)數(shù)的個(gè)數(shù)及各自的總和。3、用輾轉(zhuǎn)相除法求兩個(gè)自然數(shù)的最大公約數(shù)。4、找出被2、3、5除時(shí)余數(shù)為1的最小的十個(gè)數(shù)。5、將一根長為369cm的鋼管截成長為69cm和39cm兩種規(guī)格的短料。在這兩種規(guī)格的短料至少各截一根的前提下,如何截才能余料最少?第19頁/共30頁第四節(jié)循環(huán)嵌套例4.12求S=1!+2!+3!+....+10!分析:這個(gè)問題是求10以內(nèi)自然數(shù)的階乘之和,可以用for循環(huán)來實(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),通過10次的循環(huán)可以求出1!,2!,…10!,并不斷累加起來,求出s。而求t=i!,又可以用一個(gè)for循環(huán)來實(shí)現(xiàn):t=1;for(j=1;j<=i;++j)t*=j;第20頁/共30頁
因此整個(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í)際上對于求i!,我們可以根據(jù)求出的(i-1)!乘上i即可得到,而無需重新從1再累乘到i。第四節(jié)循環(huán)嵌套第21頁/共30頁第四節(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ū)別更明顯。第22頁/共30頁第四節(jié)循環(huán)嵌套例4.13一個(gè)炊事員上街采購,用500元錢買了90只雞,其中母雞一只15元,公雞一只10元,小雞一只5元,正好把錢買完。問母雞,公雞,小雞各買了多少只?【分析】設(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。源程序如下:#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;}第23頁/共30頁第四節(jié)循環(huán)嵌套例4.14
利用for循環(huán)語句輸出圖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;}第24頁/共30頁第四節(jié)循環(huán)嵌套例4.15
求100-999中的水仙花數(shù)。若三位數(shù)ABC,ABC=A3+B3+C3,則稱ABC為水仙花數(shù)。例如153,13+53+33=1+125+27=153,則153是水仙花數(shù)?!痉治觥扛鶕?jù)題意,采用三重循環(huán)來求解。由于循環(huán)次數(shù)一定,用for循環(huán)最為簡單。程序如下:#include<iostream>#include<iomanip>//調(diào)用setw函數(shù)需注明使用該庫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ù)控制輸出場寬}return0;}運(yùn)行結(jié)果:153370371407第25頁/共30頁第四節(jié)循環(huán)嵌套同時(shí)也可以采用一個(gè)for循環(huán)來求解,表面上看好像優(yōu)于三重循環(huán),實(shí)際上卻比上面的程序效率低,請同學(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;}第26頁/共30頁第四節(jié)循環(huán)嵌套例4.16
輸出100—200中所有的素?cái)?shù)。分析:我們可對100-200之間的每一個(gè)整數(shù)進(jìn)行判斷,若它是為素?cái)?shù),則輸出。而對于任意整數(shù)i,根據(jù)素?cái)?shù)定義,我們從2開始,到sqrt(i),找i的第一個(gè)約數(shù),若找到第一個(gè)約數(shù),則i必然不是素?cái)?shù)。程序如下:#include<iostream>#include<cmath>//在DevC++中可調(diào)用數(shù)學(xué)函數(shù)庫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庫x=x+1;//在枚舉的范圍內(nèi)并且沒有出現(xiàn)約數(shù)則繼續(xù)枚舉if(x>floor(sqrt(i)))cout<<i<<"\t";}return0;}第27頁/共30頁第四節(jié)循環(huán)嵌套例4.17
輸出所有形如aabb的四位完全平方數(shù)(即前兩位數(shù)字相等,后兩位數(shù)字也相等)?!痉治觥糠种Ш脱h(huán)結(jié)合在一起時(shí)威力特別強(qiáng)大:我們枚舉所有可能的aabb,然后判斷它們是否為完全平方數(shù)。注意,a的范圍是1~9,b可以是0
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度房地產(chǎn)項(xiàng)目土地出讓合同范本
- 2025年度二手車分期交易車輛交易資金監(jiān)管服務(wù)合同
- 二零二五年度定制珠寶首飾設(shè)計(jì)制作合同
- 二零二五年度小區(qū)物業(yè)設(shè)施智能化升級改造合同
- 2025年度綠色建筑裝修公司技術(shù)專利轉(zhuǎn)讓合同樣本
- 2025年度房產(chǎn)抵押貸款合同期限超借款期限專項(xiàng)協(xié)議
- 2025年度國際貿(mào)易報(bào)關(guān)代理委托合同
- 2025年度科技園區(qū)租賃合同格式范文含技術(shù)創(chuàng)新支持
- 2025年度創(chuàng)意辦公空間租賃合同書
- 2025年度人工智能技術(shù)研發(fā)與應(yīng)用合同補(bǔ)充協(xié)議
- 外部干擾排查流程及案例
- GB/T 42828.3-2023鹽堿地改良通用技術(shù)第3部分:生物改良
- (完整版)人教版三年級上冊100道口算題
- 2023年河北廊坊市三河市金創(chuàng)產(chǎn)業(yè)投資有限公司招聘筆試題庫含答案解析
- 灌注樁鋼筋籠自動(dòng)計(jì)算套用表格
- 人人都是產(chǎn)品經(jīng)理2 0:寫給泛產(chǎn)品經(jīng)理
- 印章管理辦法(公安部)
- 人教版高一數(shù)學(xué)上冊期末考試試卷及答案
- 振動(dòng)振動(dòng)測試基礎(chǔ)知識(shí)培訓(xùn)課件
- 教學(xué)設(shè)計(jì) 分?jǐn)?shù)的再認(rèn)識(shí) 省賽一等獎(jiǎng)
- sbl-ep16高低壓開關(guān)柜培訓(xùn)中法文kyn6140.5安裝使用說明書
評論
0/150
提交評論