posts - 70,comments - 80,trackbacks - 0

【题目 1 】本程序的功能是:从给定的数据范围中找出所有各位数字之和为 10 的数据,若一次求得各位数字之和不是壹位数,则继续求此和数的各位数字之和。例如 47854=>28=>10
就是符合要求的数。

答:o_v4-1.JPG

源程序:

Private Sub Command1_Click()

    Dim st As Long, se As Long, i As Long

    Dim s As String

    st = Text1

    se = Text2

    For i = st To se

        If sum(i) = 10 Then

            s = s & i & vbCrLf

        End If

    Next i

    Text3 = s

End Sub

 

Private Function sum(ByVal n As Long) As Integer

    Dim k As Integer

    Do

        sum = 0

        Do

            k = n Mod 10

            sum = sum + k

            n = n \ 10

        Loop Until n <= 0

        If sum > 10 Then

            n = sum

        Else

            Exit Function

        End If

    Loop   

End Function

 

【题目 2 】编写程序,以给定的方式标记出方阵中每一行最小元素的位置。如果某一行有多个数值相等的最小元素,也要同时标记出来。标记方式为每一行的最小元素为 0 ,其他元素为 1
【编程要求】
1
.程序参考界面如图所示,编程时不得增加或减少界面对象或改变对象的种类,窗体及界
面元素大小适中,且均可见;
2
.在文本框 1 中输入 N 值,按 执行 按钮,则随机生成一个 N N 列的由两位正整数组成的 N 阶方阵,并输出到多行文本框 2 中,同时求出每一行的最小元素并生成标记矩阵输出到多行文本框 3 中;按 清除 按钮,则将 3 个文本框清空,将焦点置于文本框 1 上;按 退出 按钮,结束程序运行;
3
.程序中应定义一个求数组某一行的最小元素值的通用过程。

答:o_v4-2.JPG

源程序:

Private Sub Command1_Click()

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

    Dim x As Integer, s As String

    Randomize

    x = Int(Text1.Text)

    ReDim a(x, x), b(x, x)

    For i = 1 To x

        For j = 1 To x

            a(i, j) = Int(90 * Rnd) + 10

            s = s & a(i, j) & "  "

            b(i, j) = 1

        Next j

        s = s & vbCrLf

    Next i

    Text2 = s

    Call findmin(a, b)

    s = ""

    For i = 1 To x

        For j = 1 To x

            s = s & b(i, j) & "  "

        Next j

        s = s & vbCrLf

    Next i

    Text3 = s

End Sub

 

Private Sub findmin(a() As Integer, b() As Integer)

    Dim i As Integer, j As Integer, ub1 As Integer, ub2 As Integer

    ub1 = UBound(a, 1): ub2 = UBound(a, 2)

    For i = 1 To ub1

        Min = a(i, 1)

        low = 1

        For j = 2 To ub2

            If Min > a(i, j) Then

                Min = a(i, j)

                low = j

            End If

        Next j

        b(i, low) = 0

    Next i

End Sub

 

Private Sub Command2_Click()

    Text1 = ""

    Text2 = ""

    Text3 = ""

    Text1.SetFocus

End Sub

 

Private Sub Command3_Click()

    End

End Sub

 

【题目 3 】输入一个 N 位整数,求出与这个整数所包含的数字完全相同的最大 N 位整数与最小 N 位整数。

答:o_v4-3.JPG

源程序:

Private Sub Command1_Click()

    Dim n As Long, num() As String * 1, i As Integer

    Dim k As Integer, smax As String, smin As String

    n = Text1

    k = Len(CStr(n))

    Call nsort(n, num)

    For i = 1 To k

        smax = smax & num(i)

        If num(i) = "0" Then

            smin = Left(smin, 1) & num(i) & Right(smin, Len(smin) - 1)

        Else

            smin = num(i) & smin

        End If

    Next i

    Text2 = smax: Text3 = smin

End Sub

 

Private Sub nsort(n As Long, np() As String * 1)

    Dim i As Integer, j As Integer, t As String * 1, k As Integer

    Do

        k = k + 1

        ReDim Preserve np(k)

        np(k) = CStr(n Mod 10)

        n = n \ 10

        If n = 0 Then Exit Do

    Loop

    For i = 1 To UBound(np) - 1

        For j = i + 1 To UBound(np)

            If np(j) > np(i) Then

                t = np(j): np(j) = np(i): np(i) = t

            End If

        Next j

    Next i

End Sub

 

【题目 4 】编写程序,求出给定正整数的所有质因子,并将该数表示成质因子 ( 质因子均带有指数幂 ) 的乘积。例如: 342=2^1*3^2*19^1
【编程要求】
1
.程序参考界面如图所示,编程时不得增加或减少界面对象或改变对象的种类,窗体及界
面元素大小适中,且均可见;
2
.在文本框 1 中输入 N 值,按 执行 按钮,则开始计算并在文本框 2 中按要求的格式显示结果:按 清除 按钮,则将 2 个文本框清空,将焦点置于文本框 1 上;按 退出 按钮,结束程序运行;
3
.程序中应定义一个求一个正整数的质因子的通用过程。

答:o_v4-4.JPG

源程序:

Option Base 1

Private Sub Command1_Click()

    Dim x As Integer

    Dim num() As Integer

    x = Val(Text1.Text)

    Call find(x, num)

    Call procedure(num, x)

End Sub

 

Private Sub find(x As Integer, num() As Integer)

    Dim i As Integer, k As Integer

    For i = 2 To x - 1

        If x Mod i = 0 Then

            If flag(i) Then

                k = k + 1

                ReDim Preserve num(k)

                num(k) = i

            End If

        End If

    Next i

End Sub

 

Private Function flag(ByVal n As Integer) As Boolean

    Dim i As Integer

    flag = False

    For i = 2 To n - 1

        If n Mod i = 0 Then Exit For

    Next i

    If i = n Then flag = True

End Function

 

Sub procedure(num() As Integer, n As Integer)

    Dim f As Single, x As Integer, k As Integer

    Dim s As String, i As Integer

    For i = LBound(num) To UBound(num)

        x = n

        k = 0

        f = x Mod num(i)

        Do While f = 0

            k = k + 1

            x = x / num(i)

            f = x Mod num(i)

        Loop

        s = s & CStr(num(i)) & "^" & CStr(k) & "*"

    Next i

    Text2 = Left(s, Len(s) - 1)

End Sub

 

Private Sub Command2_Click()

    Text1 = ""

    Text2 = ""

    Text1.SetFocus

End Sub

 

Private Sub Command3_Click()

End

End Sub

 

【题目 5 】本程序功能是:把由字符的 ASCII 代码值对应的八进制数 ( 两个八进制数之间用非数字字符分隔 ) 组成的密文解密。密文以任意非数字字符结束。

答:o_v4-5.JPG

源程序:

Private Sub Command1_Click()

    Dim s As String, i As Integer, p() As String

    Dim k As Integer, t As String * 1, f As Boolean

    Dim st As String

    s = Text1

    For i = 1 To Len(s)

        t = Mid(s, i, 1)

        If t <= "7" And t >= "0" Then

            st = st & t

            f = True

        ElseIf f Then

            k = k + 1

            ReDim Preserve p(k)

            p(k) = st

            f = False

            st = ""

        End If

    Next i

    For i = 1 To UBound(p)

        Text2 = Text2 & Chr(tod(p(i)))

    Next i

End Sub

 

Private Function tod(st As String) As Integer

    Dim n As Integer, k As Integer, j As Integer

    n = Val(st)

    Do

        k = n Mod 10

        tod = tod + k * 8 ^ j

        n = n \ 10

        j = j + 1

    Loop Until n <= 0

End Function

 

【题目 6 】编写程序,将按给定格式 ( 数据由逗号分隔, -1 表示数据结束 ) 输入到文本框的数据依次存入一个数组,再把数组中重复的数据删除,得到没有重复数的新数组。
【编程要求】
1
.程序参考界面如图所示,编程时不得增加或减少界面对象或改变对象的种类,窗体及界
面元素大小适中,且均可见:
2
.在文本框 1 中输入测试数据,按 处理 按钮,则处理数据并在文本框 2 中输出没有重复数的数组数据:按 清除 按钮,则将 2 个文本框清空,将焦点置于文本框 1 上;按 退出 按钮,结束程序运行:
3
.程序中应定义一个将输入的格式数字串分解存入数组的通用过程。

答:o_v4-6.JPG

源程序:

Private Sub Command1_Click()

Dim s As String, a() As Integer, k As Integer

dim f As Boolean, i As Integer, st As String

    s = Text1

    If Right(s, 2) <> "-1" Then

        MsgBox " 您没有输入 -1 表示数据结束! "

        Text1.SetFocus

        Exit Sub

    End If

    Call sub1(s, a)     'sub1 的过程为将输入的数字串分解存入数组 A

    Call Erasea(a)      ' 删除数组中的重复元素

    For i = 1 To UBound(a)

        st = st & a(i) & " "

    Next i

    Text2 = st

End Sub

 

Private Sub Erasea(a() As Integer)

   Dim ub As Integer, i As Integer, j As Integer

   Dim k As Integer, n As Integer

   ub = UBound(a)

   n = 1

   Do While n < ub

        i = n + 1

        Do While i <= ub

            If a(n) = a(i) Then

                For j = i To ub - 1

                    a(j) = a(j + 1)

                Next j

                ub = ub - 1

                ReDim Preserve a(ub)

            Else

                i = i + 1

            End If

        Loop

        n = n + 1

    Loop

End Sub

 

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

    Dim length As Integer, i As Integer, t As String

    Dim f As Boolean, st As String

    length = Len(s)

    For i = 1 To length

        t = Mid(s, i, 1)

        If t <> "," Then

            st = st & t: f = True

        ElseIf f Then

            k = k + 1

            ReDim Preserve a(k)

            a(k) = st

            f = False

            st = ""

        End If

    Next i

    ReDim Preserve a(k - 1)

End Sub

 

Private Sub Command2_Click()

    Text1 = ""

    Text2 = " "

    Text1.SetFocus

End Sub

 

Private Sub Command3_Click()

    End

End Sub

 

【题目 7 】生成一个 5*3 的字符数组,字符数组的第 1 2 列分别存放由两位随机正整数转换得到的数字字符串。设以字符 “ 0 ” 表示合数,字符 “ 1 ” 表示质数,若数组某一行的第 1 2 列对应得数据均为合数,则该行的第 3 列存放 “ 00 ” ;若第 1 列为质数、第 2 列为合数,则第 3 列存放 “ 10 ” ,依此类推。

答:o_v4-7.JPG

源程序:

Option Explicit

Option Base 1

Private Sub Command1_Click()

    Dim sa(5, 3) As String, i As Integer, j As Integer

    Dim s As String

    For i = 1 To 2

        For j = 1 To 5

            sa(j, i) = Str(Int(90 * Rnd) + 10) 

        Next j

    Next i

    For i = 1 To 5

        s = ""

        For j = 1 To 2

            s = s & np(sa(i, j))   

        Next j

        sa(i, 3) = s

    Next i

    For i = 1 To 5

        Picture1.Print sa(i, 1) & "  " & sa(i, 2) & "   " & sa(i, 3)

    Next i

End Sub

 

Private Function np(ns As String) As String

    Dim n As Integer, i As Integer

    n = Val(ns)

    np = "0"

    For i = 2 To Sqr(n)

        If n Mod i = 0 Then Exit Function  

    Next i

    np = "1"

End Function

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

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