vb常用算法介绍.doc
《vb常用算法介绍.doc》由会员分享,可在线阅读,更多相关《vb常用算法介绍.doc(13页珍藏版)》请在咨信网上搜索。
1、(完整版)vb常用算法介绍一、累加算法 如果在设计过程中遇到求1+2+3+100等连加问题时,就可以用累加算法来解决。 累加算法的一般做法是设一个变量 s,作为累加器使用,初值为0,设一个变量用来保存加数。一般在累加算法中的加数都是有规律可循,可结合循环程序来实现. 一个循环程序的设计,如果以下三方面确定下来:变量的赋初值、循环体的内容、循环结束条件,那么根据循环语句的格式,就很容易写出相应的循环程序。例:求1+2+3+100的累加和,并打印输出分析: 设累加器S,初值为0,加数用变量I表示 当I=1时,累加器S= S+I = 0+1=1 当I=2时,累加器S= S+I =1+2= 3 当I=
2、3时,累加器S=S+I =3+3 =6 当I=4时,累加器S=S+I =6+4 =10 当I=100时,累加器S=S+100=1+2+3+99+100=5050不难看出,I的值从1变化到100的过程中,累加器均执行同一个操作:S=S+I,S=S+I的操作执行了100次,所以该程序段可写成:Dim I As Integer, S As IntegerS = 0 给累加器s赋初值For S = 1 To 100 S= S + I I既作为循环变量,又作为加数Next IPrint 1+2+100=”; S考虑一下:语句Print ”1+2+100=”; S可以放在循环体中吗?延伸一下: 上述算法对
3、数值型数据,执行的是累加操作,如果对字符串型数据,完成的是字符串的连接.例:从键盘上输入一串字符,要求将其加密后显示在文本框Text1中,加密的方法是将每一个字符转变为它的后一位字符,如:A转变为B,1转变为2。分析: 因为涉及对每一个字符做相应处理再连接成一个新串,所以可以用类似累加的算法。定义一个变量str1用来接收输入的原始字符串,变量str2用来接收加密后的字符串,初值为空串。可用Len()函数得出字符串的长度,用循环控制,从左向右逐个取字符,截取字符的功能可用函数Mid()完成,由于要做加密操作,可利用Asc()函数获得字符的Ascii码,用Chr()函数获得Ascii码对应的字符。
4、程序段如下:Dim str1 As String, ch As String 1Dim i As Integer, str2 As Stringstr1 = InputBox(”输入原始字符串:”)For i = 1 To Len(str1) str2 = str2 + Chr(Asc(Mid(str1, i, 1) + 1) 将加密后的字符连接成串Next iText1.Text = str2由此可以看出:对字符串的连接操作,可用累加算法来完成,不过在字符串的操作中,经常要用到字符串处理函数,所以一些常用的函数功能和用法必须掌握.考虑一下:如果要实现字符的逆序连接,该怎么办?二、连乘算法连乘
5、算法的一般做法是定义一个变量t,作为乘法器使用,初值为1,设一个变量用来保存乘数。例:求10!=123*10的结果并打印输出分析:与累加算法类似,只不过加法变成乘法。设乘法器t,初值为1,设变量I存放乘数。当I=1时,T=TI=1*1=1当I=2时,T=TI=1*2=2当I=3时,T=TI=23=6当I=10时,T=T*I=123*910所以当I的值从1变化到10的过程中,乘法器均执行同一个操作:S=SI,程序段可写成: Dim I As Integer, T As long T= 1 For I = 1 To 10 T = T I Next I Print ”12310=;T例:求1!+2!
6、+10!的值分析:这一题总体上是累加题,只不过加数不再是简单的1、2、3等,而是1!、2!到10!,可考虑设一个变量s作累加器,设一个变量t存放每一次的加数,累加的次数是10次,分别加上1!到10!。设循环变量i值从1变化到10,每一次循环执行一次累加操作,每次累加的加数t为i!,所以在每次累加之前,应先用连乘算法计算I!的值,可设循环控制变量j,按如下程序段完成求i!: t = 1 For j = 1 To i t = t * j Next j 结合累加算法,求!+2!+10!的程序段如下: Dim i As Integer, j As Integer Dim s As Long, t As
7、 Long s = 0 For i = 1 To 10 t = 1内循环 For j = 1 To i t = t * j Next j s = s + t Next i Print ”1!+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! I=10,计算t=10!,s=1!+2!+3!+4!+5!+6!+7!+8!+9!+10!考虑一下:(1):语句t=1是否可以和s=0一样,放在外循环外?(答案:不可以!循环初始化所放置的位置要牢记以下原则:外循环初始化应放在外循环的外面,内循环初
8、始化应放在外循环体内,内循环体外。)(2):变量s和t可以将其类型定义为Integer(整型)吗?(答案:不可以!因为8!的值就已经超过整型所能表示的最大值32767,所以s和t必须定义成长整型(Long),否则会发生溢出.)优化: 由于n!=(n1)!*n,即2!=1!*2,3!=2!3,10!=9!*10,所以上述程序段还可进行以下的优化: Dim i As Integer, j As Integer Dim s As Long, t As Long s = 0 t = 1 这时t=1不可放在循环体内 For i = 1 To 10 t = t i s = s + t Next i Pri
9、nt ”1!+2!+10!=; s执行流程为: I=1,计算t=11=1!,s=0+1!=1! I=2,计算t=1!2=2!,s=1!+2! I=3,计算t=2!3=3!,s=1!+2!+3! I=10,计算t=9!10=10!,s=1!+2!+3!+4!+5!+6!+7!+8!+9!+10!归纳一下: 所有累加次数确定的累加程序都可以采用如下的编程模式: 定义累加器s,初值为0或根据情况赋一个特定值,设变量t存放加数,假设累加次数为n次,则程序段可按如下框架编写: s = 0 For i = 1 To n 将加数赋给t s = s + t Next I统计算法如果在编程时需要计算满足某一条件
10、的量有多少个时,就可以采用统计算法。统计算法的一般做法是定义若干个变量用来作计数器,专门来统计满足相应条件的量,有多少个统计要求,就定义多少个计数器,在程序设计过程中,分别判断是否满足指定条件,若满足条件,则指定的计数器加1。如果计数器太多,而且相互之间有联系时,一般会定义一个计数器数组.例:在文本框中输入一串字符,统计其中的字母、数字和其他字符的个数。基本思路: 要统计满足指定要求的字符个数,应定义相应变量(如n)作为计数器,初值为0,每找到符合条件的字符,将指定计数器的值加1。 本题需要定义3个计数器n1、n2、n3,初值为0,对字符串的字符逐个判断,如果是字母,n1加1,如果是数字,n2
11、加1,否则n3加1Private Sub Command1_Click() Dim str As String, i As Integer, ch As String * 1 Dim n1 As Integer, n2 As Integer, n3 As Integer n1 = 0: n2 = 0: n3 = 0: str = Text1。Text For i = 1 To Len(str) ch = Mid(str, i, 1) If UCase(ch) = Z And UCase(ch) = ”A” Then n1 = n1 + 1 计数器n1加1 ElseIf ch = ”0” And
12、 ch = 9” Then n2 = n2 + 1 计数器n2加1 Else n3 = n3 + 1 计数器n3加1 End IfNext i Text2 = “字母的个数为 n1 Chr(13) & Chr(10)Text2= Text2 & “数字的个数为” & n2 Chr(13) & Chr(10)Text2= Text2 “其他字符的个数为” n3End Sub求最大值和最小值 在N个数中求最大值和最小值的思路是定义一个变量假设为max,用来存放最大值,定义一个变量假设为min,用来存放最小值。一般将第1个数赋给max和min,将剩下的每个数分别和max、min比较,如果比max大,
13、将该数赋给max,如果比min小,将该数赋给min,即让max中总是放当前的最大数,让min中总是放当前的最小值,这样当所有数都比较完时,在max中放的就是最大数,在min中放的就是最小数。 例:随机产生20个1到100之间的整数,打印输出其最大值和最小值。任何一个随机整数 x都可通过随机函数来产生,随机函数Rnd( )可产生在0到1之间均匀分布的随机数。要产生在区间 M,N 之间的随机整数x ,可用以下公式完成: x = Int( Rnd(N- M+1)+N所以1到100之间的随机整数 x 的产生可用以下语句完成: x = Int(Rnd*100)+1 按照求最大值和最小值的算法思想,可编写
14、程序如下:Private Sub Form_click()Dim i As Integer, x As IntegerDim max As Integer, min As IntegerRandomize 随机函数初始化max = Int(Rnd * 100) + 1min = max 给max和min赋初值For i = 1 To 19 x = Int(Rnd * 100) + 1 产生1到100间的随机数 If x max Then max = x If x min Then min = xNext iPrint “最大值是” & maxPrint “最小值是” minEnd Sub 素数
15、判断 一个数如果只能被1和其本身整除,而不能被其他任何数整除,那么这个数就称为素数。 我们通过下面的例子来说明判断素数算法的基本思路。例:输入一个整数,判断它是否是素数,比如输入7,应输出“7是素数”的提示,输入24,应输出“24不是素数”的提示。分析: 由素数的定义,判断任一个整数n是否是素数的算法是让n分别整除从2到n1(或 n/2、sqr(n)中的每一个数,如果有一个数能被n整除,则n不是素数,如果所有的数都不能被n整除,则n是素数。这也是一个典型的循环程序,可设一个循环变量为I,让I从2变化到n1,如果有一个I能被n整除,说明n不是素数,下面就不用再进行判断,提前跳出循环;如果所有的I
16、都不能被n整除,最后正常结束循环。 关键是如何知道跳出循环后是提前跳出还是正常退出?对于这种有两种判断结果的处理,一般采用标志变量。设一个变量,假设命名为Flag,让Flag的初值为True,如果提前跳出循环,Flag的值赋为False,跳出循环后可根据Flag的值判断是提前跳出还是正常结束。 程序如下:Private Sub Command1_Click() Dim i As Integer, n As Integer Dim flag As Boolean flag = True 给标志变量赋初值 n = Val(Text1。Text) For i = 2 To n 1 If n Mod
17、i = 0 Thenflag = False 如果I能被n整除,将flag赋值为FalseExit For End If Next i If flag = True Then 该条件也可写成If flag Then MsgBox n & 是素数” Else MsgBox n & 不是素数 End IfEnd Sub另一种方法: 还可以在循环结束后通过循环控制变量的值来进行素数的判断。如果是素数,循环将正常结束,循环控制变量将超过终值;如果不是素数,肯定有一个数能够被n整除,循环会提前结束,循环控制变量小于等于终值。 程序如下:Private Sub Command1_Click() Dim i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- vb 常用 算法 介绍
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。