<samp id="uu9tx"></samp>
        <samp id="uu9tx"><tr id="uu9tx"><nav id="uu9tx"></nav></tr></samp>
        <delect id="uu9tx"><legend id="uu9tx"><meter id="uu9tx"></meter></legend></delect>
                <samp id="uu9tx"><tr id="uu9tx"><meter id="uu9tx"></meter></tr></samp><nav id="uu9tx"></nav>
                <samp id="uu9tx"></samp>
                  <samp id="uu9tx"><tr id="uu9tx"><meter id="uu9tx"></meter></tr></samp>
                  江蘇省高校計算機等級考試命題研究院 江蘇省高校計算機等級考試輔導
                  三步逐過程法”解二級VisualBasic上機考試改錯題
                   

                  “三步逐過程法”解二級VisualBasic上機考試改錯題

                  曹蘇群 

                  http://caosuqun.bokee.com/

                  一、改錯題解法現狀

                  許多同學為了掌握解決改錯題的技巧和方法,一方面著重熟練VB集成開發環境中調試工具的使用,另一方面歸納總結了近幾年來二級考試改錯題中涉及到的錯誤類型。這些對于提高應試能力無疑是有幫助的。但是在實際考試中,他們也發現,解答改錯題的方法淪為逐一去猜測錯誤類型,然后按模式來套解。毫無疑問,這一解法效率慢,正確率不高,而且即便正確解答出來,也有一種僥幸的感覺。之所以如此,根本的原因在于沒有抓住具體題目算法邏輯特征這一主線,因而單純的總結錯誤類型的意義也就不大了。

                  為此,我們可以采用一種比較完善的改錯題解法——“三步逐過程法”。

                  二、“三步逐過程法”解法說明

                  “三步逐過程法”核心是把握題目算法邏輯特征,按照“從整體到部分,再由部分到整體”的思路排查錯誤,調試程序,具體步驟可分為三步:

                  步驟一:把握題意,泛讀程序,分析程序組成和各過程的功能;

                  步驟二:從通用過程入手, 逐過程輸入并逐過程調試;

                  步驟三:輸入并調試事件過程,完成對各通用過程調用和組裝。

                  下面,我們結合一道改錯題來具體說明每個步驟中的方法和技巧。

                  三、“三步逐過程法”解改錯題舉例

                  以江蘇省二級VB上機考試中的一道考題為例。

                  已知下面程序的功能是找出2000以內這樣的正整數N: 它的不同值的因子(包括1N在內)之和是一個素數. 例如: 16: 1+2+4+8+16=31(下圖為程序正確執行時的畫面).

                  含有錯誤的源程序如下:

                  Option Explicit

                  Option Base 1

                  Private Sub Command1_Click()

                      Dim I As Integer, K As Integer, Sum As Integer

                      Sum = 0

                      For I = 2 To 2000

                          Call Fctor(I, Sum)

                          If Prime(Sum) Then

                              K = K + 1

                              Text1 = Text1.Text & Str(I) & "  "

                              If K Mod 5 = 0 Then Text1 = Text1 & Chr(13) & Chr(10)

                          End If

                      Next I

                  End Sub

                  Private Sub Fctor(N As Integer, S As Integer)

                      Dim I As Integer, J As Integer

                      Do While I < N

                          If N Mod I = 0 Then

                              S = S + I

                          End If

                           I = I + 1

                      Loop

                  End Sub

                  Private Function Prime(N As Integer) As Boolean

                      Dim m As Integer

                      For m = 2 To Sqr(N)

                          If N Mod m = 0 Then Exit Sub

                      Next m

                      Prime = True

                  End Function                    

                  “三步逐過程法”解題步驟:

                       

                  步驟一:把握題意,泛讀程序,分析程序組成和各過程的功能;

                  顯然,該程序的組成如下圖所示:

                   程序結構圖      

                      那么,我們如何分析出各個過程的功能呢?

                          核心技巧是從輸出語句著手, 逆向推導, 分析各變量的含義, 進而根據過程的輸入參數及其輸出或者反饋, 分析出此過程的功能。

                  1.     標記出輸出語句

                  輸出語句有兩句:

                  1)、Text1 = Text1.Text & Str(I) & "  "

                  2)、If K Mod 5 = 0 Then Text1 = Text1 & Chr(13) & Chr(10)

                  2.     逆向推導,分析各變量的含義

                  對于輸出語句(1),顯然是將符合條件的數I顯示到文本框。而根據題意,符合條件的數必須滿足:2000以內和因子和為素數兩個條件,因此,我們從語句(1)逆向推導,我們知道I是由22000的循環變量,并且只有滿足Prime(Sum)True的才能顯示到文本框,因此,我們知道Sum應該是I的因子和;對于輸出語句(2),后半句的功能是為了實現回車和換行,結合K Mod 5=0以及逆向找出的K=K+1,我們知道,K的功能是為了控制輸出按照每5個換行進行。

                  3.     分析過程功能

                  對于語句Call Fctor(I,Sum),由于此時的I22000的循環變量,SumI的因子和,因此我們可以判定Fctor的功能是求I的因子和,并將該和賦給Sum變量;根據Prime(Sum),我們可以判定Prime的功能是對Sum值進行是否是素數的判定,如果是,則返回True,否則返回False。

                  步驟二: 從通用過程入手, 逐過程輸入并逐過程調試.

                  核心技巧是將通用過程輸入后, 根據步驟一中分析出的各過程的功能,用含有具體參數值的過程調用語句來調試過程, : 給定確定的輸入, 看有無準確的輸出或者反饋。

                  那么如何構造含有具體參數值的過程調用語句呢?

                  對于Function過程,由于有輸入參數和返回值,因此比較好構造調用調試語句。譬如,對于Prime過程,由步驟一中我們已經知道其作用是用于判斷輸入參數是否為素數,如果為素數則返回True,否則返回False。因此我們可以構造:

                  Print Prime(7);Prime(10)

                  為此,我們只要在窗體上放置一個按鈕Command1,在Command1_Click中輸入Print Prime(7);Prime(10)即可,若輸出為“True  False”,則該過程正確。如此操作,調試結果為:

                  調試提示

                  由此,我們將Exit Sub修改為Exit Function,運行正確。

                  對于Sub過程,其沒有返回值,因此該過程的反饋信息將可以通過兩種方式得到,一種是直接在Sub中使用輸出語句顯示運行結果;一種是利用按地址傳遞的參數將反饋信息由被改變的實參帶出。對于FctorN,S)過程,根據步驟一,知其功能是,求N的因子和并由S帶出。為此,首先,我們根據給定的可以設定N16。

                                1.       輸入Prime過程, print prime(7),prime(10)來調試;

                                2.       輸入fctor過程,

                        dim s as integer

                        call fctor(16,s)

                        print s

                     來調試.

                  步驟三: 對于事件過程, 若代碼較長, 則逐程序塊輸入并調試(程序塊通常以循環來區分)

                          核心技巧: 在事件過程中, 將完成對通用過程的調用組裝, 因此特別留意以下三點:

                  循環:注意循環變量的初值、終值和步長以及累積量的初值。

                  數組:元素從0開始還是從1開始。

                  過程:注意參數傳遞(Byval、 ByRef),返回值類型,調用形式,具體的說包括:

                        1.       實參與形參類型是否一致.

                  2.       參數傳遞方法(ByValByRef)是否正確

                  3.       循環調用時, 同一變量調用前后值有無干涉,具體體現在: 前值沒有清空遺留在后值中或者動態數組元素未清空等, 此時錯誤表現在: 清空語句放置位置不對.

                  四、總結:

                                1.       思維過程是微觀到宏觀

                  體現在: 由題意及變量含義推斷過程作用; 逐過程輸入調試后再進行事件工程中的調用和組裝;

                  2.       在調試通用過程時, 應用了數學中的特殊值法;

                  3.       在組裝事件過程時, 應用了工程中的經驗法。

                  亚洲欧美日韩国产一区二区三区_全亚洲免费一级黄片_国产一区二区三区不卡视频手机版_国产污三级网站在线观看