江苏 2025 年(春)上机 Visual Basic 答案一、改错【题目】本程序的功能如下图所示,将输入的一个由数字字符组成的字符串,从第一位、第二位……直到倒数第二位,依次取两位数据,得到一组两位整数输出到列表框 1,再将其中的素数选择出来输出到列表框 2(注意,假如截取到的两位数字,第一位为 0,例如 05,则无效,将其丢弃)。Option ExplicitPrivate Sub Command1_Click() Dim st As String, num() As Integer Dim k As Integer, i As Integer st = Text1 i = 1: k = 1 Do If Mid(st, i, 1) <> "0" Then ReDim Preserve num(k) 'err 无 Preserve num(k) = Val(Mid(st, i, 2)) List1.AddItem num(k) k = k + 1 End If i = i + 1 Loop While i < Len(st) 'err i <= Len(st) For i = 1 To UBound(num) If prime(num(i)) Then List2.AddItem num(i) Next iEnd SubPrivate Function prime(n As Integer) As Boolean Dim i As Integer For i = 2 To Sqr(n) If n Mod i = 0 Then Exit Function 'err Exit For Next i prime = TrueEnd Function二、编程题【题目】编写程序,将 10~5000 之间的一组数据,变换到(0, 1)区间。变换的方法是,找出这组数据中的最大数,用大于它的第一个能被 100 整除的数 n ,分别除以这组数据中的每个数。例如,在下图数据中最大数为 4810,则 n 为 4900,用所有数据除以 4900 进行变换。Option ExplicitOption Base 1Dim a(20) As IntegerPrivate Sub Command1_Click() Dim i As Integer, j As Integer For i = 1 To 20 a(i) = Int(Rnd * (4999 - 10 + 1)) + 10 Text1.Text = Text1 & Str(a(i)) If i Mod 5 = 0 Then Text1.Text = Text1 & vbCrLf Next iEnd SubPrivate Sub Command2_Click() Dim i As Integer, n As Integer n = ((maxv \ 100) + 1) * 100 For i = 1 To 20 List1.AddItem a(i) & "---" & CSng(a(i) / n) Next iEnd SubPrivate Function maxv() As Integer Dim i As Integer maxv = a(1) For i = 2 To 20 If maxv < a(i) Then maxv = a(i) Next iEnd FunctionPrivate Sub Command3_Click() Text1.Text = "" List1.Clear Command1.SetFocusEnd Sub