梦想的边缘

总有梦想,总在追寻,却总在梦想的边缘徘徊,直到有一天,明白了,原来自己的梦想就在这不停追寻之中......

导航

VB6.0改错题专项练习(一)

Posted on 2005-03-15 10:31  梦想的边缘  阅读(1967)  评论(3编辑  收藏  举报
改错题专项练习(一)
 
改错题要求
1.       新建工程,输入代码,改正程序中的错误。
2.       改错时,不得增加或删除语句。
3.       以Myfrm1的名字和Myprj1的名字分别将窗体和工程保存到软盘A的根目录下。
 
本专项练习共包括五题,每题30分钟,合计150分钟。请同学务必把握好解题时间。
 
 第一题
       本程序的功能是:从给定的字符〞age43dhbc765shdk8djfk65bdgth23end〃中找出所有的数(单个的数字或连续的数字都算一个数),并求出这些数的个数、总和及平均值(测试字符串含有5个数43、765、8、65、23,总和是904,平均值是180.8)。(2001秋VB02考题)
       含有错误的源程序如下:
 
Option Explicit
Option Base 1
Private Sub getn(s As String, ByVal d() As Integer)                  去掉ByVal
    Dim k As Integer, st As String, n As Integer, f As Boolean
    k = 1: n = 1
    Do Until n > Len(s)
        If Mid(s, n, 1) >= "0" And Mid(s, n, 1) <= "9" Then
             st = st & Mid(s, n, 1)
             f = True
        ElseIf f Then
             f = False
             ReDim Preserve d(k)
             d(k) =val( st)
             st = ""
             k = k + 1
        End If
        n = n + 1
    Loop
End Sub
 
Private Sub Form_Click()
   Dim p As String, num() As Integer, i As Integer
   Dim s As Integer, av As Integer                                         Dim s As Integer, av As Single
   p = "ags43dhbc765shdk8djfk65bdgth23end"
   Call getn(s, num)                                                             Call getn(p, num)
   For i = 1 To UBound(num)
       s = s + num(i)
       Print num(i)
   Next i
   Print
   av = s / UBound(num)
   Print "s="; s, "av="; av
End Sub

第二题

       本程序的功能是:验证在n与n!之间至少有一个素数,其中n>2。可输入n=4验证。(2001春VB05考题)
       含有错误的源程序如下:
 
Option Explicit
Private Sub Form_Click()
    Dim n As Integer, k As Long
    Dim m As Long, f As Integer
    n = Val(InputBox("请输入一个大于2的整数"))
    m = 0                                                                           ‘m=1
    For k = 1 To n
        m = m * k
    Next k
    For k = n + 1 To m - 1
        f = Flag(k)
        If f = 1 Then Exit For
    Next k
    If f = 0 Then                                                                 ‘If f = 1 Then
          Print n; "与"; m; "之间一个素数是"; k
    Else
          Print n; "与"; m; "之间没找到一个素数"
    End If
End Sub
 
Private Function Flag(n As Long) As Integer
    Dim I As Integer
    Flag = 1
    For I = 2 To Sqr(n)
        If n Mod I <> 0 Then                                             ‘If n Mod I = 0 Then
             Flag = 0
             Exit For
        End If
    Next I
End Function
 

第三题

       求下面数列的和,计算到第n项的值小于等于10-5为止。
     
其中 
 
 
 本程序若用x=0.5来测试,运行的正确结果为0.6480143。(2000秋VB05考题)
       含错误的源程序如下:
 
Option Explicit
Private Function Fib(N As Integer) As Integer
     If N = 1 Then
        Fib = 1
     ElseIf N = 2 Then
        Fib = 2
     Else
        Fib = Fib(N - 1) + Fib(N - 2)
     End If
End Function
 
Private Sub Form_Click()
    Dim N As Integer, S As Single, X As Single, A As Single
    Do
        X = InputBox("输入一个绝对值小于1的数:")
        If Abs(X) >= 1 Then Exit Do                                        ‘If Abs(X) <= 1 Then Exit Do     
    Loop
    S = X
    N = 1                                                                           ‘N = 2
    Do
        A = X ^ Fib(N) / (Fib(N - 1) * Fib(N))
        If Abs(A) <= e - 5 Then Exit Do                              ‘If Abs(A) <= 1e-5 Then Exit Do
        S = S + A
        N = N + 1
    Loop
    Print "s="; S
End Sub

第四题

       下面程序的功能是:将一个字符串中的相同字符调整到一块,得到一个新的字符串(下面为程序正确执行时的画面)。(2002秋VB04考题)
       含错误的源程序如下:


Option Explicit
Private Sub Command1_Click()
     Dim S As String
     S = Text1.Text
     Call sub1(S)
     Text2.Text = S
End Sub
Private Sub sub1(st As String)
    Dim I As Integer, L As Integer, K As Integer
    Dim P As Integer, AL As String * 1
    For I = 1 To Len(st)
         AL = Mid(st, I, 1)
         P = I - 1
         Do Until P >= 1                                                    ‘Do While P >= 1
             If AL = Mid(st, P, 1) Then
                  For K = I To P + 1                               ‘For K = I To P + 1 Step -1
                       Mid(st, K, 1) = Mid(st, K - 1, 1)
                  Next K
                  Mid(st, P, 1) = AL
                  Exit Do
             End If
             P = P + 1                                                      ‘P = P - 1
         Loop
     Next I
End Sub

第五题

下面是一个二分插入排序的程序。二分插入排序,是直接插入排序,是直接直接插入排序的一个改进,即将顺序查找插入位置,改为用二分法查找插入位置,元素的移动和插入处理基本相同。(2002秋VB08考题)
含错误的源程序如下:
Option Explicit
Option Base 1
Private Sub Form_Click()
    Dim A(10) As Integer, I As Integer
    For I = 1 To 10
       A(I) = Int(rnd * 20) + 1
       Print A(I);
    Next I
    Print
    For I = 2 To 10
         Call Insertion(A, K)                                              ‘Call Insertion(A, I)
    Next I
    For I = 1 To 10
        Print A(I)
    Next I
    Print
End Sub
Private Sub Insertion(S() As Integer, ByVal k As Integer)
    Dim L As Integer, R As Integer, M As Integer
    Dim Tem As Integer
    L = 1: R = k - 1
    Tem = S(k)
    Do While L < R                                                             ‘Do While L <= R
        M = (L + R) / 2
        If S(M) < S(k) Then
            L = M + 1
        Else
            R = M - 1
        End If
    Loop
    Do Until k = L
        S(k) = S(k - 1)
        k = k + 1                                                                      ‘k = k - 1
    Loop
    S(k) = Tem
End Sub