下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
(完整版)vb常用算法介绍(完整版)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=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=50501100次,所以该程序段可写成:DimS=I0AsInteger,SAsInteger‘给累加器s赋初值ForS=1To100S=S+I‘I既作为循环变量,又作为加数NextIPrint"1+2+……100=”;S考虑一下:语句Print”1+2+……100=”;S可以放在循环体中吗?延伸一下:上述算法对数值型数据,执行的是累加操作,如果对字符串型数据,完成的是字符串的连接.例:从键盘上输入一串字符,要求将其加密后显示在文本框Text1中,加密的方法是将每一个字符转变为它的后一位字符,如:A转变为B,1转变为2。分析:因为涉及对每一个字符做相应处理再连接成一个新串,所以可以用类似累加的算法。定义一个变量str1用来接收输入的原始字符串,变量str2用来接收加密后的字符串,初值为空串。可用Len()函数得出字符串的长度,用循环控制,从左向右逐个取字符,截取字符的功能可用函数Mid()完成,由于要做加密操作,可利用Asc()函数获得字符的Ascii码,用Chr()函数获得Ascii码对应的字符。程序段如下:Dimstr1AsString,chAsString*DimiAsInteger,str2AsStringstr1=InputBox(”输入原始字符串:”)Fori=1ToLen(str1)str2=str2+Chr(Asc(Mid(str1,i,1))+1) NextiText1.Text=str2考虑一下:如果要实现字符的逆序连接,该怎么办?二、连乘算法连乘算法的一般做法是定义一个变量t,作为乘法器使用,初值为1,设一个变量用来保存乘数。例:求10!=1*2*3*……*10的结果并打印输出分析:与累加算法类似,只不过加法变成乘法。t1,设变量II=1T=T*I=1*1=1I=2T=T*I=1*2=2I=3……当I=10时,T=T*I=1*2*3*……*9*10I110DimIAsInteger,TAslongT=1ForI=1To10T=T*INextIPrint”1*2*3*……*10=";T例:求1!+2!+……+10!的值分析:1、、31!、2!10s作累加器,设一个变量t10110!。设循环变量i110,每一次循环执行一次累加操作,每次累加的加数tiI!的值,可设循环控制变量j,按如下程序段完成求i!:t=1Forj=1Toit=t*jNextj结合累加算法,求!+2!+……+10!的程序段如下:DimiAsInteger,jAsIntegerDimsAsLong,tAsLongs=0Fori=1To10t=1Forj=1Toit=Nextjs=s+tNexti
t*jPrint”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一样,放在外循环外?(答案:不可以!循环初始化所放置的位置要牢记以下原则:外循环初始化应放在外循环的外面,内循环初始化应放在外循环体内,内循环体外。)(2):stInteger(整型)吗?(832767,所以s和t否则会发生溢出.)优化:由于n!=(n—1)!*n,即2!=1!*2,3!=2!*3,……,10!=9!*10,所以上述程序段还可进行以下的优化:DimiAsInteger,jAsIntegerDimsAsLong,tAsLongs=0t=1 ‘这时t=1Fori=1To10t=t*is=s+tNextiPrint”1!+2!+……+10!=";s执行流程为:归纳一下:
I=1,计算t=1*1=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=0Fori=1Tons=s+tNextI统计算法干个变量用来作计数器,专门来统计满足相应条件的量,有多少个统计要求,就定义多少个计数器,在程序设计过程中,分别判断是否满足指定条件,若满足条件,则指定的计数器加1。如果计数器太多,而且相互例:在文本框中输入一串字符,统计其中的字母、数字和其他字符的个数。基本思路:要统计满足指定要求的字符个数,应定义相应变量(如n)作为计数器,初值为0,每找到符合条件的字符,将指定计数器的值加1。3个计数器n1n2n3,0,1,果是数字,n21,否则n31PrivateSubCommand1_Click()DimstrAsString,iAsInteger,chAsString*1Dimn1AsInteger,n2AsInteger,n3AsIntegern1=0:n2=0:n3=0:str=Text1。TextFori=1ToLen(str)ch=Mid(str,i,1)IfUCase(ch)〈="Z"AndUCase(ch)>=”A”Thenn1=n1+1n11ElseIfch〉=”0”Andch〈="9”Thenn2=n2+1n21ElseEndIfNexti
n3=n3+1 n31Text2=“字母的个数为"&n1&Chr(13)&Chr(10)Text2=Text2&“数字的个数为” & n2 &Chr(13)&Text2=Text2 &“其他字符的个数为”& n3EndSub求最大值和最小值在N个数中求最大值和最小值的思路是定义一个变量假设为max1个数赋给maxmaxminmax大,将该数赋给max,如果比min小,将该数赋给min,即让max中总是放当前的最大数,让minmaxmin201100任何一个随机整数xRnd(01要产生在区间[M,Nx,可用以下公式完成:x=Int(Rnd*(N-M+1))+N1100x的产生可用以下语句完成:x=Int(Rnd*100)+1按照求最大值和最小值的算法思想,可编写程序如下:PrivateSubForm_click()DimiAsInteger,xAsIntegerDim maxAsInteger, minAsRandomize ‘随机函数初始化maxmin==Int(Rnd*100)+1maxFori=1To19‘给maxminx=Int(Rnd*100)maxmin==Int(Rnd*100)+1maxFori=1To19If x>maxThenmax=xIf x〈minThenmin=Next iPrint“最大值是”& maxPrint“最小值是”& EndSub素数判断一个数如果只能被1和其本身整除,而不能被其他任何数整除,那么这个数就称为素数。我们通过下面的例子来说明判断素数算法的基本思路。7,24素数”的提示。分析:由素数的定义,判断任一个整数n是否是素数的算法是让n2n—1(或n/2、sqr(n))nnnnI,I2n—1Inn不是素数,下面就不用再进行判断,提前跳出循环;如果所有的I都不能被n关键是如何知道跳出循环后是提前跳出还是正常退出?对于这种有两种判断结果的处理,一般采用标志变量。设一个变量,假设命名为Flag,FlagTrue,如果提前跳出循环,Flag的值赋为Flag程序如下:PrivateSubCommand1_Click()DimiAsInteger,nAsIntegerDimflagAsBooleanflag=True n=Val(Text1。Text)Fori=2 To n—1IfnModi=0flag=False ‘如果In整除,将flagExitForEndIfNextiIfflag=TrueThen ‘该条件也可写成If flag MsgBoxn&是素数”ElseEndEndSub
MsgBoxn&"不是素数"另一种方法:还可以在循环结束后通过循环控制变量的值来进行素数的判断。如果是素数,循环将正常结束,循环n终值。程序如下:PrivateSubCommand1_Click()DimiAsInteger,nAsIntegern=Val(Text1.Text)Fori=2 To n—1IfnModi=0Then ExitForNextiIf i=n Then ‘该条件也可写成If flag MsgBoxn&”是素"ElseMsgBoxn&"不是素数”EndIfEndSub求最大公约数求任意两个正整数的最大公约数可用辗转相除法来求。假设要求任两个整数mnmn的余数n的值作为mr的值作为nmnr,r0m注意:由于循环程序次数不确定,应采用do—loop循环结构。例:在两个文本框Text1Text2输入两个正整数,单击命令按钮Command1后在窗体上输出其最大公约数。程序如下:PrivateSubCommand1_Click()DimmAsInteger,nAsIntegerDimrAsInteger‘定义存放余数的变量m=Val(Text1.Text)n=Val(Text2Text)Printm;”和”;n;”的最大公约数为”;Dor=mModm=nn=rLoopUntilr=0PrintmEndSub考虑一下:可以将第一条print语句放在执行循环以后吗?(答案:不可以。因为执行完循环后mn)将以上程序添加相应语句就可完成求最小公倍数的功(M和n的最小公倍数等于
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年长沙市天心区街道办人员招聘考试试题及答案详解
- 2026年厦门市思明区中小学教师招聘考试备考题库及答案详解
- 2026年云南省曲靖市中小学教师招聘笔试参考题库及答案详解
- 2026年毕节地区毕节市中小学教师招聘考试备考试题及答案详解
- 2026浙江宁波市北仑区人民医院招聘编外(药剂师、健康管理中心)人员2人考试参考题库及答案详解
- 2026年渝中区万盛区中小学教师招聘考试参考试题及答案详解
- 2026年黑龙江省鹤岗市中小学教师招聘笔试参考题库及答案详解
- 2025年甘肃省定西市中小学教师招聘考试试题及答案详解
- 2026年大连市中山区中小学教师招聘笔试模拟试题及答案详解
- 2026年南阳市宛城区街道办人员招聘笔试备考试题及答案详解
- 旅游景区安全评估规范
- 2025年货车超限超载安全治理考核试题及答案
- ISO 9001-2026质量管理体系之“10改进”流程清单(雷泽佳编制-2026A0)
- 2026年保密观试题库及参考答案
- 2026年初中物理教师进城选调三套模拟试卷(含答案)
- 2026中国深远海漂浮式风电施工船舶改装技术方案与保险条款适配
- 2026年国企财务人员招聘笔试真题及答案
- 京东供应商协同平台(VC30)操作说明
- 设备保温施工专项施工方案
- 云南省2026年事业单位考试真题及答案
- 2026年高考全国二卷英语考试题目及答案
评论
0/150
提交评论