章循環(huán)結(jié)構(gòu)程序設(shè)計_第1頁
章循環(huán)結(jié)構(gòu)程序設(shè)計_第2頁
章循環(huán)結(jié)構(gòu)程序設(shè)計_第3頁
章循環(huán)結(jié)構(gòu)程序設(shè)計_第4頁
章循環(huán)結(jié)構(gòu)程序設(shè)計_第5頁
已閱讀5頁,還剩72頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1第6章

循環(huán)結(jié)構(gòu)程序設(shè)計本章要點:For...Next循環(huán)While...EndWhile循環(huán)Do...Loop循環(huán)循環(huán)的嵌套循環(huán)結(jié)構(gòu)程序應(yīng)用舉例2引言在程序中,如果需要重復(fù)相同或相似的操作步驟,則可以用循環(huán)結(jié)構(gòu)來實現(xiàn)。使用循環(huán)結(jié)構(gòu)的程序可以用很少的代碼來方便地處理大量的重復(fù)性操作。一個循環(huán)結(jié)構(gòu)應(yīng)由以下兩部分組成:循環(huán)體:規(guī)定要重復(fù)執(zhí)行的語句序列。循環(huán)體可以重復(fù)執(zhí)行0次到若干次。循環(huán)控制部分:用于規(guī)定循環(huán)的重復(fù)條件或重復(fù)次數(shù),同時確定循環(huán)范圍。要使計算機能夠正常執(zhí)行某循環(huán),需要由循環(huán)控制部分限制循環(huán)的執(zhí)行次數(shù),使循環(huán)在執(zhí)行有限次數(shù)后退出。3For循環(huán)變量=初值To終值[Step步長]語句組1[ExitFor][ContinueFor]語句組2Next[循環(huán)變量]6.1

For…Next循環(huán)結(jié)構(gòu)1.格式

2.功能:

如流程圖所示:初值循環(huán)變量循環(huán)變量值超過終值?執(zhí)行循環(huán)體循環(huán)變量+步長循環(huán)變量Next之后的語句TF43.說明1)循環(huán)變量、初值、終值和步長都應(yīng)為數(shù)值型。2)步長可正可負,也可以省略。如省略,則默認為1。步長>0時,則“初值”必須小于或等于“終值”,否則不能執(zhí)行循環(huán)體內(nèi)的語句;步長<0時,則“初值”必須大于或等于“終值”,否則不能執(zhí)行循環(huán)體內(nèi)的語句。3)ExitFor語句用于退出循環(huán)體,執(zhí)行Next語句之后的語句。4)ContinueFor語句用于將控制權(quán)立即轉(zhuǎn)移到For語句,繼續(xù)下一輪循環(huán)。5)Next語句中的“循環(huán)變量”必須與For語句中的“循環(huán)變量”一致,也可以省略。5例:判斷以下程序段的執(zhí)行結(jié)果。

DimiAsIntegerFori=5To1Step-1Debug.Print(i*i)NextiDebug.Print(i)例:判斷以下程序段的執(zhí)行結(jié)果。

DimK,XAsIntegerX=6ForK=1To10Step-2X=X+KNextKDebug.Print(Str(K)&Str(X))25169410166【例6-1】求1+2+3+…+N的值累加分析:累加器(變量)初始化

Sum=0重復(fù)執(zhí)行:

Sum=Sum+I

(I=1,2,…,N)

(循環(huán)體)F0

Sum,1

II>N?I+1

ISum+I

SumT輸入N輸出Sum流程圖:7設(shè)計界面:TextBox1Button1TextBox2運行界面:8PrivateSubButton1_Click(…)HandlesButton1.ClickDimN,IAsInteger,SumAsLongN=Val(TextBox1.Text)'輸入累加總項數(shù)

Sum=0

'設(shè)累加和初值為0

ForI=1ToN

Sum=Sum+I

'和值=和值+累加項

NextITextBox2.Text=Sum'輸出累加結(jié)果EndSub代碼設(shè)計:9思考:1.求12+22+32+42+…2.求13+33+53+…+(2n-1)33.求1-3+5-7+…+(-1)n+1(2n-1)4.求5.求10練習(xí):輸入N值,求1×2×3×…×N(即N!)累乘分析:

初始化:Fact=1

循環(huán)體:Fact=Fact×I(I=1,2,3…N)代碼設(shè)計:

DimN,IAsInteger,FactAsLongN=Val(TextBox1.Text)'輸入累乘總項數(shù)

Fact=1

'設(shè)乘積初值為1

ForI=1ToN

Fact=Fact*I

'乘積=乘積×累乘項

NextITextBox2.Text=Fact'輸出累乘結(jié)果11思考:1.求1×3×5×7……(共N項)。2.求:3.求:12【例6-2】生成斐波那契(Fibonacci)數(shù)列的前N項,N由用戶指定。斐波那契數(shù)列如下:

1,1,2,3,5,8,13,…

即從第三項起每一項是其前兩項之和。分析:生成斐波那契數(shù)列的方法如下:1)首先給出第一項、第二項的值1和1,本題中設(shè)A=1,B=1,輸出當(dāng)前A、B。2)求下一個數(shù)C,即C=A+B,輸出C,然后將B和C保存到變量A、B中,取代原來的A、B,即使用A=B,B=C實現(xiàn)。3)重復(fù)步驟2),直到輸出所有的數(shù)。13流程圖:F1

A,1

BI>N-2?I+1

IA+B

CT輸出A,BB

A,C

B1

I輸出C輸入N14設(shè)計界面:運行界面:TextBox115代碼設(shè)計:PrivateSubTextBox1_Click(…)HandlesTextBox1.ClickDimA,B,C,NAsIntegerN=Val(InputBox("請輸入項數(shù)"))

A=1:B=1

TextBox1.Text=Str(A)&""&Str(B)&""

ForI=1ToN-2

C=A+BTextBox1.Text=TextBox1.Text&Str(C)&""

A=B

B=C

NextIEndSubTextBox1.AppendText(Str(C)&"")16思考:1.在文本框中顯示1到500之間所有能被3整除的數(shù),每行顯示10個數(shù)。2.在文本框中顯示1到指定N之間所有能被3和7同時整除的數(shù)。3.在文本框中顯示00~3600之間的正弦和余弦值,每隔20求一組值。17練習(xí):如何分析For循環(huán)程序的執(zhí)行結(jié)果1.下列程序段的執(zhí)行結(jié)果為【】。

DimI,GI=0ForG=10To19Step3I=I+1NextGDebug.Print(Str(I)&Str(G))G?I10>19?21313>19?11616>19?31919>19?42222>19?G+步長182.下列程序段的執(zhí)行結(jié)果為【】。

DimI,X,Y,FX=1Y=1ForI=1To3F=X+YX=YY=FDebug.Print(F)NextII?FXY打印1>3?2>3?2122I=23233I=3I=43>3?53554>3?I+步長:196.2While...EndWhile循環(huán)結(jié)構(gòu)問題:求12+22+32+42+…大于某數(shù)N的最小值,N由用戶指定。特點:已知循環(huán)條件、未知循環(huán)次數(shù),用While...EndWhile循環(huán)結(jié)構(gòu)實現(xiàn)較方便1.格式:

While條件

[語句組]

[ExitWhile]

[語句組]

EndWhile2.功能:

F條件?語句組T20【例6-3】求12+22+32+…大于某數(shù)N的最小值,N由用戶指定。界面設(shè)計:TextBox1TextBox2Button121代碼設(shè)計:本題是一個累加問題,但累加次數(shù)未知,難以用For循環(huán)來實現(xiàn),但可以很方便地使用While...EndWhile循環(huán)實現(xiàn)。設(shè):累加和S=0,累加項I=0循環(huán)條件為S<=N循環(huán)體:I=I+1

S=S+I^2當(dāng)S大于N時退出循環(huán),這時S的值即為大于N的最小值22流程圖:TS≤NI+1

IF輸入NS+I2

S0

S,0

I輸出S23PrivateSubButton1_Click(…)HandlesButton1.ClickDimI,N,SAsIntegerN=Val(TextBox1.Text)'輸入NI=0:S=0'初始化,用S保存累加和

WhileS<=N'當(dāng)S小于或等于N時進入循環(huán)體

I=I+1S=S+I*I'累加

EndWhileTextBox2.Text=S'輸出和值SEndSub代碼設(shè)計:思考:求12+22+32+42+…小于某數(shù)N的最大值246.3Do…Loop循環(huán)結(jié)構(gòu)1.格式格式一:

DoWhile

條件[語句組1]

[ExitDo][語句組2]Loop格式二:

DoUntil

條件[語句組1]

[ExitDo][語句組2]Loop條件?循環(huán)體TFF條件?循環(huán)體T2.功能25格式:格式三:Do[語句組1]

[ExitDo][語句組2]LoopWhile

條件格式四:Do[語句組1]

[ExitDo][語句組2]LoopUntil

條件條件?循環(huán)體TF功能:條件?循環(huán)體TF263.說明1)四種格式的區(qū)別:使用“While條件”與使用“Until條件”的區(qū)別?!皸l件”寫在Do之后與寫在Loop之后的區(qū)別。格式一、二:循環(huán)可能一次都不執(zhí)行。格式三、四:至少要先執(zhí)行一次循環(huán)體。2)ExitDo語句用于退出循環(huán)體,執(zhí)行Loop語句之后的語句。3)可以在Do語句和Loop語句之后都沒有條件,這時循環(huán)體內(nèi)必須有ExitDo語句:

Do[語句組1]…ExitDo[語句組2]Loop27【例6-4】求直至最后一項的值≤10-4為止。分析:用Sum表示累加和,初值:Sum=0

重復(fù):Sum=Sum+Term用Term表示每一項,則Term=1/(N*N)用N表示1,3,5,7,…初值:N=1

重復(fù):N=N+2歸納:初始化:N=1,Sum=0重復(fù):Term=1/(N*N),Sum=Sum+Term,N=N+2循環(huán)終止條件:Term<=0.000128流程圖:FTerm<10-41/(N*N)

TermTSum+Term

Sum1

N,0

Sum輸出SumN+2

N29界面設(shè)計:TextBox1Button130代碼設(shè)計:PrivateSubButton1_Click(…)HandlesButton1.Click

DimNAsInteger,Term,SumAsDoubleN=1:Sum=0DoTerm=1/(N*N)Sum=Sum+TermN=N+2

LoopUntilTerm<=0.0001TextBox1.Text=sumEndSub31練習(xí):如何分析Do循環(huán)程序的執(zhí)行結(jié)果。1.下列程序段的執(zhí)行結(jié)果為【】。

DimN,JN=0J=1

DoUntilN>2N=N+1J=J+N*(N+1)

LoopDebug.Print(Str(N)&Str(J))N>2?NJ打印:321FF1329F321T322.下列程序段的執(zhí)行結(jié)果為【】。DimA,BA=0B=1DoA=A+BB=B+1LoopWhileA<10Debug.Print(Str(A)&Str(B))A:B:A<10?打印:1053123T64T10T5F336.4循環(huán)的嵌套如果在一個循環(huán)體內(nèi)又包含一個完整的循環(huán),則稱為循環(huán)的嵌套。根據(jù)嵌套的循環(huán)層數(shù)不同,又可以有二層循環(huán)、三層循環(huán)等。多層循環(huán)的執(zhí)行過程是,外層循環(huán)每執(zhí)行一次,內(nèi)層循環(huán)就要從頭開始執(zhí)行一輪,如:

ForI=1To9

ForJ=1To9Debug.Print(Str(I)&Str(J))

NextJNextI34【例6-5】打印九九乘法表。設(shè)計界面:運行界面1:運行界面2:TextBox135代碼設(shè)計1:PrivateSubTextBox1_Click(…)HandlesTextBox1.ClickDimI,JAsInteger,SAsString

ForI=1To9

ForJ=1To9S=Format(I)&"×"&Format(J)&"="&_LSet(I*J,4)TextBox1.Text=TextBox1.Text&S

NextJTextBox1.Text=TextBox1.Text&vbCrLf'換行

NextIEndSub36代碼設(shè)計2:PrivateSubTextBox1_Click(…)HandlesTextBox1.ClickDimI,JAsInteger,SAsString

ForI=1To9

ForJ=1ToIS=Format(I)&"×"&Format(J)&"="&_LSet(I*J,4)TextBox1.Text=TextBox1.Text&S

NextJTextBox1.Text=TextBox1.Text&vbCrLf'換行

NextIEndSub37使用嵌套循環(huán)需要注意:1)各種類型的循環(huán)結(jié)構(gòu)也可以互相嵌套。嵌套時,內(nèi)層循環(huán)必須完全嵌套在外層循環(huán)之內(nèi)。例如,以下的嵌套都是允許的:ForI=1To10...ForJ=1To20...NextJ...NextIDo...ForJ=1To20...NextJ...LoopWhileI<=1038ForI=1To10...WhileJ<=20...EndWhile...NextIDo...DoWhileJ<=20...Loop...LoopUntilI>1039ForI=1To10...ForJ=1To20...NextI...NextJDo...ForJ=1To20...LoopWhileI<=10...NextJ以下嵌套是不允許的,因為內(nèi)層循環(huán)沒有完全嵌套在外層循環(huán)之內(nèi)。402)當(dāng)多層For...Next循環(huán)的Next語句連續(xù)出現(xiàn)時,Next語句可以合并成一條。例如,以下兩個三重循環(huán)的寫法是完全等價的。寫法一:ForI=1To10...ForJ=1To20...ForK=1To30...NextKNextJNextI寫法二:ForI=1To10...ForJ=1To20...ForK=1To30...NextK,J,I注意先后次序413)在多層循環(huán)中如果用ExitDo或ExitFor退出循環(huán),要注意只能退出ExitDo或ExitFor語句所對應(yīng)的循環(huán)。例如:F=1ForI=1To10

ForJ=1To10F=F*I*JIfF>1000ThenExitFor

NextJDebug.Print(F)F=1NextI42I=1:F=1DoWhileI<=10

ForJ=1To10F=F*I*JIfF>1000ThenExitDo

NextJDebug.Print(F)F=1I=I+1LoopDebug.Print(F)434)嵌套循環(huán)應(yīng)選用不同的循環(huán)變量;并列的循環(huán)可以使用相同的循環(huán)變量,例如:ForI=...ForJ=......NextJ...ForJ=......NextJNextI44【例6-6】編程序求:

1+(1+2)+(1+2+3)+…+(1+2+3+…+N)

N由用戶輸入。界面設(shè)計:TextBox1TextBox2Button145代碼設(shè)計:Sum1=0ForJ=1ToISum1=Sum1+JNextJPrivateSubButton1_Click(…)HandlesButton1.ClickDimN,I,JAsInteger,Sum1,SumAsLongN=Val(TextBox1.Text)Sum=0

ForI=1ToN求:Sum1=1+2+…+ISum=Sum+Sum1NextI

TextBox2.Text=SumEndSub46練習(xí):分析多重循環(huán)程序的執(zhí)行結(jié)果1.DimA,B,I,JA=0:B=0ForI=-1To-2Step-1

ForJ=1To2B=B+1

NextJA=A+1NextIDebug.Print(Str(A)&Str(B)&Str(I)&Str(J))答案:24-33I:J:B:-11223-21A:1…I+步長:-2J+步長:32472.DimX,YAsShort

ForX=5To1Step-1

ForY=1To6-XTextBox1.AppendText("*")

NextYTextBox1.AppendText(vbCrLf)

NextX答案:***************486.5循環(huán)結(jié)構(gòu)程序應(yīng)用舉例【例6-7】用梯形法求函數(shù)f(x)=x2+12x+4在[a,b]區(qū)間的定積分。分析:定積分的幾何意義:…梯形法:…49界面設(shè)計:TextBox1TextBox2TextBox3TextBox4Button150代碼設(shè)計:PrivateSubButton1_Click(…)HandlesButton1.ClickDimA,B,H,X,F1,F2,AreaI,AreaAsSingleDimN,IAsIntegerA=Val(TextBox1.Text)B=Val(TextBox2.Text)N=Val(TextBox3.Text)H=(B-A)/NX=AArea=0'Area用于存放梯形面積的累加和

F1=X^2+12*X+4'F1為梯形的上底51

ForI=1ToNX=X+HF2=X^2+12*X+4'F2為梯形的下底

AreaI=(F1+F2)*H/2'計算第I個小梯形面積

Area=Area+AreaI

'累加梯形面積

F1=F2'把當(dāng)前梯形的下底作為下一個梯形的上底

NextITextBox4.Text=AreaEndSub52【例6-8】已知某鄉(xiāng)鎮(zhèn)企業(yè)現(xiàn)有產(chǎn)值和年增長率,試問多少年后,該企業(yè)的產(chǎn)值可以翻一番。翻一番后實際產(chǎn)值是多少?分析:

P—現(xiàn)有產(chǎn)值

R—年增長率

Y—年數(shù)

V—增長后的產(chǎn)值,初始值為P累乘:V=P(1+R)(1+R)…退出循環(huán)條件V>=2P53流程圖:輸出年份Y輸出產(chǎn)值VF產(chǎn)值V≥2PP

V,0

YTV(1+R)

VY+1

Y輸入現(xiàn)有產(chǎn)值P輸入年增長率R54界面設(shè)計:TextBox1TextBox2TextBox3Button1TextBox455代碼設(shè)計:PrivateSubButton1_Click(…)HandlesButton1.ClickDimP,R,VAsSingle,YAsIntegerP=Val(TextBox1.Text)'輸入現(xiàn)有產(chǎn)值

R=Val(TextBox2.Text)/100'輸入年增長率

V=P:Y=0

DoUntilV>=2*PY=Y+1V=V*(1+R)

LoopTextBox3.Text=YTextBox4.Text=Format(V,"0.00")EndSub56【例6-9】給出兩個正整數(shù),求它們的最大公約數(shù)和最小公倍數(shù)。分析:求最大公約數(shù)可以用輾轉(zhuǎn)相除法實現(xiàn):1)以M作被除數(shù),N作除數(shù),求余數(shù)R。2)如果R不為零,則將除數(shù)N做為新的被除數(shù)M,將余數(shù)R做為新的除數(shù)N,再進行相除,得到新的余數(shù)R。3)如果R仍不等于0,則重復(fù)上述步驟(2)。如果R為零,則這時的除數(shù)N就是最大公約數(shù)。最小公倍數(shù)為兩個數(shù)的積除以它們的最大公約數(shù)。57求最大公約數(shù)的算法流程圖:輸出最大公約數(shù)NFR≠0求M除以N的余數(shù)RT求M除以N的余數(shù)RN

M,R

N輸入M,N58界面設(shè)計:TextBox1TextBox2TextBox3TextBox4Button1Button2將Button2的Enabled屬性設(shè)置為False59求最大公約數(shù)代碼如下:DimNAsInteger'定義變量N為模塊級變量PrivateSubButton1_Click(…)HandlesButton1.ClickDimM,RAsIntegerM=Val(TextBox1.Text)N=Val(TextBox2.Text)R=MModN'求M除以N的余數(shù)R

DoWhile

R<>0

M=N'將除數(shù)N做為新的被除數(shù)MN=R'將余數(shù)R做為新的除數(shù)NR=MModN'求M除以N的余數(shù)R

LoopTextBox3.Text=NButton2.Enabled=TrueEndSub60求最小公倍數(shù)代碼如下:PrivateSubButton2_Click(…)HandlesButton2.ClickTextBox4.Text=Val(TextBox1.Text)*_

Val(TextBox2.Text)/NEndSub61【例6-10】輸入某個正整數(shù)N(N≥3),判斷N是否是素數(shù)。分析:用N除以2到之間的全部整數(shù),如果都除不盡,則N是素數(shù),否則N不是素數(shù)。算法:首先設(shè)K=,然后用循環(huán)實現(xiàn)用N除以2~K之間的任一整數(shù)I,當(dāng)遇到整除時,退出循環(huán),這時的I值必然小于或等于K;如果N不能被2~K之間的任一整數(shù)I整除,則在完成最后一次循環(huán)之后,I的值為K+1。因此在退出循環(huán)之后可以根據(jù)I的值來決定N是否是素數(shù)。如果I<=K,則說明N是素數(shù),否則N不是素數(shù)。62流程圖:輸出“不是素數(shù)”

K輸入N2

II≤K?N能被I整除?I≤K?輸出“是素數(shù)”

I+1

ITFTFTF63界面設(shè)計:TextBox1TextBox2Button164代碼設(shè)計:ImportsSystem.MathPublicClassForm1PrivateSubButton1_Click(…)HandlesButton1.ClickDimN,K,IAsIntegerN=Val(TextBox1.Text):K=Int(Sqrt(N)):I=2

DoWhileI<=K

IfNModI<>0ThenI=I+1'不能整除,I值累加1

Else

ExitDo

'整除,退出循環(huán)

EndIf

LoopIfI<=KThenTextBox2.Text="不是素數(shù)"Else_TextBox2.Text="是素數(shù)"EndSubEndClass65*【例6-11】用牛頓迭代法求方程在x=π附近的一個實根,精度要求:|xn+1-xn|≤10-4分析:牛頓迭代法的幾何解釋:牛頓迭代公式:xk+1=xk-f(xk)/f'(xk)66界面設(shè)計:PictureBox1Button167代碼設(shè)計:ImportsSystem.MathPublicClassForm1PrivateSubButton1_Click(…)HandlesButton1.ClickDimX,X1,FX,FX1AsSingle,NAsIntegerX=PIN=0'N用于保存迭代次數(shù)

DoFX=Sin(X)-X/2'求f(x)FX1=Cos(X)-0.5'求f'(x)X1=X'保存當(dāng)前根

X=X-FX/FX1

'求下一個根

N=N+1

LoopUntilAbs(X1-X)<0.0001

MsgBox("方程的根為:"&Format(X,"0.0000")_&vbCrLf&"迭代次數(shù)為:"&Str(N))EndSubEndClass68【例6-12】利用以下公式求π的近似值:要求精度為|Sn+1-Sn|<ε分析:這是一個累乘問題,首先找出乘積各項的規(guī)律。設(shè)第i項的分母為Pi,第i+1項的分母為Pi+1,則設(shè)前i項的積為Si,前i+1項的積為Si+1,則:69界面設(shè)計:TextBox1Button1TextBox270代碼設(shè)計:PrivateSubButton1_Click(…)HandlesButton1.Click

'Eps表示精度ε,S用于保存累乘結(jié)果DimEps,P,S,S1AsDoubleEps=Val(TextBox1.Text)P=0S=2

DoP=Math.Sqrt(2+P)S1=S

S=S*2/P

LoopUntilMath.Abs(S1-S)<EpsTextBox2.Text=SEndSub71【例6-

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論