当前位置:文档之家› 二级常用算法

二级常用算法

计算机等级考试二级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 = 1For i = 1 To ns = s * iNext iPrint sEnd Sub错误的写法:Private Sub Command1_Click()Dim n%,i%,s&n = Val(InputBox("输入n"))For i = 1 To ns = 1 …赋初值语句位置不对!s = s * iNext iPrint s …输出s的值为n,而不是n!End Sub应用举例根据下列公式,求自然对数e的的近似值。

要求:误差小于0.00001Private Sub Command1_Click()Dim i%,n&,t!,e!e = 2i = 1t = 1Do While t > 0.00001i = i + 1t = t / ie = e + tLoopPrint "计算了";i;"项目和是:"; ePrint Exp(1)…与上句输出值进行对比以证明算法的正确性End Sub解题技巧1)由于这类题目往往是根据精度要求来求值,因此我们不能预知具体循环次数,所以这类题目一般用Do循环,很少用For循环。

设定循环变量和通项变量,注意各变量的初值;2)分解通项表达式中各因子,并分别将各因子用循环变量表示;3)如果步骤2中有的因子比较复杂,难以直接用变量表示,此时可以考虑使用Function过程;4)根据步骤1、2、3,写出通项表达式;5)根据精度要求(往往是通项小于10负多少次方这样一个关系表达式),写出一条满足精度要求后跳出循环的语句。

通常是用:if 通项表达式>10^(-N)then exit do ,注意这句话一般需放在累加或者连乘式之前。

实例说明以2002年春上机试卷06编程题为例根据X值计算:n=1,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 longdim I as longdim result as longresult=1 …此处注意,由于是连乘,初值为1for I=1 to 2*(n-1)result=result*Inext Icomp=resultEnd 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最后程序为:Private Sub Command1_Click()Dim n As Long,dblCos As Double,x As Doublex = Val(Text1.Text)n = 1DodblCos = (-1)^ (n + 1)* x ^ (2 * (n - 1))/ comp(n)If Abs(dblCos)<= 10 ^ (-6)Then Exit DoSum = Sum + dblCosn = n + 1LoopPrint SumEnd SubPrivate Function comp(n As Long)As LongDim I As LongDim result As Longresult = 1 '此处注意,由于是连乘,初值为1For I = 1 To 2 * (n - 1)result = result * INext Icomp = resultEnd Function注意:如果调试运行时死循环,可以按Ctrl+Break中断死循环,不需要重新启动机器。

(或者Ctrl+Scroll Lock)2、实战练习1)补充代码(2003秋二(7))本程序的功能是求下面数列前n项之和。

S(x,n)=x/2+2!*x^3/2*4+3!*x^5/2*4*6+……+n!*x^2n-1/2*4*6……2nOption ExplicitPrivate Sub Command1_Click()Dim x As Single,s As SingleDim n As Integer,i As Integerx=InputBox("输入X:","求数列和",1)n=InputBox("输入N:","求数列和",1)For i=1 To ns=s+fun(x,i)Next iLabel1.Caption= _(1)_Text1=sEnd SubPrivate Function fun(x As Single,n As Integer)As Single__(2)__p=1For i=1 To n__(3)___Next ifun=x^(2*n-1)*pEnd Function2)编程题(2003春上机试卷03)按下列公式编写求积分余弦函数值的程序。

当通项绝对值小于10-5时停止计算。

计算机等级考试二级VB常用算法(2):最值问题1、算法说明在若干数中求最大值,一般先取第一个数为最大值的初值(即假设第一个数为最大值),然后,在循环体内将每一个数与最大值比较,若该数大于最大值,将该数替换为最大值,直到循环结束。

求最小值的方法类同。

求若干数平均值,实质上就是先求和,再除以这些数的个数。

应用举例随机产生n个1-100(包括1和100)的数,求它们的最大值、最小值和平均值。

Private Sub Command1_Click()Dim n As Integer, i As Integer, min As Integer, max As Integer, aver As Single, s As Integern = Val(InputBox("输入个数:"))s = Int(Rnd * 100) + 1max = smin = saver = sPrint "第1个数是:" & sFor i = 2 To ns = Int(Rnd * 100) + 1Print "第" & i & "个数是:" & sIf s > max Then max = sIf s < min Then min = saver = aver + sNext iaver = aver / nPrint "max="; max; "min="; min; "aver="; averEnd Sub解题技巧最大值、最小值、平均值类型题目往往和数组放在一起考!有的不仅求这些值,还要对具有最大值或者最小值的行或列或者某个元素进行处理,这时就要在记录最大、最小值时,同时记录该值所在的行号和列号。

2、实战练习1) 补充代码(2000春二(9))本程序的功能是在二维数组中查找鞍点元素,即该元素在所在行中为最大,且在所在列中为最小。

在一个数组中可能存在,也可能不存在这样的元素。

数组各元素的值从文件data.txt中读取。

Private Sub Form_Click()Dim a(3,3) As Integer,i As Integer,j As IntegerDim maxvr As Integer,col As Integer, As IntegerOpen data.txt For Input As #1For i=1 To 3For j=1 To 3Input #1,a(i,j)Print a(i,j);Next jPrintNext iFor i=1 To 3maxvr= (1)col=1For j=2 To 3If maxvrmaxvr= (2)col=jEnd IfNext jFor j=1 To 3If maxvr>a(j,col) Then (3)Next j计算机等级考试二级VB常用算法(3):素数1、算法说明素数(质数):就是一个大于等于2的整数,并且只能被1和本身整除,而不能被其他整数整除的数。

判别某数m是否是素数的经典算法是:对于m,从I=2,3,4,……,m-1依次判别能否被I整除,只要有一个能整除,m就不是素数,否则m 是素数。

Private Function sushu(ByVal n As Long) As BooleanDim i As LongFor i = 2 To n - 1If (n Mod i) = 0 Then Exit ForNext IIf I=n then sushu=TrueEnd Function很显然,实际上,我们可以改进上面For i = 2 To n – 1为:For i = 2 To int(sqr(m))这样可以很好的提高效率。

以上判断是否为素数的代码务必识记!应用举例求100-200之内素数。

Private Sub Command1_Click()Dim j As IntegerFor j = 100 To 200If sushu(j) = True ThenPrint jEnd IfNext jEnd Sub解题技巧识记判断素数的算法过程,根据题意,灵活调用!实例说明编程题(2002年春上机试卷04)找出10000以内所有可以表示为两个平方数和的素数。

思路:首先找10000以内的所有素数,对于每个素数判断其是否可以表示为两个平方数之和(即对于任意小于该素数shu的数I,如果I和shu-I均为平方数,则说明其可以表示为两个平方数之和。

相关主题