官术网_书友最值得收藏!

第3章Visual Basic的秘密—算法和程序控制結構

本章視頻教學錄像:1小時2分鐘

算法是問題求解過程的精確描述,因此掌握算法是學習程序設計的核心,它可以幫助用戶更好、更快地掌握編程思想及編程方法。程序的執行就像水在管道中流動,如果不加以控制,只能從上流到下。任何一種程序設計語言都有自己的算法和程序控制結構,但大致結構都相似。在Visual Basic中,控制程序執行的基本結構有3種:順序結構、選擇結構和循環結構。本章將詳細介紹這3種結構的程序控制語句。

本章要點(已掌握的在方框中打鉤)

□ 了解算法基本概念、特性及算法的幾種描述方法

□ 了解結構化程序設計

□ 掌握程序的順序結構

□ 掌握程序的選擇結構

□ 掌握程序的循環結構

□ 了解其他輔助控制語句

3.1 算法

本節視頻教學錄像:3分鐘

算法是學習程序設計的基礎,也可以說是程序設計的入門知識,掌握算法可以幫助讀者快速理清程序設計的思路,找出多種解決問題的方法,從而選擇最合適的解決方案。

1. 什么是算法

“算法”這個術語聽起來可能很陌生,其實大多數人每天都會用到許多算法。

我們早晨坐車上班,一般情況下會坐公交車上班,但如果時間來不及或遇到其他特殊情況,可能會打車上班,這就是一個“算法”。因此,廣義地講,“算法”就是解決某個問題或處理某件事的方法和步驟。

2. 算法的特性

一個算法應該具有以下5個主要特性。

⑴ 有窮性:一個算法(對任何合法的輸入)在執行有窮步后能夠結束,并且在有限的時間內完成。

⑵ 確定性:算法中的每一步都有確切的含義。

⑶ 可行性:算法中的操作能夠用已經實現的基本運算執行有限次來實現。

⑷ 輸入:一個算法有零個或者多個輸入,零個輸入就是算法本身確定了初始條件。

⑸ 輸出:一個算法有一個或多個輸出,以反映出數據加工的結果,沒有輸出的算法是沒有意義的。

3. 算法的描述方法

為了讓算法清晰易懂,需要選擇一個好的描述方法。算法的描述方法有很多,有自然語言、偽代碼、傳統流程圖等。

⑴ 自然語言

自然語言就是用人們日常使用的語言描述解決問題的方法和步驟,這種描述方法通俗易懂,即使是不熟悉計算機語言的人也很容易理解程序。但是,自然語言在語法和語義上往往具有多義性,并且比較繁瑣,對程序流向等描述不明了、不直觀。

⑵ 偽代碼

偽代碼是介于自然語言和計算機語言之間的文字和符號,它與一些高級編程語言(如Visual C++)類似,但是沒有真正編寫程序時所要遵循的嚴格規則。偽代碼用一種從頂到底、易于閱讀的方式表示算法。在程序開發期間,偽代碼經常用于“規劃”一個程序,然后再轉換成VB程序。

⑶ 傳統流程圖

傳統流程圖使用不同的幾何圖形來表示不同性質的操作,使用流程線來表示算法的執行方向。比起前兩種描述方式,它具有直觀形象、邏輯清晰、易于理解等特點,但占用篇幅較大,流程隨意轉向,較大的流程圖不易讀懂。

3.2 結構化程序設計

本節視頻教學錄像:4分鐘

結構化程序設計(Structured Programming)是進行以模塊功能和處理過程設計為主的詳細設計的基本原則。

1. 概念

其概念最早由E.W.Dijikstra在1965年提出的,是軟件發展的一個重要的里程碑。它的主要觀點是采用自頂向下、逐步求精及模塊化的程序設計方法。使用三種基本控制結構構造程序,任何程序都可由順序、選擇、循環三種基本控制結構構造。結構化程序設計主要強調的是程序的易讀性。

2. 內容

結構化程序設計曾被稱為軟件發展中的第三個里程碑。該方法的要點是:

⑴ 主張使用順序、選擇、循環三種基本結構來嵌套連結成具有復雜層次的“結構化程序”,嚴格控制GOTO語句的使用。用這樣的方法編出的程序在結構上具有以下效果。

① 以控制結構為單位,只有一個入口,一個出口,所以能獨立地理解這一部分。

② 能夠以控制結構為單位,從上到下順序地閱讀程序文本。

③ 由于程序的靜態描述與執行時的控制流程容易對應,所以能夠方便正確地理解程序的動作。

⑵ “自頂而下,逐步求精”的設計思想,其出發點是從問題的總體目標開始,抽象低層的細節,先專心構造高層的結構,然后再一層一層地分解和細化。這使設計者能把握主題,高屋建瓴,避免一開始就陷入復雜的細節中,使復雜的設計過程變得簡單明了,過程的結果也容易做到正確可靠。

⑶ “獨立功能,單出、入口”的模塊結構,減少模塊的相互聯系使模塊可作為插件或積木使用,降低程序的復雜性,提高可靠性。程序編寫時,所有模塊的功能通過相應的子程序(函數或過程)的代碼來實現。程序的主體是子程序層次庫,它與功能模塊的抽象層次相對應,編碼原則使得程序流程簡潔、清晰,增強可讀性。

3. 基本結構

結構化程序設計的三種基本結構是:順序結構、選擇結構和循環結構。

⑴ 順序結構

順序結構表示程序中的各操作是按照它們出現的先后順序執行的。

⑵ 選擇結構

選擇結構表示程序的處理步驟出現了分支,它需要根據某一特定的條件選擇其中的一個分支執行。選擇結構有單選擇、雙選擇和多選擇三種形式。

⑶ 循環結構

循環結構表示程序反復執行某個或某些操作,直到某條件為假(或為真)時才可終止循環。在循環結構中最主要的是:什么情況下執行循環,哪些操作需要循環執行。循環結構的基本形式有兩種:當型循環和直到型循環。

當型循環:表示先判斷條件,當滿足給定的條件時執行循環體,并且在循環終端處流程自動返回到循環入口;如果條件不滿足,則退出循環體直接到達流程出口處。因為是“當條件滿足時執行循環”,即先判斷后執行,所以稱為當型循環。

直到型循環:表示從結構入口處直接執行循環體,在循環終端處判斷條件,如果條件不滿足,返回入口處繼續執行循環體,直到條件為真時再退出循環到達流程出口處,是先執行后判斷。因為是“直到條件為真時為止”,所以稱為直到型循環。

4. 設計方法

⑴ 自頂向下

程序設計時,應先考慮總體,后考慮細節;先考慮全局目標,后考慮局部目標。不要一開始就過多追求眾多的細節,先從最上層總目標開始設計,逐步使問題具體化。

⑵ 逐步細化

對復雜問題,應設計一些子目標作為過渡,逐步細化。

⑶ 模塊化

一個復雜問題,肯定是由若干稍簡單的問題構成。模塊化是把程序要解決的總目標分解為子目標,再進一步分解為具體的小目標,把每一個小目標稱為一個模塊。

5. 優缺點

⑴ 優點

由于模塊相互獨立,因此在設計其中一個模塊時,不會受到其他模塊的牽連,因而可將原來較為復雜的問題化簡為一系列簡單模塊的設計。模塊的獨立性還為擴充已有的系統、建立新系統帶來了不少的方便,因為我們可以充分利用現有的模塊做積木式的擴展。

按照結構化程序設計的觀點,任何算法功能都可以通過由程序模塊組成的三種基本程序結構的組合:順序結構、選擇結構和循環結構來實現。

結構化程序設計的基本思想是采用“自頂向下,逐步求精”的程序設計方法和“單入口單出口”的控制結構。自頂向下、逐步求精的程序設計方法從問題本身開始,經過逐步細化,將解決問題的步驟分解為由基本程序結構模塊組成的結構化程序框圖;“單入口單出口”的思想認為一個復雜的程序,如果它僅是由順序、選擇和循環三種基本程序結構通過組合、嵌套構成,那么這個新構造的程序一定是一個單入口單出口的程序。據此就很容易編寫出結構良好、易于調試的程序來。

① 整體思路清楚,目標明確。

② 設計工作中階段性非常強,有利于系統開發的總體管理和控制。

③ 在系統分析時可以診斷出原系統中存在的問題和結構上的缺陷。

⑵ 缺點

① 用戶要求難以在系統分析階段準確定義,致使系統在交付使用時產生許多問題。

② 用系統開發每個階段的成果來進行控制,不能適應事物變化的要求。

③ 系統的開發周期長。

3.3 順序結構

本節視頻教學錄像:1分鐘

順序結構是指程序按照語句出現的先后次序執行。可以把順序結構想像成一個沒有分支的管道,把數據想像成水流,數據從入口進入后,依次執行每一條語句直到結束。流程如圖所示。

在Visual Basic中賦值語句、注釋語句、輸入語句、輸出語句、變量定義語句等都屬于順序結構功能的語句。這些語句本身沒有控制和改變程序結構的能力,它們在語句中出現的順序就是執行的順序。

3.3.1 賦值運算符

賦值運算符用來為變量或事件的屬性賦值。程序的計算實質上是數據的計算,而數據依存于各種變量、屬性值等里面,我們通過賦值運算符把數據和變量、屬性值等關聯起來從而進行實際計算。賦值運算符的常見語法形式是:

      變量名 = 表達式
      對象名.屬性 = 表達式

賦值運算符中的等號并不是表示等號兩邊的值是相等的,而是將等號右邊的值賦給等號左邊的變量或屬性。如果等號右邊是一個表達式,則會先執行這個表達式,執行完畢將執行結果賦給等號左邊的變量或屬性。

下面兩個是正確的賦值運算符表達式。

      a=a+1   '把數值變量a加1后賦給變量a
      Command1.Caption="確定" '把字符串“確定”賦給Command1的Caption屬性

下面兩個是錯誤的賦值運算符表達式。

      6=a+b   '錯誤原因:賦值符號左邊不能是常量
      a+b=6   '錯誤原因:賦值符號左邊不能是表達式

3.3.2 數據的輸入與輸出

1. 數據的輸入

Visual Basic中的數據輸入主要通過文本框控件、列表框、組合框、復選框等控件以及InputBox函數來實現。控件的使用在后續篇章中將詳細介紹,這里主要介紹InputBox函數的用法。InputBox函數是用來接收用戶通過鍵盤輸入的數據。調用InputBox函數的格式如下。

        Var=InputBox (<提示>[,對話框標題][,編輯框中默認值][,x坐標][,y坐標][,幫助文件名,幫助
    主題號])

功能:打開一個對話框,等待用戶輸入內容,當用戶單擊【確定】按鈕或按【Enter】鍵,函數返回輸入的值,其值的類型為字符串。參數說明如下。

⑴ 提示:不能省略該項。字符串表達式,在對話框中作為信息顯示,可為漢字;若要多行顯示,必須在每行行末加回車Chr(13)和換行Chr(10)控制符或vbCrLf符號常數。

⑵ 對話框標題:字符串表達式,在對話框的標題區顯示;若省略,則把應用程序名放入標題欄中。

⑶ 編輯框中默認值:字符串表達式,當輸入對話框中無輸入時,則該默認值作為輸入的內容。

⑷ x坐標、y坐標:整型表達式,坐標確定對話框左上角在屏幕上的位置,屏幕左上角為坐標原點。

例如:下面程序實現從鍵盤接收一個字符串,并將其顯示在窗體上。

      Private Sub Form_Click()
        Dim num As String
        num = lnputBox(“請輸入學號”,“示例”)
        Print num
        End Sub

上述程序將用戶的輸入顯示在窗體上,運行效果如圖所示。

InputBox函數接收輸入

InputBox函數顯示輸入

當用戶輸入完成后單擊左圖中的【確定】按鈕,表示輸入成功,用戶輸入的數據將被賦值到變量num中,使用Print函數可以顯示在窗體上。如果單擊【取消】按鈕,則輸入失敗。

2. 數據的輸出

Visual Basic中,數據的輸出主要有Print方法、MsgBox函數和控件輸出3種方式。一般來說,Print方法主要輸出在特定控件上,例如Form.Print,即輸出在窗體上;MsgBox函數則以對話框的形式輸出信息;而控件輸出主要是指輸出在數據控件上,例如Label1.Caption="Visual Basic"。下面通過示例看一下這3種輸出的形式。例如,用Print方法、MsgBox函數和控件輸出3種方式輸出a中的數據。

在窗體上使用Print方法輸出數據的輸出格式為:

      Print變量

使用MsgBox函數的簡單輸出格式為:

      MsgBox變量

使用Label控件的輸出即使用其Caption標題屬性,使用格式為:

      Label1.Caption = 變量

這3種方式在后續的章節中都將詳細介紹。

該示例的實現代碼如下。

      Private Sub Form_Click()
      Dim a As String
      a = lnputBox("請輸入a的值","示例")
      Print a      'Print方法輸出
      MsgBox"a"="&a  'MsgBox函數輸出
      Label1.Caption=a '標簽控件輸出
      End Sub

該程序執行效果如圖所示。

Print方法輸出

標簽控件輸出

程序執行時,先由用戶在輸入框InputBox中輸入a的值,再分別用Print方法、MsgBox輸出和Label控件輸出在窗體上。控件的輸出將結合具體的控件,除了Label標簽控件外,還有許多如TextBox文本框輸出、Image圖片框輸出等,這些將在以后的章節中詳細講解,此處只介紹前兩種方法。

3.4 選擇結構

本節視頻教學錄像:16分鐘

選擇結構是通過對給定的條件進行判斷,然后根據判斷結果執行不同任務的一種程序結構。Visual Basic中的If條件語句和多分支條件語句(Select)是最為常用的兩種條件語句。條件語句和多分支條件語句的流程如圖所示。

3.4.1 If條件語句

If語句的常見語法格式是:

      lf條件表達式Then
        語句1
        語句2
        …
      End lf

If…Then…翻譯成中文就是:“如果……就……”。所以上面的代碼意思是如果If后面的條件表達式成立的話,就執行Then下面的語句,否則就什么都不做。

如果希望再加一個選擇分支,可以使用If…Then…Else的語法格式:

      lf條件表達式Then
      語句1
      Else
      語句2
      End lf

加上Else以后的代碼意思是如果If后面的條件表達式成立的話,就執行Then下面的語句,否則執行Else后面的語句。

3.4.2 Select case語句

If語句主要用于單分支或者雙分支的判斷性選擇結構,雖然也可以用形如If…Then…ElseIf…ElseIf…ElseIf…Else這樣的語法來實現多分支的選擇結構,但是這顯然太麻煩了,Select語句是更為方便和有效的一種辦法。Select語句的語法是:

      Select Case <條件表達式>
      Case <表達式列表1>
      <語句塊1>
      Case <表達式列表2>
      <語句塊2>
      …
      [Case Else
      <語句塊n>]
      End Select

上述語句中的條件表達式可以是數值表達式或字符串表達式,一般為變量。表達式列表則是表明條件表達式的可能取值,表達式列表有以下3種形式。

⑴ 逗號分隔的多個表達式。例如:

      Case 1,2,3  '表達式的值是1、2或者3

⑵ <表達式1> To <表達式2>。例如:

      Case 1 to 10 '表達式的值介于1到10之間

⑶ Is <關系操作符> <表達式1>。例如:

      ls<10      '表達式的值小于10

【范例3-1】 在文本框中輸入一個數值型數字,單擊【Command】按鈕后,判斷該數字的奇偶性。

⑴ 啟動Visual Basic 6.0,在彈出的【新建工程】對話框中選擇【標準EXE】圖標,然后單擊【打開】按鈕。

⑵ 用鼠標雙擊工具箱中的【TextBox】按鈕,在Form1窗體上添加一個文本框控件,并用鼠標雙擊工具箱中的【CommandButton】按鈕,添加一個按鈕控件。

⑶ 雙擊Command1控件,進入代碼窗口,輸入以下代碼(代碼3-1.txt)。

      01 Private Sub Command1_Click()
      02  Dim a As lnteger'定義一個整型變量
      03  a=Val(Text1.Text)      '得到輸入的整數
      04  lf a Mod 2=0 Then     '判斷能否被2整除
      05    Print a&"是偶數"     '可以被2整除是偶數
      06  Else
      07   Print a&"是奇數"     '不可以被2整除是奇數
      08  End lf  '退出條件判斷
      09 End Sub

注意

第3行使用了一個Val函數,Val函數是將文本框中的字符串型的數字轉換為整型。

【運行結果】

保存程序,單擊【啟動】按鈕,運行程序。清空文本框中的內容,輸入數字“3”,單擊【Command1】按鈕,窗體上顯示“3是奇數”。清空文本框中的內容,輸入數字“6”,單擊【Command1】按鈕,窗體上顯示“6是偶數”。

【拓展訓練3-1】

在文本框中輸入學生的考試成績,采用多分支條件語句對學生分數進行評定,判斷其優良性。

學會了使用If條件語句的判斷方法,可以嘗試使用多分支條件語句來控制程序的運行。可以將【范例3-1】中步驟⑶的代碼修改如下(拓展代碼3-1.txt)。

      01 Private Sub Command1_Click()
      02  Dim x As Single,y As Single     '定義兩個單精度類型的變量
      03  x=Val(Text1.Text)      '獲取輸入的整數
      04   Select Case x  '進行多條件分支判斷
      05   Case 0 To 59  '如果輸入的數為0~50之間的數
      06     Print"不及格"       '輸出"不及格"字樣
      07   Case 60 To 70 '如果輸入的數為60~70之間的數
      08     Print"中等" '輸出"中等"字樣
      09   Case 70 To 80 '如果輸入的數為70~80之間的數
      10    Print"良好"  '輸出"良好"字樣
      11   Case 81 To 100'如果輸入的數為81~100之間的數
      12    Print"優秀"  '輸出"優秀"字樣
      13   End Select    '結束判斷
      14 End Sub

運行后,清空文本框內容,輸入“90”,單擊【Command1】按鈕,窗體上顯示“優秀”。再次清空文本框內容,輸入“50”,單擊【Command1】按鈕,窗體上顯示“不及格”。

3.4.3 條件函數

在Visual Basic中,除了上述這幾種分支語句外,還有兩個條件函數值得讀者注意:IIF函數和Choose函數。

IIF函數用于替代IF函數,適用于簡單的判斷場合。其調用格式為:IIf (表達式,當表達式的值為Ture時的值,當表達式的值為False時的值)。其功能與If...Then...Else選擇結構相同。

例如,求x,y中大的數,放入max變量中,語句如下。

      max = llf(x > y, x, y)

上述代碼等同于下列代碼。

      lf x>y Then
        max=x
    Else
        max=y
    End lf

因此,IIF函數可以作為If...Then...Else結構的簡介形式來書寫。

Choose函數用于替代Select Case語句,也適用于簡單的判斷場合。其調用格式為:

      Choose(整數表達式,選項列表)

功能為:根據整數表達式的值來決定返回選項列表中的某個值。如果整數表達式值是1,則Choose會返回列表中的第1個選項;如果整數表達式值是2,則會返回列表中的第2個選項,依此類推。若整數表達式的值小于1或大于列出的選項數目時,Choose函數返回Null。

例如,根據當前日期函數Now、WeekDay,利用Choose函數顯示今日是星期幾的形式。

      Private Sub Form_Click( )
      Print "今天是:";Now
      t =Choose(Weekday(Now),"星期日","星期一","星期二","星期三","星期四","星期五","星期六")
      Print"是:";t
      End Sub

上述程序中,函數Weekday(Now)獲取當前是星期幾的一個數字,根據Choose函數返回具體的中文星期幾顯示。其執行效果如圖所示。

上述代碼等同于如下程序。

      Private Sub Form_Click( )
      Print"今天是:";Now
      t =Weekday(Now)
      Print t
      Select Case t
      Case 1
      t = "星期日"
      Case 2
      t = "星期一"
      Case 3
      t = "星期二"
      Case 4
    t = "星期三"
    Case 5
    t = "星期四"
    Case 6
    t = "星期五"
    Case 7
    t = "星期六"
    End Select
    Print "是:";t
      End Sub

同樣地,Choose函數使Select Case語句的應用簡單化了。在實際的使用中,讀者可根據情況自行選擇使用哪種方式。

3.5 循環結構

本節視頻教學錄像:15分鐘

當程序需要重復執行一些任務時,就可以考慮采用循環結構。例如重復100次加減乘除,數組中的每個整數加1等。當然可以為每次的任務都編寫一條語句,但是這樣就違背了使用計算機的初衷:“使用計算機的目的就是為了減輕工作量,而不是增加工作量。”對于這些重復的任務,可以使用Visual Basic中的循環結構很輕松地完成。

提示

Visual Basic中的循環結構是指通過計算機來實現重復執行某任務的程序結構。循環結構可以減少源程序重復書寫的工作量,用來描述重復執行某段算法的問題,這是程序設計中最能發揮計算機特長的程序結構,Visual Basic中所提供的各種循環可以用來處理同一問題,一般情況下它們可以互相替換。

3.5.1 For循環語句

For循環又叫作計數循環,如果能夠預知循環的次數,就可以預先設定計數循環的所計數值。For循環的語法是:

      For循環變量=初值To終值 [Step步長]
      [語句塊]
      [Exit For]
      [語句塊]
      Next [循環變量]

在For循環語句中,循環變量、初值、終值和步長等都是數值型數據,如果步長沒有指定,則默認值為1。步長可以為正,也可以為負。若為正,則初值應小于或等于終值;若為負,則初值應大于或等于終值,這樣才能保證執行循環體內的語句;若為0,則循環永不結束(死循環)。For循環語句的流程如圖所示。

3.5.2 Do...Loop循環語句

Do循環分為先判斷條件的Do…Loop循環和后判斷條件的Do…Loop循環兩種。先判斷條件的Do…Loop循環的語法是:

      Do While條件表達式
      語句塊
      Loop

或者

      Do Until條件表達式
      語句塊
      Loop

后判斷條件的Do…Loop循環的語法是:

      Do
      語句塊
      Loop While條件表達式

條件循環結構的流程如圖所示。

3.5.3 循環的嵌套

循環的嵌套,就是在一個循環體內含有其他循環結構的循環體。在實際問題中,有些單靠一個循環是無法很好解決的,例如對二維甚至多維數組的遍歷,這時我們使用在循環中再嵌套循環的方式來實現一些復雜的邏輯。

【范例3-2】 在文本框中輸入一個數值型數字,通過使用計數循環結構方法,來計算所輸入數值型數字的階乘。

⑴ 啟動Visual Basic 6.0,在彈出的【新建工程】對話框中選擇【標準EXE】圖標,然后單擊【打開】按鈕。

⑵ 用鼠標雙擊工具箱中的【TextBox】按鈕,在Form1窗體上添加一個文本框控件,并用鼠標雙擊工具箱中的【CommandButton】按鈕,添加一個按鈕控件。

⑶ 雙擊Command1控件,進入代碼窗口,輸入以下代碼(代碼3-2.txt)。

      01 Private Sub Command1_Click()
      02  Dim i,x As lnteger,s As Double  '定義兩個整型變量和一個雙精度型變量
      03  x=Val(Text1.Text)      '獲取輸入的數值
      04  s=1  '給變量s賦初值1
      05   For i=1 To x  '條件符合,利用循環結構進行計算
      06    s=s*i     '累積
      07   Next i '進行下一輪循環
      08  Print x;"的階乘為";s;   '輸入最終結果
      09 End Sub

【代碼詳解】

第02行定義了兩個整型變量i和x,同時定義了一個雙精度型的變量s。其中,變量i主要用于循環語句的初始值,變量x主要用于獲得文本框中所輸入的數值,變量s主要用于每一次計算后的結果。

第05~07行主要進行For循環來計算獲得數值的階乘數。例如在文本框中輸入一個數值3,那么代碼執行到第03行時,將其轉換為數值型的數,以便進行數值的計算。當代碼執行到For i=1 To x時,此時x為3,首先判斷當前i的值是否大于x的值,如果大于,則停止循環,如果小于,則開始進行第1次循環,計算s=1×1,此時s的結果值為1。然后執行代碼Next i語句,將i的值加1,并判斷是否大于3,如果不大于,執行第2次循環,此時s的值變為1×2,得到最終的結果值為2。然后再次將i的值加1,i的值變為了3,并判斷當前i的值是否大于3,不大于繼續執行循環體,s的值變為了2×3。然后再次將i的值加1,此時i的值為4,已經大于3,所以退出循環體。執行最后一行代碼語句,將結果輸出出來。

提示

在使用For循環時,如果需要在代碼執行過程中停止當前循環,可以使用Exit For語句退出當前循環。

【運行結果】

保存程序,單擊【啟動】按鈕,運行程序。清空文本框中的內容,輸入數字“6”,單擊【Command1】按鈕,窗體上顯示“6的階乘為720”。

【拓展訓練3-2】

利用嵌套循環方法編寫代碼,運行程序后,單擊窗體顯示出九九乘法表。

條件循環結構與計數循環結構的用法類似,下面來嘗試一下使用嵌套循環顯示出九九乘法表。

首先新建一個工程,在窗體上添加一個按鈕控件,雙擊按鈕控件,進入代碼窗口,輸入以下代碼(拓展代碼3-2.txt)。

      01 Private Sub Command1_Click()
      02  Dim i,j As lnteger      '定義兩個整型變量
      03   For i=1 To 9  '用For循環,打印9行內容
      04    j=1 '為變量j賦初值
      05     Do While j<=l      '用Do循環,打印每一列中的內容
      06      Print i;"*";j;"=";i*j, '輸出每一列的內容
      07      j=j+1   '增加行數
      08     Loop      '滿足條件,繼續內部循環
      09    Print '打印空行,起換行作用
      10   Next i '滿足條件,繼續外部循環
      11 End Sub

運行后,單擊【Command1】按鈕,即可顯示出九九乘法表。

3.6 其他輔助控制語句

本節視頻教學錄像:11分鐘

除了上面提到的幾種語句外,Visual Basic還提供了其他一些輔助控制語句。下面簡單介紹其用法。

3.6.1 End結束語句

End語句可以結束一個過程或塊,獨立的End語句用于結束一個程序的運行,可以放在任何事件過程中。該語句使用形式如下。

      End

此外,在Visual Basic 6.0中,還有多種形式的End語句,用于結束一個過程或塊,主要形式包括End If、End Select、End With、End Type、End Function、End Sub等,與對應的語句配對使用。End語句在各種代碼塊中的格式及作用如下表所示。

End語句用于停止執行過程或塊,可以在過程中的任何位置關閉代碼的執行。在執行時,End語句會重置所有模塊級別變量和所有模塊的靜態局部變量。若要保留這些變量的值,改為使用Stop語句,則可以在保留這些變量值的基礎上恢復執行。

注意

End語句不調用Unload、QueryUnload或Terminate事件或任何其他Visual Basic代碼,只是生硬地終止代碼的執行,并且釋放程序所占用的內存資源。

3.6.2 Exit退出語句

Exit語句為退出語句。其調用形式有如下幾種:Exit For、Exit Do、Exit Sub、Exit Function,其功能都為退出某種控制結構的執行。

⑴ Exit For:退出For循環結構。用于中途跳出For循環,可以直接使用,也可以用條件判斷語句加以限制,在滿足某個條件時才能執行此語句,跳出For循環。例如,在For循環內部添加語句“If條件Then Exit For”。

⑵ Exit Do:退出Do Loop循環結構。用于中途跳出Do循環,與上述類似,既可以直接使用,也可以用條件判斷語句限制使用。

⑶ Exit Sub:退出Sub過程。用于中途跳出Sub過程,既可以直接使用,也可以用條件判斷語句限制使用。

⑷ Exit Function:退出Function函數。用于中途跳出Function過程,可以直接使用,也可以用條件判斷語句限制使用。

3.6.3 GoTo跳轉語句

GoTo語句是無條件程序跳轉語句,其功能是無條件地轉移到標號或行號指定的一行語句。該語句使用形式如下。

      GoTo {標號|行號}

在使用上述形式的GoTo語句跳轉到某一個標號的代碼時,應注意如下問題。

⑴ GoTo語句只能轉移到同一過程的標號或行號處。標號是一個字符序列,首字符必須為字母,與大小寫無關,任何轉移到的標號后應有冒號。

⑵ 行號是一個數字序列。

⑶ 結構化程序設計中要求盡量少用或不用GoTo語句,用選擇結構或循環結構來代替。

提示

Goto語句在使用上爭議很大。因為Goto語句使用起來比較靈活,而且有些情形能夠提高程序的效率,使得很多開發人員喜歡使用該語句。但是Goto語句使程序的靜態結構和程序的動態執行之間差別很大,造成程序難以閱讀,難以查錯。

3.6.4 On Error語句

On Error語句用于啟動一個錯誤處理程序并指定該子程序在一個過程中的位置,也可用來禁止一個錯誤處理程序。

語法有On Error GoTo line 、On Error Resume Next、On Error GoTo 0等。

On Error語句的語法可以具有以下任何一種形式的語句描述。

1. On Error GoTo line

啟動錯誤處理程序,且該歷程從必要的line參數中指定的line開始。line參數可以是任何行標簽或行號。如果發生一個運行時錯誤,則控件會跳到line,激活錯誤處理程序。指定的line必須在一個過程中,這個過程與On Error語句相同,否則會發生編譯時間錯誤。

2. On Error Resume Next

說明當一個程序運行時發生錯誤時,控件轉到緊接著發生錯誤的語句之后的語句,并在此繼續運行。訪問對象時要使用這種形式而不使用On Error GoTo。

3. On Error GoTo 0

禁止當前過程中任何已啟動的錯誤處理程序。

說明:如果不使用On Error語句,則任何運行時錯誤都是致命的。也就是說,結果會導致顯示錯誤信息并中止運行。一個“允許的”錯誤處理程序是由On Error語句打開的一個處理程序,一個“活動的”錯誤處理程序是處理錯誤的過程中允許的錯誤處理程序。如果在錯誤處理程序處于活動狀態時(在發生錯誤和執行Resume、Exit Sub、Exit Function或Exit Property語句之間這段時間)又發生錯誤,則當前過程的錯誤處理程序將無法處理這個錯誤。控件返回調用的過程。如果調用過程有一個已啟動的錯誤處理程序,則激活錯誤處理程序來處理該錯誤。如果調用過程的錯誤處理程序也是活動的,則控件將再往回傳到前面的調用過程,這樣一直進行下去,直到找到一個被允許的但不是活動的錯誤處理程序為止。如果沒有找到被允許而且不活動的錯誤處理程序,那么在錯誤實際發生的地方,錯誤本身是嚴重的。錯誤處理程序每次將控件返回調用過程時,該過程就成為當前過程。在任何過程中,一旦錯誤處理程序處理了錯誤,在當前過程中就會從Resume語句指定的位置恢復運行。注意一個錯誤處理程序不是Sub過程或Function過程。它是一段用行標簽或行號標記的代碼。

3.6.5 復用語句With...End With

With語句用于定制一個對象或用戶自定義類型。With語句不僅方便用戶定制對象,也可增強代碼的可讀性使程序結構更加清晰。With語句用于在一個單一對象或一個用戶定義類型上執行一系列的語句。該語句的使用形式如下。

      With object
          [statements]
      End with

With語句的語法具有以下兩個參數。

⑴ object:必要參數,一個對象或用戶自定義類型的名稱。

⑵ Statements:可選參數,對object執行一條或多條語句。

With語句可以對某個對象執行一系列的語句,而不用重復指出對象的名稱。例如,要改變一個對象的多個屬性,可以在With控制結構中加上屬性的賦值語句,這時只是引用對象一次而不是在每個屬性賦值時都要引用。例如,下列語句使用With語句執行一系列對標簽控件的參數設置。

      With MyLabel
          .Height = 2000
          .Width = 2000
          .Caption = “Visual Basic”
      End With

技巧

當程序一旦進入With塊,object就不能改變,因此不能用一個With語句來設置多個不同的對象。

3.7 高手點撥

本節視頻教學錄像:12分鐘

上面只是對幾種程序控制結構的簡單介紹,在實際應用中,很多復雜的程序都是由這些基本結構組成,下面介紹一些程序中常用的算法。

1. 累加、累乘

累加、累乘是較常見的數值問題。累加(累乘)是將多個數相加(乘),所以一般采用循環結構來實現。在循環體中應有表示累加(如sum=sum+x)或累乘(如t=t*i)的賦值語句。需要注意的是,累加中用于存放和的變量一般賦初值為0,而累乘中用于存放積的變量賦初值為1。

下面以例子說明。

求1!+2!+…+n!的值,n由鍵盤輸入。

      Private Sub Form_Click()
      Dim s as double,t as double,n as integer
      s=0
      t=1
      n=lnputBox("請輸入n的值")
      For i=1 to n
          t=t*l      '求i!并賦給變量t
          s=s+t
      Next i
      Print "1!+2!+…+";n;"!=";s
      End Sub

2. 求最大值和最小值

求若干數的最大值(最小值),其算法思想是,先取第一個數作為最大值(最小值)的初值,然后依次將下一個數和它比較,若比它大(小),將該數替換為最大值(最小值)。

下面以例子說明。

產生10個1~100之間的隨機整數,輸出它們的最大值。

      Private Sub Form_Click()
      Dim i%,x%,max%
      Randomize
      Print "10個隨機整數:"
      x=int(Rnd*100)+1
      Print x;
      max=x       '將第一個數作為初值賦給max
      For i=2 to 10
        x=int(Rnd*100)+1
        if x>max Then max=x
        Print x;
      Next i
      Print
      Print "最大值為:";max
      End Sub

3. 迭代法

“迭代法”是指重復執行一組工作,每次執行這組工作時,都從舊值遞推出新值,并用新值代替舊值。

下面以例子說明。

已知某球從100米高度自由落下,落地后反彈,每次彈起的高度都是上次高度的一半。求小球第10次落地后反彈的高度和球所經過的路程。

      Private Sub Form_Click()
      Dim h as single,r as single,s as single
      h=100
      s=0
      For i=1 to 10
        r=h/2
        s=s+r+h
        h=r
      Next i
      Print "h=";h,"s=";s
    End Sub

3.8 實戰練習

上機題

運用計數循環結構計算出1+2+3+4+…+100的結果。

主站蜘蛛池模板: 邓州市| 巴南区| 皋兰县| 嘉义市| 泗洪县| 年辖:市辖区| 清水河县| 南平市| 荆州市| 永善县| 东安县| 通许县| 金湖县| 承德县| 青河县| 苍梧县| 宁都县| 黔东| 晴隆县| 潜江市| 个旧市| 德兴市| 沛县| 故城县| 龙门县| 延庆县| 泸定县| 包头市| 双流县| 右玉县| 烟台市| 日照市| 潼关县| 客服| 巨鹿县| 夏河县| 宣城市| 崇州市| 信阳市| 尼木县| 青川县|