第5章-設(shè)計(jì)循環(huán)結(jié)構(gòu)程序_第1頁(yè)
第5章-設(shè)計(jì)循環(huán)結(jié)構(gòu)程序_第2頁(yè)
第5章-設(shè)計(jì)循環(huán)結(jié)構(gòu)程序_第3頁(yè)
第5章-設(shè)計(jì)循環(huán)結(jié)構(gòu)程序_第4頁(yè)
第5章-設(shè)計(jì)循環(huán)結(jié)構(gòu)程序_第5頁(yè)
已閱讀5頁(yè),還剩46頁(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)介

第5章設(shè)計(jì)循環(huán)結(jié)構(gòu)程序1循環(huán)結(jié)構(gòu)又稱重復(fù)結(jié)構(gòu)。本章主要介紹:邏輯表達(dá)式For/Next語(yǔ)句Do/Loop語(yǔ)句While/Wend語(yǔ)句循環(huán)的嵌套使用。2循環(huán)結(jié)構(gòu)是根據(jù)條件來(lái)決定某段代碼是否重復(fù)執(zhí)行。循環(huán)結(jié)構(gòu)中一種常用的流程可以表示如圖:條件滿足就執(zhí)行a塊程序段然后再進(jìn)行條件判別如果滿足條件,則繼續(xù)執(zhí)行a塊程序段直到條件不滿足,才執(zhí)行a塊后面的程序。5.1概述3其中的a程序塊段稱為循環(huán)體。條件使用邏輯表達(dá)式。循環(huán)的另一種形式是把判斷條件放在循環(huán)體之后。4循環(huán)結(jié)構(gòu)中有兩個(gè)基本問(wèn)題需要考慮:(1)條件必須明確,能使循環(huán)過(guò)程正常結(jié)束(2)循環(huán)體內(nèi),必要時(shí)可改變控制循環(huán)的條件改變可能導(dǎo)致循環(huán)結(jié)束改變也可能導(dǎo)致循環(huán)進(jìn)入無(wú)休止的狀態(tài)(死循環(huán))。5循環(huán)有兩種類型:計(jì)數(shù)控制控制累計(jì)執(zhí)行循環(huán)體的次數(shù)次數(shù)已到則結(jié)束循環(huán)如1+2+3+…+100或98+96+94+…+4+2事態(tài)控制由某些條件決定循環(huán)結(jié)束。如計(jì)算一系列正整數(shù)之和,遇負(fù)數(shù)停止循環(huán)。也可以在一個(gè)循環(huán)過(guò)程中同時(shí)使用這兩種類型6【例5-1】設(shè)計(jì)一個(gè)判斷素?cái)?shù)的程序。若不是素?cái)?shù),要求分解為a*b的形式控件:1個(gè)文本框和1個(gè)命令按鈕事件:命令按鈕的Click。首先要了解什么是素?cái)?shù)。素?cái)?shù)是指除了1和自身外,不能被其它整數(shù)整除的正整數(shù)。判斷A是否為素?cái)?shù)的基本方法是:將A分別除以2、3、……、A-1,若都不能整除,則它為素?cái)?shù)。判斷A被i整除可以采用表達(dá)式:AModi=0或:A/i=A\i或:A/i=Int(A/i)5.2判斷素?cái)?shù)7OptionExplicit

PrivateSubCommand1_Click()

DimAAsLong,iAsInteger'A存放要判斷的數(shù)。i取值為2~A-1

DimFlagAsBoolean'Flag作素?cái)?shù)標(biāo)志,F(xiàn)alse時(shí),表示不是素?cái)?shù)

A=Val(Text1.Text)

Flag=True'先設(shè)A是素?cái)?shù),當(dāng)A<2或能被i整除時(shí),再置為False

IfA<2Then

Flag=False'A<2,不是素?cái)?shù)

Else

i=2

DoWhilei<=A-1

IfAModi=0ThenFlag=False:ExitDo'A能被i整除,則不是素?cái)?shù)

i=i+1

Loop

EndIf

IfFlagThen

MsgBoxA&"是素?cái)?shù)",,"信息"

Else'A表示成兩數(shù)之積

MsgBoxA&"不是素?cái)?shù)"&Chr(13)&A&"="&i&"*"&A/i,,"信息"

EndIf

EndSub5.2判斷素?cái)?shù)----程序8說(shuō)明:程序中,也可以不設(shè)標(biāo)志變量,在最后判斷i是否超過(guò)終值A(chǔ)-1,若超過(guò)終值則表示直到循環(huán)完成,還沒(méi)遇到一個(gè)能被整除的整數(shù),即它是素?cái)?shù);否則它就不是素?cái)?shù)。當(dāng)A能被其中一個(gè)i整除時(shí),A肯定不是素?cái)?shù),所以沒(méi)有必要再測(cè)試下一個(gè)i,因此使用ExitDo退出循環(huán)。在使用ExitDo退出循環(huán)的時(shí)候,沒(méi)有改變i的值,故A能被該i整除,即A可以表示成A=i*(A/i)。事實(shí)上只要判斷A能否被2、3、……、Sqr(A)整除即可。9邏輯運(yùn)算使用邏輯運(yùn)算符VB提供了多個(gè)邏輯運(yùn)算符,有:非(Not)、與(And)、或(Or)異或(Xor)、等價(jià)(Eqv)、蘊(yùn)含(Imp)。1.基本格式Not為一元運(yùn)算符,其它均為二元運(yùn)算符。格式:

Not表達(dá)式表達(dá)式1邏輯運(yùn)算符表達(dá)式2(除Not外)一個(gè)邏輯表達(dá)式可用一個(gè)或多個(gè)邏輯運(yùn)算符。如:A>0AndB>0AndC>02.?dāng)?shù)據(jù)類型邏輯運(yùn)算的數(shù)據(jù)及結(jié)果均為布爾類型。5.3進(jìn)行邏輯運(yùn)算103.運(yùn)算方式

4.優(yōu)先級(jí)115.邏輯表達(dá)式舉例(1)設(shè)變量Name1的值為“王小華”、變量Addr的值為“上海”,則

表達(dá)式:Name1=“王小華”O(jiān)rAddr="杭州"值:True表達(dá)式:Name1=“王小華”AndAddr="滬"值:False(2)寫(xiě)出數(shù)學(xué)表達(dá)式0<x<10對(duì)應(yīng)的VB表達(dá)式。

VB表達(dá)式應(yīng)為:x>0Andx<1012(3)描述Name1的值不等于“王小華”的表達(dá)式。該表達(dá)式可寫(xiě)為:

Name1<>"王小華"或:NotName1="王小華"(4)X=3、Y=4、Z=5,求表達(dá)式X>2XorY<0OrZ>X+1的值。

執(zhí)行次序如圖所示,最終值為False。13閏年的條件是:能被4整除,但不能被100整除;或能被400整除。設(shè)變量Y存放年份,則該邏輯表達(dá)式應(yīng)為:YMod4=0AndYMod100<>0OrYMod400=0【例5-2】設(shè)計(jì)程序,要求對(duì)文本框的年份判斷是否為閏年,并在標(biāo)簽中顯示相應(yīng)的信息。14程序代碼如下:

OptionExplicit

PrivateSubCommand1_Click()

DimYAsInteger

IfCommand1.Caption="閏年判斷"Then'閏年判斷

Y=Val(Text1.Text)

IfYMod4=0AndYMod100<>0OrYMod400=0Then

Label1.Caption="是閏年"

Else

Label1.Caption="不是閏年"

EndIf

Command1.Caption="清除"

Else'清除

Text1.Text="":Label1.Caption="":Command1.Caption="閏年判斷"

Text1.SetFocus

EndIf

EndSub5.3進(jìn)行邏輯運(yùn)算-閏年判斷155.4.1For/Next語(yǔ)句使用For/Next語(yǔ)句可以方便地實(shí)現(xiàn)計(jì)數(shù)循環(huán)For/Next由For語(yǔ)句、循環(huán)體、Next語(yǔ)句組成。格式:

For循環(huán)控制變量=初值To終值[Step步長(zhǎng)]

[循環(huán)體]

Next[循環(huán)控制變量]5.4使用For/Next循環(huán)語(yǔ)句161.執(zhí)行過(guò)程

(1)將初值送至循環(huán)控制變量

(2)判斷循環(huán)控制變量的值是否超過(guò)終值:若未超過(guò)終值,執(zhí)行步驟(3);超過(guò)終值執(zhí)行步驟(5)。

(3)執(zhí)行循環(huán)體。

(4)遇到Next,使循環(huán)控制變量加上步長(zhǎng)再送入循環(huán)控制變量中,轉(zhuǎn)步驟(2)。

(5)循環(huán)終止,執(zhí)行Next語(yǔ)句后面的語(yǔ)句。

注意:其中“超過(guò)終值”不一定是大于終值。172.關(guān)于格式省略“Step步長(zhǎng)”則默認(rèn)為“Step1”。初值、終值、步長(zhǎng)分別控制循環(huán)變量的起始值、終止值和增量。For和Next必須成對(duì)出現(xiàn)。Next后若有循環(huán)控制變量,則必須與For中的相同。建議Next后不要省略循環(huán)控制變量,以有利于閱讀程序183.關(guān)于循環(huán)體循環(huán)體是一條或多條語(yǔ)句可以包括分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)可以寫(xiě)成一行或多行。循環(huán)體中可以引用循環(huán)控制變量,也可以不引用。但不要隨便修改循環(huán)控制變量的值,以防引起循環(huán)混亂。4.強(qiáng)行終止死循環(huán)使用Ctrl+Break可以暫停程序運(yùn)行再使用VB工具欄上的“結(jié)束”按鈕終止程序執(zhí)行。19【例5-3】輸入10個(gè)非負(fù)整數(shù),求所有偶數(shù)之和。

假定存放和的變量為Sum,先讓Sum=0。然后可采用以下方法:

將第1個(gè)數(shù)送入A,如果A是偶數(shù),則讓Sum加上A,否則Sum不變。

……

將第10個(gè)數(shù)送入A,如果A是偶數(shù),則讓Sum增加A,否則Sum不變。

最終得到的Sum就是和。由此可見(jiàn),每步都做著同樣的工作,即:

將第i個(gè)數(shù)送入A,如果A是偶數(shù),則讓Sum增加A,否則Sum不變。

20

OptionExplicit

PrivateSubCommand1_Click()'輸入10個(gè)非負(fù)整數(shù),求偶數(shù)和。

DimSumAsLong,iAsInteger

DimAAsInteger

Sum=0'賦初值,注意位置

Fori=1To10

A=Val(InputBox("請(qǐng)輸入第"&i&"個(gè)數(shù):","輸入非負(fù)整數(shù)"))

IfAMod2=0ThenSum=Sum+A

Nexti

MsgBox"Sum="&Sum

EndSub

一個(gè)好的程序,應(yīng)該為自己用于累加、累乘等的變量賦初值。21【例5-4】求表達(dá)式值。x、n由鍵盤(pán)輸入。這是一個(gè)求和的例子。它由n項(xiàng)構(gòu)成,能表示成Sum=Sum+Item的形式第i項(xiàng)等于第i-1項(xiàng)乘以X/(i+1),即Item=Item*X/(i+1)故循環(huán)體可由Item=Item*X/(i+1)和Sum=Sum+Item構(gòu)成。初值問(wèn)題:Sum初值為0,Item初值應(yīng)為1。

為防止溢出,Item和Sum聲明為雙精度型。

程序運(yùn)行結(jié)果:

當(dāng)X=6,N分別為1、2、3時(shí),其和分別為3、9、18。22PrivateSubCommand1_Click()

DimSumAsDouble,ItemAsDouble,iAsInteger

DimNAsInteger,XAsDouble

N=Val(InputBox("請(qǐng)輸入項(xiàng)數(shù):"))

X=Val(InputBox("X="))

Sum=0:Item=1

Fori=1ToN

Item=Item*X/(i+1)

Sum=Sum+Item

Nexti

MsgBox"x/2!+x^2/3!+...="&Sum,,"信息"

EndSub235.4.2ExitFor語(yǔ)句循環(huán)中,中途退出循環(huán),稱為跳出循環(huán)。跳出For/Next循環(huán)的語(yǔ)句就是ExitFor。跳出循環(huán)后,將執(zhí)行Next語(yǔ)句后面的語(yǔ)句。ExitFor語(yǔ)句一般往往與If語(yǔ)句合用。如:

IfA>=2Then'素?cái)?shù)判斷

Fori=2ToInt(Sqr(A))

IfAModi=0ThenExitFor'A能被i整除,不是素?cái)?shù),退出For循環(huán)

Nexti

Ifi>Int(Sqr(A))Then'表示A不能被2~Int(Sqr(A))中的數(shù)整除

PrintA;"是素?cái)?shù)"

Else'此時(shí)表示程序運(yùn)行是通過(guò)ExitFor轉(zhuǎn)出來(lái)的

PrintA;"不是素?cái)?shù)"

EndIf

Else

PrintA;"不是素?cái)?shù)"

EndIf245.5.1Do/Loop語(yǔ)句對(duì)只知道循環(huán)終止條件,可采用Do/Loop循環(huán)For/Next語(yǔ)句可改寫(xiě)成Do/Loop循環(huán),反之則不然。Do/Loop語(yǔ)句有五種表示形式,它們的格式為:

5.5使用Do/Loop循環(huán)語(yǔ)句251.執(zhí)行過(guò)程

(1)對(duì)格式一和二,VB將先判斷條件,再執(zhí)行循環(huán)體。

(2)對(duì)格式三和四,先執(zhí)行循環(huán)體,再判斷條件。循環(huán)體至少執(zhí)行一次。

(3)對(duì)用While的語(yǔ)句,當(dāng)條件滿足(True)時(shí),執(zhí)行循環(huán)體。

(4)對(duì)用Until的語(yǔ)句,當(dāng)條件不滿足(False)時(shí),執(zhí)行循環(huán)體。

(5)格式五的循環(huán)體內(nèi)必須存在ExitDo語(yǔ)句,否則會(huì)出現(xiàn)死循環(huán)。

若程序運(yùn)行出現(xiàn)死循環(huán),同樣可用CtrlBreak暫停程序執(zhí)行。262.關(guān)于格式

(1)條件一般應(yīng)為關(guān)系或邏輯表達(dá)式,一般應(yīng)有變量。

(2)Do和Loop必須成對(duì)出現(xiàn)3.關(guān)于循環(huán)體循環(huán)體是一條或多條語(yǔ)句可以包括分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)??梢詫?xiě)成一行或多行。循環(huán)體中應(yīng)有改變循環(huán)條件的語(yǔ)句,以避免出現(xiàn)死循環(huán)。27PrivateSubCommand1_Click()

DimNAsInteger,ResultAsDouble

DimiAsInteger

N=Val(InputBox("n="))

Result=1

Fori=1ToN

Result=Result*i

Nexti

MsgBoxN&"!="&Result

EndSub0PrivateSubCommand2_Click()

DimNAsInteger,ResultAsDouble

DimiAsInteger

N=Val(InputBox("n="))

Result=1:i=1

DoWhilei<=N

Result=Result*i

i=i+1

Loop

MsgBoxN&"!="&Result

EndSubPrivateSubCommand3_Click()

DimNAsInteger,ResultAsDouble

DimiAsInteger

N=Val(InputBox("n="))

Result=1:i=1

DoUntili>N

Result=Result*i

i=i+1

Loop

MsgBoxN&"!="&Result

EndSubPrivateSubCommand4_Click()

DimNAsInteger,ResultAsDouble

DimiAsInteger

N=Val(InputBox("n="))

Result=1:i=1

Do

Result=Result*i

i=i+1

LoopWhilei<=N

MsgBoxN&“!=”&Result

EndSub5.5.1Do/Loop語(yǔ)句-編程序:求n!28【例5-6】在文本框中輸入兩個(gè)整數(shù),求它們的最大公約數(shù)和最小公倍數(shù)。求最大公約數(shù)可用輾轉(zhuǎn)相除法。該方法的基本思想是使用帶余除法:(1)A除以B,得余數(shù)為R1;(2)若R1=0,則B為最大公約數(shù)。

若R1≠0,則B賦值給A,R1賦值給B,求余數(shù)R2;

若R2≠0,則繼續(xù)以上步驟。29(3)經(jīng)過(guò)有限(n+1)步后,Rn+1=0。這時(shí)A和B的最大公約數(shù)是Rn。最小公倍數(shù)為A*B/Rn。該算法循環(huán)次數(shù)未知,但循環(huán)條件已知:余數(shù)不為0。因此適用于Do/Loop語(yǔ)句編程。其循環(huán)體為:把上一個(gè)B作為新的A,把上一個(gè)余數(shù)作為新的B,求出新余數(shù)。305.5.1Do/Loop語(yǔ)句—求最大公約數(shù)和最小公倍數(shù)PrivateSubCommand1_Click()

DimAAsLong,BAsLong,RAsLong

A=Val(Text1.Text)

B=Val(Text2.Text)

R=AModB

DoWhileR<>0

A=B:B=R

R=AModB

Loop

MsgBox"最大公約數(shù)="&B

MsgBox"最小公倍數(shù)="&Val(Text1.Text)*Val(Text2.Text)/BEndSub

如果s在兩個(gè)文本框中分別輸入351和675,單擊命令按鈕后,得出最大公約數(shù)為27,最小公倍數(shù)為8775。31【例5-7】編程:輸入一批非負(fù)數(shù),當(dāng)輸入負(fù)數(shù)時(shí),表示輸入結(jié)束。求這批非負(fù)數(shù)據(jù)的最大值、最小值和平均值。由于輸入的個(gè)數(shù)不確定,故應(yīng)采用Do/Loop語(yǔ)句。本題關(guān)鍵在于如何設(shè)置最大值、最小值的初值。32PrivateSubCommand1_Click()

DimXAsInteger,MinAsInteger,MaxAsInteger

DimNAsInteger,AverageAsSingle'N作為計(jì)數(shù),存放項(xiàng)數(shù)

X=Val(InputBox("X=")):Max=X:Min=X'最大最小值初值

N=0:Average=0

DoWhileX>=0

IfX>MaxThenMax=X

IfX<MinThenMin=X

N=N+1

Average=Average+X'Average暫存數(shù)據(jù)和,最后再除N

X=Val(InputBox("X="))'從第2個(gè)開(kāi)始輸入

Loop

IfN<>0ThenAverage=Average/N

Print"Max=";Max,"Min=";Min,"Average=";Round(Average,3)EndSub當(dāng)輸入23、41、35、61、12、1、7、-1后,運(yùn)行結(jié)果:Max=61Min=1Average=25.714335.5.2ExitDo語(yǔ)句ExitDo是跳出Do/Loop循環(huán)的語(yǔ)句跳出循環(huán)后,將執(zhí)行Loop語(yǔ)句后面的語(yǔ)句。ExitDo語(yǔ)句同樣也往往與If語(yǔ)句合用如求階乘的程序片斷為:

N=Val(InputBox("n="))

Result=1:i=1

Do

Result=Result*i

i=i+1:Ifi>NThenExitDo

Loop

MsgBoxN&"!="&Result34While/Wend語(yǔ)句的作用與DoWhile條件/循環(huán)體/Loop相同。格式:

While條件

[循環(huán)體]

Wend執(zhí)行過(guò)程:先計(jì)算條件的值,若條件的值為T(mén)rue,執(zhí)行循環(huán)體,否則執(zhí)行Wend語(yǔ)句后面的語(yǔ)句。While和Wend必須成對(duì)出現(xiàn)循環(huán)體中必須要有設(shè)法改變循環(huán)條件的語(yǔ)句While/Wend語(yǔ)句沒(méi)有對(duì)應(yīng)的跳出語(yǔ)句。5.6使用While/Wend循環(huán)語(yǔ)句35【例5-8】編程:求π的值。有關(guān)π的級(jí)數(shù)公式為:要求逐項(xiàng)累加,直到最后一項(xiàng)<0.0000001時(shí),求π。因沒(méi)有確定項(xiàng)數(shù),故可用Do/Loop或While/Wend可設(shè)一個(gè)變量Sign作為各項(xiàng)的符號(hào),在循環(huán)中讓Sign=-Sign,可以達(dá)到一次正、一次負(fù)的目的。為達(dá)到較為精確的值,變量大多聲明為雙精度型36本例中變量Pi、Sum、Item、N、Precision分別存放π、累計(jì)和、項(xiàng)值、項(xiàng)中分母值和精度。PrivateSubCommand1_Click()

DimPiAsDouble,SumAsDouble,ItemAsDouble

DimNAsLong,PrecisionAsDouble,SignAsInteger

N=1:Item=1/N:Sum=0:Sign=1

Precision=Val(InputBox(“請(qǐng)輸入精度:”,“輸入數(shù)據(jù)”,“0.0000001”))

WhileItem>=Precision

Sum=Sum+Sign*Item

N=N+2

Item=1/N

Sign=-Sign

Wend

Pi=4*Sum

Print“π=”;Pi

EndSub

在單擊命令按鈕后,若精度用缺省值0.0000001,則顯示=3.1415924535898。37循環(huán)結(jié)構(gòu)中可以嵌套循環(huán)當(dāng)循環(huán)體中包含了循環(huán)時(shí),稱為循環(huán)嵌套,或稱為多重循環(huán)。循環(huán)體中包含的循環(huán)語(yǔ)句可以與外循環(huán)相同,也可以不同。嵌套一層稱為二重循環(huán)。多重循環(huán)中遇到ExitFor(Do),只能跳出當(dāng)前一層循環(huán)。5.7如何實(shí)現(xiàn)多重循環(huán)控制38【例5-9】窗體上顯示3~100之間的所有素?cái)?shù)。每行顯示5個(gè)。前面的例子中判斷A是否為素?cái)?shù)是一重循環(huán)。現(xiàn)讓A分別等于3、5、7、……、97、99就可以了。為了每行顯示5個(gè),設(shè)置一個(gè)計(jì)數(shù)變量Count。PrivateSubCommand1_Click()

DimAAsInteger,iAsInteger,CountAsInteger

Count=0'素?cái)?shù)個(gè)數(shù)計(jì)數(shù)變量

Print"以下數(shù)據(jù)為素?cái)?shù):"

ForA=3To99Step2

Fori=2ToInt(Sqr(A))

IfAModi=0ThenExitFor'被整除

Nexti

Ifi>Int(Sqr(A))Then

Count=Count+1:PrintA,

IfCountMod5=0ThenPrint'換行

EndIf

NextA

EndSub39【例5-10】

在窗體上如圖圖案,它由“*”組成。分析:上三角形中,第I行有I個(gè),可使用循環(huán):ForJ=1ToI:Print"*";:NextJ因每行起點(diǎn)不同,而且一行結(jié)束后要換行,所以在J循環(huán)的前后各有一Print。這樣的行有7行,故外循環(huán)使I從1至7。下三角形,操作過(guò)程與上三角相似40PrivateSubCommand1_Click()

DimIAsInteger,JAsInteger

Cls

ForI=1To7

PrintSpc(20-I);'打印時(shí)空20-i格

ForJ=1ToI

Print"*";

NextJ

Print'用于換行

NextI

ForI=6To1Step-1

PrintSpc(20-I);

ForJ=1ToI

Print"*";

NextJ

Print

NextI

EndSub

5.7如何實(shí)現(xiàn)多重循環(huán)控制-顯示圖案415.8.1遞推法【例5-11】

有一個(gè)數(shù)列,前兩項(xiàng)是1、1,第三項(xiàng)是前二項(xiàng)之和,以后每一項(xiàng)都是前二項(xiàng)之和。即為:1、1、2、3、5、8、13、21,34……。要求輸出該數(shù)列的前30項(xiàng)。該數(shù)列又稱斐波那契數(shù)列。由“兔子問(wèn)題”引發(fā)這是一個(gè)遞推問(wèn)題所謂遞推關(guān)系是指一串函數(shù)之間的關(guān)系,它把每一個(gè)函數(shù)表示為前k個(gè)函數(shù)的線性組合。本題中k=2。解決遞推問(wèn)題必須具備兩個(gè)條件:

(1)

有初始值,如F1=1、F2=1

(2)

存在遞推關(guān)系。如Fn=Fn-1+Fn-2(n>2)在程序中一般設(shè)置二或三個(gè)變量就可以了。程序中用F1、F2、F3表示三個(gè)數(shù),在循環(huán)中,它們不斷用新值代替舊值。這種操作稱為迭代,5.8程序舉例42程序代碼如下:

PrivateSubCommand1_Click()

DimF1AsLong,F2AsLong,F3AsLong

DimiAsInteger

Cls

F1=1:F2=1

PrintF1,F2,

Fori=3To30

F3=F1+F2

PrintF3,

IfiMod4=0ThenPrint'每行顯示4個(gè)數(shù)

F1=F2:F2=F3'用新值代替舊值

Next

EndSubF1和F2始終作為前兩個(gè)數(shù),F(xiàn)3作為新產(chǎn)生的數(shù)因第24個(gè)月兔子數(shù)已超過(guò)32767對(duì),故變量聲明為L(zhǎng)ong435.8.2窮舉法【例5-12】

我國(guó)古代數(shù)學(xué)家在《算經(jīng)》中出了一道題:“雞翁一,值錢(qián)五;雞母一,值錢(qián)三;雞雛三,值錢(qián)一。百錢(qián)買(mǎi)百雞,問(wèn)雞翁、母、雛各幾何?”即:當(dāng)時(shí)用100元錢(qián)買(mǎi)100只雞,其中公雞每只5元,母雞每只3元,小雞3只1元,問(wèn)可買(mǎi)公雞、母雞、小雞各多少只?設(shè)公雞X只,母雞Y只,小雞Z只,列出方程式:

X+Y+Z=100

5X+3Y+Z/3=1002個(gè)方程求3個(gè)未知數(shù),無(wú)法用代數(shù)方法求解可將X、Y、Z分別為0~100的每一種可能性都去試一下,如符合,則就是其中的一種購(gòu)買(mǎi)方案。列舉所有可能的方案,找出符合要求的,這樣的算法稱為窮舉法。44可測(cè)試方案分別為: 0、0、0;0、0、1;……;0、0、100;1、0、0;1、0、1;……;1、0、100;……;100、100、0;100、100、1;……;100、100、100事實(shí)上當(dāng)X和Y確定時(shí),Z可以用100-X-Y求得,因此可以把三重循環(huán)改為二重循環(huán)。

PrivateSubCommand1_Click()

DimXAsInteger,YAsInteger,ZAsInteger

Print"公雞","母雞","小雞"

ForX=0To100

ForY=0To100

Z=100-X-Y

If5*X+3*Y+Z/3=100ThenPrintX,Y,Z

NextY

NextX

EndSub事實(shí)上X和Y的循環(huán)可分別為0到20和0到33455.8.3求水仙花數(shù)【例5-13】

求數(shù)100~999所有滿足:數(shù)X=數(shù)X個(gè)位、十位、百位的立方和。如:153=1*1*1+5*5*5+3*3*3說(shuō)明:該程序主要是能分出個(gè)位、十位、百位PrivateSubCommand1_Click()

DimiAsInteger

DimN1AsInteger,N2AsInteger,N3AsInteger

Fori=100To999

N1=i\100 '求百位

N2=(i-N1*100)\10 '求十位

N3=iMod10 '求個(gè)位

Ifi=N1^3+N2^3+N3^3Then '計(jì)算水仙花數(shù)

Printi;"=";N1;"^3+";N2;"^3+";N3;"^3"

EndIf

Next

EndSub

465.8.4驗(yàn)證哥德巴赫猜想【例5-14】

輸入一個(gè)大于等于6的偶數(shù),將它分解為兩個(gè)素?cái)?shù)之和。對(duì)每一個(gè)大于等于6的偶數(shù)N都可表示成:N=3+(N-3)、N=4+(N-4)、N=5+(N-5)、……、N=(N-3)+3,即A、B的范圍為3~N-3由于大于2的偶數(shù)不是素?cái)?shù),處理前可以去掉這些數(shù),由于3+(N-3)和(N-3)+3是一致的,故A的范圍為3~N/2,B=N-A。程序設(shè)計(jì)思路:當(dāng)輸入一個(gè)大于等于6的偶數(shù)N后,讓A在3~N/2的奇數(shù)范圍內(nèi)循環(huán),若A是素?cái)?shù),則求出B=N-A,再判斷B是否為素?cái)?shù),若B也是素?cái)?shù),則輸出A和B。47PrivateSubCommand1_Click()

DimAAsLong,BAsLong,NAsLong,iAsInteger,jAsInteger

Do'該循環(huán)是為了必須獲得一個(gè)大于等于6的偶數(shù)

N=Val(InputBox("請(qǐng)輸入一個(gè)大于6的偶數(shù)"))

Print"輸入的數(shù)為"&N

LoopWhileN/2<>N\2OrN<6

ForA=3ToN/2Step2'步長(zhǎng)為2是只判斷偶數(shù)

Fori=2ToSqr(A)'判斷A是否為素?cái)?shù)

IfAModi=0ThenExitFor

Nexti

Ifi>Sqr(A)Then'若A是素?cái)?shù)

B=N-A'求出B

Forj=2ToSqr(B)'判斷B是否也為素?cái)?shù)

IfBModj=0ThenExitFor

Nextj

Ifj>Sqr(B)Then'若B也是素?cái)?shù)

Pri

溫馨提示

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