搜档网
当前位置:搜档网 › VB常用算法

VB常用算法

VB常用算法
VB常用算法

常用算法

1.判断素数

素数是指只能被1与自己整除的数是素数,最小的素数是2,如3,5,7等都是素数判断方法一:

Private Function Prime(N As Integer)As Boolean

Dim i As Integer

For i=2 To N-1(或sqr(N)或N\2)

If N Mod i=0 Then Exit For

Next i (或N/i=Int(N/i))

If i=N Then Prime=True

End Function

判断方法二:

Private Function Prime(N As Integer)As Boolean

Dim i As Integer

For i=2 To N-1

If N Mod i=0 Then Exit Function

Next i

Prime=True

End Function

(2)求最大公约数(欧几里德算法,辗转相除法)

最大公约数是指两个数最大的公约数

Private Function Gcd(byval m As Integer,ByVal n As Integer)As Integer Dim r As Integer

r=m Mod n

Do while r<>0

m=n

n=r

r=m Mod n

Loop

Gcd=n

End Function

利用递归实现判断最大公约数

Private Function Gcd(ByVal m As Integer,ByVal n As Integer)As Integer

Dim r As Integer

r=m Mod n

If r=0 Then

Gcd=n

ELse

M=n

n=r

Gcd=Gcd(m,n)

End If

End Function

(3)求因子算法与求完全数算法

Private Sub factor(x As Integer,fn()As Integer)

'动态数组fn用以存放所有的因子

Dim i As Integer,n As Integer

For i=1 To X

If x Mod i=0 Then

n=n+1

Redim Preserve fn(n)

fn(n)=i

End If

Next i

End Sub

求完全数:完全数:整数N的因子和(其中因子包括1,不包括自身)等于N

Prirate Function wanshu(N As Integer)As Boolean 'N为原数,sum为N的因子之和

Dim i As Integer,sum As Integer

For i=1 To N-1

If N Mod i=0 Then

sum=sum+i

End If

Next i

If sum=N Then wanshu=True

End Function

(4)进制转换

N进制--十进制

如二进制转换为十进制采用从右向左每个数乘以其对应的幂值,如二进制10111=1×2^0+1×2^1+1×2^2+0×2^3+1×2^4=23,八进制转换为十进制采用从右向左每个数乘以其对应的幂值,如八进制25=5×8^0+2×8^1=21,十六进制转换为十进制采用从右向左每个数乘以其对应的幂值, 如十六进制A7=7×16^0+10×16^1=167(十六进制的范围是从0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个数,其中A表示10,B表示11,依次类推,F表示15)

private sub zh1(a as string, N as integer,b as integer)

'a为N进制数,b为转换后的十进制数,N 代表某种进制

dim p as integer,i as integer,s1 as string

p=0

for i=Len(a) to 1 step -1

s1=Ucase(Mid(a,i,1))

if s1>="A" And s1<="F" Then s1=Asc(s1)-55

b=b+val(s1)*N^p

p=p+1

Next I

End Sub

十进制---- N进制:方法是除N逆序取余法,注意逆序

如将十进制188转换为十六进制的方法是,除以16逆序取余法, 所以是274

余数

188/8 4(余数)

23/8 7(余数)

2/8 2(余数)

Private Sub zh(a as integer,N as integer,b as integer)

‘a为十进制数,b为转换后的N进制数,N代表某种进制dim r as integer, s as string

do until a=0

r=a mod n ‘r取余

if r>9 then s=Chr(55+r) else s=Cstr(r)

b=s & b

a=a\N

Loop

End Sub

(5)互质数:两个数的最大公约数为1

Private Function reprime(a as integer, b as integer) as boolean dim i as integer

for i=2 to a

if a mod i=0 and b mod i=0 then exit function

next i

reprime=true

End Function

(6)回文数:左右对称的数为回文数(如121,13231)

方法一:折半判断法

Private Function compare(n as long) as boolean

Dim I as integer, s as string , slen as integer

s=Cstr(n): slen=Len(s)

For i=1 to slen\2

if mid(s,I,1)<>Mid(s,slen-i+1,1) Then Exit Function next

compare=true

End Function

方法二:根据定义:其逆序数(反序数)和原数相等的数为回文数Private Function compare(n as integer) as Boolean

dim I as integer, s1 as string,s2 as string

s1=cstr(n)

For i=1 to len(s1)

s2=Mid(s1,I,1) & s2

Next I

if s2=s1 then compare=true

End Function

(7)最小公倍数

方法一:最小公倍数=两数乘积/最大公约数

VB常用算法

常用算法 1.判断素数 素数是指只能被1与自己整除的数是素数,最小的素数是2,如3,5,7等都是素数判断方法一: Private Function Prime(N As Integer)As Boolean Dim i As Integer For i=2 To N-1(或sqr(N)或N\2) If N Mod i=0 Then Exit For Next i (或N/i=Int(N/i)) If i=N Then Prime=True End Function 判断方法二: Private Function Prime(N As Integer)As Boolean Dim i As Integer For i=2 To N-1 If N Mod i=0 Then Exit Function Next i Prime=True End Function (2)求最大公约数(欧几里德算法,辗转相除法) 最大公约数是指两个数最大的公约数 Private Function Gcd(byval m As Integer,ByVal n As Integer)As Integer Dim r As Integer r=m Mod n Do while r<>0 m=n n=r r=m Mod n Loop Gcd=n End Function 利用递归实现判断最大公约数 Private Function Gcd(ByVal m As Integer,ByVal n As Integer)As Integer Dim r As Integer r=m Mod n If r=0 Then Gcd=n ELse M=n n=r Gcd=Gcd(m,n) End If

VB程序设计的常用算法填空题

VB程序设计的常用算法 例:用随机函数产生100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数并打印出来。 将程序编写在一个GetTJput过程中,代码如下: Public Sub GetTJput() Dim a(1 To 100) As Integer Dim x(1 To 10) As Integer Dim i As Integer, p As Integer '产生100个[0,99]范围内的随机整数,每行10个打印出来 For i = 1 To If a(i) < 10 Then Form1.Print Space(2); a(i); Else Form1.Print Space(1); a(i); End If If Then Next i '统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数,并将统计结果保存在数组x(1),x(2),...,x(10)中,将统计结果打印出来For i = 1 To 100 p = a(i) Mod 10 ' 求个位上的数字 If p = 0 Then p = 10 Next i Form1.Print "统计结果" For i = 1 To 10 p = i If i = 10 Then p = 0 Form1.Print "个位数为" + Str(p) + "共" + Str(x(i)) + "个" Next i End Sub 二、求两个整数的最大公约数、最小公倍数 m=inputBox("m=") n=inputBox("n=") nm=n*m If m < n Then r=m mod n Do While m=n n=r

VB常用算法介绍

常用算法介绍 VB 算法(Algorithm):计算机解题的基本思想方法和步骤。算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。通常使用自然语言、结构化流程图、伪代码等来描述算法。 一、计数、求和、求阶乘等简单算法 此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意用来表示计数、和、阶乘的变量的初值。 例:用随机函数产生100个[0,99]围的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数并打印出来。 本题使用数组来处理,用数组a(1 to 100)存放产生的确100个随机整数,数组x(1 to 10)来存放个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数。即个位是1的个数存放在x(1)中,个位是2的个数存放在x(2)中,……个位是0的个数存放在x(10)。 将程序编写在一个GetTJput过程中,代码如下: Public Sub GetTJput() Dim a(1 To 100) As Integer Dim x(1 To 10) As Integer

Dim i As Integer, p As Integer '产生100个[0,99]围的随机整数,每行10个打印出来 For i = 1 To 100 a(i) = Int(Rnd * 100) If a(i) < 10 Then Form1.Print Space(2); a(i); Else Form1.Print Space(1); a(i); End If If i Mod 10 = 0 Then Form1.Print Next i '统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数,并将统计结果保存在数组x(1),x(2),...,x(10)中,将统计结果打印出来 For i = 1 To 100 p = a(i) Mod 10 ' 求个位上的数字 If p = 0 Then p = 10 x(p) = x(p) + 1 Next i Form1.Print "统计结果" For i = 1 To 10

VB练习题

判断题: 1、VB中,每一种对象有着不同的属性设置,每一种对象能识别的事件也不同。(对) 2、Val(“123hello”) 和Val(“hello123”)返回值一样。(错) 3、赋值语句X=123+”123”和X=”123”+123中,X的值一样。(对) 4、赋值语句X=”123”+”123”和X=”123”+123中,X的值一样。(错) 5、执行Print 5*8 和Print “5*8 ”语句运行结果一样。(错) 6、标签框和文本框内容的最大区别就是在程序运行过程中标签框的内容不可编辑,而文本框的内容可编辑。(对) 7、用vb编写程序时,标签控件能代替文本框控件使用. (错) 8、VB程序代码中,Label1.Caption=””的作用是该标签框中得内容清除。(对) 9、变量名的长度最长可达1024个字符。(错)225个 10、sum和int.sum都可以作为VB的变量名。(错) 11、下列程序的运行结果是15 (对) Dim s as Double Dim i as Integer S=0 I=1 Do While i<=5 I=i+2 S=s+i Loop Label1.Caption=s 12、对于熟练的程序员,可以省略程序的调试过程。(错) 13、在VB中,使用if语句就可以根据条件改变程序的执行路径。(对) 14、VB编程的一般步骤应该是:分析问题——设计界面——编写代码——调试与运行程序。(对) 单项选择题 1、小明想用VB设计一个加法器程序,做了如下规划,下列说法错误的是。(D) A、程序运行时标题栏显示加法器 B、前两个标签框显示的内容分别为“+”和“=” C、Command1用来计算出结果 D、使用了三个命令按钮、两个标签框和三个文本框 2、从下面的对象属性可以看出,该对象的标题为(A)

VB程序设计的常用算法教案.doc

VB程序设计的常用算法教案 算法(algorithm):计算机解题的基本思想方法和步骤。算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。通常使用自然语言、结构化流程图、伪代码等来描述算法。 一、计数、求和、求阶乘等简单算法 此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意用来表示计数、和、阶乘的变量的初值。 例:用随机函数产生100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数并打印出来。 本题使用数组来处理,用数组a(1 to 100)存放产生的确100个随机整数,数组x(1 to 10)来存放个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数。即个位是1的个数存放在x(1)中,个位是2的个数存放在x(2)中,......个位是0的个数存放在x(10)。 将程序编写在一个gettjput过程中,代码如下: public sub gettjput() dim a(1 to 100) as integer

dim x(1 to 10) as integer dim i as integer, p as integer '产生100个[0,99]范围内的随机整数,每行10个打印出来 for i = 1 to 100 a(i) = int(rnd * 100) if a(i) < 10 then form1.print space(2); a(i); else form1.print space(1); a(i); end if if i mod 10 = 0 then form1.print next i '统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数,并将统计结果保存在数组x(1),x(2),...,x(10)中,将统计结果打印出来 for i = 1 to 100 p = a(i) mod 10 ' 求个位上的数字 if p = 0 then p = 10 x(p) = x(p) + 1 next i form1.print "统计结果"

VB程序设计的常用算法4

VB程序设计的常用算法4 十、数制转换 将一个十进制整数m转换成→r(2-16)进制字符串。 方法:将m不断除r 取余数,直到商为零,以反序得到结果。下面写出一转换函数,参数idec为十进制数,ibase为要转换成数的基(如二进制的基是2,八进制的基是8等),函数输出结果是字符串。 Private Function TrDec(idec As Integer, ibase As Integer) As String Dim strDecR$, iDecR% strDecR = "" Do While idec <> 0 iDecR = idec Mod ibase If iDecR >= 10 Then strDecR = Chr$(65 + iDecR - 10) & strDecR Else strDecR = iDecR & strDecR End If idec = idec \ ibase Loop TrDec = strDecR End Function 十一、字符串的一般处理1.简单加密和解密 加密的思想是:将每个字母C加(或减)一序数K,即用它后的第K个字母代替,变换式公式:c=chr(Asc(c)+k) 例如序数k为5,这时"A"→"F","a""f","B""G"…当加序数后的字母超过"Z"或"z"则c=Chr(Asc(c)+k -26) 例如:You are good→ Dtz fwj ltti 解密为加密的逆过程 将每个字母C减(或加)一序数K,即c=chr(Asc(c)-k), 例如序数k为5,这时"Z"→"U","z"→"u","Y"→"T"…当加序数后的字母小于"A"或"a"则c=Chr(Asc(c)-k +26) 下段程序是加密处理: i = 1: strp = "" nL = Len(RTrim(strI)) Do While (i <= nL) strT = Mid$(strI, i, 1) '取第i个字符 If (strT >= "A" And strT <= "Z") Then iA = Asc(strT) + 5 If iA > Asc("Z") Then iA = iA - 26 strp = strp + Chr$(iA) ElseIf (strT >= "a" And strT <= "z") Then iA = Asc(strT) + 5 If iA > Asc("z") Then iA = iA - 26 strp = strp + Chr$(iA) Else strp = strp + strT End If i = i + 1 Loop Print strp

VB程序设计的常用算法

VB程序设计的常用算法 算法(Algorithm):计算机解题的基本思想方法和步骤。算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。通常使用自然语言、结构化流程图、伪代码等来描述算法。 一、计数、求和、求阶乘等简单算法 此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意用来表示计数、和、阶乘的变量的初值。 例:用随机函数产生100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数并打印出来。 本题使用数组来处理,用数组a(1 to 100)存放产生的确100个随机整数,数组x(1 to 10)来存放个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数。即个位是1的个数存放在x(1)中,个位是2的个数存放在x(2)中,……个位是0的个数存放在x(10)。 将程序编写在一个GetTJput过程中,代码如下: Public Sub GetTJput() Dim a(1 To 100) As Integer Dim x(1 To 10) As Integer Dim i As Integer, p As Integer '产生100个[0,99]范围内的随机整数,每行10个打印出来 For i = 1 To 100 a(i) = Int(Rnd * 100) If a(i) < 10 Then Form1.Print Space(2); a(i); Else Form1.Print Space(1); a(i); End If If i Mod 10 = 0 Then Form1.Print Next i '统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数,并将统计结果保存在数组x(1),x(2),...,x(10)中,将统计结果打印出来 For i = 1 To 100 p = a(i) Mod 10 ' 求个位上的数字 If p = 0 Then p = 10 x(p) = x(p) + 1 Next i Form1.Print "统计结果" For i = 1 To 10 p = i If i = 10 Then p = 0 Form1.Print "个位数为" + Str(p) + "共" + Str(x(i)) + "个" Next i End Sub 二、求两个整数的最大公约数、最小公倍数 分析:求最大公约数的算法思想:(最小公倍数=两个整数之积/最大公约数) (1) 对于已知两数m,n,使得m>n; (2) m除以n得余数r; (3) 若r=0,则n为求得的最大公约数,算法结束;否则执行(4); (4) m←n,n←r,再重复执行(2)。 例如:求m=14 ,n=6的最大公约数. m n r

VB常用算法——排序

VB常考算法(八)排序: 1、算法 1)选择法排序 算法说明:根据上例中求最小值的思路,我们可以使用如下方法进行从小到大排序:第一轮,以第一个元素逐个跟后面的所有元素比较,如果比后面的元素大就进行交换,经过一轮比较,第一个元素被确定为最小;同样的方法,下一轮以第二个元素跟剩下的所有元素进行比较确定下次小的元素;以此类推… 下面我们以图形的形式体现对5个数进行选择排序的过程: 第一轮:第二轮: 第三轮: 从上图可以发现对5个元素进行排序,总共经过了5-1=4轮,而每一轮中比较的次数也不相同,第一轮2、3、4、5号元素参与跟1号元素的比较,共4次,第二轮3、4、5号元素参与跟2号元素的比较,共3次,以次类推,比较次数逐步减少。经过四轮的比较,利用逐步求最小值的方法将5个数从小到大排好序。对于这样一个排序的过程,我们可以使用两个循环分别控制比较的轮数和每一轮的次数。 程序代码: Private Sub Command1_Click() Dim n As Integer n = InputBox("请输入数组元素的个数:") Dim a() As Integer, i As Integer, j As Integer Print "排序前:" ReDim a(n) For i = 1 To n a(i) = Int(Rnd * (99 - 10 + 1) + 10) Print a(i); 最小值 次小值

Next i For i = 1 To n - 1 For j = i To n If a(i) > a(j) Then temp = a(i) '交换元素 a(i) = a(j) a(j) = temp End If Next j Next i Print Print "排序后:" For i = 1 To n Print a(i); Next i End Sub 2)冒泡法排序 算法说明:相邻的元素进行比较,如果前面的元素比后面的元素大,则将它们进行交换,具体思路:设在数组a 中存放n 个元素,第一轮,将a(1)和a(2)进行比较,若a(1)>a(2),则交换这两个元素的值,然后继续用a(2)和a(3)比较,若a(1)>a(2),则交换这两个元素的值,以此类推,直到a(n-1)和a(n)进行比较处理后,a(n)中就存放了n 个数中最大的值;第二轮,用a(1)与a(2),a(2)与a(3),…,a(n-2)与a(n-1)进行比较,处理方法相同,这一轮下来,a(n-1)中存放n 个数中第二大的值;…;第n-1轮,a(1)与a(2)进行比较处理,确保最小值在a(1)中。经过n-1轮比较处理,n 个数已经按从小到大的顺序排列好。 下面我们以图形的形式体现对5个数进行冒泡排序的过程: 第一轮: 第三轮: 第四轮: 最大值

VB程序设计的常用算法

VB 程序设计的常用算法 算法( Algorithm ):计算机解题的基本思想方法和步骤。算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。通常使用自然语言、结构化流程图、伪代码等来描述算法。 一、计数、求和、求阶乘等简单算法 此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意用来表示计数、和、阶乘的变量的初值。 例:用随机函数产生100 个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0 的数的个数并打印出来。 本题使用数组来处理,用数组a(1 to 100)存放产生的确100个随机整数,数组x(1 to 10)来存放个位上的数字分别为1,2,3,4,5,6,7,8,9,0 的数的个数。即个位是1 的个数存放在x(1) 中,个位是2 的个数存放在x(2)中,...................... 个位是0的个数存放在x(10)。 将程序编写在一个GetTJput过程中,代码如下: Public Sub GetTJput() Dim a(1 To 100) As Integer Dim x(1 To 10) As Integer Dim i As Integer, p As Integer '产生100 个[0,99]范围内的随机整数,每行 1 0个打印出来 For i = 1 To 100 a(i) = Int(Rnd * 100) If a(i) < 10 Then Form1.Print Space(2); a(i);

VB常用算法——素数

VB常考算法(三)素数: 1、算法说明 所谓素数是指只能被1和它本身整除的数。 1)判断某数是否为素数。根据循环控制变量来判断。 算法说明:根据素数只能被1和它本身整除的性质,我们可以使用循环依次判断2到n-1(或者Sqr(n))之间有没有被它整除的数,一旦有退出循环,退出循环后通过检验循环变量的值来判断是不是素数。即,当循环正常退出,循环变量的值等于n时,该数是素数;当循环提前退出,循环变量的值小于等于n-1,该数不是素数。 程序代码如下: Private Sub Command1_Click() Dim n As Integer, i As Integer n = Val(Text1.Text) If n < 1 Then MsgBox "请正确输入数据" Else n = Val(Text1.Text) For i = 2 To n - 1 If n Mod i = 0 Then Exit For Next i If i = n Then MsgBox n & "是素数" Else MsgBox n & "不是素数" End If End If End Sub 2)判断某数是否为素数。根据标志位flg来判断。 Private Sub Command1_Click() Dim n As Integer, i As Integer Dim flg As Boolean flg = True n = Val(Text1.Text) If n < 1 Then MsgBox "请正确输入数据" Else n = Val(Text1.Text) For i = 2 To n - 1 If n Mod i = 0 Then flg = False Next i If flg = True Then MsgBox n & "是素数" Else MsgBox n & "不是素数"

VISUALBASIC常用算法汇总

VB常用算法(1):累加和连乘 1、算法说明累加形式:V=V+e连乘形式:V=V*e 其中:V是变量,e是递增表达式。累加和连乘一般通过循环结构来实现。 注意:需在执行循环体前对变量V赋初值。一般的,累加时置初值0;连乘时置初值为1. 举例求N!的结果。 Private Sub Command1_Click()Dim n%,i%,s& n=Val(InputBox("输入n"))s=1 For i=1To n s=s*i Next i Print s End Sub 错误的写法: Private Sub Command1_Click() Dim n%,i%,s& n=Val(InputBox("输入n")) For i=1To n s=1‘赋初值语句位置不对! s=s*i Next i Print s‘输出s的值为n,而不是n!End Sub 应用举例 根据下列公式,求自然对数e 的的近似值。 要求:误差小于0.00001 Private Sub Command1_Click() Dim i%,n&,t!,e! e=2 i=1 t=1 Do While t>0.00001 i=i+1 t=t/i e=e+t Loop Print"计算了";i;"项目和是:";e Print Exp(1)‘与上句输出值进行对比以证明算法的正确性 End Sub 解题技巧 1)由于这类题目往往是根据精度要求来求值,因此我们不能预知具体循环次数,所以这类题目一般用Do循环,很少用For循环。设定循环变量和通项变量,注意各变量的初值; 2)分解通项表达式中各因子,并分别将各因子用循环变量表示; 3)如果步骤2中有的因子比较复杂,难以直接用变量表示,此时可以考虑使用Function过程; 4)根据步骤1、2、3,写出通项表达式; 5)根据精度要求(往往是通项小于10负多少次方这样一个关系表达式),写出一条满足精度要求后跳出循环的语句。通常是用:if通项表达式>10^(-N)then exit do,注意这句话一般需放在累加或者连乘式之前。

VB程序设计的常用算法教案

VB程序设计的常用算法教案 算法(Algrith):计算机解题的基本思想方法和步骤。算法的描述:是对要解决一个问题或要完成一项任务所采 取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何 安排这些语句等。通常使用自然语言、结构化流程图、伪代码等来描述算法。 一、计数、求和、求阶乘等简单算法 此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条,更要注意用来表示计数、和、阶 乘的变量的初值。 例:用随机函数产生100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,,6,7,8,9,0的 数的个数并打印出来。 本题使用数组来处理,用数组a存放产生的确100个随机整数,数组x来存放个位上的数字分 别为1,2,3,4,,6,7,8,9,0的数的个数。即个位是1的个数存放在x中,个位是2的个数存放在x中,……

个位是0的个数存放在x。 将程序编写在一个GetTput过程中,代码如下:PubliSubGetTput DiaAsInteger DixAsInteger DiiAsInteger,pAsInteger '产生100个[0,99]范围内的随机整数,每行10个打印出来 Fri=1T100 a=Int Ifa<10Then Fr1PrintSpae;a;

Else Fr1PrintSpae;a; EndIf Ifid10=0ThenFr1Print Nexti '统计个位上的数字分别为1,2,3,4,,6,7,8,9,0的数的个数,并将统计结果保存在数组x,x,,x中,将统计结果打印出来 Fri=1T100 p=a d '求个位上的数字 Ifp=0Thenp=10

VB常用算法

VB常用算法(二)最值问题- - 1、算法说明 在若干数中求最大值,一般先取第一个数为最大值的初值(即假设第一个数为最大值),然后,在循环体内将每一个数与最大值比较,若该数大于最大值,将该数替换为最大值,直到循环结束。 求最小值的方法类同。 求若干数平均值,实质上就是先求和,再除以这些数的个数。 应用举例 随机产生n个1-100(包括1和100)的数,求它们的最大值、最小值和平均值。 Private Sub Command1_Click() Dim n As Integer, i As Integer, min As Integer, max As Integer, aver As Single, s As Integer n = Val(InputBox("输入个数:")) s = Int(Rnd * 100) + 1 max = s min = s aver = s Print "第1个数是:" & s For i = 2 To n s = Int(Rnd * 100) + 1 Print "第" & i & "个数是:" & s If s > max Then max = s If s < min Then min = s aver = aver + s Next i aver = aver / n Print "max="; max; "min="; min; "aver="; aver End Sub 解题技巧 最大值、最小值、平均值类型题目往往和数组放在一起考!有的不仅求这些值,还要对具有最大值或者最小值的行或列或者某个元素进行处理,这时就要在记录最大、最小值时,同时记录该值所在的行号和列号。 2、实战练习 1)补充代码(2000春二(9)) 本程序的功能是在二维数组中查找鞍点元素,即该元素在所在行中为最大,且在所在列中为最小。在一个数组中可能存在,也可能不存在这样的元素。数组各元素的值从文件data.txt中读取。 Private Sub Form_Click() Dim a(3,3) As Integer,i As Integer,j As Integer Dim maxvr As Integer,col As Integer, As Integer Open data.txt For Input As #1 For i=1 To 3 For j=1 To 3 Input #1,a(i,j) Print a(i,j); Next j Print Next i For i=1 To 3 maxvr= (1) col=1 For j=2 To 3 If maxvr

VB常用算法总结

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即可。 求平均值算法思想是先求和,再除以个数。 条件求和(或计数):在循环语句中加入If-End If判断语句。 例题:计算1到10之间所有整数的累加和以及10!。 n=10 sum=0 ‘累加求和时,变量的初值一定为0 prod=1 ‘累乘(连乘)时,变量的初值一定为1 For i=1 To n sum=sum+i prod=prod*i Next i Print sum,prod 例题:统计0—100之间能被3整除的数的个数、累加和及其平均值。 s=0 n=0 For i=0 To 100 If i mod 3 =0 Then s=s+i n=n+1 End If Next i Print 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 [ , n]):在字符串1中查找字符串2,如果找到,返回字符串2的第一个字符在字符串1中出现的位置。首字符位置是可选的,如果不指定,从字符串起始位置开始查找;如果指明,从指定的位置开始查找。 Asc函数:返回字符串中第一个字符的ASCII码。 Chr函数:将一个数值转换为其所对应的字符。 字符的比较规则是按ASCII码顺序比较,规则为空格<”A”~”Z”<”a”~”z”

VB常用算法——查找

VB常考算法(六)查找元素: 1、算法说明 1)顺序查找 逐个元素找,如果有,则记录位置,然后跳出循环;否则,查找失败。 代码如下: Private Sub Search(a(), ByVal key, Index As Integer) Dim i% For i = lound(a) To UBound(a) If a(i) = key Then '找到,将元素下标保存到index中并结束查找 Index = i Exit Sub End If Next i Index = -1 '若没找到,则index值为-1 End Sub 2)二分查找 顺序查找效率低下,当数组有序排列时,可以使用二分法查找提高效率。 算法思路: 代码如下: Private Sub birSearch(a(), ByVal low%, ByVal high%, ByVal key, Index As Integer) Dim mid As Integer

If low > high Then '没有查找到 Index = -1 Exit Sub End If mid = (low + high) / 2 '取查找区间的中点 If key = a(mid) Then '查找到,返回下标 Index = mid Exit Sub ElseIf key < a(mid) Then '查找区间在上半部分 high = mid - 1 Else low = mid + 1 '查找区间在下半部分 End If Call birSearch(a, low, high, key, Index) '递归调用查找函数 End Sub 调用方法: Private Sub Command1_Click() Dim a(11) a(1) = 5: a(2) = 13: a(3) = 19: a(4) = 21: a(5) = 37 a(6) = 56: a(7) = 64: a(8) = 75: a(9) = 80: a(10) = 88: a(11) = 92 Dim ind As Integer Call birSearch(a, LBound(a), UBound(a), 21, ind) Print ind End Sub 2、实战练习 C盘根目录下stu.txt文件中以下的格式保存着学生姓名及班级号信息,本程序的功能是:读取该文件中的数据,在利用inputBox函数输入要查找的学生姓名,通过顺序查找,给出找到或找不到的信息。附图是某同学被找到时显示的信息窗口。 张文,机械01 李明,机械01 王文卉,机械01 … 何宇宙,电子02 代码如下: Option Explicit Option Base 1 Private Sub Form_Click() Dim stu() As String, glass() As String, i As Integer

高中学考选考VB常用算法

程序设计的常用算法 算法(Algorithm):计算机解题的基本思想方法和步骤。算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。通常使用自然语言、结构化流程图、伪代码等来描述算法。 此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意用来表示计数、和、阶乘的变量的初值。 例:用随机函数产生100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数并打印出来。 本题使用数组来处理,用数组a(1 to 100)存放产生的确100个随机整数,数组x(1 to 10)来存放个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数。即个位是1的个数存放在x(1)中,个位是2的个数存放在x(2)中,……个位是0的个数存放在x(10)。 将程序编写在一个GetTJput过程中,代码如下: Public Sub GetTJput() Dim a(1 To 100) As Integer Dim x(1 To 10) As Integer Dim i As Integer, p As Integer '产生100个[0,99]范围内的随机整数,每行10个打印出来 For i = 1 To 100 a(i) = Int(Rnd * 100) If a(i) < 10 Then Form1.Print Space(2); a(i); Else Form1.Print Space(1); a(i); End If If i Mod 10 = 0 Then Form1.Print Next i '统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数,并将统计结果保存在数组x(1),x(2),...,x(10)中,将统计结果打印出来 For i = 1 To 100 p = a(i) Mod 10 ' 求个位上的数字 If p = 0 Then p = 10 x(p) = x(p) + 1 Next i Form1.Print "统计结果" For i = 1 To 10 p = i If i = 10 Then p = 0 Form1.Print "个位数为" + Str(p) + "共" + Str(x(i)) + "个" Next i End Sub 分析:求最大公约数的算法思想:(最小公倍数=两个整数之积/最大公约数) (1) 对于已知两数m,n,使得m>n; (2) m除以n得余数r;

VB常用算法——排序

VB 常考算法(八)排序: 1、算法 1)选择法排序 算法说明:根据上例中求最小值的思路,我们可以使用如下方法进行从小到大排序:第一轮,以第一个元素逐个跟后面的所有元素比较,如果比后面的元素大就进行交换,经过一轮比较,第一个元素被确定为最小;同样的方法,下一轮以第二个元素跟剩下的所有元素进行比较确定下次小的元素;以此类推… 下面我们以图形的形式体现对5个数进行选择排序的过程: 第一轮: 第二轮: 第三轮: 从上图可以发现对5个元素进行排序,总共经过了5-1=4轮,而每一轮中比较的次数也不相同,第一轮2、3、4、5号元素参与跟1号元素的比较,共4次,第二轮3、4、5号元素参与跟2号元素的比较,共3次,以次类推,比较次数逐步减少。经过四轮的比较,利用逐步求最小值的方法将5个数从小到大排好序。对于这样一个排序的过程,我们可以使用两个循环分别控制比较的轮数和每一轮的次数。 程序代码: Private Sub Command1_Click() Dim n As Integer n = InputBox("请输入数组元素的个数:") Dim a() As Integer, i As Integer, j As Integer Print "排序前:" ReDim a(n) For i = 1 To n 62415264152641516425最小值 1642516425146251264512645次小值 1264512465124651246512456

a(i) = Int(Rnd * (99 - 10 + 1) + 10) Print a(i); Next i For i = 1 To n - 1 For j = i To n If a(i) > a(j) Then temp = a(i) '交换元素 a(i) = a(j) a(j) = temp End If Next j Next i Print Print "排序后:" For i = 1 To n Print a(i); Next i End Sub 2)冒泡法排序 算法说明:相邻的元素进行比较,如果前面的元素比后面的元素大,则将它们进行交换,具体思路:设在数组a中存放n个元素,第一轮,将a(1)和a(2)进行比较,若a(1)>a(2),则交换这两个元素的值,然后继续用a(2)和a(3)比较,若a(1)>a(2),则交换这两个元素的值,以此类推,直到a(n-1)和a(n)进行比较处理后,a(n)中就存放了n个数中最大的值;第二轮,用a(1)与a(2),a(2)与a(3),…,a(n-2)与a(n-1)进行比较,处理方法相同,这一轮下来,a(n-1)中存放n个数中第二大的值;…;第n-1轮,a(1)与a(2)进行比较处理,确保最小值在a(1)中。经过n-1轮比较处理,n个数已经按从小到大的顺序排列好。 下面我们以图形的形式体现对5个数进行冒泡排序的过程: 第一轮: 第 第三轮: 第四轮: 最 大值 1 4 5 6 4 1 2 4 1 2 4

VB实验三

实验报告三 实验目的 (1)掌握一维数组(静态、动态)定义及使用 (2)掌握二维数组(静态、动态)定义及使用 (3)掌握“控件数组”的使用 (4)掌握数组相关算法(求最值,排序,查找) (5)通过数组巩固循环及多重循环程序设计 实验内容 【实验1】已知10个数为53、67、42、89、65、18、98、67、54、36,编写程序,使用Array函数存储这10个数并求和。程序运行界面如下图所示。(10分) 掌握一维静态数组的定义及使用 实验结果: 【实验1 代码】 Option Base 1 Private Sub Form_Click() Dim a(), sum% sum = 0 a = Array(53, 67, 42, 89, 65, 18, 98, 67, 54, 36) For i = 1 T o 10 Step 1 sum = sum + a(i) Next i Print "10个数字和为" & sum End Sub 【实验1 典型结果】 【实验2】动态数组声明及输入输出,程序运行界面如下图所示。(10分)掌握动态数组的使用

实验结果: 【实验2 代码】 Private Sub command1_Click() Dim a() As Integer n = 3 ReDim a(n) a(1) = 10 a(2) = 20 a(3) = 30 Print a(1), a(2), a(3) Print "用Redim Preserve a(n)改变数组大小" n = 4 ReDim Preserve a(n) a(4) = 40 Print a(1), a(2), a(3), a(4) End Sub 【实验2 典型结果】 【实验3】编写程序,定义一个二维静态数组,输出下列矩阵并分别计算矩阵两条对角线元素之和。(10分) 程序运行界面如下图所示。 掌握二维数组的定义及使用 实验结果: 【实验3 代码】 Option Explicit Option Base 1 Private Sub Form_Click() Dim a%(5, 5), i%, j%, sum%, n%, s1%, s2% For i = 1 T o 5 For j = 1 T o 5

VB常用算法典型例题及知识点

VB算法例题和解析 常用类型符号: 长整型Long & 整型Integer % 单精度型Single ! 双精度型Double # 字符型String $ 逻辑型Doolean (又称布尔型) VB常用算法: 产生随机数: Int(rnd *(终值-初值+1)+初值) 例:输出10个随机数区间为[80 , 200] For i = 1 to 10 C=int(rnd*121+80) Print c Next i 最大最小值: 最大最小值需要两者比较,所以在做的时候要把随便一个值先定义为最大值和最小值然后用for循环来逐个比较。 Max=a(1) 这里是第一步!将max和min 赋值好用来做下面的判断 Min=a(1) For i = 1 to 10 这里是第二步,判断A(I)的大小 If a(i)>max then max=a(i) If a(i) < min then min = a(i) Next i Print max Print min VB冒泡法 冒泡法是先拿出一个数字,然后一个一个判断过去.如果比他大,就放后面,比他小就放上面。

冒泡法万能代码: For i = n to 2 step -1 For j = 1 to j-1 If a(j)>a(j+1) then ----> 从大到小是 “ < “ 从小到大是 “ > ” T=a(j) a(j)=a(j+1) a(j+1)=T End if Next j Next i VB 素数代码: 素数的定义:除了1和该数本身之外,不能被其他任何整数整除的数。 思路: 1.先定义一个变量F=0 2.做一个循环,判断能不能被除了1和该数本身之外能不能被整除如果可以F 就变成1 3.如果最后F=0那么就是素数就输出它 素数代码模板: N=val(text1) F=0 For i = 2 to sqr(n) ----> sqr(n)也可以换成n-1 ,因为不能被1整除所以要从2开始循环 If n mod i =0 then f=1 Next i If f=0 then print “是素数” 水仙花数 定义:其各个位数的立方等于改数本身 思路:先要知道 个位,十位,百位, 怎么分离,分离出来之后判断 个位:K \ 100 十位:(K \ 10) Mod 10 百位: K Mod 10 输出100-999的水仙花数 代码 For i = 100 to 999 A= i \ 100 B= (i \ 10) Mod 10 C= i Mod 10 If a^3+b^3+c^3 =i then print i Next i 其他算法: 统计字符个数:总复习P292 逆向文字: 总复习 P307 模拟投掷骰子: 总复习 P289 工资扣税问题: 总复习 P 287 这个就是检查除了1和本身之外能不能被整除,如果被整除了。前面的标记F 就变成1 A B C 取出之后他们三个的立方如果等于I 那么就是水仙花数。

相关主题