posts - 70,comments - 80,trackbacks - 0

【题目 8 】编一程序,其功能是求出所有分母小于 7 的不可约真分数相乘的积。所有分数每行 5 个显示在一个多行文本框中。

提示: 1. 当分数的分子与分母互质时 , 这个分数称为不可约分数 ; 当分数的分子小于分母时 , 这个分数就成为真分数 .

2. 注意适时对两个分数积进行约分。

【编程要求】

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

2 开始 按钮,则开始运行程序,并将结果按图示格式显示在文本框中;

3 程序中应包含一个求分数积的通用过程。

答:o_v4-8.JPG

源程序:

Private Sub Command1_Click()

    Dim a() As Integer, b() As Integer

    Dim i As Integer, j As Integer

    Dim s As Long, t As Long

    Dim st As String, n As Integer

    For i = 2 To 6

        For j = 1 To i - 1

            If fun1(i, j) Then

                n = n + 1   ' 用于控制一行显示五个分数

                k = k + 1

                ReDim Preserve a(k), b(k)

                a(k) = i

                b(k) = j

                st = st & j & "/" & i & "   "

                If n = 5 Then

                    st = st & vbCrLf

                    n = 0

                End If

            End If

        Next j

    Next i

    Call sub2(a, b, s, t)   ' 求分数积 ,S 是分母积 ,T 是分之积

    Call sub1(s, t)

    st = st & vbCrLf & vbCrLf & " 以上分数相乘结果是 :" & t & "/" & s

    Text1 = st

End Sub

 

Private Function fun1(x As Integer, y As Integer) As Boolean    ' 判断分数是否可约

    fun1 = True

    If x > y Then

        Min = y

    Else

        Min = x

    End If

    For i = 2 To Min

        If x Mod i = 0 And y Mod i = 0 Then

            fun1 = False

            Exit Function

        End If

    Next i

End Function

 

Private Sub sub1(x As Long, y As Long)  ' 对两个分数积进行约分

    For i = 2 To y - 1

        If x Mod i = 0 And y Mod i = 0 Then

            x = x \ i

            y = y \ i

        End If

    Next i

End Sub

 

Private Sub sub2(a() As Integer, b() As Integer, s As Long, t As Long)

    s = 1           ' 求分母之积

    For i = 1 To UBound(a)

        s = s * a(i)

    Next i

    t = 1           ' 求分子之积

    For i = 1 To UBound(b)

        t = t * b(i)

    Next i

End Sub

 

【题目 9 】本程序的功能是:找出 100 以内等于若干相连素数之和的素数。

答:o_v4-9.JPG

源程序:

Option Base 1

Private Sub command1_Click()

    Dim p(25) As Integer, i As Integer, n As Integer

    Dim s As String, j As Integer

    For i = 2 To 100

        For n = 2 To Sqr(i)

            If i Mod n = 0 Then Exit For

        Next n

        If n > Sqr(i) Then

            j = j + 1

            p(j) = i

        End If

    Next i

    For i = 3 To UBound(p)

        s = ""

        If fun(i, p, s) Then

            s = CStr(p(i)) & "=" & s

            List1.AddItem s

           

        End If

    Next i

End Sub

 

Private Function fun(n As Integer, p() As Integer, s As String) As Boolean

    Dim j As Integer, sum As Integer, k As Integer

    k = 1

    j = 1

    Do While k < n

        sum = sum + p(k)

        s = s & CStr(p(k))

        If sum > p(n) Then

            j = j + 1

            k = j

            s = ""

            sum = 0

        ElseIf sum < p(n) Then

            k = k + 1

            s = s & "+"

        Else

            fun = True

            Exit Function

        End If

    Loop

End Function

 

【题目 10 】编写程序,验证:对任意一个三个数字不全部相同的三位正整数,有这三个数字组成的最大数减去最小数,得到新的数,对新的数重复进行上述处理,最后总能得到 495

【编程要求】

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

2 .运行程序时,在文本框中输入需要验证的三个数,按 验证 按钮,如果输入的三个数个位数字均相等(例如输入 222 ),利用 MsgBox 给出出错信息,程序结束;若输入数据合法,则在列表框中显示验证过程;按 清除 按钮,则将文本框、列表框清空,将焦点至于文本框上;

3 .程序中应定义一个求给定三位数的数字重新排列得到的最大和最小数的通用过程。

答:r_v4-10.JPG

源程序:

Private Sub command1_Click()

    Dim n As Integer, max As Integer, min As Integer

    If Len(Text1) = 3 Then

        If Mid(Text1.Text, 1, 1) = Mid(Text1.Text, 2, 1) _

        And Mid(Text1.Text, 1, 1) = Mid(Text1.Text, 3, 1) Then

            MsgBox Text1.Text & " 数据错误 !", vbOKOnly, " 工程 1"

           End

        Else

            n = Val(Text1)

            Do

                Call sub1(n, max, min)

                List1.AddItem max & "-" & min & "=" & Str(max - min) & vbCrLf

                If max - min <> 495 Then

                    n = max - min

                Else

                    Exit Do

                End If

            Loop

        End If

    End If

End Sub

 

Private Sub sub1(n As Integer, max As Integer, min As Integer)

    Dim a(3) As Integer, sum As String

    For i = 1 To Len(CStr(n))

        a(i) = Mid(CStr(n), i, 1)

    Next i

    For i = 1 To 2

        For j = 2 To 3

            If a(i) < a(j) Then

                temp = a(i)

                a(i) = a(j)

                a(j) = temp

            End If

        Next j

    Next i

    For i = 1 To 3

        sum = sum & CStr(a(i))

    Next i

    max = Val(sum)

    sum = ""

    For i = 3 To 1 Step -1

        sum = sum & CStr(a(i))

    Next i

    min = Val(sum)

End Sub

 

Private Sub Command2_Click()

    Text1 = ""

    List1.Clear

    Text1.SetFocus

End Sub

 

【题目 11 】本程序的功能是:从给定数据范围中找出从左到右,每一位数字都大于等于其后的数字之和的数据(如 84210 就是符合要求的数,因为 8>=4+2+1+0 4>=2+1+0, 2>=1+0,1>=0 )。

答:r_v4-11.JPG

源程序:

Option Explicit

Dim k As Integer

Private Sub Command1_Click()

    Dim i As Long, num() As Integer, sum() As Integer

    Dim flag As Boolean, j As Integer

    For i = 84210 To 90000

        flag = True               

        k = Len(CStr(i))

        ReDim num(k), sum(k)       

        Call lnum(i, num)

        Call lsum(num, sum)

        For j = 1 To k - 1

            If num(j) < sum(j) Then flag = False

        Next j

        If flag Then List1.AddItem CStr(i)

    Next i

End Sub

 

Private Sub lnum(ByVal n As Long, num() As Integer)

    Dim i As Integer, p As Integer

    For i = k To 1 Step -1

        p = n Mod 10

        num(i) = p

        n = n \ 10

    Next i

End Sub

 

Private Sub lsum(n() As Integer, s() As Integer)

    Dim i As Integer, j As Integer

    For i = 1 To k - 1

        For j = i + 1 To k

            s(i) = s(i) + n(j)

        Next j

    Next i

End Sub

 

【题目12】生成 15 个互不相等的两位随机整数放入 a 数组, b 数组用于标记 a 数组中元素的变化趋势,其产生方式如下:

o_v4-bi.JPG

 

【编程要求】

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

2 .按 生成数组 按钮,生成 15 个互不相同的两位随机整数显示在文本框 1 中,并根据题目要求生成 b 数组,按图示格式显示在文本框 2 中。按“清空”按钮,则将 2 个文本框清空;按 退出 按钮,则结束程序运行;

3 .程序中应定义一个产生数组 b 的通用过程。

答:r_v4-12.JPG

源程序:

Option Base 1

Private Sub Command1_Click()

    Dim a(15) As Integer, i As Integer, j As Integer

    Dim b(15) As String, f As Boolean, s As String

    Randomize

    Do

        f = True

        i = i + 1

        x = Int(90 * Rnd) + 10

        For j = 1 To i

            If a(j) = x Then

                i = i - 1: f = False

                Exit For

            End If

        Next j

        If f Then a(i) = x

    Loop Until i = 15

    For i = 1 To 15

        s = s & a(i) & " "

    Next i

    Text1 = s

    Call sub1(a, b)

    s = ""

    For i = 1 To 15

        s = s & b(i) & " "

    Next i

    Text2 = s

End Sub

 

Private Sub sub1(a() As Integer, b() As String)

    b(1) = "+1"

    For i = 2 To UBound(a)

        If a(i) > a(i - 1) Then b(i) = "+1"

        If a(i) < a(i - 1) Then b(i) = "-1"

    Next i

End Sub

 

Private Sub Command2_Click()

    Text1 = ""

    Text2 = ""

End Sub

 

Private Sub Command3_Click()

End

End Sub

 

【题目 13 】下面程序的功能是,找出 2-100 以内的包含 3 个以上素数的连续 7 个自然数序列。

答:o_v4-13.JPG

源程序:

Private Sub Command1_Click()

    Dim i As Integer, j As Integer

    Dim k As Integer, s As String

    For i = 2 To 94

        k = 0

        s = ""

        For j = 0 To 6

            s = s & Str(i + j)

            If prime(i + j) Then k = k + 1

        Next j

        If k >= 3 Then

            Text1 = Text1 & s & "  (" & k & " 个素数 )" & vbCrLf

        End If

    Next i

End Sub

 

Function prime(n As Integer) As Boolean

   Static k As Integer

    k = k + 1

    If k = 1 Then k = k + 1

    If n Mod k <> 0 And k <= Sqr(n) Then

        prime = prime(n)

    ElseIf n Mod k <> 0 Or k = n Then

        prime = True

    End If

    k = 0

End Function

 

【题目 14 】一个正整数被称为奇妙平方数,如果此数的平方与它的逆序数的平方互为逆序数。例如, 12^2=144, 21^2=441,12 21 互逆 ,144 441 互逆 ,12 就是奇妙平方数 . 找出 1-300 以内所有的奇妙平方数。

答:o_v4-14.JPG

源程序:

Option Base 1

Dim a() As Long

Private Sub Command1_Click()

    Dim i As Long, x As Long

    ReDim a(1)

    For i = 1 To 300

        If fun2(i) Then

            For j = 1 To UBound(a)

                If a(j) = fun(i) Then Exit For

            Next j

            If j > UBound(a) Then

                k = k + 1

                ReDim Preserve a(k)

                a(k) = i

            End If

        End If

    Next i

    For i = 1 To UBound(a)

        List1.AddItem a(i) & "^2=" & a(i) ^ 2

        List2.AddItem fun(a(i)) & "^2=" & fun(a(i)) ^ 2

    Next i

End Sub

 

Private Function fun(i As Long) As Long

    Dim st As String, s As Integer

    s = Len(CStr(i))

    For j = 1 To s

        st = Mid(CStr(i), j, 1) & st

    Next j

    fun = Val(st)

End Function

Private Function fun2(i As Long) As Boolean

    x = fun(i)

    If x <> i And i ^ 2 = fun(x ^ 2) And fun(i ^ 2) = x ^ 2 Then

        fun2 = True

    End If

End Function

 

Private Sub Command2_Click()

List1.Clear

List2.Clear

End Sub

 

Private Sub Command3_Click()

End

End Sub
posted on 2006-10-09 09:42 木子李 阅读(1733) 评论(3)  编辑 收藏 引用 网摘 所属分类: Visual Basic 课堂

FeedBack:
# re: 江苏省等级考试二级VB上机试卷2004年(秋)及参考答案(二)
2006-10-12 10:31 | feng
ni hao 有没有笔试的真题啊 ??谢谢了
我qq 是17821349  回复  更多评论
  
# re: 江苏省等级考试二级VB上机试卷2004年(秋)及参考答案(二)
2006-10-21 11:09 | r5y
nan!  回复  更多评论
  
# re: 江苏省等级考试二级VB上机试卷2004年(秋)及参考答案(二)
2007-03-19 22:57 | 555
谢谢  回复  更多评论
  

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