2022年2022年江苏省计算机等级考试二级VB常用算法 .pdf
《2022年2022年江苏省计算机等级考试二级VB常用算法 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年江苏省计算机等级考试二级VB常用算法 .pdf(28页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、(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 Print s End Sub 错误的写法:Private Sub Command1_Click()Dim n%,i%,s&n=Val(InputBox(输入 n)For i=
2、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+1 t=t/i e=e+t Loop Print 计算了;i;项目和是:;e Print Exp(1)与上句输出值进行对比以证明算法的正确性名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 28 页 -End Sub 解题技
3、巧1)由于这类题目往往是根据精度要求来求值,因此我们不能预知具体循环次数,所以这类题目一般用Do 循环,很少用 For 循环。设定循环变量和通项变量,注意各变量的初值;2)分解通项表达式中各因子,并分别将各因子用循环变量表示;3)如果步骤 2 中有的因子比较复杂,难以直接用变量表示,此时可以考虑使用Function 过程;4)根据步骤 1、2、3,写出通项表达式;5)根据精度要求(往往是通项小于10 负多少次方这样一个关系表达式),写出一条满足精度要求后跳出循环的语句。通常是用:if 通项表达式 10(-N)then exit do,注意这句话一般需放在累加或者连乘式之前。实例说明以 2002
4、年春上机试卷 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 中复杂,此时考虑使用过程。于是定义过程,输入值是n,返回值是于是有:private Function comp(n as long)as long dim I as long dim resul
5、t as long result=1 此处注意,由于是连乘,初值为1 for I=1 to 2*(n-1)result=result*I next I comp=result 名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 28 页 -End Function 注意:由于是参数按地址传递,因此对于本题,实参的值不能在过程中被改变!(也是改错题常考的地方!)4、根据步骤 1、2、3,写出通项 dblCos 的表达式:dblCos=(1)(n+1)*x(2*(n-1)/comp(n)5、根据精度要求知:If abs(dblCos)=10(-6)then exit do 最后程序为:P
6、rivate 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 End sub(3)素数1、算法说明素数(质数):就是一个大于等于2 的整数,并且只能被1 和本身整除,而不能被其他整数整除的数。判别某数 m 是否是素数的经典算法是:对于 m,从 I2,3,4,m1 依次判别能否被 I 整除,
7、只要有一个能整除,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 n 1 为:名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 28 页 -For i=2 To int(sqr(m)这样可以很好的提高效率。以上判断是否为素数的代码务必识记!应用举例
8、求 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 以内的所有素数,对于每个素数判断其是否可以表示为两个平方数之和(即对于任意小于该素数shu的数 I,如果 I 和 shuI 均为平方数,则说明其可以表示为两个平方数之
9、和。)判断数 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 Sub Private Function pf(ByVal shu As Long,m As Long,n As Long)As Boolean Dim i As Lo
10、ng 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、实战练习名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 28 页 -1)补充代码(2002 春二(7)下列程序的功能是:查找四位正整数中的超级素数。超级素数的定义为:当一个素数从低位到高位依次去掉一位数后剩下的数仍然是素数,则此数为超级素数。如数2333、233、23、2 均为素数,所以 2333为超级素数。Opt
11、ion 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 As Integer F=True Do While N 0 If prime(N)Then(2)Else(3)Exit Sub End If Loop End Sub Pu
12、blic 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 个两位正整数,从中找出所有的素数,并记下它是第几个数,再找出其中最大的素数,并给出它的位置。名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 28 页 -(4)进制转化1、算法说明1)十进制正
13、整数 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 StrDtoR=Chr(65+n-10)&StrDtoR Else StrDtoR=n&StrDtoR End If Loop Tran=StrDtoR End Function 2)R
14、(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 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 E
15、nd Function 解题技巧进制转化的原理要清楚,同时编写代码时候要留意16 进制中的 AF 字符的处理。2、实战练习名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 28 页 -1)补充代码(2002 秋二(9)本程序是把给定的二进制整数转换为八进制整数。Private Sub Command1_Click()Dim a As String,b As String,c As String Dim L As Integer,m As Integer,n As Integer a=InputBox(请输入一个二进制数,输入框)(1)a=String(L,0)&a(2)For m=
16、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 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 Inte
17、ger,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 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
18、(Substring)Case (3)Asc1=Asc(Substring)-Asc(A)+10 名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 28 页 -(4)End Select Next I(5)End Sub(5)约数因子1、算法说明1)最大公约数:用辗转相除法求两自然数m、n 的最大公约数。(1)首先,对于已知两数m、n,比较并使得 mn;(2)m 除以 n 得余数 r;(3)若 r0,则 n 为求得的最大公约数,算法结束;否则执行步骤(4)(4)m?n n?r 再重复执行(2)譬如:10 与 5 分析步骤:m=10 n=5 r=m mod n=0 所以 n(n=5)
19、为最大公约数24 与 9 分析步骤:m=24 n=9 r=m mod n=6 r 0 m=9 n=6 r=m mod n=3 r 0 m=6 n=3 r=m mod n=0 所以 n(n=3)为最大公约数算法实现循环实现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 Do r=m Mod n If r=0 Then Exit Do m=n n=r Loop GCD=n End Function 递归实
20、现 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 名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 28 页 -r=m Mod n If r=0 Then GCD=n Else m=n n=r GCD=GCD(m,n)End If End Function 2)最小公倍数m n 最大公约数3)互质数最大公约数为 1 的两个正整数解题技巧该算法需要识记!这种类型题目的扩展是约数和因子题型
21、。2、实战练习1)补充代码(2003 春二(9)给定一个十进制正整数,找出小于它并与其互质的所有正整数(所谓互质数是指最大公约数为 1 的两个正整数,下图是程序执行画面)。Option Explicit Private Function gcd(1)As Integer Dim r As Integer r=m Mod n If r=0 Then gcd=n Else m=n:n=r(2)End If End Function 名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 28 页 -Private Sub Command1_Click()Dim n As Integer,p
22、 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 及公式 Xi+1=(25 Xi+357)Mod 1024,产生一个数列:X1、X2、.、X16。其中 X1X8 作为 A 的第一行元素;X9X16 作为 A 的第二行元素;A 的第三行元素值取前两行同列元素的最大公约数。最后按图示格式显示在图片框中。(6)排序1、算法说明1)选择法排序(1)从
23、n 个数中选出最小数的下标,出了循环,将最小数与第一个数交换位置;(2)除第一个数外,在剩下的n-1 个数中再按方法(1)选出次小的数,与第二个数交换位置;(3)以此类推,最后构成递增序列。譬如:8 6 9 3 2 7 第一轮交换后2 6 9 3 8 7 第二轮交换后2 3 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,则为降序排列。D
24、im i As Integer,j As Integer Dim temp As Double 名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 28 页 -Dim m As Integer For i=LBound(a)To UBound(a)-1 进行数组大小-1 轮比较m=i 在第 i 轮比较时,假定第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 将最值元素与第
25、 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)=9 b(4)=3 b(5)=2 b(6)=7 Call xzPaiXu(b,True)For i%=1 To 6 Print b(i)Next End Sub 2)冒泡法排序选择排序法在每一轮排序时找最值元素的下标,出了内循环(一轮排序结束),再交换最小数的位置;而冒泡法在每一轮排序时将相邻的数比较,当次序不对就交换位置,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年2022年江苏省计算机等级考试二级VB常用算法 2022 江苏省 计算机等级考试 二级 VB 常用 算法
限制150内