第四部分算法基礎及VB的基本語句課件_第1頁
第四部分算法基礎及VB的基本語句課件_第2頁
第四部分算法基礎及VB的基本語句課件_第3頁
第四部分算法基礎及VB的基本語句課件_第4頁
第四部分算法基礎及VB的基本語句課件_第5頁
已閱讀5頁,還剩91頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第四章 算法基礎及VB的基本語句第四章 1、了解結(jié)構化程序設計的基本概念2、掌握VB 程序設計中的常用語句3、掌握順序、選擇、和循環(huán)結(jié)構及相應的語句教學要求21、了解結(jié)構化程序設計的基本概念教學要求2教學內(nèi)容4.1 算法及程序設計基礎4.2 賦值語句及InputBox、MsgBox函數(shù)4.3 分支結(jié)構與分支結(jié)構語句4.4 循環(huán)結(jié)構與循環(huán)結(jié)構語句4.5 程序示例3教學內(nèi)容4.1 算法及程序設計基礎34.1 算法及程序設計基礎一個程序( 過程)應包括:Nikiklaus Wirth認為:有人認為: 對數(shù)據(jù)的描述:指定所用數(shù)據(jù)的類型,作用域和數(shù)據(jù)的 組織形式,即數(shù)據(jù)結(jié)構(data structure

2、)。 對操作的描述:即操作步驟,也就是算法(algorithm)。數(shù)據(jù)結(jié)構+算法=程序程序=算法+數(shù)據(jù)結(jié)構+程序設計方法+語言工具和環(huán)境44.1 算法及程序設計基礎一個程序( 過程)應包括: 對1、算法的概念算法即解決某個問題或處理某件事的方法和步驟;“采用什么結(jié)構,使用什么語句以及如何安排這些語句”。算法分類:數(shù)值計算算法非數(shù)值計算算法算法優(yōu)劣: 正確性,效率,占用系統(tǒng)資源,便于理解,易于調(diào)試等。51、算法的概念算法51810M N R8108 2 8 2 0 2 0R=8R=2R=0M=2即最大公約數(shù)求最大公約數(shù)題目:求兩個自然數(shù)的最大公約數(shù)分析:求最大公約數(shù)的常用方法是輾轉(zhuǎn)相除法(歐幾里

3、德算法)。2、算法示例61810M N R8108算法描述: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,否則轉(zhuǎn)至S6S6 輸出M,M即為M,N的最大公約數(shù)。7算法描述:S1 輸入兩個自然數(shù):M,N;73、算法的特征 確定性 可行性 有窮性 輸入性 輸出性83、算法的特征 確定性84、算法的描述 程序流程圖求最大公約數(shù)94、算法的描述 程序流程圖求最大公約數(shù)9程序編碼實現(xiàn)算法算法僅提供解題思路,計算機不可直接執(zhí)行。用某一程序設計語言所提供的語言成分,根據(jù)該語言的特點,并利用該語言的各

4、種工具和手段,遵照規(guī)定的語法規(guī)則去實現(xiàn)算法,得到原程序代碼,計算機可識別并執(zhí)行。10程序編碼實現(xiàn)算法算法僅提供解題思路,計算機不可直接執(zhí)行。5.基本算法結(jié)構1). 順序結(jié)構語句1語句2語句塊結(jié)構化程序設計115.基本算法結(jié)構1). 順序結(jié)構語句1語句2語句塊結(jié)構化程序2)選擇結(jié)構條件滿足?塊1塊2TrueFalse結(jié)構化程序設計122)選擇結(jié)構條件滿足?塊1塊2TrueFalse結(jié)構化程序設3)循環(huán)結(jié)構塊TrueFalse條件結(jié)構化程序設計133)循環(huán)結(jié)構塊TrueFalse條件結(jié)構化程序設計13三種基本結(jié)構的共同特點只有單一入口和單一出口;結(jié)構中的每一部分都有被執(zhí)行的可能;結(jié)構內(nèi)不應出現(xiàn)永不

5、終止的死循環(huán)。14三種基本結(jié)構的共同特點只有單一入口和單一出口;144.2 賦值語句及InputBox、MsgBox函數(shù)4.2.1 賦值語句4.2.2 InputBox函數(shù)4.2.3 MsgBox函數(shù)154.2 賦值語句及InputBox、MsgBox函數(shù)4.2.4.2.1 賦值語句 格式:= 功能:先計算表達式的值,再將該值賦予左端的變量。 說明: -賦值號左端不僅可以是變量名,還可以是對象的屬性; -表達式的類型和變量的類型要一致 -賦值語句是按語句出現(xiàn)的先后順序執(zhí)行的(順序結(jié)構) 舉例: str1 = Nice to meet you number% = 72 Lable1.Captio

6、n = Filename is: Text.FontSize = 12 改變字號164.2.1 賦值語句 str1 = Nice to使用下面的方法可以獲取一個對象的屬性值:var = object . Property 例如:Label1.Caption=Text1.Text 式中,var是變量名、object是對象名、property是該對象的某個屬性名。特別注意:屬性也存在數(shù)據(jù)類型,所以在獲取對象的屬性值時,最好使用具有相同數(shù)據(jù)類型的變量。 說明17使用下面的方法可以獲取一個對象的屬性值: 注意:賦值號(=)與比較運算符(=)不同 賦值是獨立的一條語句; 由運算符(=)連結(jié)兩個操作數(shù)的關

7、系表達式是語句的一部分, 不可單獨存在 比較運算符不會改變操作數(shù)的值; 賦值語句會,改變賦值號左邊的量,所以必須是可以被賦值的變量或?qū)傩訢im x As Integer, y As Integer, z As Booleanx=3 : y=4 : y=xz = x=yPrint x, y, z18注意:賦值號(=)與比較運算符(=)不同Dim x As Private Sub Form_Click() Dim a As Integer,b As Integer a=10 b=3*a Print a,bEnd SubPrivate Sub Form_Click() Dim a As Intege

8、r,b As Integer b=3*a a=10 Print a,bEnd Sub例:單擊窗體,下列兩段程序的執(zhí)行結(jié)果分別是()和()。提示:利用賦值語句給變量賦值后,在未有新的賦值語句再次給它賦值前,變量值保持不變。19Private Sub Form_Click() 例:交換兩個變量的值。Private Sub Form_Click() Dim a As Integer,b As Integer a=10 : b=2 Print a,b 填入程序代碼 Print a,bEnd Sub正確答案Dim Temp As IntegerTemp=a : a=b : b=Temp題目說明單擊窗體程

9、序執(zhí)行結(jié)果為: 10 2 2 10 注意 變量a和b為兩個不定值的變量,因此不能直接用 a=2 : b=10語句來解決這個問題。一旦利用賦值語句給變量賦新值,會覆蓋原值,所以不能直接用 a=b : b=a語句來解決這個問題。20例:交換兩個變量的值。Private Sub Form_Cl例:求一元一次方程x+5=0的解。Private Sub Form_Click() Dim x As Integer 3*x+5=0 Print “x=”;xEnd SubPrivate Sub Form_Click() Dim x As Integerx=(0-)/3 - Print “x=”;xEnd Su

10、b 語句是該例題的算法。錯誤程序正確程序總結(jié): 利用程序設計語言處理問題,我們首先要知道的是怎么解決問題,其次要知道怎么將解決問題的方法用程序設計語言來表達。21例:求一元一次方程x+5=0的解。Private Sub 4.2.2 InputBox函數(shù)格式:InputBox$(,)功能: 彈出對話框,用戶輸入數(shù)據(jù)后回車或單擊“確定”按鈕后,將輸入內(nèi)容賦值給相應的變量;按ESC鍵或單擊“取消”按鈕,返回空串。224.2.2 InputBox函數(shù)22 說明(1)prompt:必選項。對話框中的提示信息。(2)title:可選。對話框的標題。省略則為應用程序名。(3)default:可選。顯示在用戶

11、編輯框中的缺省值,省略為空。(4)x,y:可選。指定對話框的顯示位置,省略則居中。例:i = InputBox(“輸入數(shù)組元素”+Chr(10)+“第一個元素為:”,程序示例, 100)缺省值標題提示字符串23 說明例:缺省值標題提示字符串23例:用InputBox函數(shù)輸入出生日期,計算年齡。Option ExplicitPrivate Sub Form_Click() Dim BirthDay As Date, Age As Integer BirthDay = InputBox(輸入出生日期, 計算年齡) Age = Year(Date) - Year(BirthDay) Print 你今

12、年:; Age; 歲End Sub24例:用InputBox函數(shù)輸入出生日期,計算年齡。Optio如果賦值號左端的變量為數(shù)值型或日期型等非字符型變量,輸入字符數(shù)據(jù) 單擊“取消”按鈕 不輸入直接按回車鍵,則系統(tǒng)都會提示出錯:Dim x As Integerx = InputBox(輸入數(shù)組元素 + Chr(10) + 第一個元素為:, 示例, 10, 100, 100)注意25如果賦值號左端的變量為數(shù)值型或日期型等非字符型變量,輸入字4.2.3 MsgBox函數(shù)格式:MsgBox(Prompt,Button,Title,HelpFile,Context)功能:向用戶發(fā)布提示信息,并要求用戶作出必

13、要的響應。說明: (1)Prompt:必選項。字符串表達式,對話框中的提示信息。 (2)Button:指定顯示按鈕的數(shù)目及形式,使用的圖標樣式,這是一個由4個數(shù)值常量組成的式子,形式為c1+c2+c3+c4,用于決定信息框中按鈕的個數(shù)和類型以及出現(xiàn)在信息框中的圖標類型,各個參量的可選值及其功能; 詳見P.62表4.2 (3)Title:對話框標題欄的顯示信息。264.2.3 MsgBox函數(shù)26MsgBox 需要重新來一次?, 2 + 32 + 256 + 4096, 詢問MsgBox 數(shù)據(jù)非法,請重輸!,1 + 16 + 0 + 4096, 警告舉 例27MsgBox 需要重新來一次?, 2

14、 + 32 + 25方法一: 發(fā)布提示信息,無須用戶響應,在程序中作為獨立語句存在,不加括號;例: MsgBox 非法數(shù)據(jù)!, , 警告如果省略其中參數(shù),逗號不能省略MsgBox函數(shù)的用法方法二: 需要用戶響應,和普通函數(shù)調(diào)用方法相同。例: Response=MsgBox(真的刪除該項嗎?,4+48,提示信息) If Response=vbYes Then Else End If28方法一: 發(fā)布提示信息,無須用戶響應,在程序中作為獨立語4.3 分支結(jié)構與分支結(jié)構語句4.3.1 If-Then-Else- End If語句4.3.2 Select- Case-End Select語句294.3

15、 分支結(jié)構與分支結(jié)構語句4.3.1 If-Then-1、 If-Then-Else語句格式1:If Then Else End If4.3.1 If-Then-Else- End If語句邏輯變量、關系表達式、邏輯表達式B組語句條件?不成立成立A組語句邏輯框圖:功能: 如果條件成立,則執(zhí)行A組語句,否則執(zhí)行B組語句。說明:If和End If語句成對出現(xiàn),缺一不可;Else和B組語句部分可以省略,當條件不成立時,直接執(zhí)行End If的后繼語句;301、 If-Then-Else語句4.3.1 If-ThenPrivate Sub cmdCalculate_Click() Dim x as Sin

16、gle x=Val(text1.text) If x= 0 Then Text2.text = Str(Sqr(x) Else Text2.text = 數(shù)據(jù)小于0,錯誤! End IfEnd SubPrivate Sub cmdExit_Click() EndEnd SubPrivate Sub cmdClear_Click() Text1.Text = Text2.Text = Text1.SetFocusEnd Sub例:從鍵盤輸入一個數(shù),求它的平方根??s格輸入31Private Sub cmdCalculate_Click例:計算分段函數(shù)y的值。Private Sub cmdCalcu

17、late_Click() Dim x As Single,y As Single x=Val(Text1.Text) If x = 0 Then y = 2*Sqr(x+7)-6 Else y = 5*x+Exp(x)-2 End If Text2.Text=Str(y)End SubcmdCalculate32例:計算分段函數(shù)y的值。Private Sub cmdCal格式2:單行If-Then-Else語句 If Then Else 說明:(1)在A組語句和B組語句都只有一個語句時,可使用該格式;(2)End If語句省略。例:上例可改寫為以下程序段。Private Sub cmdCalc

18、ulate_Click() Dim y As Single,x As Single x=Val(Text1.Text) If x = 0 Then y = 2*Sqr(x+7)-6 Else y = 5*x+Exp(x)-2 Text2.Text=Str(y)End Sub33格式2:單行If-Then-Else語句Private 條件滿足?塊1TrueFalse格式3: If Then End If格式4: If Then 邏輯框圖34條件滿足?塊1TrueFalse格式3:邏輯框圖342.嵌套的If結(jié)構 在If語句的“語句塊”中包含另一個If語句,叫做嵌套的If結(jié)構。If Then 外層

19、If Then 內(nèi)層 Else If then Else 最內(nèi)層 End IfElse If Then End IfEnd If用于解決有多種情況的問題352.嵌套的If結(jié)構 在If語句的“語句塊”中包含另開始邊長0?是否能組成三角形計算輸出出錯信息結(jié)束是否是否例:輸入三角形的三邊a、b、c,求三角形的面積P 64 例4-1a0 and b0 and c0a+bc and b+ca and a+cb36開始邊長0?是否能組成三角形計算輸出出錯信息結(jié)束是否是否例Private Sub cmdCalculate_Click() Dim a As Single,b As Single,c As Si

20、ngle,p As Single,s As Single a=Val(Text1.Text) b=Val(Text2.Text) c=Val(Text3.Text) If (1) Then If a+bc And b+ca And c+ab Then p=(a+b+c)/2 s=Sqr(p*(p-a)*(p-b)*(p-c) Text4.Text=Str(s) Else Text4.Text=“不能構成三角形” End If Else Text4.Text=“邊長不能小于0” End IfEnd Sub計算公式:其中:a0 And b0 And c037Private Sub cmdCalcu

21、late_Click例:計算分段函數(shù)y的值。Private Sub cmdCalculate_Click() Dim x As Single,y As Single x=Val(Text1.Text) If x0 Then y=1/(x-5) Else If x5 Then y=3*x2+4*x+5 Else y=Log(x) End If End If Text2.Text=Str(y)End Sub0538例:計算分段函數(shù)y的值。Private Sub cmdCal例:輸入分數(shù)并判斷等級分。計算規(guī)則如下: 分數(shù) 100-90 89-80 79-70 69-60 = 90 And Score

22、 = 80 Then Degree = B Else If Score = 70 Then Degree = C Else If Score = 60 Then Degree = D Else Degree = E End If End If End If End If Text2.Text = Degree End IfEnd Sub缺點: 嵌套層次過多,結(jié)構不清晰,容易出錯。從文本框取數(shù)據(jù)向文本框放數(shù)據(jù)39例:輸入分數(shù)并判斷等級分。計算規(guī)則如下:Private Su3、多分支If-Then-ElseIf語句格式: If Then ElseIf Then ElseIf Then Else E

23、nd If功能:-對條件自上而下依次判斷,若條件i成立,則執(zhí)行相應的Ai組語句;-若所有條件都不成立,則執(zhí)行An+1組語句。-無論執(zhí)行了哪個語句塊,都將執(zhí)行End If的后繼語句。條件1條件2假假真真語句塊1語句塊2條件 n真假語句塊n語句塊n+1403、多分支If-Then-ElseIf語句功能:條件1條(1)該語句結(jié)構可以解決多分支問題,只有一個End If語句,避免If語句嵌套層數(shù)過多的情況;(2)Else語句可以省略;(3)該結(jié)構是一個單出口的結(jié)構,即只會執(zhí)行一組語句,若條件中有兩個成立,則按語句的順序執(zhí)行前面的一組語句。說 明41(1)該語句結(jié)構可以解決多分支問題,只有一個End I

24、f語Private Sub Text1_KeyPress(KeyAscii As Integer) Dim Score As Integer, Degree As String If KeyAscii = 13 Then Score = Val(Text1.Text) If Score = 90 And Score = 80 Then Degree = B ElseIf Score = 70 Then Degree = C ElseIf Score = 60 Then Degree = D Else Degree = E End If Text2.Text = Degree End IfEnd

25、 Sub特點:結(jié)構清晰。將上例用If-Then-ElseIf語句改寫:90Score=80 ?42Private Sub Text1_KeyPress(Key格式:Select Case Case Case Case Case Else End Select功能: 計算測試表達式的值,自上而下檢查測試條件; 若表達式的值符合測試 i,則執(zhí)行相應的語句塊 i; 若所有條件都不成立,則執(zhí)行語句塊n+1。無論執(zhí)行了哪個語句塊,都將執(zhí)行End Select的后繼語句。4.3.2 多分支Select-Case-End Select語句43格式:Select Case 功能:(1)測試表達式可以是算術表達

26、式或字符表達式;(2)測試條件有四種形式: 常量,如2、3、“A”等 閉區(qū)間,如3 To 78、“B” To“H”等 開區(qū)間,如Is20、 Is“P”等 以上三種形式的組合,以逗號間隔,條件組合是或的關系,不能表示與的關系 (3)Case Else語句部分可以省略;(4)以End Select語句結(jié)束;(5)該結(jié)構是一個單出口的結(jié)構,即只會執(zhí)行一個語句塊,若條件中有兩個成立,則按語句的順序執(zhí)行前面的語句塊。說 明44(1)測試表達式可以是算術表達式或字符表達式;說 明44例:將上例用Select Case語句改寫。Private Sub Text1_KeyPress(KeyAscii As I

27、nteger) Dim Score As Integer, Degree As String If KeyAscii = 13 Then Score = Val(Text1.Text) Select Case Score Case 90 To 100 Degree = A Case 80 To 89 Degree = B Case 70 To 79 Degree = C Case 60 To 69 Degree = D Case Is60 Degree = E End Select Text2.Text = Degree End IfEnd Sub45例:將上例用Select Case語句改寫

28、。Private 練習:鍵盤輸入三個數(shù),將它們從大到小依次排列輸出。Private Sub Form_Click()Dim a As Integer, b As Integer, c As Integer, temp As Integer a = InputBox(輸入a, 順序輸出) b = InputBox(輸入b, 順序輸出) c = InputBox(輸入c, 順序輸出) If a b Then temp = a a = b b = temp End If If a c Then Print a, b, c Else Print a, c, b End IfEnd Sub保證a為a,b

29、兩數(shù)中的大值46練習:鍵盤輸入三個數(shù),將它們從大到小依次排列輸出。Priva分支結(jié)構的適用情況驗證用戶輸入數(shù)據(jù)的合法性分段函數(shù)計算用于區(qū)分等級其他須根據(jù)條件不同執(zhí)行不同操作的情況47分支結(jié)構的適用情況驗證用戶輸入數(shù)據(jù)的合法性474.4 循環(huán)結(jié)構與循環(huán)結(jié)構語句4.4.1 Do-loop循環(huán)結(jié)構語句(條件循環(huán))4.4.2 For-Next 循環(huán)結(jié)構語句(計數(shù)循環(huán))4.4.3 循環(huán)嵌套484.4 循環(huán)結(jié)構與循環(huán)結(jié)構語句4.4.1 Do-lo 由一定的條件控制,反復執(zhí)行某個程序段的程序結(jié)構稱為循環(huán)結(jié)構。 用于解決一些需要重復進行某些操作的問題。 循環(huán)要素: & 循環(huán)控制條件 條件或邏輯表達式 & 循環(huán)

30、體 重復執(zhí)行的語句塊 & 為防止死循環(huán),在循環(huán)體內(nèi)必須要有對應語句,使得循環(huán)控制條件會不滿足,結(jié)束循環(huán)運行?;靖拍?9 由一定的條件控制,反復執(zhí)行某個程序段的程序結(jié)構稱為例:在窗體上打印10行“Hello”。 循環(huán)控制條件 是否已打印了10行 循環(huán)體在窗體上打印一行“Hello” 提示:要設立一個變量,用于記錄已打印的行數(shù),每打印一行,計數(shù)變量要加1,循環(huán)控制條件即計數(shù)變量小于等于1050例:在窗體上打印10行“Hello”。50一、“當型”循環(huán)條件成立時,執(zhí)行循環(huán)體條件?循環(huán)體成立循環(huán)的后繼語句不成立條件?循環(huán)體不成立循環(huán)的后繼語句成立圖2:先執(zhí)行一次循環(huán)體,然后再判斷條件,決定是否繼續(xù)執(zhí)

31、行循環(huán),此結(jié)構至少執(zhí)行一次循環(huán)體。圖 1圖 2圖1:先判斷條件,當條件成立則執(zhí)行循環(huán)體,否則執(zhí)行循環(huán)結(jié)構的后續(xù)語句。51一、“當型”循環(huán)條件成立時,執(zhí)行循環(huán)體條件?循環(huán)體成立循二、“直到型”循環(huán)條件不成立時,執(zhí)行循環(huán)體條件?循環(huán)體不成立循環(huán)的后繼語句成立條件?循環(huán)體成立循環(huán)的后繼語句不成立圖3:先判斷條件,條件不成立則執(zhí)行循環(huán)體,直到條件不成立,執(zhí)行循環(huán)結(jié)構的后續(xù)語句。圖 3圖 4圖4:先執(zhí)行一次循環(huán)體,再判斷條件,決定是否繼續(xù)執(zhí)行循環(huán)。52二、“直到型”循環(huán)條件不成立時,執(zhí)行循環(huán)體條件?循環(huán)體不 4.4.1 Do-Loop 循環(huán)結(jié)構語句格式一 Do While Loop條件?循環(huán)體成立Loo

32、p的后繼語句不成立執(zhí)行步驟:1 判斷條件是否成立。如果條件不成立,轉(zhuǎn)向第4步2 執(zhí)行循環(huán)體;3 轉(zhuǎn)向執(zhí)行第1步;4 執(zhí)行Loop語句的后繼語句。當型循環(huán)53 4.4.1 Do-Loop 循環(huán)結(jié)構語句條件?循環(huán)體成立Private Sub Form_click() Dim i as integer i=0 Do While i10 print “hello” i=i+1 LoopEnd Sub上例的實現(xiàn):縮格54Private Sub Form_click()上例的實現(xiàn):例 求S=1+2+3+4+100Private Sub Form_click() Dim n as Integer,s as

33、Long n=1 s=0 Do While n=100 s=s+n n=n+1 Loop Print “1+2+3+100=”;sEnd Sub實現(xiàn)累加55例 求S=1+2+3+4+100Private Su格式二: Do Loop While 條件?循環(huán)體不成立Loop的后繼語句成立執(zhí)行步驟:1 執(zhí)行循環(huán)體; 2 判斷條件是否成立。如果條件成立,轉(zhuǎn)向第 1 步3 條件不成立,則結(jié)束循環(huán),執(zhí)行Loop語句的后繼語句。當型循環(huán)56格式二:條件?循環(huán)體不成立Loop的后繼語句成立執(zhí)行步驟:當格式三 Do Until Loop條件?循環(huán)體不成立Loop的后繼語句成立執(zhí)行步驟:1 判斷條件是否成立。如

34、果條件成立,轉(zhuǎn)向第4步2 執(zhí)行循環(huán)體;3 轉(zhuǎn)向執(zhí)行第 1 步;4 執(zhí)行Loop語句的后繼語句。直到型循環(huán)57格式三條件?循環(huán)體不成立Loop的后繼語句成立執(zhí)行步驟:直到格式四 Do Loop Until 條件?循環(huán)體不成立Loop的后繼語句成立執(zhí)行步驟:1 執(zhí)行循環(huán)體; 2 判斷條件是否成立。如果條件不成立,轉(zhuǎn)向第 1 步,若條件成立,則執(zhí)行 第3步 3 執(zhí)行Loop語句的后繼語句。直到型循環(huán)58格式四條件?循環(huán)體不成立Loop的后繼語句成立執(zhí)行步驟:直到(1)While 短語總是在條件成立時,繼續(xù)進行循環(huán);條件不成立時,結(jié)束循環(huán)。因此用于“當型”循環(huán);(2)Until 短語總是在條件不成立時

35、,執(zhí)行循環(huán)體;條件成立時,則結(jié)束循環(huán)。因此稱為“直到型”循環(huán);(3)上述兩條短語是可以相互轉(zhuǎn)換的???結(jié) Do While i=10 print “hello” i=i+1 Loop59(1)While 短語總是在條件成立時,繼續(xù)進行循環(huán);條件不格式五(特殊形式): Do Loop執(zhí)行過程:反復執(zhí)行循環(huán)體。該結(jié)構稱為“死循環(huán)“,在循環(huán)體內(nèi)必須通過 Exit Do 語句強制退出循環(huán)體。Exit Do語句一般與If-then語句結(jié)合使用,即當滿足某一條件時,才強制退出循環(huán)。 If Then Exit Do循環(huán)體Loop后續(xù)語句 Do print “hello” i=i+1 If i=10 then

36、 Exit Do Loop60格式五(特殊形式):執(zhí)行過程:反復執(zhí)行循環(huán)體。循環(huán)體Loop(1)Do和Loop為循環(huán)結(jié)構關鍵字,必須成對出現(xiàn),缺一不可;(2)循環(huán)體為可執(zhí)行語句組成,可以嵌套分支結(jié)構和循環(huán)結(jié)構;(3)語句 Exit Do 用于無條件退出循環(huán),可在任意Do-Loop語句結(jié)構的循環(huán)體中出現(xiàn)。(4)使用循環(huán)結(jié)構,一定要避免死循環(huán)的出現(xiàn)。 Do-Loop語句使用說明61(1)Do和Loop為循環(huán)結(jié)構關鍵字,必須成對出現(xiàn),缺一不可算法分析:求最大公約數(shù)的常用方法是 輾轉(zhuǎn)相除法。例:求兩個數(shù)的最大公約數(shù)。P 68 例4-31810M N R8108 2 8 2 0 2 0R=8R=2R=0

37、M=2即最大公約數(shù)62算法分析:求最大公約數(shù)的常用方法是例:求兩個數(shù)的最大公約 在該例中,我們使用了三個變量,分別表示被除數(shù)(m)、除數(shù)(n)及余數(shù)(r)。 Do r=m Mod n m=n n=rLoop Until r=0最大公約數(shù)是( )?63Do最大公約數(shù)是( )?63 由于輸入的數(shù)據(jù)M和N要求是自然數(shù),在程序中應加入對數(shù)據(jù)的合法性進行檢驗的部分; 考慮到程序的應用范圍,數(shù)據(jù)類型可選用長整型。 問題分析及界面設計64 由于輸入的數(shù)據(jù)M和N要求是自然數(shù),在程序中應加入對數(shù)Private Sub Command1_Click() Dim m As Long, n As Long, r As

38、 Long m = Val(Text1.Text) 取數(shù)據(jù)M n = Val(Text2.Text) 取數(shù)據(jù)N If m Int(m) Or m 1 Or n Int(n) Or n 1 Then Text3.Text = 數(shù)據(jù)錯誤! Else Do 求最大公約數(shù) r = m Mod n m = n n = r Loop Until r = 0 Text3.Text = CStr(m) 輸出最大公約數(shù) End If End Sub Private Sub Command2_Click() Text1.Text = Text2.Text = Text3.Text = End Sub Privat

39、e Sub Command3_Click() End End Sub檢驗數(shù)據(jù)合法性Mod 前后加空格65Private Sub Command1_Click()Pr例:將十進制數(shù)轉(zhuǎn)換成二進制。算法分析:十進制向二進制轉(zhuǎn)換, 采取的是除2取余法。4522221112122252101001高位低位(45)10=(101101)2解決這類問題必須考慮的是如下幾點:(1)需要重復運行的操作除2取余(2)終止循環(huán)的條件商為0a=0?a Mod 2a=a2F結(jié)束循環(huán)T66例:將十進制數(shù)轉(zhuǎn)換成二進制。算法分析:十進制向二進制轉(zhuǎn)換注意:在循環(huán)控制條件中必須出現(xiàn)變量,且該變量在循環(huán)體中一定要改變值,否則會造成

40、“死循環(huán)”,即無休止的循環(huán)。若在運行程序過程若出現(xiàn)“死循環(huán)”,用Ctrl+Break可以強制終止程序的執(zhí)行。Private Sub Command1_Click() Dim a As Integer, r as Integer,s As String a = Val(Text1.Text) Do While a 0 r=a Mod 2 a = a 2 Loop Text2.Text = sEnd Subs = Cstr(r) & s將余數(shù)逆序輸出,即將最新獲得的余數(shù),連接在已獲得的余數(shù)串的前面67注意:Private Sub Command1_Click(練習1:計算圓周率的近似值。計算公式如

41、下:計算精確到通項的值小于10-7。提示:s=s+可實現(xiàn)累加。解決求累加和的問題,關鍵注意兩點:(1)通項的表示; (2)循環(huán)的結(jié)束條件;68練習1:計算圓周率的近似值。計算公式如下:計算精確到通項的值Private Sub Form_Click() Dim Pi As Single, s As Single, r As Single Dim n As Integer n = 1: s = 0s為累加器 Do r = 1 / (2 * n - 1) 2求通項 s = s + r n = n + 1 Loop While r 1e-7 Pi = Sqr(8 * s) Print PiEnd Su

42、b69Private Sub Form_Click()69計算精確到通項的絕對值小于10-4。練習2:若公式改為70計算精確到通項的絕對值小于10-4。練習2:若公式改為70Private Sub Form_Click() Dim Pi As Single, s As Single, r As Double Dim n As Integer n = 1: s = 0 Do r = (-1) (n + 1) * 1 / (2 * n - 1)求通項 s = s + r n = n + 1 Loop While Abs(r) 0.0001 Pi = 4 * s Print PiEnd Sub71P

43、rivate Sub Form_Click()71格式: For = To Step 循環(huán)體 Next 功能:由計數(shù)變量控制,有限次地執(zhí)行循環(huán)體。4.4.2 計數(shù)循環(huán)(For-Next循環(huán))步驟:1. 計算初值、終值和步長值,將初值賦予計數(shù)變量;2. 比較計數(shù)變量和終值,若計數(shù)變量大于終值,結(jié)束循環(huán);3. 計數(shù)變量小于終值,執(zhí)行循環(huán)體;4. 計數(shù)變量=計數(shù)變量+步長值5. 轉(zhuǎn)向第2步。計數(shù)變量=初值計數(shù)變量終值是循環(huán)體計數(shù)變量=計數(shù)變量+步長值否計算初值,終值,步長72格式:4.4.2 計數(shù)循環(huán)(For-Next循環(huán)) For - Next是關鍵字,成對出現(xiàn),缺一不可; 循環(huán)體由可執(zhí)行語句組成

44、,可嵌套分支結(jié)構和循環(huán)結(jié)構; 計數(shù)變量應為整型或單精度型,初值、終值和步長值為相應類型的表達式; 步長值可以為正,也可以為負,省略時默認步長值為1; 循環(huán)次數(shù)為:Int(終值-初值)/步長值)+1 Exit For語句可以出現(xiàn)在循環(huán)體中,用于無條件退出循環(huán) 說 明73 For - Next是關鍵字,成對出現(xiàn),缺一不可; 說 Private Sub Form_Click() For i = 1 To 10 Step 2 Print i; Next i Print i=; iEnd Sub 執(zhí)行本程序,窗體上將顯示:1 3 5 7 9 i=11。它表明循環(huán)一共執(zhí)行了5次,退出循環(huán)時,i的取值為11

45、。例:請寫出窗體上打印的內(nèi)容,以及循環(huán)執(zhí)行的次數(shù)。P 7074Private Sub Form_Click() 執(zhí)行 循環(huán)控制變量主要是用于控制循環(huán)的執(zhí)行次數(shù), 但我們通過合理的設置,可以在循環(huán)體中巧妙加以利用,以提高程序的效率.分析:這個式子有現(xiàn)成的求和公式,在這里主要借助該例體現(xiàn)一下在循環(huán)體中計數(shù)變量的應用。 設計數(shù)變量為i,初值為1,終值為100,步長值為1,可省略。i從1變化到2、3、4、100,正好和式子中的通項變化一致。S=0For i=1 To 100 S=S+iNext iS=0For i=100 To 1 Step -1 S=S+iNext i例:求S=1+2+3+100。S

46、=0:n=0For i=1 To 100 n=n+1 S=S+nNext i75 循環(huán)控制變量主要是用于控制循環(huán)的執(zhí)行次數(shù), 但我們通寫出下列程序的運行結(jié)果Private Sub Form_Click() Dim p As Integer, i As Integer, n As Integer p = 2: n = 20 For i = 1 To n Step p p = p + 2 n = n - 3 i = i + 1 If p = 10 Then Exit For Next i Print i, p, nEnd Sub76寫出下列程序的運行結(jié)果Private Sub Form_Cl分析:

47、這類問題沒有什么算法,只有將所有情況列舉然后檢查得分情況,直到發(fā)現(xiàn)答案為止。設該生共答對i道題,答錯(26-i)道題,如果 i*8-(26-i)*5=0那么i就是答案。i的變化范圍是1-26。一旦找到答案,可以立即結(jié)束循環(huán)。窮舉法要點:-通過循環(huán)語句,遍歷所有可能的情況;-在循環(huán)體內(nèi)通過條件語句,將符合條件的情況找出來。例:某試卷有26個問題,答對一題得8分,答錯一題扣5分,某學生回答了全部26個問題,總分為0分,問他答對幾道題,答錯幾道題。Private Sub Form_Click() Dim i As Integer For i = 1 To 26 If i * 8 - (26 - i)

48、 * 5 = 0 Then Exit For Next i Print 答對; i; 道, 答錯; 26 - i; 道End Sub條件(關系表達式)77分析:這類問題沒有什么算法,只有將所有情況列舉然后檢查得例4_5 從字母數(shù)字組成的字符串中找出所有的大寫字母并逆序輸出78例4_5 從字母數(shù)字組成的字符串中找出所有的大寫字母并逆一、界面設計(如上圖)二、算法設計 由題意,所需執(zhí)行的操作應該是:依次判斷字符串中的每一個字符是否是大寫字母,若是,則取出放入結(jié)果字符串中。 考慮通過在一個循環(huán)結(jié)構里面嵌套一個判斷結(jié)構實現(xiàn),因重復執(zhí)行判斷的次數(shù),即字符串的長度len(s)已知,則循環(huán)結(jié)構用FOR語句實

49、現(xiàn); 判斷一個字符是否是大寫字母,可先將單個字符從字符串中取出Mid(s,i,1),并將該字符直接與“A”、”Z”字符進行比較,應大于等于“A” ,并同時小于等于”Z”x=“A” AND x= A And x = Z Then t = x & t End If Next i注意與書上代碼的比較80Private Sub Cmd1_Click() For分析:素數(shù):除了1和它本身,不能被其它數(shù)整除的數(shù)。 算法考慮用窮舉法。程序: For i = 2 To x - 1 If x Mod i = 0 Then Exit For Next i例:判斷一個數(shù)是否為素數(shù).If Then Print x;

50、是素數(shù)!Else Print x; 不是素數(shù)!End Ifi = x錯誤程序For i=2 To x-1 If x Mod i=0 Then Print x;不是素數(shù) Else Print x=;是素數(shù) End IfNext i其實不用整除到X-1,整除到Sqr(X),即可判斷81分析:素數(shù):除了1和它本身,不能被其它數(shù)整除的數(shù)。For格式:For For Do Do For Do Do For Next Loop Loop Next Next Next Loop Loop 4.4.3 循環(huán)的嵌套 所謂循環(huán)的嵌套,是指在循環(huán)結(jié)構中包含另一個循環(huán)結(jié)構。條件循環(huán)和計數(shù)循環(huán)可以相互嵌套。82格式:F

51、or 例:在窗體上按行依次打印1到10,每個數(shù)字打印10遍。分析:這是一個典型的需要用二重循環(huán)結(jié)構的例子,外層用于控制打印數(shù)字的個數(shù),內(nèi)層控制每個數(shù)字打印的遍數(shù)。Private Sub Form_cliclk() Dim i as integer,j as integer For i=1 to 10 For j=1 to 10 Print i; Next j Print Next IEnd Sub問題: 在執(zhí)行整個程序中 print i 語句共執(zhí)行了多少次?打印10個數(shù)字每個數(shù)字打印10遍換行83例:在窗體上按行依次打印1到10,每個數(shù)字打印10遍。Pri(1)內(nèi)層循環(huán)必須完全包含在外層循環(huán)之

52、中,不能交叉;(2)內(nèi)層循環(huán)中還可以嵌套循環(huán)結(jié)構,但建議不要使用多層循環(huán),解決一般問題最多需要三重循環(huán);(3)在多重DO-LOOP循環(huán)中,若有EXIT DO語句,則只會強制退出該語句所在的循環(huán),并執(zhí)行LOOP的后續(xù)語句,并不會退出所有的循環(huán)。(4)在多重FOR-NEXT循環(huán)中,若有EXIT FOR語句,則只會強制退出該語句所在的循環(huán),并執(zhí)行NEXT的后續(xù)語句,并不會退出所有的循環(huán)。說 明84(1)內(nèi)層循環(huán)必須完全包含在外層循環(huán)之中,不能交叉;說 明4.5 程序示例854.5 程序示例85例:產(chǎn)生10個2050隨機整數(shù),打印在窗體上,并指出最大值和最小值。分析:1. 要求得到10個隨機數(shù),用記數(shù)

53、循環(huán)FOR語句實現(xiàn)。2. 產(chǎn)生隨機整數(shù)的方法是 x = Int(上界 -下界+1)*Rnd)+下界 必須和Randomize語句配合使用。3. 要求出最大值和最小值,則每產(chǎn)生一個隨機數(shù),即與已知的最大數(shù)、最小數(shù)比較,若它大于已知的最大數(shù),則它是新的最大數(shù);若它小于已知的最小數(shù),則它是新的最小數(shù)。86例:產(chǎn)生10個2050隨機整數(shù),打印在窗體上,并指出最大值Private Sub Form_Click() Dim i As Integer, x As Integer, Dim max As Integer, min As Integer For i = 1 To 10 x = Int(Rnd *

54、 31) + 20 Print x; Next I Print Print max=; max Print min=; minEnd Submax = 0: min = 51If max x Then min = x87Private Sub Form_Click()max = Private Sub Form_Click() Dim S As Long, i As Integer Dim j As Integer, fact As Long For i = 1 To 10 fact = 1 For j = 1 To i fact = fact * j Next j S = S + fact Next i Print s=; SEnd SubPrivate Sub Form_Clic

溫馨提示

  • 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

提交評論