资源描述
四、程序改错 共7题
第1题 题号:7
'【题目】从10个各不相同的正整数中,剔除若干个数。使得保留下来的数中,
' 任意两个数的和都不是平方数
'(所谓平方数就是该数等于某一个数的平方,例如4就是一个平方数)。
Option Explicit
Option Base 1
Private Sub Command1_Click()
Dim a(10) As Integer, i As Integer, j As Integer, p As Integer, k As Integer
'**********FOUND**********
Do While p <= 10
k = Int(20 * Rnd) + 1
For j = 1 To p
'**********FOUND**********
If k = a(j) Then Exit Do
Next j
If j > p Then
p = p + 1
a(p) = k
Text1 = Text1 & Str(k)
End If
Loop
Call delete(a, p)
For i = 1 To p
Text2 = Text2 & Str(a(i))
Next i
End Sub
Private Sub delete(a() As Integer, p As Integer)
Dim idx As Integer, j As Integer, sum As Integer
idx = 2
Do While idx < p
For j = 1 To idx - 1
sum = a(idx) + a(j)
If Int(Sqr(sum)) = Sqr(sum) Then Exit For
Next j
'**********FOUND**********
If j > idx - 1 Then
a(idx) = a(p)
p = p - 1
Else
idx = idx + 1
End If
Loop
End Sub
答案:
=======(答案1)=======
Do While p < 10
=======(答案2)=======
If k = a(j) Then Exit For
=======(答案3)=======
If j <= idx - 1 Then
第2题 题号:8
'【题目】本程序的功能是生成一组(10个)两位的互质数。
'一组互质数是指其中任意两个数之间都不存在除1以外的任何公约数。
Private Sub Command1_Click()
Dim i As Integer, k As Integer, num(10) As Integer
Dim flag As Boolean, n As Integer
num(1) = Int(Rnd * 90) + 10
k = 1
Do
'**********FOUND**********
flag = True
n = Int(Rnd * 90) + 10
For i = 1 To k
If gcd(num(i), n) <> 1 Then flag = False
Next i
If flag Then
k = k + 1
num(k) = n
End If
Loop Until k = 10
For i = 1 To 10
Text1 = Text1 & Str(num(i))
Next i
End Sub
'**********FOUND**********
Private Function gcd(m%, ByVal n%) As Integer
Dim r As Integer
Do
r = m Mod n
m = n
n = r
Loop Until r = 0
'**********FOUND**********
gcd = n
End Function
答案:
=======(答案1)=======
flag = False
=======(答案2)=======
Private Function gcd(ByVal m%, ByVal n%) As Integer
=======(答案3)=======
gcd = m
第3题 题号:9
'【题目】本程序的功能是:把10~20范围内的数分别表示成若干个质因子连乘的形式。
Option Explicit
Option Base 1
Private Sub Command1_Click()
Dim j As Integer, pf() As Integer, i As Integer
Dim st As String
For i = 10 To 20
Call prime_f(i, pf)
st = CStr(i) & "="
'**********FOUND**********
For j = 1 To UBound(pf)
st = st & Str(pf(j)) & "*"
Next j
st = st & Str(pf(j))
List1.AddItem st
Next i
End Sub
'**********FOUND**********
Private Sub prime_f(n As Integer, a() As Integer)
Dim i As Integer, k As Integer
i = 2
Do
If n Mod i = 0 Then
k = k + 1
ReDim Preserve a(k)
a(k) = i
n = n \ i
Else
i = i + 1
End If
'**********FOUND**********
Loop Until n <= 0
End Sub
答案:
=======(答案1)=======
For j = 1 To UBound(pf) - 1
=======(答案2)=======
Private Sub prime_f(ByVal n As Integer, a() As Integer)
=======(答案3)=======
Loop Until n <= 1
第4题 题号:1
'[题目]本程序的功能是:查找800-1200范围内的所有具有两个相同数字的素数。
'例如811、877等都是符合要求的数据。
Option Explicit
Private Sub Command1_Click()
Dim i As Integer
For i = 800 To 1200
If validate(i) And prime(i) Then
List1.AddItem i
End If
Next i
End Sub
'**********FOUND**********
Private Function validate(n As Integer) As Boolean
Dim num() As Integer, k As Integer
Dim i As Integer, j As Integer
Do
k = k + 1
'**********FOUND**********
ReDim num(k)
num(k) = n Mod 10
n = n \ 10
Loop Until n <= 0
k = 0
For i = 1 To UBound(num) - 1
For j = i + 1 To UBound(num)
If num(i) = num(j) Then k = k + 1
Next j
Next
If k = 1 Then validate = True
End Function
Private Function prime(n As Integer) As Boolean
Dim i As Integer
For i = 2 To Sqr(n)
'**********FOUND**********
If n Mod i = 0 Then Exit For
Next i
prime = True
End Function
答案:
=======(答案1)=======
Private Function validate(Byval n As Integer) As Boolean
=======(答案2)=======
ReDim Preserve num(k)
=======(答案3)=======
If n Mod i = 0 Then Exit Function
第5题 题号:4
'题目:本程序功能是查找给定范围内满足以下条件的整数数对。
'条件1是每个整数的各位数字各不相同,且不得为数字0,
'条件2是第二个数等于第一个数的两倍。
'例如123和246就是符合条件的数对。
Option Explicit
Private Sub Command1_Click()
Dim i As Integer
Dim n As Integer
For i = 123 To 5678
n = i * 2
If fun(i) And fun(n) Then
List1.AddItem "(" & i & "," & n & ")"
End If
Next i
End Sub
'**********FOUND**********
Private Function fun(n As Integer) As Boolean
Dim a() As Integer, i As Integer, j As Integer
Do
i = i + 1
ReDim Preserve a(i)
a(i) = n Mod 10
If a(i) = 0 Then Exit Function
n = n \ 10
'**********FOUND**********
Loop Until n < 0
For i = 1 To UBound(a) - 1
For j = i + 1 To UBound(a)
'**********FOUND**********
If a(i) = a(j) Then Exit For
Next j
Next i
fun = True
End Function
答案:
=======(答案1)=======
Private Function fun(ByVal n As Integer) As Boolean
=======(答案2)=======
Loop Until n = 0
=======(答案3)=======
If a(i) = a(j) Then Exit Function
第6题 题号:3
'[题目]本程序的功能是:随机生成一个有n个元素的数组(n由inputBox函数),
'找出其中的最大元素并将它删除,再输出删除后的数组。
Option Explicit
Option Base 1
Dim a() As Integer, n As Integer
Private Sub Command1_Click()
Dim i As Integer
n = InputBox("请输入数组个数", , 10)
ReDim a(n)
For i = 1 To n
a(i) = Int(Rnd * 100) + 1
Text1 = Text1 & Str(a(i))
Next i
Call Lookup(a)
'**********FOUND**********
For i = 1 To n
Text2 = Text2 & Str(a(i))
Next i
End Sub
Private Sub Lookup(a() As Integer)
Dim Maxv As Integer, maxp As Integer, i As Integer
Maxv = a(1): maxp = 1
For i = 2 To n
If a(i) > Maxv Then
Maxv = a(i): maxp = i
End If
Next i
Call move_f(a, maxp)
End Sub
Private Sub move_f(a() As Integer, k As Integer)
Dim i As Integer
For i = k + 1 To UBound(a)
'**********FOUND**********
a(i) = a(i + 1)
Next i
'**********FOUND**********
ReDim a(UBound(a) - 1)
End Sub
答案:
=======(答案1)=======
For i = 1 To n-1
=======(答案2)=======
a(i-1) = a(i)
=======(答案3)=======
ReDim Preserve a(UBound(a) - 1)
第7题 题号:10
'【题目】本程序的功能是:找出介于100、999之间的由三个不同数字组成的完全平方数。
'所谓完全平方数是指平方根为整数的数。例如,529的各位数字不同,且平方根是23,
'所以529是符合要求的数。
Option Explicit
Option Base 1
Private Sub Command1_Click()
Dim i As Integer, p As Single
For i = 100 To 999
If pf(i) And verify(i) Then
p = Sqr(i)
List1.AddItem i & "=" & p & "*" & p
End If
Next i
End Sub
Private Function pf(n As Integer) As Boolean
If Sqr(n) = Int(Sqr(n)) Then pf = True
End Function
'**********FOUND**********
Private Function verify(n As Integer) As Boolean
Dim a() As Integer, k As Integer, i As Integer, j As Integer
Do
k = k + 1
ReDim Preserve a(k)
a(k) = n Mod 10
n = n \ 10
'**********FOUND**********
Loop Until n < 0
For i = 1 To UBound(a) - 1
For j = i + 1 To UBound(a)
'**********FOUND**********
If a(i) = a(j) Then Exit For
Next j
Next i
verify = True
End Function
答案:
=======(答案1)=======
Private Function verify(ByVal n As Integer) As Boolean
=======(答案2)=======
Loop Until n <= 0
=======(答案3)=======
If a(i) = a(j) Then Exit Function
展开阅读全文