1、四、程序改错 共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 <
2、 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)
3、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
4、)) = 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
5、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 '****
6、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 '****
7、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%) A
8、s 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 = CSt
9、r(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 Inte
10、ger, 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 =====
11、答案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
12、 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 +
13、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 I
14、f 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
15、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 Comman
16、d1_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
17、 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 T
18、o 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
19、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
20、 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
21、 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**********
22、 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之间的由三个不同数字组成的完全平方数。 '所谓完全平方数是指平
23、方根为整数的数。例如,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 N
24、ext 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 R
25、eDim 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






