程序调试题答案

1.----------------------------------------------------------------------------------------------------------------

Public Function nFactor(ByVal n As Integer) As Double

    Dim i As Integer

    Dim temp As Double

    temp=1          ’----1----

    For i = 1 To n

        temp = temp * i

    Next i

     nFactor = temp             ‘----2----

End Function

 

Public Sub summary()

    Dim sum As Double

    Dim i As Integer

    Dim n As Integer

    n = 20

    For i = 1 To n

        sum = sum + nFactor (i)              ’----3----

    Next i

    Form1.Print "sum=" & sum              ‘----4----

End Sub

2. ----------------------------------------------------------------------------------------------------------------

Public Sub calculate()

    Dim a(1 To 100) As Integer

    Dim x(1 To 10) As Integer

    Dim i As Integer, p As Integer

    '产生100[099]范围内的随机整数

    '每行10个打印出来

    For i = 1 To 100

        '******** 错误1 ***********

        a(i) = Int(Rnd * 100)

        If a(i) < 10 Then

            Form1.Print Space(2); a(i);

        Else

            Form1.Print Space(1); a(i);

        End If

        If i Mod 10 = 0 Then Form1.Print

    Next i

    '统计个位上的数字分别为1234567890的数的个数

    '并将统计结果保存在数组x(1),x(2),...,x(10)中,将统计结果打印出来

    For i = 1 To 100

        '******** 错误2 **********

        p = a(i) Mod 10  '求个位上的数字

        If p = 0 Then p = 10

        '******** 错误3 **********

        x(p) = x(p) + 1

    Next i

    Form1.Print "统计结果"

    For i = 1 To 10

        p = i

        If i = 10 Then p = 0

        '******** 错误4 *********

        Form1.Print "个位数为" + Str(p) + "" + Str(x(i)) + ""

    Next i

End Sub

3. ----------------------------------------------------------------------------------------------------------------

Public Sub Findat()

    '在字符串str1中查找"at"

    Dim str1 As String

    Dim length As Integer '字符串长度

    Dim sum As Integer  '查到的个数

    Dim i As Integer

    str1 = InputBox("请输入一个字符串")

    length =len(str1)           ‘ ----1----

     i = 1

    sum = 0

    Do While i <=length            ‘ ----2----

        If mid(str1,i,2) = "at" Then          ‘----3----

            sum = sum + 1

        End If

        i = i + 1

    Loop

    If sum=0 Then                                     ‘----4----

        MsgBox "没有找到!"

    Else

        MsgBox "找到了" & Str(sum) & ""

    End If

End Sub

4. ----------------------------------------------------------------------------------------------------------------

Public Sub Guess()

    Dim R As Integer

    Dim X As Integer

    Dim times As Integer

    Randomize

    '****** 错误1 ******

    R =Int( Rnd * 100)+1 '产生一个1--100 的任意整数

    times = 1

    Do

        X = Val(InputBox("输入猜数X"))

        Select Case X

            Case R

                Form1.Print "猜中了"

                Exit Do

        '***** 错误2 ******

            Case Is> R

                 Form1.Print "太大了,继续猜!"

            Case Else

                Form1.Print "太小了,继续猜!"

        End Select

        times = times + 1

    '****** 错误3 ******

    Loop While times<= 5

    If times > 5 Then

        Form1.Print "猜数失败,游戏结束!"

        '****** 错误4 ******

        Form1.Print "正确答案为" & Str(R)

    End If

End Sub

5. ----------------------------------------------------------------------------------------------------------------

Public Sub ArmstrongNumber()

    Dim armstrong As Integer

    Dim i As Integer

    Dim hundred As Integer '百位上的数字

    Dim ten As Integer '十位上的数字

    Dim one As Integer '个位上的数字

    For i = 1 To 999

        hundred = i\100                         ‘----1----

        ten = (I Mod 100)\10               ‘----2----

        one = I Mod 10                       ‘----3----

        If  I=hundred^3+ten^3+one^3  Then                                      ‘----4----

            Form1.Print i; "is armstrong number"

        End If

    Next i

End Sub

6. ----------------------------------------------------------------------------------------------------------------

Public Sub CountTo60()

    '从一堆一分、二分、五分的硬币中取出20枚,使其总值为60

    '输出取法的数量及每一种取法的一分、二分、五分的个数

    Dim one As Integer '一分硬币个数

    Dim two As Integer '二分硬币个数

    Dim five As Integer '五分硬币个数

    Const n = 20 '总数20

    Dim k As Integer  '取法数量

    k = 0

    For one = 1 To n

        '******* 错误1 ********

        For two = 1 To n-one

            five = n - one - two

            '******* 错误2 *********

            If one + two*2 + five*5 = 60 Then

                k = k + 1

                Form1.Print "one="; one; "two="; two; "five="; five

            End If

        '******* 错误3 ********

        Next two

    '****** 错误4 ******

    Next one

    Form1.Print "k="; k

End Sub

7. ----------------------------------------------------------------------------------------------------------------

Private Const n = 10

Private a(1 To n) As Integer

'TJ过程是将一批数据中小于零的数及它们的积打印出来

'数据由SCSJ过程产生,数据的取值范围为-10 ~ 10 之间的随机整数

 

Public Sub TJ()

    Dim i As Integer

    Dim t As Single

    t=1                       ‘-------- 1 --------

    For i = 1 To 10

        If a(i)<0 Then        ‘-------- 2 --------

            t = t * a(i)

        End If

    Next i

    Form1.Print "T="; t

End Sub

 

Public Sub SCSJ()

    Randomize

    Form1.Print "原始数据"

    Dim i As Integer

    Dim j As Integer

    For i = 1 To n

        '随机产生01,为0时取负,为1时取正

        j = Int(Rnd * 2)

        If  j=0  Then J = -1         ‘------ 3 -----

        a(i) = j * Int(Rnd * (n + 1))

        Form1.Print a(i);

    Next i

    Form1.Print

End Sub

8. ----------------------------------------------------------------------------------------------------------------

Dim salary(7) As Integer

Public Sub Money()

    Dim hundred As Integer, totalhundred As Integer '100元票面数量、总数量

    Dim fifty As Integer, totalfifty As Integer '50元票面数量、总数量

    Dim ten As Integer, totalten As Integer '10元票面数量、总数量

    Dim five As Integer, totalfive As Integer '5元票面数量、总数量

    Dim one As Integer, totalone As Integer '1元票面数量、总数量

    Dim totalsalary As Integer '工资总计

    Dim i As Integer, temp As Integer

    totalhundred = 0

    totalfifty = 0

    totalten = 0

    totalfive = 0

    totalone = 0

    totalsalary = 0

    For i = 1 To 7

        temp = salary (i)            ‘----1----

        hundred = Int(temp / 100)

        temp = salary (i) Mod 100 ‘----2----

        fifty = Int(temp / 50)

        temp = temp - fifty * 50

        ten = Int(temp / 10)

        temp = temp - ten * 10

        five = Int(temp / 5)

        temp = temp - five * 5

        one = temp          ‘----3----

        totalhundred = totalhundred + hundred

        totalfifty = totalfifty + fifty

        totalten = totalten + ten

        totalfive = totalfive + five

        totalone = totalone + one

        totalsalary = totalfifty + totalten+ totalfive+ totalone             ‘----4----

    Next i

    Form1.Print "共需100" & Str(totalhundred) & ""

    Form1.Print "共需50" & Str(totalfifty) & ""

    Form1.Print "共需10" & Str(totalten) & ""

    Form1.Print "共需5" & Str(totalfive) & ""

    Form1.Print "共需1" & Str(totalone) & ""

    Form1.Print "合计" & Str(totalsalary) & ""

End Sub

 

Public Sub SalaryData()

    salary(1) = 1398

    salary(2) = 1765

    salary(3) = 689

    salary(4) = 1500

    salary(5) = 832

    salary(6) = 590

    salary(7) = 1200

End Sub

9. ----------------------------------------------------------------------------------------------------------------

Dim a(1 To 5, 1 To 4) As Integer

Dim ave(1 To 5) As Integer

Public Sub MaxLine()

    Dim i As Integer

    Dim j As Integer

    Dim temp As Integer

    Dim Line_no As Integer '最大平均值的行号

    '找出最大平均值所在行

    Line_no = 1

    For i = 2 To 5

        '****** 错误1 *******

If  ave(Line_no) < ave(i) Then

        '****** 错误2 *******

        Line_no = i

        End If

    Next i

    '交换第一行与最大平均值所在行

    For j = 1 To 4

        temp = a(1, j)

        '****** 错误3 ******

        a(1, j)= a (Line_no, j)

        a (Line_no, j) = temp

    Next j

    '交换对应行的平均值

        temp = ave(1)

        ave(1) = ave(Line_no)

        ave(Line_no) = temp

    '打印交换后的数据

    Form1.Print "交换后的数据和平均值"

    PrintArray

End Sub

 

Public Sub DataProduce()

    Dim i As Integer

    Dim j As Integer

    '产生5*4数组

    For i = 1 To 5

        For j = 1 To 4

            a(i, j) = Int(100 * Rnd)

        Next j

    Next i

End Sub

 

Public Sub Average()

    Dim i As Integer

    Dim j As Integer

    Dim sum As Integer

    '计算各行平均值

    For i = 1 To 5

        sum = 0

        For j = 1 To 4

        '****** 错误4 ******

        sum = sum +a(i, j)

        Next j

        ave(i) = sum / 4

    Next i

    '将数组和平均值打印出来

    Form1.Print "原始数据和平均值"

    PrintArray

End Sub

 

Public Sub PrintArray()

    Dim i As Integer

    Dim j As Integer

    For i = 1 To 5

        For j = 1 To 4

            Form1.Print a(i, j); Spc(3);

        Next j

        Form1.Print "平均值="; ave(i)

    Next i

End Sub

10. ----------------------------------------------------------------------------------------------------------------

Public Sub Wrap()

    Dim length As Integer

    Dim str1 As String

    Dim strleft As String

    Dim strright As String

    Dim k As Integer

    str1 = InputBox("请输入任意的字符串") '输入任意字符串

    '****错误1*****

    length = Len(str1)

    k = 1

    Do

        '****错误2*****

        strleft = Mid(str1, k,1) '从左边起逐个取出一个字符

        '****错误3*****

        strright = Mid(str1,length- k,1)  '从右边起逐个取出一个字符

        '****错误4****

        If strleft<> strright Then

            Exit Do

        End If

        k = k + 1

    Loop While k <= length / 2

    If k > length / 2 Then

        Form1.Print str1 & "是回文"

    Else

        Form1.Print str1 & "不是回文"

    End If

End Sub

11. ----------------------------------------------------------------------------------------------------------------

Private Const n = 10

Private a(1 To n) As Integer

'BubbleSort过程是冒泡排序

'Swap过程交换两个变量数值

'GenerateData过程产生10[120]之间互不相同的随机整数

 

Public Sub BubbleSort()

    Dim i As Integer, j As Integer

    i = 1

    Do

        For j = i + 1 To n

            If a(j) > a(i) Then

            '******* 1 *********

                Call Swap (a(j), a(i))

            End If

        Next j

        i = i + 1

    '******* 2 *******

    Loop While I<= n

    Form1.Print "排序结果"

    For i = 1 To n

        Form1.Print a(i);

    Next i

End Sub

Public Sub GenerateData()

    Dim i As Integer

    Dim j As Integer

    Dim b As Boolean

    For i = 1 To n

        b = False

        Do While Not b

            a(i) = Int(20 * Rnd + 1)

            b = True

            '****** 3 ******

            For j = 1 To I-1

                If a(i) = a(j) Then

                    b = False

                    Exit For

                End If

            Next j

        Loop

        Form1.Print a(i)

    Next i

End Sub

'******** 4 ********

Public Sub Swap(a As Integer, b As Integer)

    Dim temp As Integer

    temp = a

    a = b

    b = temp

End Sub

12. ----------------------------------------------------------------------------------------------------------------

Public Sub Transfer()

    Dim Hex As String '十六进制数

    Dim Dec As Double '十进制数

    Dim temp As String

    Dim i As Integer

    Dim n As Integer

    Hex = InputBox("输入一个十六进制整数")

    '****** 错误1 *******

    n = Len(Hex)

    i = 0

    Do

        '****** 错误2 *******

        temp = Mid(Hex, n-i, 1)

        '****** 错误3 *******

        Dec = Dec + number(temp) * 16 ^ i

        i = i + 1

    Loop While i < n

    '****** 错误4 ******

    Form1.Print Hex & "转换为十进制数为" & str(Dec)

End Sub

 

Public Function number(str As String) As Integer

    Select Case str

        Case "a", "A"

            number = 10

        Case "b", "B"

            number = 11

        Case "c", "C"

            number = 12

        Case "d", "D"

            number = 13

        Case "e", "E"

            number = 14