VB程序设计的常用算法
例:用随机函数产生100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数并打印出来。
将程序编写在一个GetTJput过程中,代码如下:
Public Sub GetTJput()
Dim a(1 To 100) As Integer
Dim x(1 To 10) As Integer
Dim i As Integer, p As Integer
'产生100个[0,99]范围内的随机整数,每行10个打印出来
For i = 1 To
If a(i) < 10 Then
Form1.Print Space(2); a(i);
Else
Form1.Print Space(1); a(i);
End If
If Then
Next i
'统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数,并将统计结果保存在数组x(1),x(2),...,x(10)中,将统计结果打印出来For i = 1 To 100
p = a(i) Mod 10 ' 求个位上的数字
If p = 0 Then p = 10
Next i
Form1.Print "统计结果"
For i = 1 To 10
p = i
If i = 10 Then p = 0
Form1.Print "个位数为" + Str(p) + "共" + Str(x(i)) + "个"
Next i
End Sub
二、求两个整数的最大公约数、最小公倍数
m=inputBox("m=")
n=inputBox("n=")
nm=n*m
If m < n Then
r=m mod n
Do While
m=n
n=r
Loop
Print "最大公约数=",
Print "最小公倍数=",
三、判断素数
m =val( InputBox("请输入一个数"))
For i=2 To int(sqr(m))
If m Mod i = 0 Then Exit For
Next i
If Then
Print "该数是素数"
Else
Print "该数不是素数"
End If
将其写成一函数,若为素数返回True,不是则返回False
Private Function Prime( m as Integer) As Boolean
Dim i%
Prime=True
For i=2 To
If m Mod i = 0 Then : Exit For
Next i
End Function
四、排序问题
1.选择法排序(升序)
程序代码如下:
For i = 1 To n - 1
For j =
If a(i) > a(j) Then
temp = a(i)
a(i) = a(j)
a(j) = temp
Next j
Next I
2.冒泡法排序(升序)
程序段如下
For i =
For j =
If Then
temp=a(j):a(j)=a(j+1):a(j+1)=temp
End if
Next j
Next i
3.合并法排序(将两个有序数组A、B合并成另一个有序的数组C,升序)
基本思想:
1)先在A、B数组中各取第一个元素进行比较,将小的元素放入C数组;
2)取小的元素所在数组的下一个元素与另一数组中上次比较后较大的元素比较,重复上述比较过程,直到某个数组被先排完;
3)将另一个数组剩余元素抄入C数组,合并排序完成。
程序段如下:
Do While '当A和B数组均未比较完If A(ia) < B(ib) Then
C(ic) = A(ia):
Else
C(ic) = B(ib):ib = ib + 1
End If
Loop
Do While ia <= UBound(A) 'A数组中的剩余元素抄入C数组
ia = ia + 1:ic = ic + 1
Loop
Do While ib <= UBound(B) 'B数组中的剩余元素抄入C数组
C(ic) = B(ib)
Loop
五、插入法
把一个数插到有序数列中,插入后数列仍然有序
将其写成一插入函数
Private Sub Instert(a() As Single, x As Single)
Dim p%, n%, i%
n = UBound(a)
ReDim a(n + 1)
p = 0
Do While x > a(p) And p < =n ' 确定x应插入的位置
p = p + 1
Loop
For i = n To p Step -1
Next i
End Sub
六、矩阵(二维数组)运算
(1)矩阵的加、减运算
C(i,j)=a(i,j)+b(i,j) 加法
C(i,j)=a(i,j)-b(i,j) 减法
(3)矩阵转置
例:有二维数组a(5,5),要对它实现转置,可用下面两种方式:
For i=1 to 5 (2) For i=2 to 5
For For
t=a(i,j) t=a(i,j)
a(i,j)= a(j,i) a(i,j)= a(j,i)
a(j,i)=t a(j,i)=t
Next j Next j
Next i Next i
(4)求二维数组中最小元素及其所在的行和列
基本思路同一维数组,可用下面程序段实现(以二维数组a(2,3)为例):
‘变量max中存放最大值,row,column存放最大值所在行列号
Max = a(1, 1): row = 1: Column = 1
For i = 1 To 2
For j = 1 To 3
If a(i, j) > a( , ) Then
Max = a(i, j)
row =
Column = j
End If
Next j
Next i
Print "最大元素是";
Print "在第" & & "行,"; "第" & & "列"
七、数制转换
将一个十进制整数m转换成→r(2-16)进制字符串。
方法:将m不断除r取余数,直到商为零,以反序得到结果。
下面写出一转换函数,参数idec为十进制数,ibase为要转换成数的基(如二进制的基是2,八进制的基是8等),函数输出结果是字符串。
Private Function TrDec(m As Integer, r As Integer) As String
Dim SR$, IR%
SR = ""
Do While
IR = m Mod r
If IR >= 10 Then
SR = & SR
Else
End If
m= m\ r
Loop
TrDec =
End Function
1.统计文本单词的个数
下面程序段是字符串strI中包含的单词数
Nw = 0: Wt = False
nL = Len(RTrim(strI))
For i = 1 To nL
strT = '取第i个字符
Select Case strT
Case " ", ",", ";", "!"
Wt = False
Case Else
If Not Wt Then
Wt = True
End If
End Select
Next i
Print "单词数为:", Nw
八、穷举法
例:将一张面值为100元的人民币等值换成100张5元、1元和0.5元的零钞,要求每种零钞不少于1张,问有哪几种组合?
Dim i%, j%, k%
Print "5元1元0.5元"
For i = 1 To 20
For j = 1 To 100 - i
If 5.0 * i + 1.0 * j + 0.5 * k = 100 Then
End If
Next j
Next i。