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

下載本文檔

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

文檔簡介

1、第5章 設(shè)計循環(huán)結(jié)構(gòu)程序,Visual Basic 程序設(shè)計教程,Visual Basic程序設(shè)計教程,2,循環(huán)結(jié)構(gòu)又稱重復(fù)結(jié)構(gòu)。 本章主要介紹: 邏輯表達(dá)式 For/Next語句 Do/Loop語句 While/Wend語句 循環(huán)的嵌套使用。,Visual Basic程序設(shè)計教程,3,循環(huán)結(jié)構(gòu)是根據(jù)條件來決定某段代碼是否重復(fù)執(zhí)行。 循環(huán)結(jié)構(gòu)中一種常用的流程可以表示如圖: 條件滿足就執(zhí)行a塊程序段 然后再進(jìn)行條件判別 如果滿足條件,則繼續(xù)執(zhí)行a塊程序段 直到條件不滿足,才執(zhí)行a塊后面的程序。,5.1 概述,Visual Basic程序設(shè)計教程,4,其中的a程序塊段稱為循環(huán)體。 條件使用邏輯表達(dá)

2、式。 循環(huán)的另一種形式是把判斷條件放在循環(huán)體之后。,Visual Basic程序設(shè)計教程,5,循環(huán)結(jié)構(gòu)中有兩個基本問題需要考慮: (1)條件必須明確,能使循環(huán)過程正常結(jié)束 (2)循環(huán)體內(nèi),必要時可改變控制循環(huán)的條件 改變可能導(dǎo)致循環(huán)結(jié)束 改變也可能導(dǎo)致循環(huán)進(jìn)入無休止的狀態(tài)(死循環(huán))。,Visual Basic程序設(shè)計教程,6,循環(huán)有兩種類型: 計數(shù)控制 控制累計執(zhí)行循環(huán)體的次數(shù) 次數(shù)已到則結(jié)束循環(huán) 如1+2+3+100或98+96+94+4+2 事態(tài)控制 由某些條件決定循環(huán)結(jié)束。 如計算一系列正整數(shù)之和,遇負(fù)數(shù)停止循環(huán)。 也可以在一個循環(huán)過程中同時使用這兩種類型,Visual Basic程序設(shè)

3、計教程,7,【例5-1】 設(shè)計一個判斷素數(shù)的程序。若不是素數(shù),要求分解為a*b的形式 控件:1個文本框和1個命令按鈕 事件:命令按鈕的Click。 首先要了解什么是素數(shù)。 素數(shù)是指除了1和自身外,不能被其它整數(shù)整除的正整數(shù)。 判斷A是否為素數(shù)的基本方法是: 將A分別除以2、3、A-1,若都不能整除,則它為素數(shù)。 判斷A被i整除可以采用表達(dá)式: A Mod i = 0 或:A / i = A i 或:A / i = Int(A /i),Visual Basic程序設(shè)計教程,8,Option ExplicitPrivate Sub Command1_Click() Dim A As Long, i

4、 As Integer A存放要判斷的數(shù)。i取值為2A-1 Dim Flag As Boolean Flag作素數(shù)標(biāo)志,F(xiàn)alse時,表示不是素數(shù) A = Val(Text1.Text) Flag = True 先設(shè)A是素數(shù),當(dāng)A2或能被i整除時,再置為False If A 2 Then Flag = False A2,不是素數(shù) Else i = 2 Do While i = A-1 If A Mod i = 0 Then Flag = False: Exit Do A能被i整除,則不是素數(shù) i = i + 1 Loop End If If Flag Then MsgBox A 是素數(shù) Els

5、e 此時表示程序運(yùn)行是通過Exit For轉(zhuǎn)出來的 Print A; 不是素數(shù) End IfElse Print A; 不是素數(shù)End If,Visual Basic程序設(shè)計教程,25,5.5.1 Do/Loop語句 對只知道循環(huán)終止條件,可采用Do/Loop循環(huán) For/Next語句可改寫成Do/Loop循環(huán),反之則不然。 Do/Loop語句有五種表示形式,它們的格式為:,5.5 使用Do/Loop循環(huán)語句,Visual Basic程序設(shè)計教程,26,1執(zhí)行過程(1)對格式一和二,VB將先判斷條件,再執(zhí)行循環(huán)體。(2)對格式三和四,先執(zhí)行循環(huán)體,再判斷條件。循環(huán)體至少執(zhí)行一次。(3)對用Wh

6、ile的語句,當(dāng)條件滿足(True)時,執(zhí)行循環(huán)體。(4)對用Until的語句,當(dāng)條件不滿足(False)時,執(zhí)行循環(huán)體。(5)格式五的循環(huán)體內(nèi)必須存在Exit Do語句,否則會出現(xiàn)死循環(huán)。若程序運(yùn)行出現(xiàn)死循環(huán),同樣可用Ctrl Break暫停程序執(zhí)行。,Visual Basic程序設(shè)計教程,27,2關(guān)于格式(1)條件一般應(yīng)為關(guān)系或邏輯表達(dá)式,一般應(yīng)有變量。(2)Do和Loop必須成對出現(xiàn) 3關(guān)于循環(huán)體 循環(huán)體是一條或多條語句 可以包括分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。 可以寫成一行或多行。 循環(huán)體中應(yīng)有改變循環(huán)條件的語句,以避免出現(xiàn)死循環(huán)。,Visual Basic程序設(shè)計教程,28,5.5.1 Do/L

7、oop語句-編程序:求n!,Visual Basic程序設(shè)計教程,29,【例5-6】 在文本框中輸入兩個整數(shù),求它們的最大公約數(shù)和最小公倍數(shù)。 求最大公約數(shù)可用輾轉(zhuǎn)相除法。 該方法的基本思想是使用帶余除法: (1)A除以B,得余數(shù)為R1; (2)若R10,則B為最大公約數(shù)。 若R10,則B賦值給A,R1賦值給B,求余數(shù)R2; 若R20,則繼續(xù)以上步驟。,Visual Basic程序設(shè)計教程,30,(3)經(jīng)過有限(n+1)步后,Rn+1=0。 這時A和B的最大公約數(shù)是Rn。最小公倍數(shù)為A*B/Rn。 該算法循環(huán)次數(shù)未知,但循環(huán)條件已知:余數(shù)不為0。因此適用于Do/Loop語句編程。 其循環(huán)體為:

8、 把上一個B作為新的A,把上一個余數(shù)作為新的B,求出新余數(shù)。,Visual Basic程序設(shè)計教程,31,5.5.1 Do/Loop語句求最大公約數(shù)和最小公倍數(shù) Private Sub Command1_Click() Dim A As Long, B As Long, R As Long A = Val(Text1.Text) B = Val(Text2.Text) R = A Mod B Do While R 0 A = B: B = R R = A Mod B Loop MsgBox 最大公約數(shù)= Max, Min=; Min, Average=; Round(Average, 3) E

9、nd Sub 當(dāng)輸入23、41、35、61、12、1、7、-1后, 運(yùn)行結(jié)果:Max=61 Min=1 Average=25.714,Visual Basic程序設(shè)計教程,34,5.5.2 Exit Do語句 Exit Do是跳出Do/Loop循環(huán)的語句 跳出循環(huán)后,將執(zhí)行Loop語句后面的語句。 Exit Do語句同樣也往往與If語句合用 如求階乘的程序片斷為: N = Val(InputBox(n= ) Result = 1: i = 1 Do Result = Result * i i = i + 1 : If i N Then Exit Do Loop MsgBox N PiEnd S

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

11、行顯示5個,設(shè)置一個計數(shù)變量Count。 Private Sub Command1_Click() Dim A As Integer, i As Integer, Count As Integer Count = 0 素數(shù)個數(shù)計數(shù)變量 Print 以下數(shù)據(jù)為素數(shù): For A = 3 To 99 Step 2 For i = 2 To Int(Sqr(A) If A Mod i = 0 Then Exit For 被整除 Next i If i Int(Sqr(A) Then Count = Count + 1 : Print A, If Count Mod 5 = 0 Then Print

12、換行 End If Next AEnd Sub,Visual Basic程序設(shè)計教程,40,【例5-10】 在窗體上如圖圖案,它由“*”組成。分析: 上三角形中,第I行有I個,可使用循環(huán): For J = 1 To I : Print * ; : Next J 因每行起點(diǎn)不同,而且一行結(jié)束后要換行,所以在J循環(huán)的前后各有一Print。 這樣的行有7行,故外循環(huán)使I從1至7。 下三角形,操作過程與上三角相似,Visual Basic程序設(shè)計教程,41,5.7 如何實(shí)現(xiàn)多重循環(huán)控制-顯示圖案,Private Sub Command1_Click() Dim I As Integer, J As I

13、nteger Cls For I = 1 To 7 Print Spc(20 - I); 打印時空20-i格 For J = 1 To I Print * ; Next J Print 用于換行 Next I For I = 6 To 1 Step -1 Print Spc(20 - I); For J = 1 To I Print * ; Next J Print Next IEnd Sub,Visual Basic程序設(shè)計教程,42,5.8.1 遞推法 【例5-11】 有一個數(shù)列,前兩項(xiàng)是1、1,第三項(xiàng)是前二項(xiàng)之和,以后每一項(xiàng)都是前二項(xiàng)之和。即為:1、1、2、3、5、8、13、21,34。

14、 要求輸出該數(shù)列的前30項(xiàng)。 該數(shù)列又稱斐波那契數(shù)列。由“兔子問題”引發(fā) 這是一個遞推問題 所謂遞推關(guān)系是指一串函數(shù)之間的關(guān)系,它把每一個函數(shù)表示為前k個函數(shù)的線性組合。本題中k=2。 解決遞推問題必須具備兩個條件:(1) 有初始值,如F1=1、F2=1 (2) 存在遞推關(guān)系。如Fn=Fn-1+Fn-2(n2) 在程序中一般設(shè)置二或三個變量就可以了。 程序中用F1、F2、F3表示三個數(shù),在循環(huán)中,它們不斷用新值代替舊值。這種操作稱為迭代,,5.8 程序舉例,Visual Basic程序設(shè)計教程,43,程序代碼如下:Private Sub Command1_Click() Dim F1 As L

15、ong, F2 As Long, F3 As Long Dim i As Integer Cls F1 = 1: F2 = 1 Print F1, F2, For i = 3 To 30 F3 = F1 + F2 Print F3, If i Mod 4 = 0 Then Print 每行顯示4個數(shù) F1 = F2 : F2 = F3 用新值代替舊值 NextEnd Sub F1和F2始終作為前兩個數(shù),F(xiàn)3作為新產(chǎn)生的數(shù) 因第24個月兔子數(shù)已超過32767對,故變量聲明為Long,Visual Basic程序設(shè)計教程,44,5.8.2 窮舉法 【例5-12】 我國古代數(shù)學(xué)家在算經(jīng)中出了一道題:

16、“雞翁一,值錢五;雞母一,值錢三;雞雛三,值錢一。百錢買百雞,問雞翁、母、雛各幾何?” 即:當(dāng)時用100元錢買100只雞,其中公雞每只5元,母雞每只3元,小雞3只1元,問可買公雞、母雞、小雞各多少只? 設(shè)公雞X只,母雞Y只,小雞Z只,列出方程式: X+Y+Z=100 5X+3Y+Z/3=100 2個方程求3個未知數(shù),無法用代數(shù)方法求解 可將X、Y、Z分別為0100的每一種可能性都去試一下,如符合,則就是其中的一種購買方案。 列舉所有可能的方案,找出符合要求的,這樣的算法稱為窮舉法。,Visual Basic程序設(shè)計教程,45,可測試方案分別為: 0、0、0;0、0、1;0、0、100; 1、0

17、、0;1、0、1;1、0、100; ; 100、100、0;100、100、1;100、100、100 事實(shí)上當(dāng)X和Y確定時,Z可以用100-X-Y求得,因此可以把三重循環(huán)改為二重循環(huán)。 Private Sub Command1_Click()Dim X As Integer, Y As Integer, Z As IntegerPrint 公雞, 母雞, 小雞For X = 0 To 100 For Y = 0 To 100 Z = 100 - X - Y If 5 * X + 3 * Y + Z / 3 = 100 Then Print X, Y, Z Next YNext XEnd Su

18、b,Visual Basic程序設(shè)計教程,46,5.8.3 求水仙花數(shù) 【例5-13】 求數(shù)100999所有滿足:數(shù)X = 數(shù)X個位、十位、百位的立方和。如:153 = 1*1*1 + 5*5*5 + 3*3*3 說明:該程序主要是能分出個位、十位、百位 Private Sub Command1_Click() Dim i As Integer Dim N1 As Integer, N2 As Integer, N3 As Integer For i = 100 To 999 N1 = i 100 求百位 N2 = (i - N1 * 100) 10 求十位 N3 = i Mod 10 求個位

19、 If i = N1 3 + N2 3 + N3 3 Then 計算水仙花數(shù) Print i; =; N1; 3 +; N2; 3 +; N3; 3 End If NextEnd Sub,Visual Basic程序設(shè)計教程,47,5.8.4 驗(yàn)證哥德巴赫猜想 【例5-14】 輸入一個大于等于6的偶數(shù),將它分解為兩個素數(shù)之和。 對每一個大于等于6的偶數(shù)N都可表示成: N=3+(N-3)、N=4+(N-4)、N=5+(N-5)、N=(N-3)+3, 即A、B的范圍為3N-3 由于大于2的偶數(shù)不是素數(shù),處理前可以去掉這些數(shù), 由于3+(N-3)和(N-3)+3是一致的,故A的范圍為3N/2,B=N

20、-A。 程序設(shè)計思路: 當(dāng)輸入一個大于等于6的偶數(shù)N后, 讓A在3N/2的奇數(shù)范圍內(nèi)循環(huán), 若A是素數(shù),則求出B=N-A,再判斷B是否為素數(shù), 若B也是素數(shù),則輸出A和B。,Visual Basic程序設(shè)計教程,48,Private Sub Command1_Click() Dim A As Long, B As Long, N As Long, i As Integer, j As Integer Do 該循環(huán)是為了必須獲得一個大于等于6的偶數(shù) N = Val(InputBox(請輸入一個大于6的偶數(shù)) Print 輸入的數(shù)為 & N Loop While N / 2 N 2 Or N Sq

21、r(A) Then 若A是素數(shù) B = N - A 求出B For j = 2 To Sqr(B) 判斷B是否也為素數(shù) If B Mod j = 0 Then Exit For Next j If j Sqr(B) Then 若B也是素數(shù) Print N & = & A & + & B 輸出 Exit For 已驗(yàn)證,跳出A循環(huán) End If End If Next AEnd Sub,當(dāng)輸入2322時,顯示2322=11+2311,Visual Basic程序設(shè)計教程,49,5.8.5 數(shù)制轉(zhuǎn)換 【例5-15】 請編寫程序:將十進(jìn)制正整數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)或十六進(jìn)制數(shù); 控件: 兩個標(biāo)簽 兩個文本框 兩個單選按鈕 兩個命令按鈕 十進(jìn)制整數(shù)轉(zhuǎn)換成二進(jìn)制數(shù),采用除2取余法。 十進(jìn)制整數(shù)轉(zhuǎn)換成十六進(jìn)制數(shù),采用除16取余法 最后把這些余數(shù)以字符方式拼接起來。,Visual Basic程序設(shè)計教程,50,5.8.5 數(shù)制轉(zhuǎn)換-程序 Private Sub Command1_Click() 轉(zhuǎn)換Dim A As Long, B As String, R As Integer B存放轉(zhuǎn)換后結(jié)果,R放余數(shù)A = Val(Text1.Text): B = If Option1.Value

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論