VB常用算法(五)约数因子
- 格式:doc
- 大小:59.50 KB
- 文档页数:4
1. 累加与连乘1、算法说明[分析]累加形式:V=V+e 连乘形式:V=V*e其中:V 是变量,e 是递增表达式。
累加和连乘一般通过循环结构来实现。
注意:需在执行循环体前对变量 V 赋初值。
一般累加时置初值0;连乘时置初值为1 [举例]求N!的结果。
Private Sub Comma nd1_Click()Dim n%, i%, s&n = Val(InputBox("输入 n"))s = 1For i = 1 To ns = s * iNext iPr int sEnd Sub[应用举例]根据下列公式,求自然对数 e 的的近似值Private Sub Comma nd1_Click()Dim i%, n&, t!, e!e = 2i = 1t = 1Do While t > 0.00001i = i + 1t = t / i e = e + tLoopPrint"计算了 "; i;"项目和是:";ePrint Exp(1)与上句输出值进行对比以证明算法的正确性End Sub2. 最值问题1、算法说明=1 + 一_ + — +一 + 1! 2! 3! + 1 = 1 + -1要求:误差小于0.00001在若干数中求最大值,一般先取第一个数为最大值的初值(即假设第一个数为最大值),然后,在循环体内将每一个数与最大值比较,若该数大于最大值,将该数替换为最大值,直到循环结束。
求最小值的方法类同。
求若干数平均值,实质上就是先求和,再除以这些数的个数。
应用举例:随机产生n个1-100 (包括1和100)的数,求它们的最大值、最小值和平均值。
Private Sub Comma nd1_Click()Dim n%, i%, min%, max%, aver!, s%n 二 Val(lnputBox("输入个数:"))s = Int (Rnd * 100) + 1max = s : min = s : aver = sPrint"第1个数是:” & sFor i = 2 To ns = In t(R nd * 100) + 1Print"第” & i & ” 个数是:” & sIf s > max The n max = sIf s < min The n min = saver = aver + sNext iaver = aver/nPrin t "max="; max; " min二";min; "aver二";averEnd Sub解题技巧:最大值、最小值、平均值类型题目往往和数组放在一起考!有的不仅求这些值,还要对具有最大值或者最小值的行或列或者某个元素进行处理,这时就要在记录最大、最小值时,同时记录该值所在的行号和列号。
常用算法1.判断素数素数是指只能被1与自己整除的数是素数,最小的素数是2,如3,5,7等都是素数判断方法一:Private Function Prime(N As Integer)As BooleanDim i As IntegerFor i=2 To N-1(或sqr(N)或N\2)If N Mod i=0 Then Exit ForNext i (或N/i=Int(N/i))If i=N Then Prime=TrueEnd Function判断方法二:Private Function Prime(N As Integer)As BooleanDim i As IntegerFor i=2 To N-1If N Mod i=0 Then Exit FunctionNext iPrime=TrueEnd Function(2)求最大公约数(欧几里德算法,辗转相除法)最大公约数是指两个数最大的公约数Private Function Gcd(byval m As Integer,ByVal n As Integer)As Integer Dim r As Integerr=m Mod nDo while r<>0m=nn=rr=m Mod nLoopGcd=nEnd Function利用递归实现判断最大公约数Private Function Gcd(ByVal m As Integer,ByVal n As Integer)As IntegerDim r As Integerr=m Mod nIf r=0 ThenGcd=nELseM=nn=rGcd=Gcd(m,n)End IfEnd Function(3)求因子算法与求完全数算法Private Sub factor(x As Integer,fn()As Integer)'动态数组fn用以存放所有的因子Dim i As Integer,n As IntegerFor i=1 To XIf x Mod i=0 Thenn=n+1Redim Preserve fn(n)fn(n)=iEnd IfNext iEnd Sub求完全数:完全数:整数N的因子和(其中因子包括1,不包括自身)等于NPrirate Function wanshu(N As Integer)As Boolean 'N为原数,sum为N的因子之和Dim i As Integer,sum As IntegerFor i=1 To N-1If N Mod i=0 Thensum=sum+iEnd IfNext iIf sum=N Then wanshu=TrueEnd Function(4)进制转换N进制--十进制如二进制转换为十进制采用从右向左每个数乘以其对应的幂值,如二进制10111=1×2^0+1×2^1+1×2^2+0×2^3+1×2^4=23,八进制转换为十进制采用从右向左每个数乘以其对应的幂值,如八进制25=5×8^0+2×8^1=21,十六进制转换为十进制采用从右向左每个数乘以其对应的幂值, 如十六进制A7=7×16^0+10×16^1=167(十六进制的范围是从0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个数,其中A表示10,B表示11,依次类推,F表示15)private sub zh1(a as string, N as integer,b as integer)'a为N进制数,b为转换后的十进制数,N 代表某种进制dim p as integer,i as integer,s1 as stringp=0for i=Len(a) to 1 step -1s1=Ucase(Mid(a,i,1))if s1>="A" And s1<="F" Then s1=Asc(s1)-55b=b+val(s1)*N^pp=p+1Next IEnd Sub十进制---- N进制:方法是除N逆序取余法,注意逆序如将十进制188转换为十六进制的方法是,除以16逆序取余法, 所以是274余数188/8 4(余数)23/8 7(余数)2/8 2(余数)Private Sub zh(a as integer,N as integer,b as integer)‘a为十进制数,b为转换后的N进制数,N代表某种进制dim r as integer, s as stringdo until a=0r=a mod n ‘r取余if r>9 then s=Chr(55+r) else s=Cstr(r)b=s & ba=a\NLoopEnd Sub(5)互质数:两个数的最大公约数为1Private Function reprime(a as integer, b as integer) as boolean dim i as integerfor i=2 to aif a mod i=0 and b mod i=0 then exit functionnext ireprime=trueEnd Function(6)回文数:左右对称的数为回文数(如121,13231)方法一:折半判断法Private Function compare(n as long) as booleanDim I as integer, s as string , slen as integers=Cstr(n): slen=Len(s)For i=1 to slen\2if mid(s,I,1)<>Mid(s,slen-i+1,1) Then Exit Function nextcompare=trueEnd Function方法二:根据定义:其逆序数(反序数)和原数相等的数为回文数Private Function compare(n as integer) as Booleandim I as integer, s1 as string,s2 as strings1=cstr(n)For i=1 to len(s1)s2=Mid(s1,I,1) & s2Next Iif s2=s1 then compare=trueEnd Function(7)最小公倍数方法一:最小公倍数=两数乘积/最大公约数private Function gcd(byval m as integer, byval n as integer) as integerdim r as integerdor=m mod nm=nn=rloop until r=0gcd=mFunctionprivate Function lcm(x as integer,y as integer) as integerlcm=(x*y/gcd(x,y))End Function方法二:穷举法,利用计算机运算速度快不易出错的特点,将所有的可能性一一尝试,直到得出结果private Function lcm(x as integer, y as integer) as integerdim i as longfor i=1 to x*yif I mod x=0 and I mod y=0 thenlcm=IExit ForEnd Ifnext IEnd Function(8)判断最大数、最小数Private Sub value(a() as integer, max as integer,min as integer)dim i as integermax=a(1) : min=a(1)for i=2 to ubound(a)if a(i)>max then max=a(i)if a(i)<min then min=a(i)next iEnd Sub(9)阶乘方法一: 方法二:利用递归方式private Function Fact(byval N as integer) as Long private Function fact(n as integer) as longFact=1 if n=1 or n=0 thendo while N>0 fact=1fact=fact*N elseN=n-1 fact=n*fact(n-1) loop end ifEnd Function End Function(10)裴波拉挈数列(递推算法)Fab(n)=fab(n-1)+fab(n-2)private Function Fab(n as integer) as integerif n=1 or n=2 thenfab=1elseFab=Fab(n-1)+fab(n-2) ‘函数名=表达式End ifEnd Function(11)排序—从小到大方法一:使用选择排序法private sub sort(a() as integer)dim I as integer, j as integerdim n as integer, t as integern=Ubond(a)for i=1 to n-1for j=i+1 to nif a(i)>a(j) thent=a(i) : a(i)=a(j): a(j)=tend ifnext jnext iEnd Sub方法二:冒泡排序法private sub sort2(a() as integer)dim I as integer,j as integerdim n as integer, t as integern=ubound(a)for i=1 to n-1for j=1 to n-iif a(j)>a(j+1) thent=a(j): a(j)=a(j+1): a(j+1)=tEnd IfNext jNext IEnd Sub(12)分解质因子:如:120=2*2*2*3*5private sub zhiyinzi(n as integer, a() as integer)dim k as integer, i as integeri=2doif n mod i=0 thenk=k+1 : Redim Preserve a(k) : a(k)=i: n=n\i elsei=i+1End Ifloop until n=1End Sub(13)各位数分离Private Sub command1_click() dim i as integer,j as integer i=inputbox("请输入数值") do while i<>0j=i mod 10print ji=i\10loopEnd Sub。
VB常用算法总结在VB(Visual Basic)编程中,常用的算法有很多。
下面将对其中一些常见和重要的算法进行总结。
请注意,由于篇幅限制,这只是一个简要总结,无法涵盖所有算法的细节。
1.排序算法:排序算法是计算机科学中最基本和常见的算法之一、在VB中,常用的排序算法包括冒泡排序、插入排序、选择排序、快速排序和归并排序等。
排序算法通过比较和交换来对一组数据进行重新排列,使其按照指定的顺序排列。
2.查找算法:查找算法用于在一个数据集中寻找特定的值或元素。
在VB中,常用的查找算法有二分查找和线性查找等。
二分查找是一种高效的算法,可以在有序数组中快速地找到目标元素。
3.图算法:图算法是用于解决与图相关的问题的算法。
在VB中,常用的图算法包括广度优先(BFS)和深度优先(DFS)等。
这些算法可以用于寻找图中的路径、检测环和遍历图等操作。
4.动态规划:动态规划是一种用于解决最优化问题的算法。
在VB中,常用的动态规划算法有背包问题、最长公共子序列和最短路径等。
动态规划算法通过拆解问题为子问题,并保存子问题的解来避免重复计算,从而提高算法的效率。
5.字符串匹配:字符串匹配算法用于在一个字符串中查找另一个字符串。
在VB中,常用的字符串匹配算法有暴力匹配算法、KMP算法和Boyer-Moore算法等。
这些算法通过比较字符来确定字符串的匹配位置。
6.线性代数:线性代数是数学的一个分支,用于解决线性方程组和向量空间等问题。
在VB中,常用的线性代数算法有矩阵运算、向量运算和线性方程求解等。
这些算法可以应用于计算机图形学、数据分析和机器学习等领域。
7.数学运算:数学运算在VB编程中非常常见。
常用的数学运算算法包括求和、平均值、最大值、最小值和中值等。
这些算法可以通过循环和条件判断来实现。
8.加密与解密:加密和解密算法用于保护数据的安全性。
在VB中,常用的加密算法有对称加密算法(如DES和AES)和非对称加密算法(如RSA和ECC)等。
1. 元素的调整:a(1)= 12 ,a(2)= 2 , a(3)=5 , a(4) =18 t = a(4)For i = 4 to 2step -1a(i) = a(i- 1)a(1)= t2.求a , b两个数的最大公倍数Mn = aDo while n Mod b <> 0n = n + aLoopM = n3.求a , b两个数的最大公约数NDor = a Mod ba = bb = rLoop Until r = 0N = a4.从右向左取一个整数n的各个位数DoK = n Mod 10n = n \ 10S = s & kLoop Until n = 05.求素数For I = 2 To NFor J = 2 To Sqr(I)If I Mod J =0 Then Exit Fora(Idx) = INext INext J6.递归法If i = 1 ThenFact = 1ElseIf i = 2 ThenFact = 2ElseFact = Fact(i - 1)+ Fact(i - 2)7.求一个整数的反序数m = “”D0X = n Mod 10m = m &Xn = n \ 10Loop while n <> 0M = Val(m)8 .判断一个整数n是否为回文数(如404是回文数)Private function judge() as BlooeanCh = Cstr(n )S = Len(Ch)For i = 1 To S/ 2If Mid(Ch , i ,1)<> Mid(Ch ,S - i +1, 1) Then Exit Function Next iHuiwen = TrueEnd function9.求一个不是素数的整数N的因子(除了1 和自身)For I = 1 To N - 1I f N Mod I = 0 ThenS = S & Str(I) ______ I为N的一个因子Next I10.求一个整数p的反序数S = Cstr(p)For i = 1 To Len(s)m = Mid(s, i, 1) & mNext i11取一个范围(m1~m2)内的不重复数i = 1DoN = Int(Rnd(m2-m1+1))+m1For k = 1 To i ............................................. 判断有无重复If rb(k ) = N Then Exit forNext kIf k > ii = i + 1rb(2) = NEnd ifLoop while e12.比较一个整数n中是否有相同的数字Private Function compare(n As Long) As BooleanDim i As Integer, a() As Integer, j As IntegerReDim a(Len(CStr(n)))For i = 1 To Len(CStr(n))a(i) = Mid(n, i, 1)Next iFor i = 1 To UBound(a) - 1For j = 2 To UBound(a)If a(i) = a(j) Then Exit FunctionNext jNext icompare = TrueEnd Function注意:1.回车换行符:S=S&VbCrLf2.InStrr(X, “N”):从X的第一个位置起查找N在X中第一次出现的位置,返回数字。
江苏省VB二级考试应试策略1.关于上机(占40分)(1)改错题:(14分)题目中都是设3个错误点,一般分别是语法错误(如数组的声明、重复定义等略有难度的语法错误)、运行错误、逻辑错误等,这些错误基本上都是平时编程时比较容易犯的错误,错误点不重复。
评分标准:录入原题:2分,改错:4分/个,根据改错点给分,新错误不扣分。
(2)编程题:(26分)按照题目要求的功能,根据参考界面编程,程序中都涉及一定难度的算法。
评分标准:界面设计:根据界面元素的复杂程度,给5—8分,每个元素得一定的分数;清除按钮:2分;退出按钮:1分;含算法的按钮:根据代码多少按步骤给分。
编程时注意:首先应该进行变量的说明,然后按输入——处理——输出的顺序来设计程序的逻辑结构。
写程序时一定要记住采用规范的书写方法,这样既不容易出错,又能轻松地拿到基本分。
即根据逻辑关系采用缩进的形式来写,注意层次感,让人一看一目了然。
需要用到程序控制结构时,先把前后配套的代码(如for i=…… next i)写出来,然后再在其中添加其它代码。
另外,上机考试时一个最重要的操作就是正确地保存文件,请特别注意以下三点:(1)文件名一定要符合要求:项目文件和窗体文件要分别取名保存,两道题目的文件名不同,不可随意取名!(2)保存位置一定要正确!注意:工程及窗体都要“另存为”!!(3)为防止考试过程中因死机造成文件丢失,白白浪费时间,可以先保存在D盘上,做好后再分别将工程文件及窗体文件保存到指定位置。
2. 考试注意事项1)上机考试:最忌讳紧张,应该沉着。
一般应该首先把第1道改错题按原样输入进去,不要先急于运行,以免死循环造成前功尽弃(死循环后需要重新启动VB,这样先前还没有保存的文件就丢失了!),最后根据报错或试运行结果来判断出错原因,进行修改。
若遇到机器故障自己无法排除时,应及时报告监考老师协助解决或更换机器接着考试。
2)笔试:最忌讳粗心,应该看清题意再下笔(特别是平时练习题做得多的同学更不要想当然的做,要留意题意与以往的练习题是否有什么差别),记住:遇到没有把握的就放放,先做有把握的;不要提前交卷,不要轻言放弃,不要空着任何一道题,实在不会就猜一个。
应用及综合(常考算法及编程思想)一、v b常考函数1、字符串操作函数:(1)字符串截取:Left、Right、Mid(获取字符串中任一字符)(2)测试字符串长度:len(3)测试字串是否在父串中出现:Instr(返回一字串在父串中最先出现的位置)例如:Instr(“abc“,”b“)2、转换函数(1)val:将字符型述数据转换为数值型(2)str及cstr:将数值型数据转换为字符型注意:str(12):转换后有三个字符,正数的空格被保留Cstr(12):转换后有两个字符,省略前导空格3、大小写转换函数(1)Lcase:将字符串中所有大写字母转换为小写字母例如:lacase(”AbcDe”),转换后结果:abcde(2)ucase:将字符串中所有小写字母转换为大写字母4、英文字母与其对应的ASCII值转换函数(1)asc:获取字母对应的ASCII码值例如:asc(“A“):函数返回结果为65(2)chr:返回ASCII码对应的英文字母例如:chr(97),则函数的返回值为a应用1:大小写转换例如:chr(asc(“A“)+32)应用2:判断是大写字母还是小写Dim s As Strings = "abDF"For i = 1 To Len(s)If Asc(Mid(s, i, 1)) >= 97 And Asc(Mid(s, i, 1)) <= 122 Then Next i5、随机函数:rnd例如:产生10-20之间的随机数:int(11*rnd+10)6、求数组上、下界函数(1)ubound:求数组的上界例如:Dim a(10) As Integer, b(3, 5)Print UBound(a)Print UBound(b)Print UBound(b, 2)(2)lbound:求数组的下界7、取整函数:(1)int和fix:返回数据的整数部分(等考中常涉及)(2)cint8、print函数:用于输出(1)图片框上显示文本例如:pic1.print “abc“,”edf“(2)窗体上显示文本(尤其多窗体时,注意分析在哪个窗体上输出内容)例如:form1.print “abc“;”def“9、inputbox函数及msgbox函数(1)inputbox函数:弹出一个输入对话框,等待用户输入注意该函数的前三个参数的表示意义例如:Dim a As Integera = InputBox("对话框提示信息", "对话框标题", 10)(a)未给第二个参数赋值,则对话框的标题为工程名a = InputBox("对话框提示信息", , 10)(b)可以省略第三个参数,表示无默认值a = InputBox("对话框提示信息", "对话框标题")(2)msgbox函数:弹出一个输出对话框,用于向用户显示信息一般使用方法:msgbox “输出提示信息“10、loadpicture:用于在编程时向图片框或图像框中加载图片二、文件操作1、文件操作三大步骤:打开文件、文件读写、文件关闭2、等考中最常见的是顺序文件的读写操作(1)顺序文件的打开Open App.Path & "\aa.txt" For Input As #1(2)顺寻文件的读(把文件中的内容读取出来保存到相应变量中)应用1:(将文件中内容读取到字符串中)Dim s As StringOpen App.Path & "\aa.txt" For Input As #1Input #1, ss = Input(LOF(1), #1)应用2:(将文件中数据读取到一维数组中)Dim a(1 To 10) As IntegerOpen App.Path & "\aa.txt" For Input As #1For i = 1 To 10Input #1, a(i)Next i应用3:(将文件中数据读取到二维数组中)Dim a(1 To 10, 1 To 10) As IntegerOpen App.Path & "\aa.txt" For Input As #1For i = 1 To 10For j = 1 To 10Input #1, a(i, j)Next i(3)顺序文件的写(向文件中写入指定内容)应用1:Open App.Path & "\aa.txt" For Output As #1Print #1, "abc"Print #1, "abc", "bcd"应用2:Open App.Path & "\aa.txt" For Output As #1Write #1, "abc"Write #1, "abc", "bcd"(4)顺序文件的关闭Close #1(5)文件读写操作中经常涉及的函数(a)lof:返回文件的大小(b)eof:测试是否到达文件末尾,为true时,表示已到文件末尾应用:(常用于文件的读操作中,因不知文件的大小)Dim ch As String, st As StringOpen App.Path & "\aa.txt" For Input As #1Do While Not EOF(1) '测试是否到达文件末尾Input #1, chst = st & chLoopClose #1三、过程1、sub过程(无返回值)(1)定义:(过程有无参数需根据题目灵活确定)例1:Private Sub sub1()End Sub例2:Private Sub sub2(a As Integer, b() As Integer)End Sub(2)调用:(两种方式)(a)call sub2(m,n) 其中m为整型实参变量,n为一维数组名(b)sub2 m,n2、function过程(有返回值)(1)定义:(过程有无参数需根据题目灵活确定)例1:Private Function fun1() As IntegerEnd Function例2:Private Function fun2(a As String) As BooleanEnd Function注意:function有返回值,在过程内部应有如下语句(等考中常见)过程名=返回值例3:Private Function fun3(a As Integer, b As Integer) As IntegerDim c As Integerc = a + bfun3 = cEnd Function(2)调用:一般讲函数过程的调用置于一个表达式中,如算术表达式应用1:If fun2(a)then应用2:Dim d as integerD=fun3(10,20)3、参数的传递方式:(1)形参前加上Byva l:表示值传递(形参改变,不影响实参的值)(2)形参前无任何修饰或形参前加Byref:表示地址传递(形参改变,影响实参的值)例:Private Function fun3(ByVal a As Integer, b As Integer) As Integer 与Private Function fun3(ByVal a As Integer, ByRef b As Integer) As Integer 等价四、上机常考算法1、累加与累乘(1)累加(求和)例:Dim sum As Integer, a(10) As Integersum = 0For i = 1 To 10sum = sum + a(i)Next i(2)累乘(求积,等考中常见于求阶乘)Dim fact As Longfact = 1For i = 1 To 10fact = fact * iNext i2、求素数应用1:Dim a(1 To 10) As IntegerFor i = 1 To 10For j = 2 To Sqr(a(i))If a(i) Mod j = 0 Then Exit ForNext jIf j > Sqr(a(i)) ThenPrint "是素数"End IfNext i应用2:Private Function fun3(a As Integer) As BooleanFor i = 2 To Sqr(a)If a Mod i = 0 Then Exit FunctionNext ifun3 = TrueEnd Function3、求最值问题:设第一个数为极值数,然后进入循环与其比较,超过则替换应用1:求最大值及最大值的位置Dim a(1 To 10) As IntegerDim max As Integer, maxp As Integermax = a(1): maxp = 1For i = 2 To UBound(a)If a(i) > max Thenmax = a(i)maxp = iEnd IfNext i应用2:求最小值及其位置4、查找(1)顺序查找例:Dim a(10) As Integer, find As Integerfind=inputbox("请输入要查找的数")For i = 1 To UBound(a)If a(i) = find Then Exit ForNext iIf i <= UBound(a) ThenPrint "yes"End If(2)二分查找Dim a(1 To 10) As Integer, find As IntegerDim left As Integer, right As Integer, mid As Integerfind=inputbox("请输入要查找的数")left = 1: right = 10Do While left <= rightmid = (left + right) / 2If a(mid) = find ThenPrint "yes"Exit DoElseIf a(mid) > find Thenright = mid - 1Elseleft = mid + 1End IfLoop5、排序(1)冒泡排序Dim a(1 to 60) as integerFor i = 1 To 59For j = 1 To 60 - iIf c(j) > c(j + 1) Thent = c(j)c(j) = c(j + 1)c(j + 1) = tEnd IfNext jNext i(2)选择排序Dim a(1 to 60) as integerFor i = 1 To 59For j = i + 1 To 60If c(i) > c(j) Thent = c(i)c(i) = c(j)c(j) = tEnd IfNext jNext i6、多分支语句(1)if语句的变体形式例:Dim a(1 To 10) As Integer, b(1 To 4) As Integer For i = 1 To 10If a(i) >= 0 And a(i) <= 60 Thenb(1) = b(1) + 1ElseIf a(i) >= 60 And a(i) <= 85 Thenb(2) = b(2) + 1ElseIf a(i) >= 85 And a(i) <= 100 Thenb(3) = b(3) + 1Elseb(4) = b(4) + 1End IfNext i(2)select-case语句例:Dim s As StringSelect Case nCase Is <= 0s = "有误"Case 1, 2, 3s = "第一季度"Case 4 To 6s = "第二季度"Case 7 To 9s = "第三季度"Case 10, 11, 12s = "第四季度"Case Elses = "有误"End Select7、数组的插入、删除、重组及合并(1)数组的插入:对原数组进行扩充,循环查找插入位置(逐个比较),找到后,从后向前依次移动每一个数组元素,直到该位置,然后将数据插入(2)数组的删除:与插入类似,也是先查找位置,找到后,将该位置以后的每一个元素依次前移(3)数组的重组:采用排序或移动元素的思想,具体情况分析(4)数组的合并:本质上为排序8、分类统计统计各种类型的数据,如字母出现的次数、奇偶数统计等。
VB 常考算法算法(Algorithm ):计算机解题的基本思想方法和步骤。
算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。
程序的结构:输入――处理――输出。
其中处理包括过程调用。
一.简单算法1.计数2. 求阶乘3. 累加、累乘、综合做计算最近考题有: 03秋01编程题 03秋03编程题03秋04编程题 03秋06改错题 04春01编程题 04春05编程题以及相应的一些笔试的完善程序题此三类问题都要使用循环,①要注意根据问题确定循环变量的初值、终值或结束条件,②更要注意用来表示计数、和、阶乘的变量的初值例:编写求n 项和的程序。
求和公式如下:)14()!2(22114)()1(+=+∑-=k k x kknk n k S πN 可取值1,2,3,4。
Option ExplicitConst pi As Double = 3.1415926353Function fun(n As Integer, x As Single) As Single Dim k As Integer, s As Single, a As Single For k = 1 To na = (-1) ^ k * (pi / 2) ^ (2 * k) / fact(2 * k) * x ^ (4 * k + 1) / (4 * k + 1) s = s + a Next k fun = s End FunctionFunction fact(n As Integer) As Long Dim i As Integerfact = 1For i = 1 To nfact = fact * iNext iEnd FunctionPrivate Sub Command1_Click()Dim x As Single, n As Integer, i As Integerx = Text1n = text2For i = 1 To nlist1.AddItem "s(" & CStr(i) & ")=" & CStr(fun(i, x))Next iEnd Sub4.求两个整数的最大公约数、最小公倍数等分析:求最大公约数的算法思想:(最小公倍数=两个整数之积/最大公约数)(1) 对于已知两数m,n,使得m>n;(2) m除以n得余数r;(3) 若r=0,则n为求得的最大公约数,算法结束;否则执行(4);(4) m←n,n←r,再重复执行(2)。
计算机等级考试二级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 Print 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 + 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负多少次方这样一个关系表达式),写出一条满足精度要求后跳出循环的语句。
VB常用算法---约数因子一、算法说明:1.最大公约数:用辗转相除法求两自然数m、n的最大公约数。
〔1〕首先,对于已知两数m、n,比较并使得m>n;〔2〕m除以n得余数r;〔3〕若r=0,则n为求得的最大公约数,算法结束;否则执行步骤〔4〕〔4〕m←n n←r 再重复执行〔2〕例如1: 10与5分析步骤:m=10 n=5r=m mod n=0所以n<n=5>为最大公约数例如2: 24与9分析步骤:m=24 n=9r=m mod n=6r≠0 m=9 n=6r=m mod n=3r≠0 m=6 n=3r=m mod n=0所以n<n=3>为最大公约数算法实现:1〕循环实现Private Function GCD<ByVal m As Long, ByVal n As Long> As LongDim temp As LongDim r As LongIf m < n Then temp = m: m = n: n = tempDor = m Mod nIf r = 0 Then Exit Dom = nn = rLoopGCD = nEnd Function说明:m和 n 是要求解最大公约数的两个自然数,函数的返回值是m和n的最大公约数。
2〕递归方法实现Private Function GCD<ByVal m As Long, ByVal n As Long> As LongDim temp As LongDim r As LongIf m < n Then temp = m: m = n: n = tempr = m Mod nIf r = 0 ThenGCD = nElsem = nn = rGCD = GCD<m, n>End IfEnd Function说明:m和 n 是要求解最大公约数的两个自然数,函数的返回值是m和n的最大公约数。
VB常用算法(五)约数因子
1、算法说明
1) 最大公约数:
用辗转相除法求两自然数m、n的最大公约数。
(1)首先,对于已知两数m、n,比较并使得m>n;
(2)m除以n得余数r;
(3)若r=0,则n为求得的最大公约数,算法结束;否则执行步骤(4)
(4)m←n n←r 再重复执行(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
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
递归实现
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 = 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的两个正整数
解题技巧
该算法需要识记!
这种类型题目的扩展是约数和因子题型。
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
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及公式Xi+1=(25×Xi+357) Mod 1024,产生一个数列:X1、X2、......、X16 。
其中X1~X8作为A的第一行元素;X9~X16作为A的第二行元素;A的第三行元素值取前两行同列元素的最大公约数。
最后按图示格式显示在图片框中。