版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、PAGE PAGE 46计算机等级考试二级VisualBasic常用算法汇总南通大学 计算机科学与技术学院鲁 松计算机等级考试二级VB常用算法(1):累加和连乘1、算法说明 累加形式:V=V+e 连乘形式:V=V*e 其中:V是变量,e是递增表达式。累加和连乘一般通过循环结构来实现。 注意:需在执行循环体前对变量V赋初值。一般的,累加时置初值0;连乘时置初值为1. 举例 求N!的结果。 Private Sub Command1_Click() Dim n%, i%, s& n = Val(InputBox(输入n) s = 1 For i = 1 To n s = s * i Next i P
2、rint s End Sub 错误的写法: Private Sub Command1_Click() Dim n%, i%, s& n = Val(InputBox(输入n) For i = 1 To n s = 1 赋初值语句位置不对! s = s * i Next i Print s 输出s的值为n,而不是n! End Sub 应用举例 根据下列公式,求自然对数e的的近似值。 要求:误差小于0.00001 Private Sub Command1_Click() Dim i%, n&, t!, e! e = 2 i = 1 t = 1 Do While t 0.00001 i = i +
3、1 t = t / i e = e + t Loop Print 计算了; i; 项目和是:; e Print Exp(1) 与上句输出值进行对比以证明算法的正确性 End Sub 解题技巧 1)由于这类题目往往是根据精度要求来求值,因此我们不能预知具体循环次数,所以这类题目一般用Do循环,很少用For循环。设定循环变量和通项变量,注意各变量的初值; 2)分解通项表达式中各因子,并分别将各因子用循环变量表示; 3)如果步骤2中有的因子比较复杂,难以直接用变量表示,此时可以考虑使用Function过程; 4)根据步骤1、2、3,写出通项表达式; 5)根据精度要求(往往是通项小于10负多少次方这样
4、一个关系表达式),写出一条满足精度要求后跳出循环的语句。通常是用:if 通项表达式10(-N) then exit do ,注意这句话一般需放在累加或者连乘式之前。实例说明 以2002年春上机试卷06编程题为例 根据X值计算: n1,2, 要求:n项绝对值小于等于10-6为止。 1、由于循环次数不确定,因此确定用Do循环结构并定义循环变量用n表示(初值1);用户输入的值用x表示;通项用dblCos表示;累加值用sum表示,初值为0; 2、分解通项式的组成 可以分解为三部分: 可以表示为:(1)(n+1) 可以表示为:x(2*(n-1) 比较复杂,难以直接表示 3、由于步骤2中复杂, 此时考虑使
5、用过程。 于是定义过程,输入值是n,返回值是 于是有: private Function comp(n as long)as long dim I as long dim result as long result=1 此处注意,由于是连乘,初值为1 for I=1 to 2*(n-1) result=result*I next I comp=result End Function 注意:由于是参数按地址传递,因此对于本题,实参的值不能在过程中被改变!(也是改错题常考的地方!) 4、根据步骤1、2、3,写出通项dblCos的表达式: dblCos=(1)(n+1)* x(2*(n-1)/com
6、p(n) 5、根据精度要求知: If abs(dblCos)=10(-6) then exit do 最后程序为: Private Sub Command1_Click() Dim n As Long, dblCos As Double, x As Double x = Val(Text1.Text) n = 1 Do dblCos = (-1) (n + 1) * x (2 * (n - 1) / comp(n) If Abs(dblCos) max Then max = s If s a(j,col) Then (3) Next j计算机等级考试二级VB常用算法(3):素数1、算法说明 素
7、数(质数):就是一个大于等于2的整数,并且只能被1和本身整除,而不能被其他整数整除的数。 判别某数m是否是素数的经典算法是: 对于m,从I2,3,4,m1依次判别能否被I整除,只要有一个能整除,m就不是素数,否则m是素数。 Private Function sushu(ByVal n As Long) As Boolean Dim i As Long For i = 2 To n - 1 If (n Mod i) = 0 Then Exit For Next I If I=n then sushu=True End Function 很显然,实际上,我们可以改进上面 For i = 2 To
8、n 1 为: For i = 2 To int(sqr(m) 这样可以很好的提高效率。 以上判断是否为素数的代码务必识记! 应用举例 求100200之内素数。 Private Sub Command1_Click() Dim j As Integer For j = 100 To 200 If sushu(j) = True Then Print j End If Next j End Sub 解题技巧 识记判断素数的算法过程,根据题意,灵活调用! 实例说明 编程题(2002年春上机试卷04) 找出10000以内所有可以表示为两个平方数和的素数。 思路: 首先找10000以内的所有素数,对于每
9、个素数判断其是否可以表示为两个平方数之和(即对于任意小于该素数shu的数I,如果I和shuI均为平方数,则说明其可以表示为两个平方数之和。) 判断数I是否为平方数的方法:sqr(i)=int(sqr(i) Private Sub Command1_Click() Dim j As Integer Dim m As Long, n As Long For j = 2 To 10000 If sushu(j) = True Then If pf(j, m, n) = True Then List1.AddItem j & = & m & + & n End If End If Next j End
10、 Sub Private Function pf(ByVal shu As Long, m As Long, n As Long) As Boolean Dim i As Long For i = 1 To shu - 1 If (Sqr(i) = Int(Sqr(i) And (Sqr(shu - i) = Int(Sqr(shu - i) Then pf = True m = i n = shu - i Exit Function End If Next End Function 2、实战练习 1) 补充代码(2002春二(7) 下列程序的功能是:查找四位正整数中的超级素数。超级素数的定义
11、为:当一个素数从低位到高位依次去掉一位数后剩下的数仍然是素数,则此数为超级素数。如数2333、233、23、2均为素数,所以2333为超级素数。 Option Explicit Private Sub Command1_Click() Dim I As Integer, flg As Boolean For I = 1001 To 9999 Step 2 Call sup_prime(I, flg) If flg Then Debug.Print I End If Next I End Sub Private Sub sup_prime( (1) , F As Boolean) Dim p A
12、s Integer F = True Do While N 0 If prime(N) Then (2) Else (3) Exit Sub End If Loop End Sub Public Function prime(p As Integer) As Boolean Dim k As Integer If p = 1 Then Exit Function Else For k = 2 To Sqr(p) If p Mod k = 0 Then Exit Function Next k (4) End If End Function 2) 编程题(2004春上机试卷03) 随机生成15个
13、两位正整数,从中找出所有的素数,并记下它是第几个数,再找出其中最大的素数,并给出它的位置。 计算机等级考试二级VB常用算法(4):进制转化1、算法说明 1) 十进制正整数m转换为R(216)进制的字符串。 思路: 将m不断除r取余数,直到商为0,将余数反序即得到结果。 算法实现: Private Function Tran(ByVal m As Integer, ByVal r As Integer) As String Dim StrDtoR As String, n As Integer Do While m o n = m Mod r m = m r If n 9 Then StrDto
14、R = Chr(65 + n - 10) & StrDtoR Else StrDtoR = n & StrDtoR End If Loop Tran = StrDtoR End Function2) R(216)进制字符串转换为十进制正整数。 思路:R进制数每位数字乘以权值之和即为十进制数。 算法实现: Private Function Tran(ByVal s As String, ByVal r As Integer) As integer Dim n As Integer, dec As Integer s = UCase(Trim(s) For i% = 1 To Len(s) If
15、Mid(s, i, 1) = A Then n = Asc(Mid(s, i, 1) - Asc(A) + 10 Else n = Val(Mid(s, i, 1) End If dec = dec + n * r (Len(s) - i) Next i Tran = dec End Function解题技巧 进制转化的原理要清楚,同时编写代码时候要留意16进制中的AF字符的处理。 2、实战练习 1) 补充代码(2002秋二(9) 本程序是把给定的二进制整数转换为八进制整数。 Private Sub Command1_Click() Dim a As String, b As String,
16、c As String Dim L As Integer, m As Integer, n As Integer a = InputBox(请输入一个二进制数, 输入框) (1) a = String(L, 0) & a (2) For m = 1 To n / 3 b = Mid(a, 3 * m - 2, 3) (3) Next m Text1.Text = c End Sub Private Function zh(s As String) As String Dim i As Integer, n As Integer, p As Integer p = 1 For i = 2 To
17、0 Step -1 (4) p = p + 1 Next i zh = Str(n) End Function 2) 补充代码(2001春二(7) 下面程序是把给定的16进制正整数转换为10进制数。 Option Explicit Private Sub Form_Click() Dim St As Integer, Dem As Long St=InputBox(输入一个十六进制数) Dem=Convert(St) Print St; =; Dem End Sub Private Function Convert(S As String)As Long Dim N As Integer, I
18、 As Integer,Substring As String*1 Dim P As long, K As Long,Asc1 As Integer N= (1) P=16N For I=1 To N P=P/16 Substring= (2) Select Case Substring Case 0 To 9 K=K+P*Val(Substring) Case (3) Asc1=Asc(Substring)-Asc(A)+10 (4) End Select Next I (5) 计算机等级考试二级VB常用算法(5):约数因子1、算法说明 1) 最大公约数: 用辗转相除法求两自然数m、n的最大
19、公约数。 (1) 首先,对于已知两数m、n,比较并使得mn; (2) m除以n得余数r; (3) 若r0,则n为求得的最大公约数,算法结束;否则执行步骤(4) (4) mn nr 再重复执行(2) 譬如: 10与5 分析步骤: m=10 n=5 r=m mod n=0 所以n(n=5)为最大公约数 24与9 分析步骤: m=24 n=9 r=m mod n=6 r0 m=9 n=6 r=m mod n=3 r0 m=6 n=3 r=m mod n=0 所以n(n=3)为最大公约数 算法实现 循环实现 Private Function GCD(ByVal m As Long, ByVal n A
20、s Long) As Long Dim temp As Long If m n Then temp = m: m = n: n = temp Dim r As Long Do r = m Mod n If r = 0 Then Exit Do m = n n = r Loop GCD = n End Function 递归实现 Private Function GCD(ByVal m As Long, ByVal n As Long) As Long Dim temp As Long If m n Then temp = m: m = n: n = temp Dim r As Long r =
21、 m Mod n If r = 0 Then GCD = n Else m = n n = r GCD = GCD(m, n) End If End Function 2) 最小公倍数 mn最大公约数 3) 互质数 最大公约数为1的两个正整数 解题技巧 该算法需要识记! 这种类型题目的扩展是约数和因子题型。 2、实战练习 1) 补充代码(2003春二(9) 给定一个十进制正整数,找出小于它并与其互质的所有正整数(所谓互质数是指最大公约数为1的两个正整数,下图是程序执行画面)。 Option Explicit Private Function gcd( (1) ) As Integer Dim
22、r As Integer r = m Mod n If r = 0 Then gcd = n Else m = n: n = r (2) End If End Function Private Sub Command1_Click() Dim n As Integer, p As Integer n = Val(Text1) For p = n - 1 To 2 Step -1 If (3) Then List1.AddItem p Next p End Sub 2) 编程题(2002秋上机试卷01) 生成一个三行八列的二维数组A(3,8),其中前两行元素产生的方法是: 用初值X1=26及公式
23、Xi+1=(25Xi+357) Mod 1024,产生一个数列:X1、X2、X16 。 其中X1X8作为A的第一行元素;X9X16作为A的第二行元素;A的第三行元素值取前两行同列元素的最大公约数。最后按图示格式显示在图片框中。 计算机等级考试二级VB常用算法(6):排序1、算法说明 1) 选择法排序 (1) 从n个数中选出最小数的下标,出了循环,将最小数与第一个数交换位置; (2) 除第一个数外,在剩下的n-1个数中再按方法(1)选出次小的数,与第二个数交换位置; (3) 以此类推,最后构成递增序列。 譬如: 8 6 9 3 2 7 第一轮交换后 2 6 9 3 8 7 第二轮交换后 2 3
24、9 6 8 7 第三轮交换后 2 3 6 9 8 7 第四轮交换后 2 3 6 7 8 9 第五轮无交换 2 3 6 7 8 9 程序代码如下: Private Sub xzPaiXu(a() As Double, sheng As Boolean) a为需要排序的数组,sheng为True则为升序排列,为False,则为降序排列。 Dim i As Integer, j As Integer Dim temp As Double Dim m As Integer For i = LBound(a) To UBound(a) - 1 进行数组大小-1轮比较 m = i 在第i轮比较时,假定第
25、i个元素为最值元素 For j = i + 1 To UBound(a) 在剩下的元素中找出最 值元素的下标并记录在m中 If sheng Then 若为升序,则m记录最小元素 下标,否则记录最大元素下标 If a(j) a(m) Then m = j End If Next j 将最值元素与第i个元素交换 temp = a(i) a(i) = a(m) a(m) = temp Next i End Sub 调用该过程示例: Option Base 1 Private Sub Command1_Click() Dim b(6) As Double b(1) = 8 b(2) = 6 b(3)
26、= 9 b(4) = 3 b(5) = 2 b(6) = 7 Call xzPaiXu(b, True) For i% = 1 To 6 Print b(i) Next End Sub2) 冒泡法排序 选择排序法在每一轮排序时找最值元素的下标,出了内循环(一轮排序结束),再交换最小数的位置;而冒泡法在每一轮排序时将相邻的数比较,当次序不对就交换位置,出了内循环,最值数已经冒出。 譬如: 8 6 9 3 2 7 8 6 9 3 2 7 8 6 9 2 3 7 8 6 2 9 3 7 8 2 6 9 3 7 2 8 6 9 3 7 . 2 3 8 6 9 7 . 2 3 6 8 7 9 . 2 3
27、 6 7 8 9 . 2 3 6 7 8 9 程序代码如下: Private Sub mpPaiXu(a() As Double, sheng As Boolean) a为需要排序的数组,sheng为True则为升序排列,为False,则为降序排列。 Dim i As Integer, j As Integer Dim temp As Double Dim m As Integer For i = LBound(a) To UBound(a) - 1 进行n-1轮比较 For j = UBound(a) To i + 1 Step -1 从n到i个元素两两进行比较 If sheng Then
28、若次序不对,马上进行交换 If a(j) a(j - 1) Then temp = a(j) a(j) = a(j - 1) a(j - 1) = temp End If End If Next j 出了内循环,一轮排序结束 最值元素冒到最上边 Next i End Sub 调用该过程代码基本同上。计算机等级考试二级VB常用算法(7):排序1、算法说明数组中元素的插入和删除一般是在已固定序列的数组中插入或删除一个元素,使得插入或删除操作后的数组还是有序的。 基本思路:首先要找到插入位置或要删除的元素。 1) 插入 代码如下: Private Sub Command1_Click() Dim a
29、(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 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 Print
30、 End Sub 2) 1 4 7 10 13 16 19 22 25 28K删除 代码如下: 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、实战练习 1) 补充代码(2001秋二(8) C盘根目录下文件Data4.txt的内容是:2,4,6,8,10,1,3,5,7,9。下面程序的功能是将文件后半部分的奇数分别按序插入到前半部分的适当位置,得到的新数列是:1 2 3 4 5 6 7 8 9 10。(实现方法:第一次调整后的数列是:1 2 4
31、 6 8 10 3 5 7 9第二次调整后的数列是:1 2 3 4 6 8 10 5 7 9)。 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 Print Close #12 End Sub Private Sub Insert(A() As
32、 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 2) 补充代码(2001春二(8) 下面程序得功能是将无序数组中相同得数只保留一个,其余得删除,并输出
33、经过删除后的数组元素,删除相同数是通过将该数组元素后面的元素在数组内依次前移替换前一个元素的值实现的。数组各元素的值从文件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 documents2000testdata.txt For Input As #1 Do While (1) I=I+1 Redim Preserve
34、 A(I) Input #1,A(I) Loop M=1:T= (2) Do While MT I=M+1 Do While I 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
35、, 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 Sub2、实战练习 补充代码(2002春二(
36、9) C盘根目录下stu.txt文件中以下的格式保存着学生姓名及班号信息。本程序的功能是:读取该文件中的数据,再利用InputvBox输入要查找的学生姓名,通过顺序查找,给出找到或找不到的信息。附图是某同学被找到时显示的信息窗口。 张文,机械01 李明,机械01 王文卉,机械01 何宇宙,电子02 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 Int
37、eger Open c:stustu.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
38、 Integer) Dim i As Integer For i = 1 To UBound(stu) If name = stu(i) Then (4) End If Next i (5) End Sub计算机等级考试二级VB常用算法(9):排序1、算法说明 1) 初等数学 递推法 又称为“迭代法”,其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都在旧值的基础上递推出新值,并由新值代替旧值。 问题:猴子吃桃子 小猴子有若干桃子,第一天吃掉一半多一个;第二天吃掉剩下的一半多一个.;如此,到第七天早上要吃时,只剩下一个桃子。问小猴子一开始共有多少桃子? 分析:可以最后一天桃子
39、数推出倒数第二天的桃子数;再从倒数第二天推出倒数第三天桃子数. 设第n天桃子数为xn,前一天桃子数是:xn1,则有关系: xnxn1/2-1 程序如下: 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元;母鸡每
40、只3元。现在有100元,要求买100只鸡,编程列出所有可能的购鸡方案。 分析: 设母鸡、公鸡、小鸡分别x、y、z只,则有: xyz100 3x2y0.5z100 程序一: 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 程序二(优化) Pri
41、vate 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 t
42、rapez(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 数论综合题 此类题目比较广泛,必须给以足够重视。 历年题目
43、有:平方数、零巧数、拟互满数、回文数、酉完数、完数、幸运数、逆序数以及无暇素数、超级素数、因子和等。2、实战练习 1) 补充代码(2002秋二(10) 找出由两个不同数字组成的平方数,并将结果按图中的格式显示在列表框 List1中。 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
44、(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) 一个正整数被称为奇妙平方数,如果此数的平方与它的逆序数的平方互为逆序数。例如, 122=144, 212=441,12 与 21 互逆 ,144 与 441 互逆 ,12 就是奇妙平方数。找出 1-300 以内所有的奇妙平方数。 计算机等级考试二级VB常用算法(10):字符处理1、算法说明
45、1) 加密解密 最简单的加密方法是:将每个字母加一序数,例如5,这时: “A”F”,”a” ”f”,”B” ”G”,”b” ”g”Y” ”D”, ”y” ”d”,”Z” ”E”, ”z” ”e” 解密是加密的逆操作。 界面如下: 代码如下: 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 =
46、 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 S
47、ub Private Sub Command3_Click() Text1.Text = Text2.Text = Text3.Text = Text1.SetFocus End Sub2) 统计 问题提出 统计字符或者数字出现的次数。 算法说明 以字符统计为例,设基本问题如下: 请统计一段文本中英文字母在文本中出现的次数。(不区分大小写) 如:I am a student. 得到: A:2 d:1 e:1 I:1 m:1 n:1 s:1 t:2 u:1 分析: 由于不区分大小写,因此可定义一个大小为26(下标:025)的数组,每个元素依次记录A、B、CZ字母出现的次数。 A(0)存放字母a出
48、现的次数 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 An
49、d 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 解题技巧 熟练运用字符处理函数,对于一些数论题,譬
50、如逆序数等也可将数字通过CStr函数转换为字符后,利用字符处理函数来解题2、实战练习 1) 补充代码(2003秋二(8) 下面程序的功能是统计文件中英文字母(不区分大小写)出现的个数。 Option Base 1 Private Sub Command1_Click() Dim alpha(26) As Integer,n As Integer Dim i As Integer,s As String Open c:kav2003readme.txt For Input As #11 Do While Not EOF(11) s= (1) s=UCase(s) If s=A And s=Z T
51、hen 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, Te
52、m 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 = Flen1 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
53、 = False End If (4) Loop Print 共有; Idx; 个单词 For Js = 1 To Idx Print Char(Js) Next Js End Sub附录资料:不需要的可以自行删除bat文件的基本应用bat是dos下的批处理文件 .cmd是nt内核命令行环境的另一种批处理文件 从更广义的角度来看,unix的shell脚本以及其它操作系统甚至应用程序中由外壳进行解释执行的文本,都具有与批处理文件十分相似的作用,而且同样是由专用解释器以行为单位解释执行,这种文本形式更通用的称谓是脚本语言。所以从某个程度分析,batch, unix shell, awk, basi
54、c, perl 等脚本语言都是一样的,只不过应用的范围和解释的平台各有不同而已。甚至有些应用程序仍然沿用批处理这一称呼,而其内容和扩展名与dos的批处理却又完全不同。 = 首先批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。 = 注 = 批处理文件中完全可以使用非dos命令,甚至可以使用不具有可执行特性的普通数据性文件,这缘于windows系统这个新型解释平台的涉入,使得批处理的应用越来越边缘化。所以我们讨论的
55、批处理应该限定在dos环境或者命令行环境中,否则很多观念和设定都需要做比较大的变动。 = 其次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句(for)来循环执行一条命令。当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规范的。批处理的程序语句就是一条条的DOS命令(包括内部命令和外部命令),而批处理的能力主要取决于你所使用的命令。 = 注 = 批处理文件(batch file)也可以称之为批处理程序(batch program),这一点与编译型语言有所不同,就c语言来说,扩展名为c或者
56、cpp的文件可以称之为c语言文件或者c语言源代码,但只有编译连接后的exe文件才可以称之为c语言程序。因为批处理文件本身既具有文本的可读性,又具有程序的可执行性,这些称谓的界限是比较模糊的。 = 第三,每个编写好的批处理文件都相当于一个DOS的外部命令,你可以把它所在的目录放到你的DOS搜索路径(path)中来使得它可以在任意位置运行。一个良好的习惯是在硬盘上建立一个bat或者batch目录(例如C:BATCH),然后将所有你编写的批处理文件放到该目录中,这样只要在path中设置上c:batch,你就可以在任意位置运行所有你编写的批处理程序。 = 注 = 纯以dos系统而言,可执行程序大约可以
57、细分为五类,依照执行优先级由高到低排列分别是:DOSKEY宏命令(预先驻留内存),COMMAND.COM中的内部命令(根据内存的环境随时进驻内存),以com为扩展名的可执行程序(由 直接载入内存),以exe位扩展名的可执行程序(由 重定位后载入内存),以bat位扩展名的批处理程序(由 解释分析,根据其内容按优先级顺序调用第2,3,4,5种可执行程序,分析一行,执行一行,文件本身不载入内存) = 第四,在DOS和Win9x/Me系统下,C:盘根目录下的AUTOEXEC.BAT批处理文件是自动运行批处理文件,每次系统启动时会自动运行该文件,你可以将系统每次启动时都要运行的命令放入该文件中,例如设置
58、搜索路径,调入鼠标驱动和磁盘缓存,设置系统环境变量等。下面是一个运行于Windows 98下的autoexec.bat的示例: ECHO OFF PATH C:WINDOWS;C:WINDOWSCOMMAND;C:UCDOS;C:DOSTools; C:SYSTOOLS;C:WINTOOLS;C:BATCH LH SMARTDRV.EXE /X LH DOSKEY.COM /insert LH CTMOUSE.EXE SET TEMP=D:TEMP SET TMP=D:TEMP = 注 = AUTOEXEC.BAT为DOS系统的自动运行批处理文件,由COMMAND.COM启动时解释执行; 而在
59、Win9x环境中,不仅增加支持了 DOSSTART.BAT, WINSTART.BAT 等许多其它自动运行的批处理文件,对AUTOEXEC.BAT 也增加了 .DOS .W40 .BAK .OLD .PWS 等许多变体以适应复杂的环境和多变的需求。 = willsort 编注 = 以下关于命令的分类,有很多值得推敲的地方。常用命令中的本不是命令,而dir、copy等也很常用的命令却没有列入, 而特殊命令中所有命令对我来说都是常用命令。建议将批处理所引用的命令分为内部命令、外部命令、第三方程序三类。而内部命令和外部命令中别有一类是专用于或常用于批处理中的命令可称之为批处理命令。 以下摘录MS-D
60、OS 6.22 帮助文档中关于批处理命令的文字,当然,其中有些概念和定义已经有些落后了。 批处理命令 批处理文件或批处理程序是一个包含若干MS-DOS命令的正文文件,扩展名为.BAT。当在命令提示符下敲入批处理程序的名称时,MS-DOS成组执行此批处理程序中的命令。 任何在命令提示符下可使用的命令都可用在批处理程序中。此外,下面MS-DOS命令是专门在批处理程序中使用的。 = 常用命令 echo、call、pause、rem(小技巧:用:代替rem)是批处理文件最常用的几个命令,我们就从他们开始学起。 = 注 = 首先, 不是一个命令, 而是DOS 批处理的一个特殊标记符, 仅用于屏蔽命令行回
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大数据时代的行业现状与创新考核试卷
- 玉石的形成与演化过程考核试卷
- 公共设施管理的变革与创新考核试卷
- 山东省泰安市肥城市2024-2025学年三年级上学期期中英语试卷
- 生物科技在食品安全的应用考核试卷
- 盐海淡水资源的开发与利用策略考核试卷
- 制定目标与实现计划培训考核试卷
- 防震防火课件教学课件
- DB11T 714.1-2010 电子政务运维服务支撑系统规范 第1部分:基本要求
- 地理课件模板教学课件
- GB/T 22844-2009配套床上用品
- GB/T 14683-2017硅酮和改性硅酮建筑密封胶
- 无人机校企合作协议
- 工程设备进场进场开箱验收单
- GB 16809-2008防火窗
- 《百团大战》历史课件
- 八年级上册道德及法治非选择题专项训练
- 2023年徐州市国盛控股集团有限公司招聘笔试题库及答案解析
- 机械课程设计~二级减速器设计教程
- 国家开放大学《传感器与测试技术》实验参考答案
- 工程造价司法鉴定实施方案
评论
0/150
提交评论