一篇vb常用算法的文章希望能帮助到各位小伙伴们
累加算法
假如在规划过程中遇到求1+2+3……+100连加问题时,就可以用累加算法来解决。
累加算法的一般做法是设一个变量s,作为累加器使用,初值为0,设一个变里用来保
存加数。一般在累加算法中的加数都是有规则可循,可结合循环程序来实现一个循环程
序的规划,假如以下三方面确认下来:变里的赋初值、循环体的内容、循环结束条件,那么
依据循环语句的格式,就很简单写出相应的循环程序。
例:求1+2+3++100的累加和,并打印输出
剖析:
设累加器S,初值为0,加数用变量I表明
当=1时,累加器S=S+=0+1=1
当=2时,累加器S=S+1=1+2=3
当=3时,累加器S=S+1=3+3=6
当I=4时,累加器S=S+1=6-4=10
当=100时,累加器S=S+100=1+2+3++99+100=5050
不难看出,I的值从1改变到100的过程中累加器均履行同个操作:S=s-,S=+1
的操作履行了100次,所以该程序段可写成:
Dim I As Integer, S As Integer
S=0给累加器赋初值
For S= To 100
S=S+I既作为循环变里,又作为加数
Next I
Print"1+2…100="
考虑一下:语句 Print1+2…100=S可以放在循环体中吗?
延伸一下:
上述算法对数值型数据,履行的是累加操作,假如对字符串型数据,完结的是字符串的
连接。
例:从键盘上输入一串字符,要求将其加密后显示在文本框ext中加密的办法是将每
一个字符转变为它的后一位字符,如:A转变为B,1转变为2
剖析:
因为涉及对每一个字符做相应处理再连接成一个新串,所以可以用类似累加的算法。定
义一个变量s1用来接纳输入的原始字符串,里2用来接纳加密后的字符串,初值为空
串。可用Len函数得出字符串的长度,用循制,从左向右逐个取字符,截取字符的功
能可用函数MidO完结,因为要做加密操作,可利用AscO函数取得字符的Asci码,用Chr
函数取得Asci码对应的字符。
程序段如下:
Dim str1 As String, ch As String *1
Dim i As Integer, str2 As String
st= InputBox输入原始字符串:")
For= 1 To Len(str1)
st2=s2+chr(AscMid(sr1,i1)+1将加密后的字符连接成串
Next i
由此可以看出:对字符串的连接操作,可用累加算法来完成,不过在字符串的操作中,经
常要用到字符串处理函数,所以一些常用的函数功能和用法必须掌握。
考虑一下:如果要实现字符的逆序连接,该怎么办?
二、连乘算法
连乘算法的一般做法是定义一个变量t,作为乘法器使用,初值为1,设一个变量用来保
存乘数。
例:求10!=1*2*3…*10的结果并打印输出
分析:
与累加算法类似,只不过加法变成乘法。
设乘法器t,初值为1,设变里存放乘数
当I=1时,T=T*=1*1=1
当I=2时,T=T*1=1*2=2
当I=3时,T=T*1=2*3=6
当I=10时,T=T*1=1*2*39*10
所以当I的值从1变化到10的过程中,乘法器均执行同一个操作:S=,程序段可写
成:
Dim As Integer, As long
T=1
For=1 To 10
T=T*I
Next I
Print"1*2*3*10
例:求1!+2+10的值
分析:
这一题总体上是累加题,只不过加不再是简单的1、2、3等,而是1!、2到10,
可考虑设一个变s作累加器,设一个变里t放每一次的加数,累加的次数是10次,
分别上1!到10!。设循环变量i值从1变化到10,每一次循环执行一次累加操作,
每次累加的加数t为i,所以在每次累加之前,应先用连乘算法计算I的值,可设循环
控制变里j按如下程序段完成求il:
t=1
Forj=1 To i
t=t* j
Next j
结合累加算法,求!+2!…+101的程序段如下:
Dim i As Integer, As Integer
Dim s As Long, t As Long
3=0
For i= To 10
t=1
For= To i
t=t*j
内循环
Next j
s=s+t
Next i
Print"+2++10=";s
程序执行流程是:I=1,计算t=1,s=0+1=1
I=2,计算t=2,s=1!+2
I=3,计算t=3,s=1+2+3
,算t=10,s=1-2+3+4+5+61+71+8+9+10
考虑一下:
(语句t=1是否可以和s=0一样,放在外循环外?
(答案:不可以!循环初始化所放置的位置要牢记以下原则:外循环初始化应放在外循环的
外面,内循环初始化应放在外循环体内,内循环体外。)
(2):变量s和t可以将其类型定义为 Integer(整型)吗?
(答案:不可以!因为8的值就已经超过整型所能表示的最大值32767,所以s和t必须定
义成长整型(Long),否则会发生溢出。)
优化:
由于n=(n-1)!*n,即2=12,31=21*3,…10=910,所以上述程序段还可进行以下
的优化:
Dim i As Integer, j As Integer
Dim s As Long, t As Long
=0
t=1这时t不可放在循环体内
For i 1 To 10
t=t*
=+t
Next i
Print"1!+2!++10!="; s
执行流程为:
=1,计算t=11=1,s=0+1=1
,计算t=1*2=2,s=1!+2
3,计算t=2*3=3,s1+21+3
1G算t91010,=1+2-31+4+5+61+71-81+91+101
归纳一下:
所有累加次数确定的累加程序都可以采用如下的程模式:
定义累加器s,初值为0或根据情况赋一个特定值,设变里t存放数,假设累加数为n
次,则程序段可按如下框架编:
=0
For= 1 To n
将加数武给t
=+t
Next I