计算机等级考试二级VB常用算法.docx
- 文档编号:7668890
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:21
- 大小:148.43KB
计算机等级考试二级VB常用算法.docx
《计算机等级考试二级VB常用算法.docx》由会员分享,可在线阅读,更多相关《计算机等级考试二级VB常用算法.docx(21页珍藏版)》请在冰豆网上搜索。
计算机等级考试二级VB常用算法
一、字符处理1
1、算法说明
1)加密解密
最简单的加密方法是:
将每个字母加一序数,例如5,这时:
“A”→”F”,”a”→”f”,”B”→”G”,”b”→”g”……”Y”→”D”,”y”→”d”,”Z”→”E”,”z”→”e”
解密是加密的逆操作。
界面如下:
代码如下:
Word-WRAP:
break-word"bgColor=#f3f3f3>以下是引用片段:
Option Explicit
Private Sub Command1_Click()
Dim strInput$, Code$, Record$, c As String * 1
Dim i%, length%, iAsc%
strInput = Text1.Text
length = Len(Trim(strInput))
Code = ""
For i = 1 To length
c = mid(strInput, i, 1)
Select Case c
Case "A" To "Z"
iAsc = Asc(c) + 5
If iAsc > Asc("Z") Then iAsc = iAsc - 26
Code = Code & Chr(iAsc)
Case "a" To "z"
iAsc = Asc(c) + 5
If iAsc > Asc("z") Then iAsc = iAsc - 26
Code = Code & Chr(iAsc)
Case Else
Code = Code & c
End Select
Next i
Text2.Text = Code
End Sub
Private Sub Command3_Click()
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Text1.SetFocus
End Sub
2)统计
问题提出
统计字符或者数字出现的次数。
算法说明
以字符统计为例,设基本问题如下:
请统计一段文本中英文字母在文本中出现的次数。
(不区分大小写)
如:
Iamastudent.
得到:
A:
2d:
1e:
1I:
1m:
1n:
1s:
1t:
2u:
1
分析:
由于不区分大小写,因此可定义一个大小为26(下标:
0-25)的数组,每个元素依次记录A、B、C…Z字母出现的次数。
A(0)存放字母a出现的次数
A
(1)存放字母b出现的次数
A
(2)存放字母c出现的次数
A(3)存放字母d出现的次数
…
譬如:
aabdc
代码如下:
以下是引用片段:
Option Explicit
Private Sub Command1_Click()
Dim i As Integer, j As Integer
Dim zimu(25) As Integer
Dim allStr As String
Dim aStr As String
allStr = UCase(Text1.Text)
For i = 1 To Len(Text1.Text)
aStr = Mid(allStr, i, 1)
If aStr >= "A" And aStr <= "Z" Then
zimu(Asc(aStr) - Asc("A")) = zimu(Asc(aStr) - Asc("A")) + 1
End If
Next i
For i = 0 To 25
If zimu(i) <> 0 Then
j = j + 1
Text2.Text = Text2.Text & Chr(i + Asc("A")) & ":
" & str(zimu(i)) & " "
If j Mod 5 = 0 Then Text2.Text = Text2.Text & Chr(13) & Chr(10)
End If
Next i
End Sub
解题技巧
熟练运用字符处理函数,对于一些数论题,譬如逆序数等也可将数字通过CStr函数转换为字符后,利用字符处理函数来解题。
2、实战练习
1)补充代码(2003秋二(8))
下面程序的功能是统计文件中英文字母(不区分大小写)出现的个数。
Word-WRAP:
break-word"bgColor=#f3f3f3>以下是引用片段:
Option Base 1
Private Sub Command1_Click()
Dim alpha(26) As Integer,n As Integer
Dim i As Integer,s As String
Open "c:
\kav2003\readme.txt" For Input As #11
Do While Not EOF(11)
s=
(1)
s=UCase(s)
If s>="A" And s<="Z" Then
n=
(2)
alpha(n)=alpha(n)+1
End If
Loop
For i=1 To 26
If alpha(i)<>0 Then
List1.AddItem Chr(i+64)&":
"&CStr(alpha(i))
End If
Next i
Close
End Sub
2)补充代码(2000秋二(6))
下面程序的功能是:
统计当前盘当前文件夹中的顺序文件data.txt中共有多少个单词,约定连续出现的字母定义为一个单词。
以下是引用片段:
Option Explicit
Private Sub Form_Click()
Dim Char() As String, St As String, Tem As String
Dim Idx As Integer, Js As Long, Flen As Long
Dim F As Boolean, W As String * 1
(1)
Flen = LOF(10)
St = Input(Flen, #10)
Js = 1
Do While Js <= Flen+1
W = Mid(St, Js, 1)
If
(2) Then
Tem = Tem + W
F = True
ElseIf F = True Then
Idx = Idx + 1
ReDim Preserve Char(Idx)
Char(Idx) = Tem
Tem = (3)
F = False
End If
(4)
Loop
Print "共有"; Idx; "个单词"
For Js = 1 To Idx
Print Char(Js)
Next Js
End Sub
排序1
1、算法说明
1)初等数学
递推法
又称为“迭代法”,其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。
每次重复都在旧值的基础上递推出新值,并由新值代替旧值。
问题:
猴子吃桃子
小猴子有若干桃子,第一天吃掉一半多一个;第二天吃掉剩下的一半多一个…..;如此,到第七天早上要吃时,只剩下一个桃子。
问小猴子一开始共有多少桃子?
分析:
可以最后一天桃子数推出倒数第二天的桃子数;再从倒数第二天推出倒数第三天桃子数………..
设第n天桃子数为xn,前一天桃子数是:
xn-1,则有关系:
xn=xn-1/2-1
程序如下:
Word-WRAP:
break-word"bgColor=#f3f3f3>以下是引用片段:
Private Sub Command1_Click()
Dim n%, i%
x = 1 '第七天桃子数
Print "第七天桃子数:
1只"
For i = 6 To 1 Step -1
x = (x + 1) * 2
Print "第" & i & "天桃子数:
" & x & "只"
Next i
End Sub
穷举法
又称枚举法,即将所有可能情况一一测试,判断是否满足条件,一般用循环实现。
问题:
百元买鸡问题。
假定小鸡每只5角;公鸡每只2元;母鸡每只3元。
现在有100元,要求买100只鸡,编程列出所有可能的购鸡方案。
分析:
设母鸡、公鸡、小鸡分别x、y、z只,则有:
x+y+z=100
3x+2y+0.5z=100
程序一:
以下是引用片段:
Private Sub Command1_Click()
Dim x%, y%, z%
For x = 0 To 100
For y = 0 To 100
For z = 0 To 100
If x + y + z = 100 And 3 * x + 2 * y + 0.5 * z = 100 Then
Print x, y, z
End If
Next z
Next y
Next x
End Sub
程序二(优化)
以下是引用片段:
Private Sub Command1_Click()
Dim x%, y%
For x = 0 To 33
For y = 0 To 50
If 3 * x + 2 * y + 0.5 * (100 - x - y) = 100 Then
Print x, y, 100 - x - y
End If
Next y
Next x
End Sub
2)高等数学
求积分
近似计算积分:
s=∫13(x3+2x+5)dx
代码如下:
以下是引用片段:
Public Function f(ByVal x!
) '被积函数
f = x * (x * x + 2) + 5
End Function
Public Function trapez(ByVal a!
ByVal b!
ByVal n%) As Single
'b、a分别为积分上下限,n为等分数
Dim sum!
h!
x!
h = (b - a) / n
sum = (f(a) + f(b)) / 2
For i = 1 To n - 1
x = a + i * h
sum = sum + f(x)
Next i
trapez = sum * h
End Function
调用:
以下是引用片段:
Private Sub Command1_Click()
Print trapez(1, 3, 30)
End Sub
数论综合题
此类题目比较广泛,必须给以足够重视。
历年题目有:
平方数、零巧数、拟互满数、回文数、酉完数、完数、幸运数、逆序数以及无暇素数、超级素数、因子和等。
排序2
1)补充代码(2002秋二(10))
找出由两个不同数字组成的平方数,并将结果按图中的格式显示在列表框List1中。
Word-WRAP:
break-word"bgColor=#f3f3f3>以下是引用片段:
Option Explicit
Private Sub Command1_Click()
Dim I As Long, N As Long
For I = 11 To 300
(1)
If Verify(N) Then
(2)
End If
Next I
End Sub
Private Function Verify( (3) ) As Boolean
Dim A(0 To 9) As Integer, I As Integer, Js As Integer
Do While N <> 0
(4)
N = N \ 10
Loop
For I = 0 To 9
Js = Js + A(I)
Next I
(5)
End Function
1)编程题(2004秋上机试卷08)
一个正整数被称为奇妙平方数,如果此数的平方与它的逆序数的平方互为逆序数。
例如,
12^2=144,21^2=441,12与21互逆,144与441互逆,12就是奇妙平方数。
找出1-300以内所有的奇妙平方数。
1、算法说明
1)顺序查找
逐个元素找,如果有,则记录位置,然后跳出循环;否则,查找失败。
代码如下:
Word-WRAP:
break-word"bgColor=#f3f3f3>以下是引用片段:
Private Sub Search(a(), ByVal Key, Index As Integer)
Dim i%
For i = LBound(a) To UBound(a)
If a(i) = Key Then '找到,将元素下标保存在index中并结束查找
Index = i
Exit Sub
End If
Next i
Index = -1 '若没找到,则index值为-1
End Sub
2)二分法查找
顺序查找效率低下,当数组有序排列时,可以使用二分法查找提高效率。
算法思想:
代码如下:
以下是引用片段:
Private Sub birSearch(a(), ByVal low%, ByVal high%, ByVal Key, index%)
Dim mid As Integer
If low > high Then '没有查找到
index = -1
Exit Sub
End If
mid = (low + high) \ 2 '取查找区间的中点
If Key = a(mid) Then '查找到,返回下标
index = mid
Exit Sub
ElseIf Key < a(mid) Then '查找区间在上半部分
high = mid - 1
Else
low = mid + 1 '查找区间在下半部分
End If
Call birSearch(a, low, high, Key, index) '递归调用查找函数
End Sub
调用方法:
以下是引用片段:
Private Sub Command1_Click()
Dim a(11)
a
(1) = 5:
a
(2) = 13:
a(3) = 19:
a(4) = 21:
a(5) = 37
a(6) = 56:
a(7) = 64:
a(8) = 75:
a(9) = 80:
a(10) = 88:
a(11) = 92
Dim ind As Integer
Call birSearch(a, LBound(a), UBound(a), 21, ind)
Print ind
End Sub
2、实战练习补充代码(2002春二(9))
C盘根目录下stu.txt文件中以下的格式保存着学生姓名及班号信息。
本程序的功能是:
读取该文件中的数据,再利用InputvBox输入要查找的学生姓名,通过顺序查找,给出找到或找不到的信息。
附图是某同学被找到时显示的信息窗口。
张文,机械01
李明,机械01
王文卉,机械01
…
何宇宙,电子02
Word-WRAP:
break-word"bgColor=#f3f3f3>以下是引用片段:
Option Explicit
Option Base 1
Private Sub Form_click()
Dim stu() As String, glass() As String, i As Integer
Dim n As Integer, name As String, k As Integer
Open "c:
\stu\stu.txt" For Input As #11
Do While
(1)
(2)
ReDim Preserve stu(n), glass(n)
Input #11, stu(n), glass(n)
Loop
name = InputBox("输入欲查找的学生姓名:
")
Call search(name, stu, k)
If k <= n Then
MsgBox (3)
Else
MsgBox "无此人。
"
End If
Close #11
End Sub
Private Sub search(name As String, stu() As String, k As Integer)
Dim i As Integer
For i = 1 To UBound(stu)
If name = stu(i) Then
(4)
End If
Next i
(5)
End Sub
1、算法说明数组中元素的插入和删除一般是在已固定序列的数组中插入或删除一个元素,使得插入或删除操作后的数组还是有序的。
基本思路:
首先要找到插入位置或要删除的元素。
1)插入
代码如下:
Word-WRAP:
break-word"bgColor=#f3f3f3>以下是引用片段:
Private Sub Command1_Click()
Dim a(10) As Integer
Dim i As Integer, k As Integer
For i = 0 To 9 '生成数组
a(i) = i * 3 + 1
Print a(i);
Next i
Print "插入14"
For k = 0 To 9 '查找插入14在数组中的位置
If 14 < a(k) Then Exit For
Next k
For i = 9 To k Step -1 '从最后元素开始逐个后移,腾出位置
a(i + 1) = a(i)
Next i
a(k) = 14 '插入数14
For i = 0 To 10
Print a(i);
Next i
End Sub
2)14710131619222528
K
删除代码如下:
以下是引用片段:
Dim a() as integer
….
ReDim a(1 to n)
…
For i=k+1 to n
a(i-1)=a(i)
Next I
Redim preserve a(1 to n-1)
2、实战练习
C盘根目录下文件Data4.txt的内容是:
2,4,6,8,10,1,3,5,7,9。
下面程序的功能是将文件后半部分的奇数分别按序插入到前半部分的适当位置,得到的新数列是:
12345678910。
(实现方法:
第一次调整后的数列是:
12468103579第二次调整后的数列是:
12346810579)。
Word-WRAP:
break-word"bgColor=#f3f3f3>以下是引用片段:
Option Explict
Private Sub Form_Click()
Dim A(10) As Integer,i As Integer,J As Integer
Open "c:
\Data4.txt" For Input As #12
Do
(1)
J=J+1
Input #12,A(J)
Loop
Call Insert(A)
For i=1 To 10
Print A(i);
Next i
Close #12
End Sub
Private Sub Insert(A() As Integer)
Dim i As Integer,Putp As Integer,J As Integer
Dim Getp As Integer,N As Integer,Tem As Integer
N=UBound(A)/2
Putp=1
Getp=N+1
For i=1 To N
Tem=A(Getp)
For J=Getp To Putp +1 Step -1
(2)
Next J
A(Putp)=Tem
Getp=Getp+1
Putp= (3)
Next i
End Sub
补充代码
下面程序得功能是将无序数组中相同得数只保留一个,其余得删除,并输出经过删除后的数组元素,删除相同数是通过将该数组元素后面的元素在数组内依次前移替换前一个元素的值实现的。
数组各元素的值从文件data.txt中读取。
以下是引用片段:
Option Explict
Option Base 1
Private Sub Form_Click()
Dim I As Integer,J As Integer,K As Integer
Dim A()As Integer,T As Integer,M As Integer
Open "c:
\my documents\2000test\data.txt" For Input As #1
Do While
(1)
I=I+1
Redim Preserve A(I)
Input #1,A(I)
Loop
M=1:
T=
(2)
Do While M
I=M+1
Do While I<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机等级考试 二级 VB 常用 算法