posts - 70,comments - 80,trackbacks - 0

[题目9]下面程序的功能是:找出所有各位数字互不相同的四位数,该数本身为素数,且各位数字均为素数.本题界面见图1.

答:o_vb5-9.JPG

源程序:

Dim a(4) As Integer

Private Sub Command1_Click()

   Dim n As Integer

   For n = 1000 To 9999

If prime(n) And pf(n) And np(a) Then

  List1.AddItem n

End If

Next n

End Sub

Private Function prime(ByVal n As Integer) As Boolean

   Dim I As Integer

   For I = 2 To Sqr(n)

       If n Mod I = 0 Then Exit Function

   Next I

   prime = True

End Function

Private Function pf(ByVal n As Integer) As Boolean

    Dim I As Integer

    pf = True

    Do

      I = I + 1

      a(I) = n Mod 10

      If a(I) < 2 Or Not prime(a(I)) Then pf = False

       n = n \ 10

   Loop Until n <= 0

 End Function

 Private Function np(a() As Integer) As Boolean

    Dim I As Integer, j As Integer

      np = True

    For I = 1 To UBound(a) - 1

        For j = I + 1 To UBound(a)

           If a(I) = a(j) Then np = False

        Next j

    Next I

End Function

 

[题目10]编写程序找出最小公倍数是9828的3个连续的自然数.

[编程要求]

1.   程序参考界面如图2所示,编程时不得增加或减少界面对象或改变对象的种类,窗体及界面元素大小适中,且均可见.;

2.   单击”运行”按钮,找出符合条件的3个连续的自然数,按图示格式输出到文本框中;

3.单击”清除”按钮,则将文本框清空,焦点置于”运行”按钮;单击”退出”按钮,结束程序运行;

4.   程序中必须包含一个求最小公倍数的通用过程.

答:o_vb5-10.JPG

源程序:

Private Function gbs(ByVal m As Integer, n As Integer) As Long

Dim t As Integer, s As Long

s = m * n

Do

    t = m Mod n

    m = n

    n = t

Loop Until (n = 0)

gbs = s / m

End Function

 

Private Sub Command1_Click()

Dim n As Integer, t1 As Long

n = 1

Do

    n = n + 1

    t1 = gbs(n, n + 1)

    t1 = gbs(t1, n + 2)

Loop Until (t1 = 9828)

Text1 = Text1 & n & "," & n + 1 & "," & n + 2 & "的最小公倍数是:9828"

End Sub

 

Private Sub Command2_Click()

Text1.Text = ""

Command1.SetFocus

End Sub

 

Private Sub Command3_Click()

 End

End Sub

 

[题目11]下面程序的功能是:将给定的字符串中的数字字符筛选出来,依次组成若干个两位整数;并求出它们的最大公约数.本题程序界面见图1.

答:o_vb5-11.JPG

源程序:

Option Explicit

Private Sub Command1_Click()

  Dim A() As Integer, I As Integer, Ch As String

Dim j As Integer, G As Integer, Id As Integer

Dim S As String, St As String

S = "36a487b2541224301842e72"

Text1 = S

For I = 1 To Len(S)

  If Mid(S, I, 1) <= "9" And Mid(S, I, 1) >= "0" Then

      Ch = Ch & Mid(S, I, 1)

  End If

  If Len(Ch) = 2 Then

      Id = Id + 1

      ReDim Preserve A(Id)

     A(Id) = Ch

      Text2 = Text2 & Str(A(Id))

     Ch = ""

 End If

Next I

G = A(1)

For I = 2 To Id

G = Gcd(G, A(I))

Next I

Text2 = Text2 & vbCrLf & " " & vbCrLf & "以上数据的最大公约数是: " & G

End Sub

 

Private Function Gcd(ByVal N As Integer, ByVal M As Integer)

Dim R As Integer

R = N Mod M

If R <> 0 Then

  Gcd = Gcd(M, R)

Else

   Gcd = M

  End If

End Function

 

[题目12]编写程序找出倒数之和等于19/20的四个连续的自然数.

[编程要求]

1.程序参考界面如图2所示,编程时不得增加或减少界面对象或改变对象的种类,窗体及界面元素大小适中,且均可见;

2.单击”运行”按钮,找出倒数之和等于19/20的四个连续的自然数,并按图示格式显示在多行文本框中;

3.单击”清除”按钮,则将文本框清空;单击”退出”按钮,结束程序运行;

4.程序中必须包含一个求四个连续的自然数倒数之和的通用过程.

答:o_vb5-12.JPG

源程序:

Private Sub Command1_Click()

Dim i As Long, fem As Long, fez As Long

i = 0

Do

    i = i + 1

    fem = i

    fez = 1

    Call dszh((i), fez, fem)

Loop Until (fez = 19 And fem = 20)

Text1 = Text1 & i & "," & i + 1 & "," & i + 2 & "," & i + 3 & "的和为19/20"

End Sub

 

Private Sub dszh(n As Integer, fz As Long, fm As Long)

Dim t As Long, i As Long

For i = n + 1 To n + 3

    fz = fm + fz * i

    fm = fm * i

    t = gcd(fz, fm)

    fm = fm / t

    fz = fz / t

Next i

End Sub

Private Function gcd(ByVal x As Long, ByVal y As Long) As Long

Dim r As Integer

Do

    r = x Mod y

    x = y

    y = r

Loop Until (r = 0)

gcd = x

End Function

 

Private Sub Command2_Click()

Text1.Text = ""

End Sub

 

Private Sub Command3_Click()

End

End Sub

 

[题目13]下面程序的功能是:在140000至160000之间找出满足以下条件的六位数,该数分别乘以3与4得到的两个六位数,也由同样六个数字组成,只是排列次序不同,本题程序界面如图1。

答:o_vb5-13.JPG

源程序:

Option Explicit

Private Sub Command1_Click()

       Dim M(0 To 9) As Integer, N(0 To 9) As Integer, F As Long, P As Long

       Dim I As Integer

       List1.AddItem "  F  " & " F*3 " & " F*4 "

       For F = 140000 To 160000

          Erase M

          Call Analyze(F, M)

          For I = 3 To 4

          Erase N

             P = F * I

            If Len(CStr(P)) = 6 Then

                Call Analyze(P, N)

                 If Not Compare(M, N) Then Exit For

            Else

                Exit For

            End If

         Next I

        If I > 4 Then List1.AddItem F & Str(F * 3) & Str(F * 4)

       Next F

End Sub

 

Private Sub Analyze(N As Long, An() As Integer)

  Dim S As String, I As Integer, Idx As Integer

  S = CStr(N)

  For I = 1 To Len(S)

     Idx = Mid(S, I, 1)

     An(Idx) = An(Idx) + 1

  Next I

 

 End Sub

Private Function Compare(a() As Integer, B() As Integer) As Boolean

  Dim I As Integer

  For I = 0 To 9

  If a(I) <> B(I) Then Exit Function

  Next I

 Compare = True

 End Function

 

[题目14]编写程序找出满足5M+7n=146的两个素数M和N。

[编程要求]

1.程序参考界面如图2所示,编程时不得增加或减少界面对象或改变对象的种类,窗体及界面元素大小适中,且均可见;

2.单击“开始”按钮,求出满足条件的M和N值,并按图示格式输出到文本框中;

3.单击“清除”按钮,则将文本框清空,焦点置于“开始”按钮上;单击“结束”按钮,

结束程序运行;

4. 程序中必须包含一个判断某数是否为素数的通用过程。

答:o_vb5-14.JPG

源程序:

Private Sub Command1_Click()

Dim I As Integer, M As Integer, N As Integer

Text1 = "5*M+7*N=146" & vbCrLf

For M = 1 To 24

    For N = 1 To 17

        I = 5 * M + 7 * N

        If prime(M) = True Then

            If prime(N) = True Then

                If I = 146 Then

                  Text1.Text = Text1.Text & "M=" & M & vbCrLf & "N=" & N & vbCrLf

                End If

            End If

        End If

    Next N

Next M

End Sub

 

Private Function prime(x As Integer) As Boolean

Dim I As Integer

prime = False

For I = 2 To Int(Sqr(x))

    If x Mod I = 0 Then Exit Function

Next I

prime = True

End Function

 

Private Sub Command2_Click()

Text1.Text = ""

Command1.SetFocus

End Sub

 

Private Sub Command3_Click()

End

End Sub

 

[题目15]本程序的功能是将无符号二进制数转化为十进制数。本程序界面见图1。

答:o_vb5-15.JPG

源程序:

Private Sub Command1_Click()

   Dim st1 As String, st2 As String, n As Integer

   Dim s As String

   s = Text1

   n = InStr(s, ".")

   If n <> 0 Then

       st1 = Left(s, n - 1)

       st2 = Right(s, Len(s) - n)

  Else

       st1 = s

  End If

  If n <> 0 Then

     Text2 = cov1(st1) & cov2(st2)

  Else

     Text2 = cov1(st1)

  End If

End Sub

 

Private Function cov1(st As String) As Integer

Dim i As Integer, k As Integer

For i = Len(st) To 1 Step -1

   cov1 = cov1 + Val(Mid(st, i, 1)) * 2 ^ k

   k = k + 1

Next i

End Function

 

Private Function cov2(st As String) As Single

Dim i As Integer, k As Integer

k = -1

For i = 1 To Len(st)

   cov2 = cov2 + Val(Mid(st, i, 1)) * 2 ^ k

   k = k - 1

Next i

End Function

 

 

[题目16]编写程序求1~200之间可以表示为4n+1形式并等于两个平方数之和的所有素数。

[编程要求]

1.程序参考界面如图2所示,编程时不得增加或减少界面对象或改变对象的种类,窗体及界面元素大小适中,且均可见;

2.单击“运行”按钮,求出满足条件的素数,并按图示格式输出到列表框;

3.单击“清除”按钮,则将列表框清空,焦点置于“运行”按钮上;单击“结束”按钮,结束程序运行;

4.程序中必须包含一个将某种数表示成两个平方数之和的通用过程。

答:o_vb5-16.JPG

源程序:

Private Sub Command1_Click()

Dim i As Integer, a(1 To 2) As Integer

For i = 1 To 200

    If prime(i) And (i - 1) Mod 4 = 0 And flag(i, a) = True Then

     List1.AddItem i & "=" & a(1) & "^2+" & a(2) & "^2" & "=4*" & (i - 1) / 4 & "+1"

    End If

Next i

End Sub

 

Private Function prime(x As Integer) As Boolean

Dim i As Integer

prime = False

For i = 2 To Sqr(x)

If x Mod i = 0 Then Exit Function

Next i

prime = True

End Function

 

Private Function flag(x As Integer, a() As Integer) As Boolean

Dim i As Integer, j As Integer

flag = False

For i = 1 To Sqr(x)

    For j = 1 To Sqr(x)

        If x = i ^ 2 + j ^ 2 Then

            flag = True

            a(1) = i

            a(2) = j

            Exit Function

        End If

    Next j

Next i

End Function

 

Private Sub Command2_Click()

List1.Clear

Command1.SetFocus

End Sub

 

Private Sub Command3_Click()

 End

End Sub

posted on 2006-10-26 07:37 木子李 阅读(2359) 评论(2)  编辑 收藏 引用 网摘 所属分类: Visual Basic 课堂

FeedBack:
# re: 江苏省等级考试二级VB上机试卷2005年(秋)及参考答案(二)
2006-12-02 09:20 | 李名
好  回复  更多评论
  
# re: 江苏省等级考试二级VB上机试卷2005年(秋)及参考答案(二)
2007-03-20 10:19 | 木子
太强了~!~`
感谢
  回复  更多评论
  

只有注册用户登录后才能发表评论。