第7章VB过程和参数传递
第7章VB过程和参数传递

VB程序设计教程
沈美莉 马银晓 陈孟建 编著
10
Function过程 第二节 Function过程
二、调用Function过程 调用 过程
Function过程的调用比较简单,可以象一个函数一样调用,其调用格式为: <过程名> = ([<实参表列>]) 【例题5.16】 编写一个求最大公约数(GCD)的函数过程,并调用该函数。 【程序代码】 (1)创建GCD函数 Function gcd(ByVal x As Integer, ByVal y As Integer) As Integer Dim reminder As Integer Do While y <> 0 reminder = x Mod y x = y y = reminder Loop gcd = x End Function
VB程序设计教程
沈美莉 马银晓 陈孟建 编著
5
Sub过程 第一节 Sub过程
二、调用sub过程 调用 过程 调用Sub过程有两种方法,一种方法是使用Call调用过程语句来调 用过程,另一种方法是将过程名作为一个语句来使用。 call调用语句 1.用call调用语句 (1)格式 Call 过程名 [(<实参表>)] (2)功能 Call语句把程序控制传递到一个Visual Basic语言的Sub过程。 Call语句调用一个过程时,如果过程本身没有参数,则<实参表> 和括号可以省略;否则,应给出相应的实际参数,并把参数放在 括号中。实际参数是传递给sub过程的变量或常数的。 例如: Call ppa(a,b)
VB程序设计教程
沈美莉 马银晓 陈孟建 编著
18
第三节 参数的传递
例如: Function fac(a,b) …… …… fac = fa End Function 调用fac函数时,可以使用以下语句来完成: Private Sub Command1_Click() …… …… Call fac(x,y) End sub 以上程序中的a和b是两个形式参数,而 x和y是两个实际参数。这样就完成了形参 与实参的结合,其关系如下图所示。
VB向过程传递参数

在未提供某个可选参数时,实际上将该参数作为具有 Empty 值的变体来赋值。上例说明如何用 IsMissing 函数测试丢失的可选参数。
提供可选参数的缺省值
也可以给可选参数指定缺省值。在下例中,如果未将可选参数传递到函数过程,则返回一个缺省值。
Sub ListText(x As String, Optional y As _
End Sub
Private Sub Command1_Click ()
Sum 1, 3, 5, 7, 8
List1.AddItem intSum
End Sub
用命名的参数创建简单语句
对许多内建函数、语句和方法,Visual Basic 提供了命名参数方法来快捷传递参数值。对命名参数,通过给命名参数赋值,就可按任意次序提供任意多参数。为此,键入命名参数,其后为冒号、等号和值 (MyArgument := "SomeValue") ,可以按任意次序安排这些赋值,它们之间用逗号分开。注意,下例中的参数顺序和所要参数的顺序相反:
把变量转换成表达式的最简单的方法就是把它放在括号内。例如,为了把声明为整数的变量传递给过程,该过程以字符串为参数,则可以用下面的语句:
Sub CallingProcedure ()
Dim intX As Integer
intX = 12 * 3
Foo (intX)
End Sub
Function ListText (strName As String, Optional strAddress As String)
List1.AddItem strName
List2.AddItem strAddress
vb过程间参数的传递

一、形式参数与实际参数1 形式参数:就是在定义函数或过程的时候命名的参数。
通俗讲就是一个记号。
2 实际参数:就是在执行时,调用函数或过程时,传递给函数或过程的参数。
通俗讲就是实际值。
3 参数嘛,就是一个可变量,它随着使用者的不同而发生变化。
举个例子,在中学的时候学过sin(x)函数,这里的x就是形式参数,当你需要求1的正弦值时,你会使用sin(1),这里的1就是实际参数。
4 形参和实参间的关系:两者是在调用的时候进行结合的,通常实参会将取值传递给形参,形参去之后进行函数过程运算,然后可能将某些值经过参数或函数符号返回给调用者。
在过程之间传递参数,形式参数和实际参数是很重要的概念。
我们通常说形式参数是过程为了运行的需要预先在内存中保留的地址单元,而实际参数就是在调用过程时放入这些内存地址中进行处理的数据。
如果形式参数是一个盒子,那么实际参数就是盒子里面装的东西。
在参数传递的过程中,形式参数和实际参数的数据类型要一致。
二、参数传递函数参数的传递方式有两种,一种是按地址传递,一种是按值传递。
按地址传递:调用函数时,不直接把实参的值“告诉”函数,而是把地址“告诉”它,函数根据这个地址来寻找并处理值,如果函数修改了这个值,也就修改了这个地址对应的值。
按值传递:把值复制一份再给函数,这个值只属于函数,函数对这个值的修改不影响原值。
VBScript中,要按地址传递可在形参前加ByRef,要按值传递得在形参前加 ByVal,如果什么也不加则表示按地址传递。
1) 按值传递如果在声明过程时,形式参数名前面加上关键字“ByVal”,即规定了在调用此过程时该参数是按值传递的。
按值传递参数时,传递的只是变量的副本。
如果过程改变了这个值,则所做的改动只影响副本而不会影响变量本身。
代码1**********************************Private Sub Command1_Click()Dim num1 As Integernum1 = 5Print num1Call MySub(num1)Print num1 '输出结果为5Call MySub2(num1)Print num1 ' 输出结果仍为5End SubPrivate Sub MySub(ByVal A As Integer)A = 10End SubPrivate Sub MySub2(ByVal A As String)A = "abc"End Sub**********************************如果过程中的形式参数设定为按值传递,就不要求调用时相应实参数的类型必须与其一致,只要实参数的值能够转换为形参的类型即可。
《VB程序设计》课程标准

课程标准课程名称:Visual Basic程序设计学时学分:160(2)专业层次:微机制订日期:2012年9月归口单位:计算机工程系制订人:Visual Basic程序设计是一个理论和实际紧密相连的技术,上机实验是教学中的必要环节。
现提出一套可行的“Visual Basic程序设计”课程的课程标准。
1 课程概述●课程研究的对象和研究内容随着计算机的普及和以Internet为代表的信息高速公路的迅速发展,计算机应用已深入到社会的各行各业,这不仅要求当今的大学生要掌握好本专业知识,同时还要有用计算机技术为本专业服务的能力。
因此熟练掌握一种计算机应用软件开发工具是对大学生的基本要求,这将直接影响到计算机在其他专业领域中的应用。
本课程所讲授的Visual Basic即是一种易学实用、适用面广的面向对象的软件开发平台。
VB程序设计课程可以使学生掌握软件设计的基础知识和基本方法,培养学生具有利用软件开发环境解决实际问题的能力,为进一步学习其它计算机知识及今后使用或开发应用程序奠定基础。
●课程在整个课程体系中的地位“Visual Basic程序设计”属于计算机基础教育课程的三个层次“文化、技术、应用”中的第二层次,是微机高职专业学生必修的计算机技术基础课程。
它的先修课是《信息技术基础》。
2. 课程目标(1)使学生理解程序设计的基本概念,建立起程序设计的基本思路,提高学生的理论知识水平。
主要包括了算法的概念、程序设计中的基本技巧和一些常用算法;能够阅读、理解源程序和设计解题流程的能力;了解结构化程序设计和面向对象程序设计的思想,能编制出风格良好的程序;最后达到使用Visual Basic 建立一个小型的应用系统的目的。
(2)使学生掌握基本的程序设计的技术和方法,培养学生的实际动手能力。
这些技术和方法包括算法的设计,程序的实现,能够使用Visual Basic建立一个小型的应用系统。
(3)使学生了解程序设计在本专业的应用、发展及其趋势,培养学生的科研素质。
VB课件7.1

(6)在Function过程内部不得再定义Sub过程 或Function过程,即不可嵌套定义。
Function过程添加
例:编写一个Function过程total,实现对一维数组元素的求和
函数名为total
Public Function total(a() As Integer) As Long Dim i As Integer 函数的返 回值类型 For i = 1 To UBound(a) 为long 函数体 total = total + a(i) Next i 函数名=表达式 End Function
过程体
7.2 Function过程
1999—2001
Function过程定义
[Privatel| Public] [Static] Function 函数名 ([ 参数 列表]) [AS数据类型] [局部变量和常数声明] [语句块]
[函数名 = 表达式]
[Exit Function] [语句块] [函数名 = 表达式] End Function
若有多个参数时,各参数之间用逗号分隔;
VB的过程可以没有参数,但一对圆括号不可以省略。 不含参数的过程称为无参过程。 形参格式为: [ ByVal ] 变量名[()] [As 数据类型] ByVal:表明其后的形参是按值传递参数. ByRef:表明其后的形参是按地址传递参数 若形参前缺省ByVal和ByRef时,指的是按地址传 递.
3)控件事件过程
语法:Private Sub 控件名_事件名([参数列表]) [局部变量和常数声明] 语句块 End Sub
例:Private Sub command1_click() Msgbox(“you click the command button”) End Sub
vb 参数传递规则

程序分析
按值传递 ( Byval )
实参a: 实参 :
5
输出结果: 输出结果: 25 100
形参x: 形参 :
5
25
125 5 100
按地址传递 (缺省修饰符) 缺省修饰符)
实参b: 实参 :
10
形参y: 形参 :
100
4、如何判断参数传递方式
a、按值传递 、
形参声明处修饰符是“Byval” 形参声明处修饰符是“ 形参声明处修饰符是 如果实参是一个常量或表达式,尽管形参声明为 如果实参是一个常量或表达式 如果实参是一个常量或表达式, 按地址传递,实际还是按值传递。 按地址传递,实际还是按值传递。
第一次调用分析
被调用过程: 被调用过程: Sub p(a As Integer,
实参x: 实参 :
4
ByVal b As Integer) b = a + b a = b Mod 4
形参b: 形参 :
4 9
Print a , b End Sub
实参y: 实参 :
输出结果: 输出结果: 5 1 1 4 9 1
举例说明
主过程: 主过程: Sub Form_Click () Dim a As Integer Dim b As Integer a = 5 : b = 10 Call p(a, b) Print a , b End Sub 被调用过程: 被调用过程: Sub p(Byval x As Integer, y As Integer) x=x*x y=y*y Print x , y Print x + y End Sub
参数传递规则
1、过程调用的复习
主过程: 主过程: Sub Form_Click () Dim a As Integer Dim b As Integer a = 5 : b = 10 Call max(a, b) End Sub 被调用过程: 被调用过程 Sub max(Byval x As Integer, y As Integer) If x >= y Then Print x Else Print y End If End Sub
最新VB教程 07 第七章

授课教师:赵海燕 2010年10--12月
第7章 数组与自定义数据类型
2
数组 7.1 数组概述
数组是变量的扩展,一个数组可以存储多个值,通过数组名和下
标对这些值进行存取。 1.数组的优点
与变量相比,数组有以下优点:
(1)数组能够保存多个值; (2)数组可与循环语句配合实现复杂算法; (3)数组可作通用过程的参数,传递大量的值; (4)数组可作函数过程的返回值,可返回大量的值; (5)数组常用来表示与一维、二维、三维空间分布相关的数据,非常 直观; (5)动态数组可根据需要开辟内存空间,优化程序、提高效率。
打开【例7.2】
14
7.3 动态数组
当在编程时不能预料应该为数组定义多少个元素时,可以使用Visual Basic提供的动态数组。动态数组的维数和下标上下界可以在程序运行
过程中改变。
1, 定义动态数组
定义动态数组的的语法结构与定义常规数组相似,只是括号是空
的: Public|Private|Dim|Static动态数组名( )[As数据类型名] 定义语句确定了动态数组的名称、作用域和数据类型。在使用
10
多维数组
多维数组是指三维或三维以上的数组,是在一维和二维概念上的扩展。多维数 组的定义、元素的访问方式与一维和二维数组类似。 【例】下面定义的是2个多维数组。 Dim a(3,3,4) As Integer ' 3维数组 Dim b(1 To 10,-4 To 5, 10,20) As Single ' 4维数组
m为下标下界,n为下标上界。m和n必须为整型常量,可以
是负值,并要求m≤n。
5
(2)只指定下标上界,由Option Base语句指定下标下界: Dima(n)As... 在模块“代码”窗口顶部的声明段中使用以下语句定义下标下界是0或 1: Option Base0|1 使用“0”时,上界n必须是非负整数常量,使用“1”时,上界n必须是 正整数常量。如果没使用Option Base语句,默认为0。
VB6教程第7章 数组

浙江蜗牛网络-VB论坛:/cto.asp 说明: 说明: (1)"说明符"为保留字,可以为Dim,Public, 说明符"为保留字,可以为Dim,Public, Private,Static中的任意一个. Private,Static中的任意一个.在使用过程中可以根据 中的任意一个 实际情况进行选用.本章主要讲述用Dim声明数组 声明数组, 实际情况进行选用.本章主要讲述用Dim声明数组, 其它参数的意义在8.4节介绍 定义数组后, 节介绍. 其它参数的意义在8.4节介绍.定义数组后,数值数组 中的全部元素都初始化为0 中的全部元素都初始化为0,字符串数组中的全部元素 都初始化为空字符串. 都初始化为空字符串. (2)"数组名"的命名遵守标识符规则. 数组名"的命名遵守标识符规则. (3)"下标"的一般形式为"[下界 to] 上界". 下标"的一般形式为" 上界" 下标的上界,下界为整数,不得超过Long数据类型的 下标的上界,下界为整数,不得超过Long数据类型的 范围,并且下界应该小于上界.如果不指定下界, 范围,并且下界应该小于上界.如果不指定下界,下 界默认为0 界默认为0.
浙江蜗牛网络-VB论坛:/cto.asp
第7章 数组
从存储角度看,前面使用的变量都是相互独立的, 从存储角度看 , 前面使用的变量都是相互独立的 , 无关的,通常称它们为简单变量.但如果处理将200个 无关的,通常称它们为简单变量.但如果处理将200个 学生的成绩按大小顺序排序这类问题, 学生的成绩按大小顺序排序这类问题 , 只使用简单变 量将会非常麻烦,而利用数组却很容易实现. 量将会非常麻烦 , 而利用数组却很容易实现 . 本章讲 述VB数组的基本概念和使用方法,主要内容有:数组 VB数组的基本概念和使用方法 主要内容有: 数组的基本概念和使用方法, 的概念,数组的定义及应用,可调数组的概念及应用, 的概念 ,数组的定义及应用 , 可调数组的概念及应用 , 控件数组的概念及应用. 控件数组的概念及应用.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VB程序设计教程
沈美莉 马银晓 陈孟建 编著
18
第三节 参数的传递
例如: Function fac(a,b) …… …… fac = fa End Function 调用fac函数时,可以使用以下语句来完成: Private Sub Command1_Click() …… …… Call fac(x,y) End sub 以上程序中的a和b是两个形式参数,而 x和y是两个实际参数。这样就完成了形参 与实参的结合,其关系如下图所示。
VB程序设计教程
沈美莉 马银晓 陈孟建 编著
15
Function过程 第二节 Function过程
(2)fac函数段 Function fac(x) Dim fa As Single Dim i As Integer fa = 1 For i = 1 To x fa = fa * i fac = fa Next i End Function 运行该程序后,显示结果如下图所示。
VB程序设计教程
沈美莉 马银晓 陈孟建 编著
8
Function过程 第二节 Function过程
一、Function过程的定义 过程的定义 1. 格式 [static][private][public] Function <过程名> [(<参数表列 >)][As <类型>] <语句组> [<过程名>] = <表达式>] [Exit Function] [<语句组>] End Function 2. 功能 定义一个Function过程。
VB程序设计教程 沈美莉 马银晓 陈孟建 编著 3
Sub过程 第一节 Sub过程
建立sub sub过程的方法 3.建立sub过程的方法 (1)方法一 ① 双击窗体打开代码设计窗口,或利用“添加模块”功能,打开模块代码窗口。 ② 单击“工具”模块下的“添加过程”功能,系统弹出如下图所示的“添加过 程”对话框。
VB程序设计教程 沈美莉 马银晓 陈孟建 编著 9
Function过程 第二节 Function过程
3. 注意事项 ( 1 ) 定 义 Function 过 程 时 , 必 须 以 Function 开 始 , 以 End Function结束。在其之间是描述过程操作的语句组,可以是一个 语句,也可以是若干个语句,<语句组>中的语句也称为“函数 体”。 (2)调用Sub过程相当于执行一个语句,不返回值,可以作为独 立的基本语句调用,而调用Function过程要返回一个值,因此, 可以象内部函数一样在表达式中使用。
2.注意事项 (1)sub过程以sub开始,以End sub结束。 (2)参数static指的是在过程中的变量为static型。 (3)private指的是过程是私有过程,只能被本模块中的其他过程访问。 (4)public指的是过程是公有过程,可以在程序的任何地方调用它。 (5)过程名指的是过程的一个名称,是一个长度不超过255字符的变量 名。 (6)参数表列指的是,调用时传递给过程的参数的类型和个数,每个参 数的格式为: [By Val] 变量名 [()][As 数据类型] (7)Sub过程不能嵌套,也就是说,在sub过程内,不能定义sub过程或 function过程;也不能用gosub、goto或return语句进入或退出一个sub 过程,只能通过调用执行sub过程。
VB程序设计教程
沈美莉 马银晓 陈孟建 编著
5
Sub过程 第一节 Sub过程
二、调用sub过程 调用 过程 调用Sub过程有两种方法,一种方法是使用Call调用过程语句来调 用过程,另一种方法是将过程名作为一个语句来使用。 call调用语句 1.用call调用语句 (1)格式 Call 过程名 [(<实参表>)] (2)功能 Call语句把程序控制传递到一个Visual Basic语言的Sub过程。 Call语句调用一个过程时,如果过程本身没有参数,则<实参表> 和括号可以省略;否则,应给出相应的实际参数,并把参数放在 括号中。实际参数是传递给sub过程的变量或常数的。 例如: Call ppa(a,b)
第七章 过程
Sub过程 一、 Sub过程 Function过程 二、 Function过程 三、参数的传递 四、可变参数与对象参数
VB程序设计教程
沈美莉 马银晓 陈孟建 编著
1
Sub过程 第一节 Sub过程
过程实际上就是其他语言中的子程序,子程序是一个相对独立的应用程 序,它可以被其他程序所调用,当然,它也能够调用其他的子程序。在 Visual Basic语言中提供了两类过程,一类是子程序过程,又称为Sub过 程,另一类是函数过程,又称为Function过程。
沈美莉 马银晓 陈孟建 编著
VB程序设计教程
19
第三节 参数的传递
VB程序设计教程
沈美莉 马银晓 陈孟建 编著
20
第三节 参数的传递
2.注意事项 (1)在传递时,形参表与实参表中对应变量的名字不必相同,但是它们 所包含的参数的个数必须相同。 (2)实参表中的数据类型必须与形参表中的数据类型相匹配。 (3)实参表与形参表中的各个变量,可以使用逗号相分隔。 (4)实参表中的各个参数可以是常量、变量、数组、表达式等。
一、创建Sub过程 创建 过程 定义Sub Sub过程 1.定义Sub过程 格式: [static][private][public] sub 过程名[(参数表列)] <语句组> [Exit sub] [<语句组>] End sub
VB程序设计教程
沈美莉 马银晓 陈孟建 编著
2
Sub过程 第一节 Sub过程
VB程序设计教程
沈美莉 马银晓 陈孟建 编著
16
Function过程 第二节 Function过程
返回本章首页
VB程序设计教程
沈美莉 马银晓 陈孟建 编著
17
第三节 参数的传递
一、形参与实参
形参是在Sub和 Function过程的定义中出现的变量名,实参则是在调用 Sub或 Function过程时传递给Sub或Function过程的常数、变量、表达式 或数组。 1.按位置传递 定义一个函数的目的是用来被其他程序调用,在调用函数时,大多数情 况下,主调用函数和被调用函数之间有数据传递关系,这就是有参函数, 在定义函数时函数名后面括号中的变量称为“形式参数”,在调用函数 时,函数名后面括号中的表达式称为“实际参数”。 所谓按位置传递指的是实际参数的次序与形式参数的 编著
10
Function过程 第二节 Function过程
二、调用Function过程 调用 过程
Function过程的调用比较简单,可以象一个函数一样调用,其调用格式为: <过程名> = ([<实参表列>]) 【例题5.16】 编写一个求最大公约数(GCD)的函数过程,并调用该函数。 【程序代码】 (1)创建GCD函数 Function gcd(ByVal x As Integer, ByVal y As Integer) As Integer Dim reminder As Integer Do While y <> 0 reminder = x Mod y x = y y = reminder Loop gcd = x End Function
VB程序设计教程
沈美莉 马银晓 陈孟建 编著
13
Function过程 第二节 Function过程
(2)Function函数段 Function max(x, y) As Integer ‘函数max其功能是求出两个数中的最大值 Dim z As Integer If (x < y) Then z = y Else z = x End If max = z End Function 运行该程序后,即可比较三个数中的最大值,在主程序中共调用二次max()函数, 调用第一次时比较a和b两个数的大小,将大的数赋值给q变量,再调用一次时,将 比较q和c两个数的大小,返回时得到三个数中的最大值。 如果需要对四个数比较,可以增加一次调用max()的函数,若再增加数的个数,只 需要增加调用函数的次数即可。
VB程序设计教程 沈美莉 马银晓 陈孟建 编著 7
Sub过程 第一节 Sub过程
Private Sub Command1_Click() Dim a, b a = Val(InputBox("请输入圆半径", "输入数据", 1)) circul a End Sub Private Sub circul(r) Dim area area = 3.1415926 * r * r Print "圆的面积为"; area MsgBox ("圆面积为" & area) End Sub 以上程序创建一个计算圆面积的子程序,即Sub circul(r)过程,该过程 返回本章首页 的实参表为r,调用过程的方法是将过程作为一个语句,即,circul a。
VB程序设计教程 沈美莉 马银晓 陈孟建 编著 11
Function过程 第二节 Function过程
(2)调用GCD函数: Private Sub Command1_Click() Dim a As Integer, b As Integer a = Val(InputBox("输入第一个整数", "输入数据", 0)) b = Val(InputBox("输入第二个整数", "输入数据", 0)) x = gcd(a, b) Print "a="; a, "b="; b Print "最大公约数CD="; x End Sub
VB程序设计教程