VB常用算法总结大全课件_第1页
VB常用算法总结大全课件_第2页
VB常用算法总结大全课件_第3页
VB常用算法总结大全课件_第4页
VB常用算法总结大全课件_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

常用算法总结—算法是对某个问题求解过程的描述

一、基本算法1.累加、连乘

1~100的5或7的倍数的和

Sum=0Fori=1To100IfiMod5=0OriMod7=0Then

Sum=Sum+iEndIfNextiPrintSum3~10的乘积

t=1Fori=3To10

t=t*iNextiPrintt思考:若把循环体前面置各变量初值的语句放在循环体内,程序运行时会产生什么情况?1精选2021版课件例求自然对数e的近似值,要求其误差小于0.00001,近似公式为:

该例题涉及两个问题:

(1)用循环结构求级数和的问题。本例根据某项值的精度来控制循环的结束与否。(2)累加:e=e+t循环体外对累加和的变量清零e=0

连乘:n=n*i循环体外对连乘积变量置1n=1

PrivateSubForm_Click()Dimi%,n&,t!,e!e=0:n=1

‘e存放累加和、n存放阶乘

i=0:t=1

‘i计数器、t第i项的值

DoWhilet>0.00001e=e+t:i=i+1

‘累加、连乘n=n*i:t=1/n

LoopPrint"计算了";i;"项的和是";eEndSub2精选2021版课件2.求素数

判别某数m是否为素数最简单的方法是:对于m从i=2,3,…,m-1判别m能否被i整除,只要有一个能整除,m不是素数,否则m是素数。Form=2To100Fori=2Tom-1

If(mModi)=0ThenexitforNextiifI>m-1then msgboxstr(m)+”是素数”Else msgboxstr(m)+”不是素数”EndIfNextmm是否为素数求100以内的素数3精选2021版课件3.穷举法

“穷举法”也称为“枚举法”或“试凑法”,即将可能出现的各种情况一一测试,判断是否满足条件,一般采用循环来实现。例百元买百鸡问题。假定小鸡每只5角,公鸡每只2元,母鸡每只3元。现在有100元钱要求买100只鸡,编程列出所有可能的购鸡方案。

设母鸡、公鸡、小鸡各为x、y、z只,根据题目要求,列出方程为:x+y+y=100 3x+2y+0.5z=100三个未知数,两个方程,此题有若干个解。解决此类问题采用“试凑法”,把每一种情况都考虑到。方法一:最简单三个未知数利用三重循环来实现。方法二:从三个未知数的关系,利用两重循环来实现。4精选2021版课件方法一:PrivateSubForm_click()DimX%,y%,z%ForX=0To100ForY=0To100ForZ=0To100 IfX+y+z=100And3*x+2*y+.5*z=100Then PrintX,y,z EndIfNextZNextYNextXEndsub方法二:ForX=0To33ForY=0To50 Z=100-x-y

If3*x+2*y+.5*z=100Then PrintX,Y,ZEndIfNextYNextX5精选2021版课件4.递推法

“递推法”又称为“迭代法”,其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都从旧值的基础上递推出新值,并由新值代替旧值。

例猴子吃桃子。小猴在一天摘了若干个桃子,当天吃掉一半多一个;第二天接着吃了剩下的桃子的一半多一个;以后每天都吃尚存桃子的一半零一个,到第7天早上要吃时只剩下一个了,问小猴那天共摘下了多少个桃子?分析:这是一个“递推”问题,先从最后一天推出倒数第二天的桃子,再从倒数第二天的桃子推出倒数第三天的桃子……。设第n天的桃子为xn,那么它前一天的桃子数是xn

-1。6精选2021版课件已知:当N=7第7天的桃子数为1,则第6天的桃子数由公式得4个,依次类推,可求得第1天的桃子数。程序如下:Privatesubform_click() DimIasinteger x=1 print“第7天的桃子数为:1只” forI=6to1step–1 x=(x+1)*2 print“第”;I;”天的桃子数为:”;x;”只” nextIEndsub7精选2021版课件5.最小、最大值在若干个数中求最大值,一般先假设一个较小的数为最大值的初值,若无法估计较小的值,则取第一个数为最大值的初值;然后将每一个数与最大值比较,若该数大于最大值,将该数替换为最大值;依次逐一比较。例随机产生10个100~200之间的数,求最大值。PrivateSubCommand1_Click()

Max=100Fori=1To10x=Int(Rnd*101)+100Printx;

Ifx>MaxThenMax=xNextiPrintPrint"最大值=";MaxEndSub8精选2021版课件6、求最大公约数9精选2021版课件PrivateSubCommand1_Click()Dimm,n,rAsLongm=Val(Text1.Text)‘取数据Mn=Val(Text2.Text)‘取数据N

Ifm<>Int(m)orm<1orn<>Int(n)orn<1Then

Text3.Text="数据错误!"

ElseDo

‘求最大公约数

r=mModnm=nn=r

LoopUntilr=0Text3.Text=CStr(m)‘输出最大公约数

EndIfEndSub判断数据是否合法10精选2021版课件PrivateSubForm_Click()Fori=1To9Forj=1To9 Printi;"*";j;"=";i*j;NextjPrintNextiEndSub执行本程序,窗体上将显示九九乘法表。Forj=1Toi7、关于循环嵌套(一个循环体内又包含了一个完整的循环结构称为循环的嵌套.)换行!作用?例:xh2.vbpSsfrm.frm11精选2021版课件思考:打印上三角或下三角程序如何改动?要打印下三角?8.打印图形见下页12精选2021版课件编写程序打印如右边图形:PrivateSubForm_Click()

Fori=1To4PrintSpace(5-i);

Forj=1To2*i-1Print"*";Nextj

PrintNextiPrintEndSub******************************* *外循环用来控制输出的行数及每行第一个字符的输出位置内循环用来控制每行输出的字符个数。例:xh2.vbpshjs.frm13精选2021版课件9.判断同构数(复习材料P39第7题)

10.找亲密对数P111例5-1011.判断完数实验P55实验7-212.计算多项式的和实验P51实验6-313.求一个正整数K的各位数字之和 复习材料P334.4练习题第1题14.报数问题P114例5-1215.判断回文数复习材料P41第10题 或P81习题414精选2021版课件16.求自然数的因子

P81习题5PrivateSubCommand1_Click()DimaAsInteger,I%a=InputBox("输入一个自然数")Label1.Caption=Str(a)+"的所有因子:"ForI=1Toa-1IfaModI=0ThenList1.AddItem(Str(I))EndIfNextEndSub15精选2021版课件二、数组的算法1.数组元素的赋初值(1)用循环Fori=1To10 A(i)=0Nexti

forI=1to10 forJ=1to10 B(I,J)=0 nextJnexti16精选2021版课件(2)Array函数

DimibAsVariantib=Array("abc","def","67")Fori=0ToUBound(ib)Picture1.Printib(i);"";Nexti注意:(1)利用Array对数组各元素赋值,声明的数组是可调数组或连圆括号都可省,并且其类型只能是Variant。(2)数组的下阶为零,上界由Array函数括号内的参数个数可决定,也可通过函数Ubound获得。17精选2021版课件2.数组的赋值在VB6.0中,提供了数组直接对数组的赋值。例如:Dima()AsVariant,b()AsVariant,i%a=Array(1,2,3,4,5)ReDimb(UBound(a))

b=a

Fori=0ToUBound(a)b(i)=a(i)Nexti相当于注意:赋值号左边的数组只能声明为Variant的可调数组或简单变量。18精选2021版课件3.数组的输出输出方阵SC中的下三角元素Fori=0To4Forj=0ToI’j=0to4则输出整个数组sc(i,j)=i*5+jPrintsc(i,j);"";NextjPrint'换行NextI19精选2021版课件4.将数组中各元素交换(P115习题1)Fori=1To15\2

t=A(i)A(i)=A(10-i+1)A(10-i+1)=tNexti20精选2021版课件5、对数组的行/列操作(行、列的和)P115习题3:求二维数组每行的和数与每列的和数,数组元素为1—9之间的随机数。OptionexplicitOptionbase1’生成数组PrivateSubCommand1_Click()ForI=1To4ForJ=1To5A(I,J)=Int(9*Rnd)+1Picture1.PrintA(I,J);NextJPicture1.PrintNextIEndSub'求列和PrivateSubCommand2_Click()ForJ=1To5L(J)=0ForI=1To4L(J)=L(J)+A(I,J)NextIText2=Text2&Str(L(J))NextJEndSub21精选2021版课件PrivateSubCommand3_Click()ForI=1To4H(I)=0ForJ=1To5H(I)=H(I)+A(I,J)NextJText1=Text1&Str(H(I))&vbCrLfNextIEndSub’清除图片框和文本框PrivateSubCommand4_Click()Picture1.ClsText1=""Text2=""EndSub'求行和22精选2021版课件6、同维数组对应元素的算术运算(+、-、*、/)OptionexplicitOptionbase1Privatesubform_click()Dim

X%(5,5),Y%(5,5),Z%(5,5)

ForI=1to5 forj=1to5 x(I,j)=int(100*rnd)+1 y(I,j)=int(100*rnd)+1 nextjNextiForI=1to5forJ=1to5Z(I,J)=X(I,J)+

Y(I,J) nextjNexti可改为减法、乘法

存放结果数组也必须定义23精选2021版课件 ForI=1to5 forJ=1to5 printZ(I,J); nextj print NextIEndsub除法:除法操作必须先判别分母不为零,然后再进行对应元素的除法操作。24精选2021版课件7、求数组靠边元素之和,不靠边元素之和P115习题6Optionbase1Privatesubform_click()Dim

X%(4,5),s%(4),sum%ForI=1to4 s(I)=0 forj=1to5 x(I,j)=i nextjNextiForJ=1to5S(1)=S(1)+X(1,J)S(4)=S(4)+X(4,J)Nextj

11111222223333344444ForI=2to3S(2)=S(2)+X(I,1)S(3)=S(3)+X(I,5)NextiforI=1to4SUM=SUM+S(I)NextiprintSUMEndsub25精选2021版课件8,求数组对角线元素之积或

和Optionbase1Privatesubform_click()Dim

X%(4,4),S1&,S2&S=1:S2=1ForI=1to4 forj=1to4 x(I,j)=i nextjNextiFori=1to4S1=s1*X(i,i)NextIprintSEndsub

1111

22

2233

33

4444

若为“+”,则为对角线的和,但S1,S2初值为0ForI=1To4ForJ=1To4IfI+J=5ThenS2=S2+A(I,I)EndIfNextJNextIText3=“两条对角线的积_分别是:"&S1&""&S2EndSubP115习题626精选2021版课件9.求二维数组中每行/列元素的最大/最小OptionExplicitOptionBase1PrivateSubForm_Click()DimA%(5,8),I%,J%DimMAXI%(5),MAXJ%(8)ForI=1To5ForJ=1To8A(I,J)=Int(90*Rnd)+10PrintA(I,J);NextJPrintNextIForI=1To5MAXI(I)=A(I,1)ForJ=1To8IfMAXI(I)<A(I,J)ThenMAXI(I)=A(I,J)NextJPrint"第";I;"行的最大值是:";MAXI(I), NextIPrint

生成数组并输出求每行最大并输出27精选2021版课件9.求二维数组中每行/列元素的最大/最小 ForJ=1To8 MAXJ(J)=A(1,J) ForI=1To5 IfMAXJ(J)<A(I,J)ThenMAXJ(J)=A(I,J) NextI Print"第";J;"列的最大值是:";MAXJ(J), IfJMod5=0ThenPrintNextJEndSub求每列最大并输出28精选2021版课件10求鞍点元素,该元素所在行为最大,所在列为最小P115习题7’生成数组PrivateSubCommand1_Click()DimI%,J%M=InputBox("请输入数组的行数")N=InputBox("请输入数组的列数")ReDimA(M,N)ForI=1ToMForJ=1ToNA(I,J)=Int(90*Rnd)+10Picture1.PrintA(I,J);NextJPicture1.PrintNextIEndSub29精选2021版课件10求鞍点元素,该元素所在行为最大,所在列为最小P115习题7’找鞍点数PrivateSubCommand2_Click()DimI%,J%,Max%,Col%,Flg%ForI=1ToMMax=A(I,1)Col=1ForJ=2ToNIfMax<A(I,J)ThenMax=A(I,J):Col=JNextJForJ=1ToMIfMax>A(J,Col)ThenExitForNextJIfJ>NThenText1.Text="鞍点元素是"&"A("&I&","&Col&")="&A(I,Col)Flg=1EndIfIfFlg=0ThenText1="鞍点元素不存在"NextIEndSub找每行最大值,并记下最在值所在的列将该行最大值,与所在列的各元素比较,是否为该列最小30精选2021版课件11、矩阵乘法P107例5-6╳***********************************=&&&&&&&&&&&&XYZOptionbase1Privatesubform_click()Dim

X%(4,5),Y%(5,3),Z%(4,3)ForI=1to4 forj=1to5 x(I,j)=int(100*rnd)+1 printx(I,j); nextj printNextiForI=1to5 forj=1to3 y(I,j)=int(100*rnd)+1 printy(I,j) nextj printNexti31精选2021版课件11、矩阵乘法╳***********************************=&&&&&&&&&&&&XYZForL=1to4forJ=1to3 Z(L,J)=0.0forI=1to5 Z(L,J)=Z(L,J)+X(L,I)*Y(I,J) nextinextjNextLForI=1to4 forj=1to3 printz(I,j); nextj printNextiEndsub32精选2021版课件12、矩阵转置P116习题10/复习资料P60第5题OptionExplicitOptionBase1DimA()AsInteger,B()AsInteger,N%PrivateSubCommand1_Click()’生成数组DimI%,J%N=InputBox("")ReDimA(N,N)ForI=1ToNForJ=1ToNA(I,J)=Int(Rnd*100)+1Text1=Text1&Str(A(I,J))NextJText1=Text1&vbCrLfNextIEndSub33精选2021版课件12、矩阵转置P116习题10/复习资料P60第5题PrivateSubCommand2_Click()成’矩阵转置DimI%,J%ReDimB(N,N)ForI=1ToNForJ=1ToNB(J,I)=A(I,J)NextJNextIForI=1ToNForJ=1ToNText2=Text2&Str(B(I,J))NextJText2=Text2&vbCrLfNextIEndSub34精选2021版课件13.数组排序P103例5-3对已知存放在数组中的n个数,用选择法按递增顺序排序。(1)从n个数的序列中选出最小的数(递增),与第1个数交换位置;(2)除第1个数外,其余n-1个数再按(1)的方法选出次小的数,与第2个数交换位置;(3)重复(1)n-1遍,最后构成递增序列。35精选2021版课件PrivateSubCommand1_Click()DimSort(10)AsInteger,temp%DimiAsInteger,j%RandomizeFori=1To10Sort(i)=Int(Rnd*99)+1Text1=Text1&Str(Sort(i))NextiFori=1To9Forj=i+1To10IfSort(i)>Sort(j)Thentemp=Sort(i)Sort(i)=Sort(j)Sort(j)=tempEndIfNextjText2=Text2&Str(Sort(i))NextiText2=Text2&Str(Sort(i))'书上少此语句EndSub36精选2021版课件14.冒泡法排序实验P62,实验7-4与选择排序的区别在于:只对相邻两数进行比较,使之大数沉底,小数象气泡一样“冒”上来,所以称为“冒泡法”。例如对8,3,5,2,1,9排序:第一轮的排序是第1次比较:8,3,5,2,1,9第2次比较:3,8,5,2,1,9第3次比较:3,5,8,2,1,9第4次比较:3,5,2,8,1,9第5次比较:3,5,2,1,8,9第6次比较:3,5,2,1,8,9第一轮的排序结果;3,5,2,1,8,9第一轮需排序5次,第二轮需排序4次,第三轮需排序3次,第四轮需排序2次,第五轮需排序1次。37精选2021版课件PrivateSubCommand1_Click()冒泡法排序过程Dimi%,j%,temp%ForI=1ToUBound(a)-1ForJ=1ToUBound(a)-IIfa(J)>a(J+1)Thentemp=a(J):a(J)=a(J+1):a(J+1)=tempEndIfNextNextFori=1ToUBound(a)Printa(i);NextiEndSub38精选2021版课件例:排序运动员的成绩已知8名运动员100米成绩,请排出他们的名次(成绩相同名次相同,成绩由键盘输入)39精选2021版课件本题的难点并不在排序,可以很轻松地用冒泡法或选择法排序进行成绩从小(快)到大(慢)的排列。问题是排序后的成绩对应于哪一个运动员,一维数组是无法记录的。因此就要定义一个二维数组,其中第一列放运动员的成绩,第二列存放成绩对应的运动员号。按二维数组的第一列排序后,产生交换不仅要交换第一列的数组元素,还要交换第二列的数组元素,这样运动员的编号就能跟着成绩“跑了”。在输出名次时,也要注意成绩相同、名次相同的问题。40精选2021版课件排序过程(选择法排序)PrivateSubsort(cj()AsSingle)DimtempAsSingleFori=1To7Forj=i+1To8Ifcj(i,1)>cj(j,1)Thentemp=cj(i,1):cj(i,1)=cj(j,1):cj(j,1)=temptemp=cj(i,2):cj(i,2)=cj(j,2):cj(j,2)=tempEndIfNextNextEndSub41精选2021版课件输出名次过程PrivateSuboutput(cj()AsSingle)DimjAsInteger,pAsIntegerp=1Print"第";1;"名是";cj(1,2);"号运动员,成绩是:";cj(1,1)Forj=2To8Ifcj(j,1)=cj(j-1,1)ThenPrint"第";p;"名是";cj(j,2);"号运动员,成绩是:";cj(j,1)ElsePrint"第";j;"名是";cj(j,2);"号运动员,成绩是:";cj(j,1)p=jEndIfNextPrintEndSub42精选2021版课件窗体事件过程’输入运动员成绩PrivateSubForm_Click()DimiAsIntegerDimproAsString,cj(8,2)AsSingleRandomizeFori=1To8pro="请输入第"+Str(i)+"位运动员的成绩:"cj(i,1)=InputBox(pro)cj(i,2)=iPrintcj(i,1);NextPrintPrintCallsort(cj)Calloutput(cj)EndSub43精选2021版课件15.数组元素的插入与删除(1)插入排序复习材料P50第23在有序数组a(1ton)(原有n-1个元素)插入一个值Key元素,算法:查找要插入的位置k(1<=k<=n-1),腾出位置,把最后一个元素开始到第K个元素往后移动一个位置,第k个元素的位置腾出,就可将数据Key插入44精选2021版课件Privatesubcommand1__clickDima%(11),I%,J%,X%ForI=1to10

a(I)=I*5+1

’通过程序自动生成有规律的数组NextIX=Inputbox(“输入任意数X:”)ForI=1to

10

‘查找欲插入数X在数组中的位置

ifX<a(I)thenexitfor

’找到插入的位置下标为INextIForJ=11toI+1step–1

’从最后元素开始往后移,腾出位置 a(J)=a(J-1)NextJA(I)=XEndsub

45精选2021版课件(2)删除重复元素见P113例5-11首先也是要找到欲删除的元素的位置k;然后从k+1到n个位置开始向前移动;最后将数组元素减1。例如,要将值为13的元素删除的过程为:46精选2021版课件Dima()asinteger’声明为动态数组…..Redima(1ton)’声明为有N个元素的数组… ’查找到要删除的元素下标为K…ForI=k+1toN’从K+1个元素开始往前移 A(I-1)=a(I)NextI ’最后一个元素的位置空出,利用数组重新声明减少一个元素,但要保留原来值Redimpreservea(1ton-1)47精选2021版课件排序法有:选择、冒泡、插入法排序及合并排序等。

前两种排序欲排序的数据全部输入后,再进行排序;

插入法排序每输入一项,马上插入到数组应在的位置,数组始终有序。用插入排序法输入不多于20个数,使数组保持递增的序列。对数组中已有N-1个有序数,当输入某数X时,插入排序法实现的步骤:(1)输入欲排序的数据项x;在数组a中找x应所处的位置j;(2)从数组的最后一个元素开始到下标j依次往后移,使j位置空出;(3)将x放入位置j处,一个数据插入完成;(4)有若干个数重复(1)~(3)。对于若干个数输入,只要调用插入排序过程即可。48精选2021版课件DimnAsIntegerSubinsert(a()AsSingle,ByValx!)Dimi%,j%j=1DoWhilej<nAndx>a(j)j=j+1LoopFori=n-1TojStep-1a(i+1)=a(i)Nextia(j)=xEndSub49精选2021版课件PrivateSubText1_KeyPress(KeyAsciiAsInteger)Staticbb!(1To20)Dimi%Ifn=20ThenMsgBox"数据太多!",1,"警告"EndEndIfIfKeyAscii=13Thenn=n+1Callinsert(bb(),Val(Text1))Picture1.PrintText1Fori=1TonPicture2.Printbb(i);NextiPicture2.PrintText1=""EndIfEndSub50精选2021版课件数组的合并排序从键盘读取数组a和b(各5个元素),a,b都是严格递增的(即元素从小到大排列,且无重复元素),将a,b合并成c数组,使C也严格递增。若a,b中有相同的元素只保留一个,最后输出数组C。编写通用过程OutPut,在窗体上打印数组。51精选2021版课件OptionExplicitDima(5)AsInteger,b(5)AsInteger,c()AsIntegerPrivateSuboutput(d()AsInteger)’输出数组的通用过程DimiAsIntegerFori=1ToUBound(d)Printd(i);NextiPrintEndSub52精选2021版课件PrivateSubCommand1_Click()'数组输入DimiAsIntegerFori=1To5 a(i)=InputBox(“输入数组a(“+str(I)+”)”)NextiPrint"数组A:"Calloutput(a)Fori=1To5b(i)=InputBox(“输入数组b(“+str(I)+”)”)NextiPrint"数组B:"Calloutput(b)EndSub53精选2021版课件PrivateSubCommand2_Click()'数组合并输出DimpAsInteger,qAsInteger,rAsIntegerDimiAsIntegerp=1:q=1:r=1DoWhilep<5Andq<5ReDimPreservec(r)Ifa(p)>b(q)Thenc(r)=b(q)r=r+1q=q+1ElseIfa(p)<b(q)Thenc(r)=a(p)r=r+1:p=p+1Elsec(r)=a(p)r=r+1:p=p+1:q=q+1EndIfLoop

54精选2021版课件Ifp=5ThenReDimPreservec(r)Fori=q+1To5c(r)=b(i):r=r+1NextiEndIfIfq=5ThenReDimPreservec(r)Fori=p+1To5c(r)=a(i):r=r+1NextiEndIfCalloutput(c)EndSub

55精选2021版课件16、查找:

(1).顺序查找[P104例5-4]顺序捡索

捡索(search):又称为查找,就是从一组数据中找出所需的具有某种特征的数据项。

它是数据处理中应用很广泛的一种操作,最简单的检索方法是顺序捡索。其方法是从一组数据的第一项开始逐个比较,直到找到该数据项,或全部数据都比较完也没找到该数据为止。56精选2021版课件OptionExplicit

PrivateSubForm_Click()

DimSearch(10)AsInteger,IAsInteger

DimSAsInteger

ForI=1To10

Search(I)=Int(Rnd*100)+1

PrintSearch(I)

NextI

S=Val(InputBox("输入要查找的数"))

ForI=1To10

IfSearch(I)=SThenExitFor

NextI

IfI<=10Then

Print"要找的数是Search(";I;")"

Else

Print"没找到!"

EndIf

EndSub57精选2021版课件(2)二分查找P106例5-5其方法是:

1)、找出中间位置Mid,判断查找数椐K与A(Mid)

是否相等,若相等则已找到。

(2)、如果K>A(Mid)则表明K可能在A(Mid)与A(Bot)区间内,因此重新设置:Top=Mid+1

(3)、如果K<A(Mid)则表明K可能在A(Top)与A(Mid)区间内,因此重新设置:Bot=Mid-1

重复以上步骤,每次查找区间减少一半,如此反复,其结果是查到此数,或查不到此数。

58精选2021版课件PrivateSubCmd生成数组_Click()DimVAsVariantSearch=Array(12,17,23,28,30,39,_41,46,57,61,78,83,85,89,93)ForEachVInSearchText1=Text1&Str(V)NextVEndSub59精选2021版课件PrivateSubCmd二分法查找_Click()DimLeftAsInteger,RightAsIntegerDimMidAsInteger,FlgAsBooleanDimFindAsIntegerFind=InputBox("输入要查找的数")Left=1:Right=UBound(Search)Flg=FalseDoWhileLeft<=RightMid=(Right+Left)/2IfSearch(Mid)=FindThenFlg=TrueExitDoElseIfFind>Search(Mid)ThenLeft=Mid+1ElseRight=Mid-1EndIfLoopIfFlgThenText2="要查找的数"&Str(Find)&"在Search("&Str(Mid)&")中"ElseText2=Str(Find)&"不在数组中"EndIfEndSub60精选2021版课件

(1).数制转换

例将一个十进制整数m转换成r(2-16)进制字符串。方法:将m不断除r取余数,直到商为零,以反序得到结果。三、字符算法61精选2021版课件把一个任意十进制正整数转换成N进制数(N<=16)

1.使用的对象:62精选2021版课件2151111NNumCh63精选2021版课件DimNAsInteger,NumAsLong

PrivateSubCmd1_Click()

DimChAsString,IAsInteger

DimChar(15)AsString

DimBin()AsString

ForI=0To9

Char(I)=Str$(I)

NextI

ForI=0To5

Char(10+I)=Chr$(Asc("A")+I)

NextI

Print

ReDimBin(1)

CallTrans(Bin,Char)

ForI=UBound(Bin)To1Step-1

Ch=Ch+Bin(I)

NextI

Text3.Text=Ch

EndSub64精选2021版课件PrivateSubCmd2_Click()

End

EndSub

PrivateSubText1_Change()

N=Val(Text1.Text)

Lab4.Caption=Str$(N)+"进制数"

EndSub

PrivateSubText2_Change()

Num=Val(Text2.Text)

EndSub65精选2021版课件PrivateSubTrans

(Vary()AsString,St()AsString)

DimRAsInteger

DimKAsInteger

K=0

DoUntilNum=0

R=NumModN

K=K+1

ReDimPreserveVary(K)

Vary(K)=St(R)

Num=Num\N

Loop

EndSub66精选2021版课件(2).加密和解密简单加密的思想是:将每个字母C加一序数K,式子c=chr(Asc(c)+k),例如序数k为5,这时“A”

“F”,“a”

“f”,“B”

“G”…当加序数后的字母超过“Z”或“z”则c=hr(Asc(c)+k-26)。解密为加密的逆过程。67精选2021版课件PrivateSubCommand1_Click()’加密Dimstrinput$,code$,record$,cAsString*1Dimi%,length%,iasc%strinput=Text1length=Len(RTrim(strinput))‘去掉字符串右边空格,求真正的长度code=""Fori=1Tolengthc=Mid$(strinput,i,1)’取第I个字符SelectCasecCase“A”To“Z“‘大写字母加序数5加密iasc=Asc(c)+5Ifiasc>Asc(“Z”)Theniasc=iasc–26’加密后字母超过Zcode=code+Chr$(iasc)

68精选2021版课件Case“a”To“z“‘小写字母加序数5加密iasc=Asc(c)+5Ifiasc>Asc("z")Theniasc=iasc-26code=code+Chr$(iasc)CaseElse ’当第I个字符为其他字符时不加密code=code+cEndSelectNextiText2=code‘显示加密后的字符串EndSub69精选2021版课件PrivateSubCommand3_Click()’清屏Text1=""Text2=""Text3=""Text1.SetFocusEndSub70精选2021版课件(3).字符统计输入一串字符,统计各字母出现的次数,大小写字母不区分。分析:1.统计26个字母出现的个数,先声明一个具有26个元素的数组,每个元素的下标表示对应的字母,元素的值表示对应字母出现的次数。2.从输入的字符串中逐一取出字符,转换成大写字符(使得大小写不区分),进行判断。3.运行界面:71精选2021版课件Privatesubcommand1_ClickDima(1to26)asInteger,casString*1Le=len(text1)ForI=1Tolec=UCase(Mid(Text1,I,1))Ifc>="A"Andc<="Z"Thenj=Asc(c)-65+1a(j)=a(j)+1EndIfNextIForj=1to26 ifa(j)>0thenPicture1.print“”;chr(j+64);“=”;a(j);NextjEndsub72精选2021版课件(4).字符串处理编写一个英文打字训练的程序.要求如下:(1)在标签框内随机产生30个字母的范文;(2)当焦点进入文本框时开始计时,并显示当时时间;(3)在键入文本框按产生的范文输入相应的字母;(4)当键入满了30个字母结束计时,禁止向文本框输入内容,键入的字符逐一范文比较,显示打字的速度和正确率。73精选2021版课件PrivateSubCommand1_Click()‘产生30个字母的范文RandomizeText1=""Fori=1To30a=Chr$(Int(Rnd*25)+65)’随机产生大写字母Text1=Text1+a‘产生的大写字母送入范文框NextiEndSub74精选2021版课件PrivateSubCommand2_Click()EndEndSubPrivateSubText2_GotFocus()‘输入文本框获取焦点,开始计时t=TimeEndSub75精选2021版课件PrivateSubText2_KeyPress(KeyAsciiAsInteger)IfLen(Text2)=30Then ’输入

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论