第五章選擇分支與循環(huán)嵌套_第1頁
第五章選擇分支與循環(huán)嵌套_第2頁
第五章選擇分支與循環(huán)嵌套_第3頁
第五章選擇分支與循環(huán)嵌套_第4頁
第五章選擇分支與循環(huán)嵌套_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第五章 選擇分支與循環(huán)嵌套5.1 分支結(jié)構(gòu)與分支結(jié)構(gòu)語句 (2個例子)5.2 循環(huán)結(jié)構(gòu)與循環(huán)結(jié)構(gòu)語句(6個例子)5.3 程序?qū)嵗?0個例子)習題練習 (11個例子)5.1 分支結(jié)構(gòu)與分支結(jié)構(gòu)語句5.1.1 IF-Then-Else-End If 結(jié)構(gòu)語句結(jié)構(gòu)一般如下:If e Then A組語句 Else B組語句 End Ife 為判決條件,可以是邏輯變量,關系表達式或邏輯表達式。當A組語句僅有一個時,可簡化為 :If e Then < 語句 >例如,程序代碼:If Text1.Text = “” Then Text1.SetFocus End If可以簡化為:當文本框中文本為

2、空時,則使得文本框成為焦點。 If Text1.Text = “” Then Text1.Setfocus (省去End If)較為復雜的結(jié)構(gòu)如下:If e1 Then 如果e1為True,則執(zhí)行A1組語句 A1 組語句ElseIf e2 Then 如果e2為True,則執(zhí)行A1組語句 A2 組語句 End If 例題5-1 已知三角形的三邊長度,設計求此三角形面積的程序。問題分析:a + b > c & a + c > b & b + c > a , S = sqr(p(p-a)(p-b)(p-c) , p=(a+b+c)/2算法設計:開始輸入a、b、c判斷

3、a + b > c & a + c > b & b + c > a,通過則求p,求S,否則提示:“輸出數(shù)據(jù)錯誤信息”結(jié)束。設計程序代碼如下:Private Sub Command1_Click( ) Dim a As single, b As single, c As single a = Val(Text1.text) Text 屬性為字符串型,轉(zhuǎn)為數(shù)值型 b = Val(Text2.text) c = Val(Text3.text) If a + b > c and a + c > b and b + c > a Then p = (a+

4、b+c)/2 s = sqr(p*(p-a)*(p-b)*(p-c) Text4.text = CStr(s) 數(shù)值型,轉(zhuǎn)為字符串型,不使用,則自動強制轉(zhuǎn)換 Else Text4.text = “數(shù)據(jù)錯誤” End If End SubPrivate Sub Command2_Click ( ) 結(jié)束程序 End End SubPrivate Sub Command3_Click ( ) 清除原有數(shù)據(jù) Text1.text = “” Text2.text = “” Text3.text = “” Text4.text = “” Text1.SetFocusEnd Sub 例題5-2 一個有多個

5、分支的示例程序數(shù)學表達式: Fx=x<1,輸出x<11x10,輸出1x10x10,輸出x10,試寫出該程序。程序界面設計:兩個文本框和一個命令按鈕及相應的說明標簽,文本框1中輸入測試數(shù)據(jù),單擊命令按鈕,在文6本框2給出測試結(jié)果。Private Sub Command1_Click ( ) Dim x as Integerx = Val(Text1.Text )If x < 1 Then Text2.Text = “這是小于1的數(shù)”ElseIf x < = 10 Then Text2.Text = “這是1到10之間的數(shù)”End IfEnd Sub5.1.2 Select

6、-Case-End-Select 結(jié)構(gòu)語句一般形式如下:Select Case e e 為測試表達式 Case c1 c1是測試項,可?。?)具體數(shù)值(當表達式為算數(shù)表達式時) A組語句 (2)連續(xù)的數(shù)據(jù)范圍 (8 To 20,B To H) Case c2 ( 3 ) 滿足某個判決條件 (Is >20, Is < “P”) B組語句 ( 4 ) 多個范圍的組合 Case Else n組語句End Select例題5-2 的程序代碼也可用本結(jié)構(gòu)語句實現(xiàn):Private Sub Command1_Click ( ) Dim x as Integer x = Val(Text1.tex

7、t) Select Case x Case Is < 1 Text2.Text = “這是小于1的數(shù)” Case 1 To 10 Text2.Text = “這是1到10之間的數(shù)”Case Else Text2.Text = “這是大于10的數(shù)” End SelectEnd Sub 5.2 循環(huán)結(jié)構(gòu)與循環(huán)結(jié)構(gòu)語句循環(huán)語句按結(jié)構(gòu)分:當型結(jié)構(gòu)和直到型TrueFalseTrueFalse結(jié)構(gòu)的區(qū)別僅僅是False和 True 位置交換,下為當型的兩種結(jié)構(gòu): AA5.2.1 Do-Loop 循環(huán)語句結(jié)構(gòu)四種結(jié)構(gòu)形式:(1) Do While e (2) Do Exit Do Exit Do Lo

8、op Loop While e (3) Do Until e (4) Do Exit Do Exit Do Loop Loop Until e前兩種為當型結(jié)構(gòu),后兩種為直到型結(jié)構(gòu),Do語句Loop語句之間為循環(huán)體語句,循環(huán)體語句包含一條或多條Exit Do語句,如果程序執(zhí)行到Exit Do語句,就會直接退出循環(huán),轉(zhuǎn)而執(zhí)行Loop語句的下一條語句。 Exit Do 語句最常用的形式是與If-Then結(jié)合,即為:If e Then Exit Do在執(zhí)行循環(huán)體時,如果條件e被滿足,則執(zhí)行Exit Do語句,直接退出循環(huán)。 例題5-3 設計采用歐幾里得算法求解兩個自然數(shù)的最大公約數(shù)的程序。問題分析及界

9、面設計:界面參照例題5-1,算法如下:例題 2-1求兩個自然數(shù)的最大公約數(shù)的算法。(輾轉(zhuǎn)相除法) S1.輸入兩個自然數(shù)M、N; S2.求M除以N的余數(shù)R; S3.使得M=N,即為N替換M; S4.使得N=R,即為R替換N; S5.如果R0,則重復執(zhí)行S2、S3、S4(循環(huán)),否則轉(zhuǎn)S6 S6.輸出M,M即為M、N的最大公約數(shù)。程序設計如下:Private Sub Command1_Click( ) Dim m as Long, n as Long Dim r as Long m = Val(Text1.Text) 取數(shù)據(jù)mBasic實現(xiàn)INPUT m,nDOr=m MOD nm=nn=rLOO

10、P UNTIL r=0PRINT mEND n = Val(Text2.Text) 取數(shù)據(jù)n If m <1 Or n<1 Then 檢驗數(shù)據(jù)合法性 Text3.Text = “數(shù)據(jù)錯誤!” Else Do 求最大公約數(shù) r = m Mod n m = n n = r Loop Until r = 0 Text3.Text = Csr(m) End SubPrivate Sub Command3_Click ( ) 清除原有數(shù)據(jù) Text1.text = “” Text2.text = “” Text3.text = “” Text4.text = “” Text1.SetFocu

11、s End SubPrivate Sub Command3_Click () End End Sub5.2.2 For-Next 循環(huán)結(jié)構(gòu)語句如果事先知道循環(huán)次數(shù),則可使用For-Next 循環(huán)結(jié)構(gòu)語句,它的一般形式如下: For v = e1 to e2 Step e3 Exit For e1為初值,判別v是否超過e2,若超過,退出循環(huán),執(zhí)行Next語句的下條。 Next v 執(zhí)行Next語句,系統(tǒng)執(zhí)行下述操作:v = v+ e3v 是循環(huán)控制變量,應為整型或單精度型;e1、e2、e3為控制循環(huán)的參數(shù)。e1為初值,e2為終值,e3為步長(e1 =1 時可?。or-Next 循環(huán)的正常循環(huán)

12、次序可用下式計算: 循環(huán)次數(shù)= Int(e2-e1)/e3) +1如下面程序代碼:Private Sub Form_Click() For i = 1 To 10 Step 2 Print i; Next i Print “i =”; iEnd Sub 例題5-4 求1 10 這十個數(shù)的和與連乘積的程序。Option ExplicitPrivate Sub Form_Click() Dim i As Integer, s As Integer s = 0 Print "s=" For i = 1 To 10 s = s + i If i < 10 Then Print

13、 i; "+" Else Print i; "=" End If Next i Print sf = 1 Print "f=" For i = 1 To 10 f = f * i If i < 10 Then Print i; "*" Else Print i; "=" End If Next i Print f End Sub 例題5-5一個從由字母、數(shù)字組成的字符串中找到所有大寫字母并逆序輸出。界面設計:兩個文本框,三個按鈕,一篩選,一清除,一結(jié)束思路分析:從一個字符串找出符合要求的字

14、符是采取對字符串的每一個字符逐個篩選的方法實現(xiàn)的,利用Mid函數(shù)可從字符串中提取單個字符,循環(huán)控制處理過程,循環(huán)的終值使用Len函數(shù);對于符合要求的字符采用連接運算組成新字符串;逆序輸出則是過從后往前逐個提取字符再連接Option ExplicitPrivate Sub Cmd1_Click ( ) Dim a as String, d as String, t as String Dim I as Integer Text1.setFocus a = Text1.Text 前期準備 For I = 1 to Len(a) If Mid(a , I , 1) > = “A” And Mi

15、d(a , I , 1) < = “Z”Then t = t & Mid( a , I , 1) 從字符串a(chǎn) 左邊第I個位置開始向右取一個字符 End If Next I For I = Len(t)to 1 Step -1 d = d & Mid ( t , I , 1) Next I Text2.Text = d End Sub Private sub Cmd2_Click ( ) Text1.Text = “” Text2.Text= “” Text1.SetFocusEnd SubPrivate sub Cmd3_Click ( ) EndEnd SubPriva

16、te sub Form_Load() MsgBox “本程序的功能是將一個從由字母、數(shù)字組成的字符串中找到所有大寫字母并逆序輸出”, “示例程序”End Sub5.2.3 循環(huán)嵌套大循環(huán)套小循環(huán),小循環(huán)一定包含在大循環(huán)之內(nèi),而不得相互交叉。程序示例: Private Sub Form_Click ( ) For i = 1 to 9 For j = 1 to 9 Print i ; “*” ; j ; “ =” ; i*j Next j Print Next i End Sub 例題5-6一個模擬搖獎器的程序。設有100個人中簽,要從中找出中獎人。由機器自動產(chǎn)生1000個1100間的數(shù)據(jù),第1

17、000個隨機數(shù)據(jù)即為中獎人的號碼。問題分析:產(chǎn)生01之間隨機數(shù)的函數(shù)Rnd(x), 其中0=<Rnd(x)<1,x 為單精度或者任何有效的表達式。在調(diào)用Rnd(x) 函數(shù)之前,可先使用無參數(shù)的Randomize 語句初始化隨機數(shù)生成器,該生成器具有從系統(tǒng)計時器獲得的種子。為生成某個范圍內(nèi)的隨機整數(shù),可使用下列公式:Int(upperbroad-lowerbroad+1)*Rnd+lowerbroad),則產(chǎn)生1100隨機數(shù):Int(100-1+1)*Rnd+1)界面及算法設計:兩個按鈕,一產(chǎn)生隨機數(shù),一退出,對應一個文本輸出Private Sub Comd1_Click() Dim

18、 Im As Integer, i As Integer, j As Integer, a As Integer Randomize For i = 1 To 1000 取第1000個隨機數(shù) Im = Int(100 * Rnd) + 1 產(chǎn)生1100之間的隨機數(shù) a = 0 For j = 1 To 1000 產(chǎn)生1000次隨機數(shù) a = a + 1 Next j Text1.Text = CStr(Im); Text1.Refresh 刷新前999次,保留最后一次 Next iText1.Text = CStr(Im) End Sub Private Sub Comd2_Click() E

19、nd End Sub 本程序采用兩重嵌套的循環(huán)5.3 程序示例 例題5-7 一個簡單的函數(shù)計算器程序。設計思路:一個是設計基本函數(shù)程序,包括輸入按鈕和兩個文本邊框;一個是設計出錯提示,包括未輸入值和數(shù)據(jù)超出定義域的情況。程序中使用的IsNumeric(s)函數(shù)用于檢測自變量是否是一個可轉(zhuǎn)化成數(shù)值的數(shù)字串,如果是返回邏輯值True,否則返回False函數(shù):Exp、Log()、Sqr(求開方)、Sgn(求x的符號)程序代碼如下: Option ExplicitDim X as Single模塊模板如下:Private Sub Cmd1_Click( ) If Text1.Text = ” Then

20、 MsgBox” Text1.SetFocusElseIf IsNumeric(Text1.Text)Then X = Val(Text1.Text) Else MsgBox”輸入數(shù)據(jù)錯誤!”, 48 + vbOKOnly,”程序示例” Text1.Text = ” End IfEnd Sub Private Sub Cmd1_Click( ) 求Exp(X) If Text1.Text = “” Then MsgBox”請輸入X的值!”, 48 + vbOKOnly,”程序示例” Text1.SetFocusElseIf IsNumeric(Text1.Text)Then X = Val(T

21、ext1.Text) Label2.Caption = “Exp(X) = :” Text2.Text = Str( Exp(X) Else MsgBox”輸入數(shù)據(jù)錯誤!”, 48 + vbOKOnly,”程序示例” Text1.Text = “” End IfEnd Sub Private Sub Cmd2_Click( ) 求Log(X) If Text1.Text = “” Then MsgBox”請輸入X的值!”, 48 + vbOKOnly,”程序示例” Text1.SetFocusElseIf IsNumeric(Text1.Text)And Val( Text1.Text) &g

22、t; 0 Then X = Val(Text1.Text) Label2.Caption = “Log(X) = ” Text2.Text = Str(Log(X) Else MsgBox”輸入數(shù)據(jù)錯誤!”, 48 + vbOKOnly,”程序示例” Text1.Text = “” Text1.SetFocus End IfEnd Sub Private Sub Cmd3_Click( ) 求Sqr (X) If Text1.Text = “” Then MsgBox”請輸入X的值!”, 16 + vbOKOnly,”程序示例” Text1.SetFocusElseIf IsNumeric(T

23、ext1.Text)And Val( Text1.Text) > 0 Then X = Val(Text1.Text) Label2.Caption = “Sqr(X) = ” Text2.Text = Str(Sqr(X) Else MsgBox”輸入數(shù)據(jù)錯誤!”, 48 + vbOKOnly,”程序示例” Text1.Text = “” Text1.SetFocus End IfEnd Sub Private Sub Cmd4_Click( ) 求Sgn(X) If Text1.Text = “” Then MsgBox”請輸入X的值!”, 48 + vbOKOnly,”程序示例”

24、Text1.SetFocusElseIf IsNumeric(Text1.Text)And Val( Text1.Text) > 0 Then X = Val(Text1.Text) Label2.Caption = “Sgn(X) = ” Text2.Text = Str(Sgn(X) Else MsgBox”輸入數(shù)據(jù)錯誤!”, 48 + vbOKOnly,”程序示例” Text1.Text = “” Text1.SetFocus End IfEnd Sub Private Sub Cmd5_Click( ) Text1.Text = “” Text2.Text = “” Label2

25、.Caption = “” Text1.SetFocusEnd SubPrivate Sub Cmd6_Click( ) EndEnd Sub 例題5-8 編寫一個按月收入額計算個人收入調(diào)節(jié)稅的應用程序。計稅公式如下:Tax =0 income1600 或離退休income-1600*0.05 1600<income2100income-1600*0.10-25 2100<income3600income-1600*0.15-125 3600<income6600income-1600*0.20-375 6600<income21600income-1600*0.25-

26、1375 21600<income41600income-1600*0.30-3375 41600<income61600income-1600*0.35-6375 61600<income81600income-1600*0.40-10375 81600<income101600income-1600*0.45-15375 income>101600式子中,income 為納稅人的月收入。 界面設計與思路:輸入、輸出文本框各一個,選擇框一個,按鈕三個。設計代碼如下: Option Explicit Private Sub Command1_Click() Dim

27、 Tax As Single, income As Single income = Val(Text1.Text) If Check1.Value = 1 Or income <= 1600 Then Tax = 0 ElseIf income <= 2100 Then Tax = (income - 1600) * 0.05 ElseIf income <= 3600 Then Tax = (income - 1600) * 0.1 - 25 ElseIf income <= 6600 Then Tax = (income - 1600) * 0.15 - 125 E

28、lseIf income <= 21600 Then Tax = (income - 1600) * 0.2 - 375 ElseIf income <= 41600 Then Tax = (income - 1600) * 0.25 - 1375 ElseIf income <= 61600 Then Tax = (income - 1600) * 0.3 - 3375 ElseIf income <= 81600 Then Tax = (income - 1600) * 0.35 - 6375 ElseIf income > 101600 Then Tax =

29、 (income - 1600) * 0.45 - 15375 End If Text2.Text = Tax End SubPrivate Sub Command2_Click() Text1.Text = "" Text2.Text = "" Text1.SetFocusEnd Sub Private Sub Command3_Click() Unload MeEnd Sub 例題5-9 編寫程序,找出所有三位數(shù)水仙花數(shù)。所謂水仙花數(shù),是指各位數(shù)字的立方和等于該數(shù)本身的數(shù)。例如:153 = 1+3+5,所以153是一個水仙花數(shù)。改錯:Private

30、Sub Command1_Click() Dim i As integer, a As Integer, b As Integer, c As Integer, e As Long For i = 100To 999 取三位數(shù) a = Int(Val(i/100) b = Int(Val(i-a*100)/10) c = i-a-b e = a3+b3+c3 If e = i then Text1.Text = CStr(e) Next iText1.Text = CStr(e) End Sub Private Sub Command2_Click() EndEnd Sub 方法一 : (三位

31、數(shù)依次循環(huán))Private Sub Command1_Click()Dim i As Long, a As Long, b As Long, c As Long, e As Long, f As String For i = 100 To 999 a = i 100 b = (i - a * 100) 10 c = i - a * 100 - b * 10 e = a 3 + b 3 + c 3 If i = e Then f = I &”=”&”3+” &b&”3+”&c&”3” List1.AddItem f End If Next iEnd

32、 Sub方法二 :(三位數(shù)每位循環(huán)一次)Option ExplicitPrivate Sub Command1_Click()Dim i As Integer, a As Integer, b As Integer, c As Integer, e As Integer, f As String For a = 1 To 9 For b = 0 To 9 For c = 0 To 9 e = a 3 + b 3 + c 3 i = 100 * a + 10 * b + c If i = e Then f = I &”=”&”3+” &b&”3+”&c&”3” List1.AddItem f End If Next c Next b Next aEnd Sub 例題5-10 編寫程序,利用牛頓迭代法求方程xe -1=0在x=0.5附近的一個根,要精確到10。算法說明:牛頓迭代法是求一元超越方程的常用算法,設要求解的方程為f(x)=0,并已知一個不夠精確的初始末根x,則有x= x-f(x)/f (x) n=0,1,2,3, 上式稱為牛頓迭代公式。利用該式,可一次求出x、x、x等,當時的x即為要求的根。 Option Explicit Private Sub Command1_Click( ) Dim x as Single, x1 a

溫馨提示

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

評論

0/150

提交評論