❶ VB程序改錯請教
你這是個子程序或模塊,單獨看不出問題了,需要前後結合一下看錯在哪裡
❷ VB程序改錯 數組類 求助 100分懸賞
'數組a有9個元素,本程序按照序號依次將(a1,a2,a3),(a2,a3,a4),......,(a9,a1,a2)
'九組元素分別相加(每組三個元素),生成新數組b,然後找出b數組中最大元素。
'
'原程序如下,程序中有錯,修改時不得增加或者刪除語句。謝謝!
Private Sub Form_Click()
Dim i As Integer, a(9) As Integer, b(9) As Integer
Dim k As Integer, m As Integer
For i = 1 To 9
a(i) = i
Print a(i);
Next i
Print
For k = 3 To 11
s = 0
For i = 0 To -2 Step -1
'm = k + 1 '*******************
m = k - i - 2
'If m >= 9 Then m = m Mod 9 '***********
If m > 9 Then m = m Mod 9
s = s + a(m)
Next i
b(k - 2) = s
Print b(k - 2);
Next k
Print
Print "matrix b's max.element is :"; maxv(b)
End Sub
Private Function maxv(b() As Integer) As Integer
Dim i As Integer
maxv = b(1)
'For i = 2 To LBound(b) '***********
For i = 2 To UBound(b)
If maxv < b(i) Then maxv = b(i)
Next i
End Function
❸ vb程序改錯問題
Private Sub Form_Click()
Dim i%, j%, k%
For i = 0 To 3
For j = 0 To 2 - i
Print " ";'兩個空格或全形空格
Next j
'**********SPACE**********
For k = 0 To 2 * i
Print "*";
Next k
Print
Next i
For i = 0 To 2
For j = 0 To i
'**********SPACE**********
Print " ";'兩個空格或全形空格
Next j
For k = 0 To 4 - 2 * i
Print "*";
Next k
'**********SPACE**********
Print ""'沒有空格,列印空
Next i
End Sub
❹ vb改錯題技巧,急需
計算機等考二級VB改錯題技巧:三步過程法
一、改錯題解法現狀
許多同學為了掌握解決改錯題的技巧和方法,一方面著重熟練VB集成開發環境中調試工具的使用,另一方面歸納總結了近幾年來二級考試改錯題中涉及到的錯誤類型。這些對於提高應試能力無疑是有幫助的。但是在實際考試中,他們也發現,解答改錯題的方法淪為逐一去猜測錯誤類型,然後按模式來套解。毫無疑問,這一解法效率慢,正確率不高,而且即便正確解答出來,也有一種僥幸的感覺。之所以如此,根本的原因在於沒有抓住具體題目演算法邏輯特徵這一主線,因而單純的總結錯誤類型的意義也就不大了。
為此,我們可以採用一種比較完善的改錯題解法——「三步逐過程法」。
二、「三步逐過程法」解法說明
「三步逐過程法」核心是把握題目演算法邏輯特徵,按照「從整體到部分,再由部分到整體」的思路排查錯誤,調試程序,具體步驟可分為三步:
步驟一:把握題意,泛讀程序,分析程序組成和各過程的功能;
步驟二:從通用過程入手, 逐過程輸入並逐過程調試;
步驟三:輸入並調試事件過程,完成對各通用過程調用和組裝。
下面,我們結合一道改錯題來具體說明每個步驟中的方法和技巧。
三、「三步逐過程法」解改錯題舉例
以江蘇省二級VB上機考試中的一道考題為例。
已知下面程序的功能是找出2000以內這樣的正整數N: 它的不同值的因子(包括1和N在內)之和是一個素數。 例如: 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是由2到2000的循環變數,並且只有滿足Prime(Sum)為True的才能顯示到文本框,因此,我們知道Sum應該是I的因子和;對於輸出語句(2),後半句的功能是為了實現回車和換行,結合K
Mod 5=0以及逆向找出的K=K+1,我們知道,K的功能是為了控制輸出按照每5個換行進行。
3. 分析過程功能
對於語句Call
Fctor(I,Sum),由於此時的I為2到2000的循環變數,Sum為I的因子和,因此我們可以判定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中使用輸出語句顯示運行結果;一種是利用按地址傳遞的參數將反饋信息由被改變的實參帶出。對於Fctor(N,S)過程,根據步驟一,知其功能是,求N的因子和並由S帶出。為此,首先,我們根據給定的可以設定N為16.
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. 參數傳遞方法(ByVal與ByRef)是否正確
3. 循環調用時, 同一變數調用前後值有無干涉,具體體現在: 前值沒有清空遺留在後值中或者動態數組元素未清空等, 此時錯誤表現在:
清空語句放置位置不對。
四、總結:
1. 思維過程是微觀到宏觀
體現在: 由題意及變數含義推斷過程作用; 逐過程輸入調試後再進行事件工程中的調用和組裝;
2. 在調試通用過程時, 應用了數學中的特殊值法;
3. 在組裝事件過程時, 應用了工程中的經驗法。
希望幫到你 望採納 謝謝 加油
❺ VB程序改錯... 拜託 謝謝.....
請問錯誤定位在哪裡?
Dim c As Single
c = Val(InputBox("請輸入口令:", "輸入口令", 0))
If c = 123 Then
這里 C 為 string字元型吧?改為
Dim c As String
c = InputBox("請輸入口令:", "輸入口令", 0)
If c = "123" Then
❻ VB程序設計改錯
只在Form_Load里寫只會在窗體打開時改變
建一個Timer1,Enable為True
interval為1000
然後
Private Sub Timer1_Timer()
Dim h As Integer
Dim m As Integer
Dim s As Integer
x = x + 1
h = x \ 3600
m = (x Mod 3600) \ 60
s = x Mod 60
Label1.Caption = h & ":" & m & ":" & s
End Sub
❼ VB屬性設置及程序改錯題
第二個問題似乎上樓的都回答了,還有第一個問題設置快捷鍵的那個,在「開始」的caption屬性里輸入:&Start在「結束」的caption屬性里輸入:&End以後你就可以用Alt+s,Alt+E來操作了你試試?
❽ VB改錯調試
'程序修改如下:
Option Explicit
Private Sub Command1_Click()
Dim A(30) As Integer, i As Integer, k As Integer
For i = 1 To 30
A(i) = Int(900 * Rnd + 100)
Picture1.Print A(i);
If i Mod 5 = 0 Then Picture1.Print
Next i
Picture1.Print "升序數:"
For i = 1 To 30
If SX(A(i)) Then
Picture1.Print A(i);
k = k + 1
End If
Next i
If k = 0 Then Picture1.Print "無升序數"
Picture1.Print
End Sub
Private Function SX(ByVal N As Integer) As Boolean
Dim i As Integer, S As String
Dim w1 As Integer, w2 As Integer
S = Trim(Str(N))
For i = 2 To Len(S)
w1 = Mid(S, i - 1, 1)
w2 = Mid(S, i, 1)
If w1 > w2 Then Exit Function
Next i
SX = True
End Function
'祝你成功!
❾ 簡單vb程序改錯
我來說說吧,你這個程序太亂了,是用VBE,還是VBA編的吧,但是代碼卻是亂用了VB的。滾動條的名稱都對應不起來。還有VBA里不是用userform_load來初始化的,是用userform_Initialize.代碼改過來了。
Private Sub ComboBox1_Change()
TextBox1.Font.Name = ComboBox1.Text ' 把組合框的字體名賦給textbox
End Sub
Private Sub ScrollBar1_Change()
TextBox1.Font.Size = ScrollBar1.Value ' 把滾動條的字體大小賦給textbox
Label4.Caption = Str$(ScrollBar1.Value) ' 把滾動條的字體大小賦給label4
End Sub
Private Sub UserForm_Initialize()
ComboBox1.AddItem "宋體"
ComboBox1.AddItem "黑體"
ComboBox1.AddItem "隸書"
ComboBox1.AddItem "幼圓"
ScrollBar1.Min = 8: ScrollBar1.Max = 72
End Sub
你復制運行一下,程序里的控制項名要和你窗體上控制項名完全一致。 我運行了一下,貌似沒問題。
❿ VB程序改錯題!!!求指點!!(在線等!!)
第一區域:
For i = 1 To n - 1中的i = 1改為i=2即
For i = 2 To n - 1
第二區域:
Print Tab((k Mod 5) * 8); i在最後邊加個冒號改為
Print Tab((k Mod 5) * 8); i;
第三區域:
If k Mod 4 = 0 Then Print ;改為
If k Mod 5 = 0 Then Print ;