[题目9]下面程序的功能是:找出所有各位数字互不相同的四位数,该数本身为素数,且各位数字均为素数.本题界面见图1.
答:
源程序:
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.
程序中必须包含一个求最小公倍数的通用过程.
答:
源程序:
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.
答:
源程序:
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.程序中必须包含一个求四个连续的自然数倒数之和的通用过程.
答:
源程序:
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。
答:
源程序:
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. 程序中必须包含一个判断某数是否为素数的通用过程。
答:
源程序:
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。
答:
源程序:
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.程序中必须包含一个将某种数表示成两个平方数之和的通用过程。
答:
源程序:
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 课堂