程序调试题答案
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个[0,99]范围内的随机整数
'每行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
'统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数
'并将统计结果保存在数组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
'随机产生0或1,为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个[1,20]之间互不相同的随机整数
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