vb子程序和函数

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(2)形式参数列表:形式参数通常简称“形参”,仅表示 形参的类型、个数、位置,定义时是无值的,只有在过程被 调用时,虚实参结合后才获得相应的值。
(3)过程可以无形式参数,但括号不能省。
(4)参数的定义形式: [ByVal|ByRef]变量名[( )][As 类型][,…],
ByVal表示当该过程被调用时,参数是按值传递的;缺省或
1 子过程的调用 子过程名 [参数列表] 或 Call 子过程名(参数列表)
2 函数过程的调用
变量名 = 函数过程名([参数列表]) 说明:
(1)参数列表称为实参或实元,它必须与形参保持个数相 同,位置与类型一一对应。
(2)调用时把实参值传递给对应的形参。其中值传递(形 参前有ByVal说明)时实参的值不随形参的值变化而改变。而 地址传递时实参的值随形参值的改变而改变。
(3)当参数是数组时,形参与实参在参数声明时应省略
其维数,但括号不能省。 (4)调用子过程的形式有两种,用Call关键字时,实参 必须加圆括号括起,反之则实参之间用“,”分隔。 例:调用上面定义的Sawp子过程的形式:
Swap a,b
Call Swap(a,b)
过程调用的执行过程:
Private Sub CmdOK() …… Call Swap(a,b) …… Swap a,b
1.把一个数组的全部元素传送给一个过程,应将数组名分 别写入形参列表中,并略去数组的上下界,但括号不能省 略。 Private Sub Sort( a() As single) …… End Sub 其中形参“a( )”即为数组。
2.被调过程可通过Lbound和Ubound函数确定实参数组的 上、下界。 3.当用数组作形参时,对应的实参必须也是数组,且类型 一致。 4.实参和形参结合是按地址传递,即形参数组和实参数组 共用一段内存单元。 例如:定义了实参数组b(1 to 8),给它们赋了值,调用Sort() 函数过程的形式如下:
Private Sub Swap(x%,y%) Dim temp% Temp=X X=Y
Y=Temp
End Sub
End Sub
8.3 Function过程
Visual Basic函数分为内部函数和外部函数,外部函数 是用户根据需要用Function关键字定义的函数过程,与子
过程不同的是函数过程将返回一个值 。
说明:
(1)函数名:命名规则与变量名规则相同。但不能与系统的 内部函数或其它通用子过程同名,也不能与已定义的全局变 量和本模块中模块级变量同名。 (2)在函数体内,函数名可以当变量使用,函数的返回值就 是通过对函数名的赋值语句来实现的,在函数过程中至少要 对函数名赋值一次。 (3)AS类型:是指函数返回值的类型,若省略,则函数返 回变体类型值(Variant)。 (4)Exit Function:表示退出函数过程,常常是与选择结构 (If或Select Case语句)联用,即当满足一定条件时,退出函 数过程。 (5)形参数列表:形参的定义与子过程完全相同。 例6.2
8.7 过程的嵌套和递归调用
8.7.1 过程的嵌套
在程序中调用一子过程,而在子过程中又调用另外的子过 程,这种程序结构称为过程的嵌套。过程的嵌套调用执行过 程如下图:
8.7.2 过程的递归调用
用自身的结构来描述自身,称递归。例如,对阶乘的定义:
按过程的作用范围来划分,过程可分为:
模块级过程 全局级过程
1、窗体/模块级过程:
加Private关键字的过程,只能被定义的窗体或模 块中 的过程调用。 2、全局级过程: 加Public关键字(或缺省)的过程,可供该应用程序的 所有窗体和所有标准模块中的过程调用。 用例7.1来说明过程的作用域
ByRef表示当该过程被调用时,参数是按地址传递的。
例8.1编一个交换两个整型变量值的子过程。 Private Sub Swap( X As Integer, Y As Integer) Dim temp As Integer Temp=X : X=Y : Y=Temp End Sub
8.2.3 子过程的建立
补充例题2:排序子过程
选择法排序(升序)的VB程序:
For i = 1 To n - 1 p = i For j = i + 1 To n If a(p) > a(j) Then p = j Next j temp = a(i) a(i) = a(p) a(p) = temp Next i 如何写一个排序的VB过程?
8.3.2 函数的调用
调用形式如下: 函数名(实参列表) 说明: 在调用时实参和形参的数据类型、顺序、个数必须匹
配。函数调用只能出现在表达式中,其功能是求得函数 的返回值。
8.4 过程的作用域
概念
[Public|Private] Sub 子过程名([形式参数列表]) ….. End Sub 通用子过程和函数过程既可写在窗体模块中也可写在 标准模块中,在定义时可选用关键字Private(局部)和 Public(全局),来决定它们能被调用的范围。
Private Sub Sort( a( ) As single) Dim i%,j%,p%,n%,temp! n=Ubound(a) For i = 1 To n - 1 p = i For j = i + 1 To n If a(p) > a(j) Then p = j Next j temp = a(i) a(i) = a(p) a(p) = temp Next I End Sub
注意:如果实参是常量(系统常量、符号常量)或者表达 式,则无论定义时使用值传递还是地址传递,都是按值传 递将常量或者表达式的计算值传递给形参。
8.6 高级用法(数组做为参数)
Visual Basic允许把数组作为实参传送到过程中。数组作 参数是通过传地址方式传送。在传送数组时,除遵守参数 传送的一般规则外,还应注意以下几点:
Print "A1="; a, "B1="; b
a = 10: b = 20: Swap2 a, b Print "A2="; a, "B2="; b End Sub
程序调用执行过程:
值传递的执行过程如下图:
通过地址传递数据的执行过程
数据传递的几点说明: 1.参数的数据类型 2.按值传递参数 形参是实参的一个副本 3.按地址传递参数 形参实参公用内存单元 4.子过程执行一系列操作,函数过程返回一个值
Sort b() 或 Call Sort(b() )
实参数组后面的括号可以省略,但为便于阅读,建议一般 不要省略为好。
调用时形参数组a和实参数组b虚实结合,共用一段内存单元,
如下所示。因此在Sort()过程中改变数组a的各元素值,也就
相当于改变了实参数组b中对应的元素的值,当调用结束时, 形参数组a成为无定义。
2、实际参数 实际参数是指在调用Sub或Function过程时,写入子过程 名或函数名后括号内的参数,其作用是将它们的数据(数值 或地址)传送给Sub或Function过程与其对应的形参变量。
实参可由常量、表达式、有效的变量名、数组名(后加左、 右括号,如A())组成,实参表中各参数用逗号分隔。
8.5.2 参数传递(虚实结合)
补充例题: 编写判断一个整数是不是素数写函数过程。 如果给定的整数是素数,则返回逻辑值True,否则返回False
Private Function Prime(n As Integer) As Boolean Dim k%,Yes As Boolean Yes=True For k=2 to n\2 IF n mod k =0 then Yes=False : Exit For Next k Prime=Yes ‘ 给函数名赋值,作为函的返回值 End Function
第八章
8.1 子程序概述
子程序和函数
在VB5.0/6.0中,除了系统提供的内部函数过 程和事件过程外,用户可自定义过程下列四种过 程: ▲ “Sub” 保留字开始的为子过程 ▲“Function” 保留字开始的为函数过程 “Property”保留字开始的为属性过程 “Event”保留字开始的事件过程
响Baidu Nhomakorabea参的值。
例8.4
Sub Swap1(ByVal x%, ByVal y%) Dim Temp%
Temp = x: x = y: y = Temp
End Sub
Sub Swap2(x%, y%) Dim Temp% Temp = x: x = y: y = Temp
End Sub
Private Sub CmdOK_Click() a% = 10: b% = 20: Swap1 a, b „传 值 '传地址
b(1) a(1)
b(2) a(2)
b(3) a(3)
b(4) a(4)
b(5) a(5)
b(6) a(6)
b(7) a(7)
b(8) a(8)
参数为数组时虚实结合示意图 例6.7 改写上章例5.3的排序程序,分别将排序用子过程 Sort(),产生N个随机整数用子过程GetData(),输入N个数组 元素用PrData()子过程来完成。
如何调用该函数呢?
使用该函数,编一验证哥德巴赫猜想。
Private Sub Form_Click() Dim n%,n1%,n2% n=Val(InputBox("输入大于6的正整数")) For n1=3 to n\2 step 2 ' 让n1从3开始分解 n2=n-n1 ' 求得n2 „ 如果n1和n2都是素数,则打印输出 If prime(n1) And prime(n2) then Print n & "=" & n1 & "+" & n2 Exit For ' 结束循环 End if Next n1 End Sub
8.2 Sub过程
在VB中,的Sub子过程分为:事件过程和通用过程
8.2.1 事件过程 (1)窗体事件的语法 Private Sub Form_事件名(参数列表) <语句组> End Sub (2)控件事件的语法 Private Sub 控件名_事件名(参数列表) <语句组> End Sub
8.2.2 通用过程(Sub过程)的定义
子过程的定义形式如下: [Public|Private][Static] Sub 子过程名([形参表])
<局部变量或常数定义> <语句组> [Exit Sub]
<语句组> End Sub
说明:
(1)子过程名:命名规则与变量名规则相同。子过程名不 返回值,而是通过形参与实参的传递得到结果,调用时可 返回多个值。
总结归纳过程的定义及作用域如下表(教材Pg.163)
8.5 过程之间参数的传递
Visual Basic中不同模块(过程)之间数据的传递有两种 方式:
通过过程调用实参与形参的结合实现;
使用全局变量来实现各过程中共享数据。
8.5.1 形式参数与实际参数
1、形式参数 是指在定义通用过程时,出现在Sub或Function语句中 的变量名后面园括号内的数,是用来接收传送给子过程的 数据,形参表中的各个变量之间用逗号分隔。
参数传递指主调过程的实参(调用时已有确定值和内存
地址的参数)传递给被调过程的形参,参数的传递有两种方 式:按值传递、按地址传递。形参前加“ByVal”关键字的 是按值传递,缺省或加“ByRef”关键字的为按地址传递。
传址与传值
传址: 形参得到的是实参的地址,当形参值的改变同 时也改变实参的值。
传值: 形参得到的是实参的值,形参值的改变不会影
通过 “工具”菜单中的“添加过程”命令,出现“添加过 程”对话框(见图6.1),选择过程类型(子过程、函数、属
性、事件)及作用范围(公有的Public、私有的Private), 单击确定后得到一个过程或函数定义的结构框架(模板), 如:
Public Sub Sort( ) ……
End Sub
8.2.4 过程的调用
8.3.1 函数过程(Function过程)的定义
[Public|Private][Static]Function 函数名([<参 数列表>])[As<类型>] <局部变量或常数定义> <语句块> 函数体[函数名=返回值] 函数体 [Exit Function] <语句块> [函数名=返回值] End Function
相关文档
最新文档