VB程序设计的常用算法

更新时间:2023-11-17 17:42:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

VB常用算法

《VB程序设计》上机考点与常用算法

算法:计算机解题的基本思想方法和步骤。算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。 四川省二级考纲:常用算法程序设计

1.初等数论问题求解的有关算法(求最小公倍数、最大公约数、素数)

2.递推化算法(迭代、累加、累乘、穷举)(迭代略,穷举简介) 3.方程求根(二分法)(略) 4.排序算法(选择法、冒泡法) 5.查找(顺序法、折半法) 6.有序数列的插入、删除操作 7.进制转换和简单的加密解密算法 8.简单的递归过程(略)

国家二级考纲:常用算法程序设计

1、初等数论问题求解的有关算法(求最大公约数,最小公倍数,素数); 2、递推化算法(迭代,累加,累乖,穷举法); 3、方程求根(二分法);

4、排序算法(选择法,冒泡法); 5、查找(顺序法,折半法); 6、有序数列的插入、删除操作; 7、简单的递归过程。

与四川省考纲比较,没有7.进制转换和简单的加密解密算

以下对省大纲要求分别举例:

一、初等数论问题求解的有关算法(求最小公倍数、最大公约数、素数)

(一)、求两个整数的最大公约数、最小公倍数

求最大公约数的算法思想:(最小公倍数=两个整数之积/最大公约数)

(1) 对于已知两数m,n,使得m>n; (2) m除以n得余数r;

- 1 -

VB常用算法

(3) 若r=0,则n为求得的最大公约数,算法结束;否则执行(4); (4) m←n,n←r,再重复执行(2)。

求最小公倍数的算法思想:最小公倍数=两个整数之积/最大公约数

主要代码:

m=inputBox(\

n=inputBox(\

nm=n*m ‘先求出nm=n*m,求最小公倍数时使用 If m < n Then t = m: m = n: n = t ?如果m < n,则m、n两数交换 r=m mod n ‘m、n取模,即取余 Do While (r <> 0) ‘直到r为0 m=n n=r r= m mod n Loop

Print \最大公约数=\

Print \最小公倍数=\

(二)、判断素数

素数:素数是一个大于2,且不能被1和本身以外的整数整除的整数。

算法思路:素数指除了能被1和自身外,不能被其他整数整除的自然数。判断整数m是不是素数的基本方法是:将N分别除以2,3,…,N-1,若都不能整除,则m为素数。 求100以内的素数(代码1:使用标志变量): Dim i%, m%, tag As Boolean ?tag是标志变量 j = 0

Print

For m = 3 To 100 tag = True

For i = 2 To m - 1

If (m Mod i) = 0 Then tag = False 'm能被i整除,该m不是素数 Next i

If tag Then

Print m; \ \ 'm不能被i=2~m-1整除,m是素数,显示 j = j + 1

If j = 10 Then j = 0: Print '显示10个素数后提行 End If Next m

求100以内的素数(代码2:使用GOTO语句子): Dim i%, m%, j% j = 0

- 2 -

VB常用算法

Print

For m = 3 To 100

For i = 2 To m - 1

If (m Mod i) = 0 Then GoTo NotNextM Next i

Print m; \ \ j = j + 1

If j = 10 Then j = 0: Print '显示10个素数后提行 NotNextM:

Next m

若n是一定任意指定的数,要求该数范围内的素数,则程序开始一般应有: m =val( InputBox(\请输入一个数\ 获取这个指定数,后面的代码同。

因为N=Sqr(N)*Sqr(N),所以,当N能被大于等于Sqr(N)的整数整除时,一定存在一个小于等于Sqr(N)的整数,使N能被它整除,因此只要判断N能否被2,3,…,Sqr(N)整除即可。 求100以内的素数(代码3:对标志变量法的改进): Dim i%, m%, tag As Boolean ?tag是标志变量 j = 0 Print

For m = 3 To 100

tag = True

For i = 2 To Int(Sqr(m))

If (m Mod i) = 0 Then tag = False 'm能被i整除,该m不是素数 Next i

If tag Then

Print m; \ \ 'm不能被i=2~m-1整除,m是素数,显示 j = j + 1

If j = 10 Then j = 0: Print '显示10个素数后提行 End If

Next m

求100以内的素数(代码4:对使用GOTO语句的改进) Dim i%, m%, j%

j = 0 Print

For m = 3 To 100

For i = 2 To Int(Sqr(m))

If (m Mod i) = 0 Then GoTo NotNextM

- 3 -

Next i

Print m; \ \j = j + 1

If j = 10 Then j = 0: Print '显示10个素数后提行

NotNextM:

VB常用算法

Next m

若将简单变量换成数组 Option Base 1

Dim a(20) As Integer

Private Sub Command1_Click() Dim i% Randomize Text1 = \― Text2 = \For i = 1 To 20

a(i) = Int(Rnd * 901 + 100) '产生随时机 Text1 = Text1 + Str(a(i)) & \ “ '连接到文本框1

For j = 2 To a(i) – 1 '判断素数 If a(i) Mod j = 0 Then GoTo abc

Next j

Text2 = Text2 & a(i) & \“ '连接到文本框1 abc: Next i End Sub

实例:编程:(程序存盘文件名sy6-3.vbp、sy6-3.frm) 程序运行界面如下图所示:

在窗口中有两个文本框和一个按钮。当单击“随机产生并查找素数”按钮时,在text1中随机产生20个100~ 1000之间的整数,同时在text2中显示出这20个整数中的所有素数。 参考程序:

Private Sub Command1_Click() Dim m As Integer

Randomize Text1 = \ Text2 = \ For i = 1 To 20

m = Int(Rnd * 901) + 100 '产生随时机数

Text1 = Text1 + Str(m) '将产生的随机数转换为字符后连接到文本框1

- 4 -

VB常用算法

For j = 2 To m - 1 '判断素数 If (m Mod j = 0) Then GoTo abc Next j

Text2 = Text2 & m & \ '连接到文本框2 abc:

Next i

End Sub补充实例:验证哥德巴赫猜想

(任意一个大于等于6的偶数都可以分解为两个素数之和)

基本思想:n为大于等于6的任一偶数,可分解为n1和n2两个数,分别检查n1和n2是否

为素数,如都是,则为一组解。如n1不是素数,就不必再检查n2是否素数。先从n1=3开始,检验n1和n2(n2=N-n1)是否素数。然后使n1+2 再检验n1、n2是否素数,… 直到n1=n/2为止。

利用上面的prime函数,验证哥德巴赫猜想的程序代码如下: Dim n%,n1%,n2%

n=Val(InputBox(\输入大于6的正整数\ For n1=3 to n\\2 step 2 n2=n-n1

If prime(n1) Then If prime(n2) then

Print n & \

Exit For '结束循环 End if End if Next n1

二、递推化算法(迭代、累加、累乘、穷举)

(一)、计数、求和、求阶乘等简单算法

此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意用来表示计数、和、阶乘的变量的初值。

1、简单的累加、连乘

例1:求1~100的5或7的倍数的和

Sum = 0

For i = 1 To 100

If i Mod 5 = 0 Or i Mod 7 = 0 Then

Sum = Sum + i

End If

- 5 -

本文来源:https://www.bwwdw.com/article/1r2v.html

Top