VB常用算法总结new.docx
VB常用算法总结一、变量值的交换算法思想:若交换两个变量的值,必须引入第三个新的变量进行传递。以下代码是错误的:X=12 :Y=34 :X=Y :Y=X正确的代码是:X=12 :Y=23 :T=X : X=Y :Y二T二、判断一个数是否能被另一个数整除算法思想:可以用整除的定义(余数为0)或X除以Y等于X整除Y等表达式进行判断。条件表达式可以为:X mod Y=0 或 X Y=X/Y 或 Int(X/Y)=X/Y如果以上条件表达式为True,则表示X能被Y整除。三、累加、阶乘、计数和求平均值算法思想:使用循环语句,并用一个变量存放累加的中间及最终结果。注:累加求和时变量初值为0,计算阶乘时变量初值为1。统计计个数(计数)时可用一个变量作为统计个数的累加变量,每次加1即可。求平均值算法思想是先求和,再除以个数。条件求和(或计数):在循环语句中加入IfEnd If判断语句。例题:计算1到10之间所有整数的累加和以及10!。n=10sum=0'累加求和时,变量的初值一定为0prod=l'累乘(连乘)时,变量的初值一定为1For i=l To nsum=sum+iprod=prod* iNext iPrint sum,prod例题:统计0100之间能被3整除的数的个数、累加和及其平均值。s=0n=0For i=0 To 100If i mod 3 =0 Thens=s+in=n+lEnd IfNext iPrint n,s,s/n四、随机数的产生a,b之间的随机整数Int(b-a+1 )*rnd)+a(a,b)随机数(b-a) *rnd+a五、求若干个数中最大值或最小值六、常用字符处理函数Mid函数:从字符串指定位置取指定个字符,格式为Mid (字符,p,n),从第p个字符开始, 向后截取n个字符(若n省略则取到最后)。Left和Right函数:从字符串左边或右边取指定个字符,格式为Left (字符,n)和Right (字符,n)。Len函数:测试字符串长度。UCase和LCase函数:UCase将小写字母转换为大写字母;LCase将大写字母转换为小写字 母。Instr(首字符位置,字符串1,字符串2,川):在字符串1中查找字符串2,如果找到,返 回字符串2的第一个字符在字符串1中出现的位置。首字符位置是可选的,如果不指定,从 字符串起始位置开始查找;如果指明,从指定的位置开始查找。Asc函数:返回字符串中第一个字符的ASCII码。Chr函数:将一个数值转换为其所对应的字符。字符的比较规则是按ASCII码顺序比较,规则为 空格v" A"" Z” <” a”" z"小写字母的ASCII比大写字母的ASCII小32o例题:1 .将所有文本转换为大写(小写)字母可以直接使用UCase (LCase)函数转换。例如:Text2.Text=UCase(Textl .Text)2 .对某个字符串的所有字符逐一处理算法思想:如果对某个字符串的所有字符逐一处理,即从字符串的第1个字符开始到最后一个字母,每次处理1个字符。可以使用For循环实现。通用代码为:For i=l To Len(s)sl=Mid(sj,l)Next i3 .字符转换算法思想:通过字符的ASCII码进行处理(使用Asc函数),然后再使用Chr函数将ASCII 转换成字符。例题:将文本框Textl中字符按如下规律转换ab、bcz-a,并显示在文本框Text2 中。s = Textl.Textn = Len(s)For i = 1 To nsi = Mid(s, i, 1)Ifsl >= nan And si <= Thens2 = s2 + Chr(Asc(sl) + 1)Elselfsl = Mzn Thens2 = s2 + nanEnd IfNext iText2.Text = s2例题1将文本框Textl中的小写字母转换其对应的大写字母,将大写字母转换成小写字母, 并显示在文本框Text2中。Private Sub Command l_Click()s = Textl.Textn = Len(s)m = Asc("A) - Asc(nAH)For i = 1 To nsi = Mid(s, i, 1)Ifsl >= nan And si <= Thens2 = s2 + Chr(Asc(sl) - m)End IfIfsl >= nAM And si <= nZH Thens2 = s2 + Chr(Asc(sl) + m)End IfNext iText2.Text = s2End Sub5.统计某字符出现次数算法思想:对字符串中字符逐一判断,如果是某字符,则统计变量加1。例题:统计文本框Textl中字符i和j出现的次数(不区分大小写)。Private Sub Command 1 _Click()s = Text 1.Textn = Len(s)For i = 1 To nsi = Mid(s, i, 1)IfUCase(sl) = nIn Then ni = ni + 1IfUCase(sl)=丁 Then nj = nj + 1Next iPrint ni, njEnd Sub八、素数素数定义:只能被1和本身整除的正整数称为素数(或称质数)。例如11就是素数,它只 能被1和11整除。算法思想:判别某数n是否是素数的方法有很多,最简单的是从素数的定义来求解。对于n, 从i=2, 3,,n-1判别n能够被i整除,只要有一个能整除,n就不是素数,否则n是素 数。此种算法比较简单,但速度慢,因此,可以将n被2到(或n/2)间的所有整数除, 如果都除不尽,则n就是素数,否则n是非素数。注:执行For循环时,循环变量等于终值仍进入循环,遇到Next语句,循环变量会自动加 上步长,因此如果循环正常完成后,循环变量的值将大于终值。例如:For i=l To 4IfThen Exit ForNext iPrint i如果循环正常结束,则输出结果为5 (大于4)。如果循环过程中满足If条件,执行Exit For 语句退出循环,则i的值一定小于5。例题:判断n是否是素数。Private Sub Command2_Click()n = Val(Textl.Text)For j = 2 To n - 1If n Mod j = 0 Then Exit ForNext jIfj > n-1 Then Print ”是素数“ Else Print ”不是素数”End Sub例题:输出2n范围的全部素数。Private Sub Command 1 _Click()n = Val(Textl.Text)For i = 2 To nFor j = 2 To Sqr(i)If i Mod j = 0 Then Exit ForNext jIf j > Sqr(i) Then Print iNext iEnd Sub使用Do While循环判断是否是素数九、最大公约数和最小公倍数 算法思想:(1)对于已知两数x、y,使得x>y(2) x除以y得余数r;(3)若0,则x为求得的最大公约数,算法结束;否则执行步骤(4)(4) x-y, y<-r,再重复执行(2)求得了最大公约数后,最小公倍数就可很方便地求出,即将原来的两数相乘除以最大公约数。 Private Sub Form_Click()x = Val(InputBox("请输入第一个数:") y = Val(InputBox("请输入第二个数:”) If x < y Thent = xx 二 y y = t End If x 1 = x yl 二 y Print x, y Do While y <> 0 r = x Mod y x = y y = rLoopPrint”最大公约数为:”;xPrint ”最小公倍数为:”;xl *yl / xEnd Sub十、水仙花数定义:“水仙花数”是指一个三位数,其中各位数字的立方和等于该数本身(如153 = +53+33) 分析:此题的关键是要知道如何分离出一个三位数中的各位数字。例题:找出100999之间的所有“水仙花数,Private Sub Command 1 _Click()For i = 100 To 999 a = Int(i/ 100) b = Int(i- 100* a) / 10) c = i-Int(i/ 10)* 10 If i = a 八 3 + b 八 3+ c 八 3 Then Print iEnd If Next i End SubPrivate Sub Command 1 _Click() For n = 100 To 999s = 0 a = n Do While a <> 0b = a Mod 10 s=s+b*b*b a = a 10 LoopIf s = n Then Print n Next nEnd Sub十一、斐波那切数列的输出该数列刖两项为1, 1从第二项开始,an=an-i+an-2十二、进制转换十三、数排序十四、分段函数十五、图形输出(双重循环)十六、百鸡百钱问题十七、迭代法P116页十八、输入a,b,c,的值,求方程ax2+bx+c=0的解。注意:对象只考文本框、标签、命令按钮和窗体。