VB程序设计基础教程第3章

上传人:我*** 文档编号:136517807 上传时间:2020-06-28 格式:PPT 页数:34 大小:1.34MB
返回 下载 相关 举报
VB程序设计基础教程第3章_第1页
第1页 / 共34页
VB程序设计基础教程第3章_第2页
第2页 / 共34页
VB程序设计基础教程第3章_第3页
第3页 / 共34页
VB程序设计基础教程第3章_第4页
第4页 / 共34页
VB程序设计基础教程第3章_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《VB程序设计基础教程第3章》由会员分享,可在线阅读,更多相关《VB程序设计基础教程第3章(34页珍藏版)》请在金锄头文库上搜索。

1、第3章 过程、函数与算法,3.1 过程,Sub过程的定义,3.1.1 Sub过程,Sub过程没有返回值,是在响应事件时执行的代码块。Sub过程用Sub End Sub定义,其格式为: PrivatePublicStaticSub 过程名 (参数表) 语句序列 End Sub 说明: Sub过程定义以Sub开始,以End Sub结束,中间是描述过程功能的语句序列,称为过程体。 Sub前面的Private、Public和Static,用于指定过程或其中定义的变量的有效范围。 过程名与变量的命名规则相同,不能与Visual Basic中的关键字重名,也不能与同级的变量同名。,图3-1 “添加过程”对

2、话框 图3-2 代码编辑窗口,Sub过程的调用,(1)直接使用子程序名调用Sub过程 格式:子程序名 参数1,参数2 直接使用子程序名调用上述Sum子程序如下: Sum a1,b1 (2)使用Call语句调用Sub过程 格式:Call 过程名(参数1,参数2) 注意 参数的个数、数据类型必须与被调用过程的参数一致。 例如,下面是调用Sum子程序的语句: a1 = 5 b1 = 5 Call Sum (a1,b1) 同样在使用Call语句调用时,也可以不带参数,如:Call Sum。,定义Function过程,3.1.2 Function过程,PrivatePublicStaticFunctio

3、n 过程名 (参数表) As 数据类型 语句序列 End Function 说明: Function过程定义以Function开始,以End Function结束,中间是描述过程功能的语句序列,称为过程体或函数体。 Private和Public表示函数是“公用的”还是“私用的”。 参数表的具体形式为: 变量名 As 数据类型 ,变量名 As 数据类型 其中,As 数据类型主要用来表示函数返回值的类型。,图3-3 “添加过程”对话框,Function过程的调用,过程名(参数表) 例如,调用前面定义计算减法的Function过程“add”,可以采用下面的程序: Private Sub Comman

4、d1_Click () Dim z(2) As Single For I = 1 To 2 Z(i)=InputBox(“Enter a value ”,”INPUT BOX”) Next i Sum = add(z(1),z(2) Print ”Sum=”;Sum End Sub,按值传递参数,3.1.3 参数传递,例如: Private Sub Do (ByVal n As Integer) n=n+1 Print 子程序中m的值为 &n End Sub Private Sub Form_Click () Dim m As Integer m=10 Print 调用前m的值为 &m Do

5、m Print 调用后m的值为 &m End Sub,程序执行结果为: 调用前m的值为10 子程序中m的值为11 调用后m的值为10,按地址传递参数,例如,将上面的Do过程修改为: Private Sub Do (n As Integer) n=n+1 Print 子程序中m的值为 &n End Sub Form_Click ()过程保持不变,程序执行结果为: 调用前m的值为10 子程序中m的值为11 调用后m的值为11,3.2 常用内部函数,3.2.1 算术函数,表3-1 常用算术函数,3.2.2 字符串函数,表3-2 常用字符串函数,3.2.3 转换函数,表3-3 转换函数的数据类型,3.

6、2.5 判断函数,表3-5 常见的判断函数,3.3 常用算法,3.3.1 简单算法,例:用随机函数产生100个0,99范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数,并打印出来。 将程序编写在一个GetTJput过程中,代码如下: Public Sub GetTJput() Dim m(1 To 100) As Integer Dim n(1 To 10) As Integer Dim i As Integer, p As Integer 产生100个0,99范围内的随机整数,并以每行10个打印出来,For i = 1 To 100 m(i) = In

7、t(Rnd * 100) If m(i) n; (2)m除以n得余数r; (3)若r =0,则n为求得的最大公约数,算法结束;否则执行(4); (4)mn,nr,再重复执行(2)。 例如,求m = 14,n=6的最大公约数和最小公倍数:,Public Sub Main() m= inputBox(m=) n = inputBox(n=) nm = n*m If m 0) m=n n=r r= m mod n Loop Print 最大公约数=, n Print 最小公倍数=, n*m/n End Sub,3.3.3 判断素数,选择法排序(升序),3.3.4 排序问题,基本思路如下: (1)对有

8、n个数的序列(存放在数组a(n)中),从中选出最小的 数,并与第1个数交换位置; (2)除第1个数外,其余n-1个数中选最小的数,并与第2个数 交换位置; (3)依次类推,选择了n-1次后,这个数列已按升序排列。,程序代码如下: For i = 1 To n - 1 imin = i For j = i + 1 To n If a(imin) a(j) Then imin = j Next j temp = a(i) a(i) = a(imin) a(imin) = temp Next I,冒泡法排序(升序),冒泡法排序是一类依靠“交换”进行排序的方法,其基本思路:将相邻两个数比较,如果前者较

9、大,则将两个数进行交换。 (1)有n个数(存放在数组a(n)中),第一次将每相邻两个数比 较,小的调到前面,经n-1次两两相邻比较后,最大的数 已“沉底”,放在最后一个位置,小数上升“浮起”; (2)第二次对余下的n-1个数(最大的数已“沉底”)按上法比 较,经n-2次两两相邻比较后得次大的数; (3)依次类推,n个数共进行n-1次比较,在第j次中要进行n-j次 两两比较。,程序如下: For i = 1 To n - 1 For j = 1 To n-i If a(j) a(j+1) Then temp=a(j); a(j)=a(j+1); a(j+1)=temp End if Next j

10、 Next i,合并法排序,合并法排序即是将两个有序数组A、B合并成另一个有序的数组C,并按升序排列。 基本思想如下: (1)先在A、B数组中各取第一个元素进行比较,将小的元素放入 C数组; (2)取小的元素所在数组的下一个元素,与另一数组中上次比较 后较大的元素比较,重复上述比较过程,直到某个数组被先排完; (3)将另一个数组剩余元素插入C数组,合并排序完成。,程序如下: Do While ia = UBound(A) And ib = UBound(B) 当A和B数组均未比较完 If A(ia) B(ib) Then C(ic) = A(ia): ia = ia + 1 Else C(ic

11、) = B(ib): ib = ib + 1 End If ic = ic + 1 Loop Do While ia = UBound(A) A数组中的剩余元素抄入C数组 C(ic) = A(ia) ia = ia + 1: ic = ic + 1 Loop Do While ib = UBound(B) B数组中的剩余元素抄入C数组 C(ic) = B(ib) ib = ib + 1 ic = ic + 1 Loop,顺序查找法,3.3.5 查找问题,顺序查找法即是在一列数中查找某数x。第一种方法的基本思想是:一列数放在数组a(1)a(n)中,待查找的数放在x 中,把x与a数组中的元素从头到

12、尾一一进行比较查找。用变量p表示a数组元素下标,p初值为1,使x与a(p)比较,如果x不等于a(p),则使p=p+1,不断重复这个过程;一旦x等于a(p)则退出循环。另外,如果p大于数组长度,循环也应该停止。这个过程可由如下语句实现: p = 1 Do While x a(p) And p = n p = p + 1 Loop,下面写一查找函数Find,若找到则返回下标值,找不到则返回0: Option Base 1 Private Function Find( a( ) As Single,x As Single) As Integer Dim n%,p% N = Ubound( a ) p

13、 = 1 Do While x a(p) And p n then p=0 Find=p End Function,另一种方法的基本思想是:一列数放在数组a(1)a(n)中,待查找的关键值为key,把key与a数组中的元素从头到尾一一进行比较查找,若相同,则查找成功,若找不到,则查找失败。其查找子过程如下(Index为存放找到元素的下标): Public Sub Search(a() As Variant, key As Variant, index%) Dim i% For i = LBound(a) To UBound(a) If key = a(i) Then index = i Exi

14、t Sub End If Next i index = -1 End Sub,折半查找法,折半查找法只能对有序数列进行查找。 基本思想:设n个有序数(从小到大)存放在数组a(1)a(n)中,要查找的数为x。用变量bot、top、mid 分别表示查找数据范围的底部(数组下界)、顶部(数组的上界)和中间,mid=(top+bot)/2,折半查找的算法如下: (1)x=a(mid),则已找到退出循环,否则进行下面的判断; (2)xa(mid),x必定落在mid+1和top的范围之内,即bot=mid+1; (4)在确定了新的查找范围后,重复进行以上比较,直到找到或者bot=top。 将上面的算法写成

15、如下函数,若找到则返回该数所在的下标值,没找到则返回-1。,Function search(a() As Integer, x As Integer) As Integer Dim bot%, top%, mid% Dim find As Boolean /代表是否找到/ bot = LBound(a) top = UBound(a) find = False /判断是否找到的逻辑变量,初值为False/ Do While bot = top And Not find mid = (top + bot) 2 If x = a(mid) Then find = True Exit Do Else

16、If x a(mid) Then top = mid - 1 Else bot = mid + 1 End If Loop If find Then search = mid Else search = -1 End If End Function,3.3.6 递归算法,用自身的结构来描述自身,称递归。VB允许在一个Sub子过程和Function过程的定义内部调用自己,即递归Sub子过程和递归Function函数。递归处理一般用栈来实现,每调用一次自身,把当前参数压栈,直到递归结束。然后从栈中弹出当前参数,直到栈空。,例如,编Sum(n)=n! 的递归函数: Function Sum (n As Integer) As Integer If n =

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号