鸭子tv国产极品在线观看_成人69视频在线播放_91精品免费在线观看_亚洲AT永久偷窥无码精品_国产精品自产拍在线观看涩浪潮久

江蘇省高校計(jì)算機(jī)等級(jí)考試命題研究院 江蘇省高校計(jì)算機(jī)等級(jí)考試輔導(dǎo)
三步逐過(guò)程法”解二級(jí)VisualBasic上機(jī)考試改錯(cuò)題
 

“三步逐過(guò)程法”解二級(jí)VisualBasic上機(jī)考試改錯(cuò)題

曹蘇群 

http://caosuqun.bokee.com/

一、改錯(cuò)題解法現(xiàn)狀

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

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

二、“三步逐過(guò)程法”解法說(shuō)明

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

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

步驟二:從通用過(guò)程入手, 逐過(guò)程輸入并逐過(guò)程調(diào)試;

步驟三:輸入并調(diào)試事件過(guò)程,完成對(duì)各通用過(guò)程調(diào)用和組裝。

下面,我們結(jié)合一道改錯(cuò)題來(lái)具體說(shuō)明每個(gè)步驟中的方法和技巧。

三、“三步逐過(guò)程法”解改錯(cuò)題舉例

以江蘇省二級(jí)VB上機(jī)考試中的一道考題為例。

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

含有錯(cuò)誤的源程序如下:

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                    

“三步逐過(guò)程法”解題步驟:

     

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

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

 程序結(jié)構(gòu)圖      

    那么,我們?nèi)绾畏治龀龈鱾(gè)過(guò)程的功能呢?

        核心技巧是從輸出語(yǔ)句著手, 逆向推導(dǎo), 分析各變量的含義, 進(jìn)而根據(jù)過(guò)程的輸入?yún)?shù)及其輸出或者反饋, 分析出此過(guò)程的功能。

1.     標(biāo)記出輸出語(yǔ)句

輸出語(yǔ)句有兩句:

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

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

2.     逆向推導(dǎo),分析各變量的含義

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

3.     分析過(guò)程功能

對(duì)于語(yǔ)句Call Fctor(I,Sum),由于此時(shí)的I22000的循環(huán)變量,SumI的因子和,因此我們可以判定Fctor的功能是求I的因子和,并將該和賦給Sum變量;根據(jù)Prime(Sum),我們可以判定Prime的功能是對(duì)Sum值進(jìn)行是否是素?cái)?shù)的判定,如果是,則返回True,否則返回False。

步驟二: 從通用過(guò)程入手, 逐過(guò)程輸入并逐過(guò)程調(diào)試.

核心技巧是將通用過(guò)程輸入后, 根據(jù)步驟一中分析出的各過(guò)程的功能,用含有具體參數(shù)值的過(guò)程調(diào)用語(yǔ)句來(lái)調(diào)試過(guò)程, : 給定確定的輸入, 看有無(wú)準(zhǔn)確的輸出或者反饋。

那么如何構(gòu)造含有具體參數(shù)值的過(guò)程調(diào)用語(yǔ)句呢?

對(duì)于Function過(guò)程,由于有輸入?yún)?shù)和返回值,因此比較好構(gòu)造調(diào)用調(diào)試語(yǔ)句。譬如,對(duì)于Prime過(guò)程,由步驟一中我們已經(jīng)知道其作用是用于判斷輸入?yún)?shù)是否為素?cái)?shù),如果為素?cái)?shù)則返回True,否則返回False。因此我們可以構(gòu)造:

Print Prime(7);Prime(10)

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

調(diào)試提示

由此,我們將Exit Sub修改為Exit Function,運(yùn)行正確。

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

              1.       輸入Prime過(guò)程, print prime(7),prime(10)來(lái)調(diào)試;

              2.       輸入fctor過(guò)程,

      dim s as integer

      call fctor(16,s)

      print s

   來(lái)調(diào)試.

步驟三: 對(duì)于事件過(guò)程, 若代碼較長(zhǎng), 則逐程序塊輸入并調(diào)試(程序塊通常以循環(huán)來(lái)區(qū)分)

        核心技巧: 在事件過(guò)程中, 將完成對(duì)通用過(guò)程的調(diào)用組裝, 因此特別留意以下三點(diǎn):

循環(huán):注意循環(huán)變量的初值、終值和步長(zhǎng)以及累積量的初值。

數(shù)組:元素從0開(kāi)始還是從1開(kāi)始。

過(guò)程:注意參數(shù)傳遞(Byval、 ByRef),返回值類型,調(diào)用形式,具體的說(shuō)包括:

      1.       實(shí)參與形參類型是否一致.

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

3.       循環(huán)調(diào)用時(shí), 同一變量調(diào)用前后值有無(wú)干涉,具體體現(xiàn)在: 前值沒(méi)有清空遺留在后值中或者動(dòng)態(tài)數(shù)組元素未清空等, 此時(shí)錯(cuò)誤表現(xiàn)在: 清空語(yǔ)句放置位置不對(duì).

四、總結(jié):

              1.       思維過(guò)程是微觀到宏觀

體現(xiàn)在: 由題意及變量含義推斷過(guò)程作用; 逐過(guò)程輸入調(diào)試后再進(jìn)行事件工程中的調(diào)用和組裝;

2.       在調(diào)試通用過(guò)程時(shí), 應(yīng)用了數(shù)學(xué)中的特殊值法;

3.       在組裝事件過(guò)程時(shí), 應(yīng)用了工程中的經(jīng)驗(yàn)法。