Min=a(i)
EndIf
七、常用字符处理函数
Mid函数:
从字符串指定位置取指定个字符,格式为Mid(字符pn),从第p个字符开始,向后截取n个字符(若n省略则取到最后)。
Left和Right函数:
从字符串左边或右边取指定个字符,格式为Left(字符n)和Right(字符n)。
Len函数:
测试字符串长度。
UCase和LCase函数:
UCase将小写字母转换为大写字母;LCase将大写字母转换为小写字母。
Instr([首字符位置]字符串1字符串2[n]):
在字符串1中查找字符串2,如果找到,返回字符串2的第一个字符在字符串1中出现的位置。
首字符位置是可选的,如果不指定,从字符串起始位置开始查找;如果指明,从指定的位置开始查找。
Asc函数:
返回字符串中第一个字符的ASCII码。
Chr函数:
将一个数值转换为其所对应的字符。
字符的比较规则是按ASCII码顺序比较,规则为空格<”A”~”Z”<”a”~”z”
小写字母的ASCII比大写字母的ASCII小32。
例题:
1.将所有文本转换为大写(小写)字母
可以直接使用UCase(LCase)函数转换。
例如:
Text2.Text=UCase(Text1.Text)
2.对某个字符串的所有字符逐一处理
算法思想:
如果对某个字符串的所有字符逐一处理,即从字符串的第1个字符开始到最后一个字母,每次处理1个字符。
可以使用For循环实现。
通用代码为:
Fori=1ToLen(s)
s1=Mid(si1)
……
Nexti
3.字符转换
算法思想:
通过字符的ASCII码进行处理(使用Asc函数),然后再使用Chr函数将ASCII转换成字符。
例题:
将文本框Text1中字符按如下规律转换a-b、b-c……z-a,并显示在文本框Text2中。
s=Text1.Text
n=Len(s)
Fori=1Ton
s1=Mid(si1)
Ifs1>="a"Ands1<="y"Then
s2=s2+Chr(Asc(s1)+1)
ElseIfs1="z"Then
s2=s2+"a"
EndIf
Nexti
Text2.Text=s2
例题:
将文本框Text1中的小写字母转换其对应的大写字母,将大写字母转换成小写字母,并显示在文本框Text2中。
PrivateSubCommand1_Click()
s=Text1.Text
n=Len(s)
m=Asc("a")-Asc("A")
Fori=1Ton
s1=Mid(si1)
Ifs1>="a"Ands1<="z"Then
s2=s2+Chr(Asc(s1)-m)
EndIf
Ifs1>="A"Ands1<="Z"Then
s2=s2+Chr(Asc(s1)+m)
EndIf
Nexti
Text2.Text=s2
EndSub
4.判断是否回文函数
所谓回文是指顺读与倒读都一样的字符串,如“rececer”
Functionfoundhuiwen(pAsString)
foundhuiwen=True
k=Len(p)
Fori=1Tok/2
IfMid(pi1)<>Mid(pk+1-i1)Then
foundhuiwen=False
ExitFor
EndIf
Next
EndFunction
如果foundhuiwen函数返回值为True,表明字符串p为回文,否则表示不是回文。
5.统计某字符出现次数
算法思想:
对字符串中字符逐一判断,如果是某字符,则统计变量加1。
例题:
统计文本框Text1中字符i和j出现的次数(不区分大小写)。
PrivateSubCommand1_Click()
s=Text1.Text
n=Len(s)
Fori=1Ton
s1=Mid(si1)
IfUCase(s1)="I"Thenni=ni+1
IfUCase(s1)="J"Thennj=nj+1
Nexti
Printninj
EndSub
八、素数
素数定义:
只能被1和本身整除的正整数称为素数(或称质数)。
例如11就是素数,它只能被1和11整除。
算法思想:
判别某数n是否是素数的方法有很多,最简单的是从素数的定义来求解。
对于n,从i=2,3,…,n-1判别n能够被i整除,只要有一个能整除,n就不是素数,否则n是素数。
此种算法比较简单,但速度慢,因此,可以将n被2到(或n/2)间的所有整数除,如果都除不尽,则n就是素数,否则n是非素数。
注:
执行For循环时,循环变量等于终值仍进入循环,遇到Next语句,循环变量会自动加上步长,因此如果循环正常完成后,循环变量的值将大于终值。
例如:
Fori=1To4
If……ThenExitFor
Nexti
Printi
如果循环正常结束,则输出结果为5(大于4)。
如果循环过程中满足If条件,执行ExitFor语句退出循环,则i的值一定小于5。
例题:
判断n是否是素数。
PrivateSubCommand2_Click()
n=Val(Text1.Text)
Forj=2Ton-1
IfnModj=0ThenExitFor
Nextj
Ifj>n-1ThenPrint"是素数"ElsePrint"不是素数"
EndSub
例题:
输出2~n范围的全部素数。
PrivateSubCommand1_Click()
n=Val(Text1.Text)
Fori=2Ton
Forj=2ToSqr(i)
IfiModj=0ThenExitFor
Nextj
Ifj>Sqr(i)ThenPrinti
Nexti
EndSub
使用DoWhile循环判断是否是素数的代码为:
PrivateFunctionisprime(aAsInteger)AsBoolean
DimflagAsBoolean
flag=True
b=2
DoWhileb<=Int(a/2)Andflag
IfInt(a/b)=a/bThen
flag=False
Else
b=b+1
EndIf
Loop
isprime=flag
EndFunction
EndSub
其中flag作为标志变量,首先赋值为True,在循环体中,如果满足If条件(即n能被其他数整除),则flag重新赋值为False,最后根据flag的值可知n是否是素数。
九、最大公约数和最小公倍数
算法思想:
(1)对于已知两数x、y,使得x>y
(2)x除以y得余数r;
(3)若r=0,则x为求得的最大公约数,算法结束;否则执行步骤(4)
(4)x←y,y←r,再重复执行
(2)
求得了最大公约数后,最小公倍数就可很方便地求出,即将原来的两数相乘除以最大公约数。
PrivateSubForm_Click()
x=Val(InputBox("请输入第一个数:
"))
y=Val(InputBox("请输入第二个数:
"))
Ifxt=x
x=y
y=t
EndIf
x1=x
y1=y
Printxy
DoWhiley<>0
r=xMody
x=y
y=r
Loop
Print"最大公约数为:
";x
Print"最小公倍数为:
";x1*y1/x
EndSub
十、完数
定义:
一个数如果正好等于它的因子之和,这个数就称为完数。
例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。
例题:
编程找出1000以内的所有完数。
PrivateSubCommand1_Click()
OutputWanNumber1000
EndSub
'求完数的过程
SubOutputWanNumber(ByValnAsInteger)
DimiAsInteger
DimjAsInteger
DimsAsInteger
Fori=1Ton
s=0
Forj=1Toi\2
IfiModj=0Thens=s+j
Nextj
Ifs=iThenPrinti&"是完数"
Nexti
EndSub
十一、水仙花数
定义:
“水仙花数”是指一个三位数,其中各位数字的立方和等于该数本身(如153=13+53+33)
分析:
此题的关键是要知道如何分离出一个三位数中的各位数字。
例题:
找出100~999之间的所有“水仙花数”。
PrivateSubCommand1_Click()
Fori=100To999
a=Int(i/100)
b=Int((i-100*a)/10)
c=i-Int(i/10)*10
Ifi=a^3+b^3+c^3Then
Printi
EndIf
Nexti
EndSub
PrivateSubCommand1_Click()
Forn=100To999
s=0
a=n
DoWhilea<>0
b=aMod10
s=s+b*b*b
a=a\10
Loop
Ifs=nThenPrintn
Nextn
EndSub
十二、数列
以下数列:
1,1,2,3,5,8,13,21,…,的规律是从第3个数开始,每个数是它前面两个数之和。
PrivateSubCommand1_Click()
Dima(50)AsLong
DimfAsLong
a
(1)=1
a
(2)=1
Fori=3ToVal(Text1.Text)
f=a(i-2)+a(i-1)
a(i)=f
Next
Text2.Text=f
EndSub
以下数列:
1,1,3,5,9,15,25,41,…,的规律是从第3个数开始,每个数是它前面两个数的和加1。
PrivateSubCommand1_Click()
DimfAsLong
a
(1)=1
a
(2)=1
Fori=3ToVal(Text1.Text)
f=a(i-2)+a(i-1)+1
a(i)=f
Next
Text2.Text=f
EndSub
十三、排序
本算法主要应用于数组。
排序算法有种,其中“冒泡”排序法是较为常见的一种。
算法思想:
从数组的第一个元素开始,每一项(i)都与下一个元素(i+1)进行比较,如果下一个元素的值较小,就将这两项的位置交换,从而使值较小的数据项“升”到上面(最大数“沉底”),重复这种操作直到最后一个元素,然后再回到开始进行重复处理。
当整个数组不再出现交换项目时,排序结束。
例题:
数组a种有5个元素,每个元素值分别为10、8、21、7、5,用冒泡排序法进行排序。
Optionbaxxxxse1
PrivateSubCommand1_Click()
arr1=Array(24153)
Fori=5To2Step-1
Forj=1Toi-1
Ifarr1(j)>arr1(j+1)Then
t=arr1(j)
arr1(j)=arr1(j+1)
arr1(j+1)=t
EndIf
Nextj
Nexti
Fori=1To5
Printarr1(i);
Nexti
EndSub