VB 常用算法.docx

上传人:b****3 文档编号:6544587 上传时间:2023-05-10 格式:DOCX 页数:37 大小:163.56KB
下载 相关 举报
VB 常用算法.docx_第1页
第1页 / 共37页
VB 常用算法.docx_第2页
第2页 / 共37页
VB 常用算法.docx_第3页
第3页 / 共37页
VB 常用算法.docx_第4页
第4页 / 共37页
VB 常用算法.docx_第5页
第5页 / 共37页
VB 常用算法.docx_第6页
第6页 / 共37页
VB 常用算法.docx_第7页
第7页 / 共37页
VB 常用算法.docx_第8页
第8页 / 共37页
VB 常用算法.docx_第9页
第9页 / 共37页
VB 常用算法.docx_第10页
第10页 / 共37页
VB 常用算法.docx_第11页
第11页 / 共37页
VB 常用算法.docx_第12页
第12页 / 共37页
VB 常用算法.docx_第13页
第13页 / 共37页
VB 常用算法.docx_第14页
第14页 / 共37页
VB 常用算法.docx_第15页
第15页 / 共37页
VB 常用算法.docx_第16页
第16页 / 共37页
VB 常用算法.docx_第17页
第17页 / 共37页
VB 常用算法.docx_第18页
第18页 / 共37页
VB 常用算法.docx_第19页
第19页 / 共37页
VB 常用算法.docx_第20页
第20页 / 共37页
亲,该文档总共37页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

VB 常用算法.docx

《VB 常用算法.docx》由会员分享,可在线阅读,更多相关《VB 常用算法.docx(37页珍藏版)》请在冰点文库上搜索。

VB 常用算法.docx

VB常用算法

常用算法汇总

计算机等级考试二级VB常用算法

(1):

累加和连乘

1、算法说明

     累加形式:

V=V+e

     连乘形式:

V=V*e

     其中:

V是变量,e是递增表达式。

累加和连乘一般通过循环结构来实现。

     注意:

需在执行循环体前对变量V赋初值。

一般的,累加时置初值0;连乘时置初值为1.

     举例

     求N!

的结果。

     PrivateSubCommand1_Click()

     Dimn%,i%,s&

     n=Val(InputBox("输入n"))

     s=1

     Fori=1Ton

     s=s*i

     Nexti

     Prints

     EndSub

     错误的写法:

     PrivateSubCommand1_Click()

     Dimn%,i%,s&

     n=Val(InputBox("输入n"))

     Fori=1Ton

     s=1            ‘赋初值语句位置不对!

     s=s*i

     Nexti

     Prints               ‘输出s的值为n,而不是n!

     EndSub

     应用举例

     根据下列公式,求自然对数e的的近似值。

  

     要求:

误差小于0.00001

     PrivateSubCommand1_Click()

     Dimi%,n&,t!

,e!

     e=2

     i=1

     t=1

     DoWhilet>0.00001

     i=i+1

     t=t/i

     e=e+t

     Loop

     Print"计算了";i;"项目和是:

";e

     PrintExp

(1)                             ‘与上句输出值进行对比以证明算法的正确性

     EndSub

     解题技巧

     1) 由于这类题目往往是根据精度要求来求值,因此我们不能预知具体循环次数,所以这类题目一般用Do循环,很少用For循环。

设定循环变量和通项变量,注意各变量的初值;

     2) 分解通项表达式中各因子,并分别将各因子用循环变量表示;

     3)  如果步骤2中有的因子比较复杂,难以直接用变量表示,此时可以考虑使用Function过程;

     4)  根据步骤1、2、3,写出通项表达式;

     5)  根据精度要求(往往是通项小于10负多少次方这样一个关系表达式),写出一条满足精度要求后跳出循环的语句。

通常是用:

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

实例说明

     以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,返回值是

     于是有:

     privateFunctioncomp(naslong)aslong

     dimIaslong

     dimresultaslong

     result=1   ‘此处注意,由于是连乘,初值为1

     forI=1to2*(n-1)

     result=result*I

     nextI

     comp=result

     EndFunction

     注意:

由于是参数按地址传递,因此对于本题,实参的值不能在过程中被改变!

(也是改错题常考的地方!

     4、根据步骤1、2、3,写出通项dblCos的表达式:

     dblCos=(-1)^(n+1)*x^(2*(n-1))/comp(n)

     5、根据精度要求知:

     Ifabs(dblCos)<=10^(-6)thenexitdo

     最后程序为:

     PrivateSubCommand1_Click()

     DimnAsLong,dblCosAsDouble,xAsDouble

     x=Val(Text1.Text)

     n=1

     Do

     dblCos=(-1)^(n+1)*x^(2*(n-1))/comp(n)

     IfAbs(dblCos)<=10^(-6)ThenExitDo

     Sum=Sum+dblCos

     n=n+1

     Loop

     PrintSum

     EndSub

     PrivateFunctioncomp(nAsLong)AsLong

     DimIAsLong

     DimresultAsLong

     result=1 '此处注意,由于是连乘,初值为1

     ForI=1To2*(n-1)

     result=result*I

     NextI

     comp=result

     EndFunction

     注意:

如果调试运行时死循环,可以按Ctrl+Break中断死循环,不需要重新启动机器。

(或者Ctrl+ScrollLock)

     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……2n

     OptionExplicit

     PrivateSubCommand1_Click()

     DimxAsSingle,sAsSingle

     DimnAsInteger,iAsInteger

     x=InputBox("输入X:

","求数列和",1)

     n=InputBox("输入N:

","求数列和",1)

     Fori=1Ton

     s=s+fun(x,i)

     Nexti

     Label1.Caption=_”s”

(1)_

     Text1=s

     EndSub

     PrivateFunctionfun(xAsSingle,nAsInteger)AsSingle

     __

(2)__

     p=1

     Fori=1Ton

     __(3)___

     Nexti

     fun=x^(2*n-1)*p

     EndFunction

     2) 编程题(2003春上机试卷03)

     按下列公式编写求积分余弦函数值的程序。

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

计算机等级考试二级VB常用算法

(2):

最值问题

1、算法说明

在若干数中求最大值,一般先取第一个数为最大值的初值(即假设第一个数为最大值),然后,在循环体内将每一个数与最大值比较,若该数大于最大值,将该数替换为最大值,直到循环结束。

求最小值的方法类同。

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

应用举例

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

PrivateSubCommand1_Click()

   DimnAsInteger,iAsInteger,minAsInteger,maxAsInteger,averAsSingle,sAsInteger

   n=Val(InputBox("输入个数:

"))

   s=Int(Rnd*100)+1

   max=s

   min=s

   aver=s

   Print"第1个数是:

"&s

   Fori=2Ton

       s=Int(Rnd*100)+1

       Print"第"& i&"个数是:

"&s

       Ifs>maxThenmax=s

       Ifs

       aver=aver+s

   Nexti

   aver=aver/n

   Print"max=";max;"min=";min;"aver=";aver

EndSub

解题技巧

最大值、最小值、平均值类型题目往往和数组放在一起考!

有的不仅求这些值,还要对具有最大值或者最小值的行或列或者某个元素进行处理,这时就要在记录最大、最小值时,同时记录该值所在的行号和列号。

2、实战练习

1)      补充代码(2000春二(9))

   本程序的功能是在二维数组中查找鞍点元素,即该元素在所在行中为最大,且在所在列中为最小。

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

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

       PrivateSubForm_Click()

                          Dima(3,3)AsInteger,iAsInteger,jAsInteger

                          DimmaxvrAsInteger,colAsInteger,AsInteger

                          Opendata.txtForInputAs#1

        Fori=1To3

                 Forj=1To3

                          Input#1,a(i,j)

                          Printa(i,j);

                 Nextj

                 Print

        Nexti

        Fori=1To3

                 maxvr= 

(1) 

                 col=1

                 Forj=2To3

                          Ifmaxvr

                                   maxvr= 

(2) 

                                   col=j

                          EndIf

                 Nextj

                 Forj=1To3

                          Ifmaxvr>a(j,col)Then  (3) 

                 Nextj

计算机等级考试二级VB常用算法(3):

素数

1、算法说明

素数(质数):

就是一个大于等于2的整数,并且只能被1和本身整除,而不能被其他整数整除的数。

判别某数m是否是素数的经典算法是:

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

PrivateFunctionsushu(ByValnAsLong)AsBoolean

   DimiAsLong

   Fori=2Ton-1

   If(nModi)=0ThenExitFor

NextI

IfI=nthensushu=True

EndFunction

很显然,实际上,我们可以改进上面

Fori=2Ton–1

为:

Fori=2Toint(sqr(m))

这样可以很好的提高效率。

以上判断是否为素数的代码务必识记!

应用举例

求100-200之内素数。

PrivateSubCommand1_Click()

   DimjAsInteger

   Forj=100To200

       Ifsushu(j)=TrueThen

       Printj

       EndIf

   Nextj

EndSub

解题技巧

识记判断素数的算法过程,根据题意,灵活调用!

实例说明

编程题(2002年春上机试卷04)

        找出10000以内所有可以表示为两个平方数和的素数。

思路:

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

判断数I是否为平方数的方法:

sqr(i)=int(sqr(i))

PrivateSubCommand1_Click()

   DimjAsInteger

   DimmAsLong,nAsLong

   Forj=2To10000

       Ifsushu(j)=TrueThen

           Ifpf(j,m,n)=TrueThen

               List1.AddItemj&"="&m&"+"&n

           EndIf

       EndIf

   Nextj

EndSub

PrivateFunctionpf(ByValshuAsLong,mAsLong,nAsLong)AsBoolean

   DimiAsLong

   Fori=1Toshu-1

       If(Sqr(i)=Int(Sqr(i)))And(Sqr(shu-i)=Int(Sqr(shu-i)))Then

           pf=True

           m=i

           n=shu-i

           ExitFunction

       EndIf

   Next

EndFunction

2、实战练习

1)       补充代码(2002春二(7))

下列程序的功能是:

查找四位正整数中的超级素数。

超级素数的定义为:

当一个素数从低位到高位依次去掉一位数后剩下的数仍然是素数,则此数为超级素数。

如数2333、233、23、2均为素数,所以2333为超级素数。

                 OptionExplicit

                 PrivateSubCommand1_Click()

                          DimIAsInteger,flgAsBoolean

                    ForI=1001To9999Step2

                       Callsup_prime(I,flg)

                      IfflgThen

                       Debug.PrintI

                     EndIf

                  NextI

                EndSub

                 PrivateSubsup_prime( 

(1) ,FAsBoolean)

                            DimpAsInteger

                       F=True

                                   DoWhileN>0

                                  Ifprime(N)Then

                                                      

(2)

                              Else

                                                (3)

                                ExitSub

                          EndIf

                     Loop

                 EndSub

                 PublicFunctionprime(pAsInteger)AsBoolean

                                DimkAsInteger

                                Ifp=1Then

                                          ExitFunction

                                  Else

                                            Fork=2ToSqr(p)

                                         IfpModk=0ThenExitFunction

                                         Nextk

                                             (4)

                         EndIf

                 EndFunction

2)       编程题(2004春上机试卷03)

        随机生成15个两位正整数,从中找出所有的素数,并记下它是第几个数,再找出其中最大的素数,并给出它的位置。

计算机等级考试二级VB常用算法(4):

进制转化

1、算法说明

1)       十进制正整数m转换为R(2-16)进制的字符串。

        思路:

将m不断除r取余数,直到商为0,将余数反序即得到结果。

        算法实现:

PrivateFunctionTran(ByValmAsInteger,ByValrAsInteger)AsString

   DimStrDtoRAsString,nAsInteger

   DoWhilem<>o

       n=mModr

       m=m\r

       Ifn>9Then

           StrDtoR=Chr(65+n-10)&StrDtoR

       Else

           StrDtoR=n&StrDtoR

       EndIf

   Loop

   Tran=StrDtoR

EndFunction  

2)       R(2-16)进制字符串转换为十进制正整数。

        思路:

R进制数每位数字乘以权值之和即为十进制数。

        算法实现:

PrivateFunctionTran(ByValsAsString,ByValrAsInteger)Asinteger

   DimnAsInteger,decAsInteger

   s=UCase(Trim(s))

   Fori%=1ToLen(s)

              IfMid(s,i,1)>="A"Then

                       n=Asc(Mid(s,i,1))-Asc("A")+10

              Else

                       n=Val(Mid(s,i,1))

              EndIf

              dec=dec+n*r^(Len(s)-i)

   Nexti

   Tran=dec

EndFunction 

解题技巧

        进制转化的原理要清楚,同时编写代码时候要留意16进制中的A-F字符的处理。

 2、实战练习

1)       补充代码(2002秋二(9))

        本程序是把给定的二进制整数转换为八进制整数。

                 P

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2