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

上传人:飞*** 文档编号:5186699 上传时间:2017-08-06 格式:PPT 页数:34 大小:1.74MB
返回 下载 相关 举报
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过程,PrivatePublicStaticFunction 过程名 (参

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

4、m 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=”;SumEnd Sub,按值传递参数,3.1.3 参数传递,例如:Private Sub Do (ByVal n As Integer) n=n+1 Print 子程序中m的值为 &nEnd SubPrivate Sub Form_Click () Dim m As Integer m=10 Print 调用前m的值为 &m Do m Print 调用后m的值为 &m

5、End Sub,程序执行结果为:调用前m的值为10子程序中m的值为11调用后m的值为10,按地址传递参数,例如,将上面的Do过程修改为:Private Sub Do (n As Integer) n=n+1 Print 子程序中m的值为 &nEnd SubForm_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.2.5 判断函数,表3-5 常见的判断函数,3.3 常用

6、算法,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 IntegerDim n(1 To 10) As IntegerDim i As Integer, p As Integer产生100个0,99范围内的随机整数,并以每行10个打印出来,For i = 1 To 100 m(i) = Int(Rnd * 100) If m(i) n;(2)m除以n得余数r

7、;(3)若r =0,则n为求得的最大公约数,算法结束;否则执行(4);(4)mn,nr,再重复执行(2)。例如,求m = 14,n=6的最大公约数和最小公倍数:,Public Sub Main()m= inputBox(m=)n = inputBox(n=)nm = n*mIf m n Then t = m: m = n: n = tR = m mod nDo While (r 0) m=n n=r r= m mod nLoopPrint 最大公约数=, n Print 最小公倍数=, n*m/nEnd 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 - 1imin = iFor j = i + 1 To n If a(imin) a(j) Then imin = jNext jtemp = a(i)a(i) = a(imin)a(imin) = tempNext 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 - 1For 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 ifNext jNext i,合并法排序,

10、合并法排序即是将两个有序数组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 + 1Else C(ic) = B(ib): ib = ib + 1

11、End If ic = ic + 1LoopDo While ia = UBound(A) A数组中的剩余元素抄入C数组 C(ic) = A(ia) ia = ia + 1: ic = ic + 1LoopDo While ib = UBound(B) B数组中的剩余元素抄入C数组 C(ic) = B(ib) ib = ib + 1 ic = ic + 1Loop,顺序查找法,3.3.5 查找问题,顺序查找法即是在一列数中查找某数x。第一种方法的基本思想是:一列数放在数组a(1)a(n)中,待查找的数放在x 中,把x与a数组中的元素从头到尾一一进行比较查找。用变量p表示a数组元素下标,p初值为

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

13、p=0 Find=pEnd 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 Exit Sub End IfNext iindex = -1End 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。 将上面的算法写成如下函数,若找到则返回该数所在的下标值,没找到则返回-1。,

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

当前位置:首页 > 商业/管理/HR > 其它文档

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