Visual Basic 程序设计基础:第四章 函数与过程_第1页
Visual Basic 程序设计基础:第四章 函数与过程_第2页
Visual Basic 程序设计基础:第四章 函数与过程_第3页
Visual Basic 程序设计基础:第四章 函数与过程_第4页
Visual Basic 程序设计基础:第四章 函数与过程_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 2 4.1 过程的编写与调用 内部函数是内部函数是VB事先定义好的函数,我们可事先定义好的函数,我们可 以直接拿过来用,但内部函数并不能解决所有的以直接拿过来用,但内部函数并不能解决所有的 问题,有很多地方需要我们亲自动手,编写问题,有很多地方需要我们亲自动手,编写自定自定 义的函数或者过程。义的函数或者过程。 过程过程 函数函数 子过程子过程 内部函数内部函数 自定义函数自定义函数 事件过程事件过程 自定义子过程自定义子过程 2021-5- 2021-5- 5 4.1.1 自定义函数的编写与调用自定义函数的编写与调用定义方式定义方式 Function 函数名函数名(形参列表形参列表) As

2、 End Function :Public|PrivateStatic,不能是不能是Dim。 (形参列表形参列表):表示在调用时传递给函数的参数的变量列表,表示在调用时传递给函数的参数的变量列表, 圆括号必须要有。有返回类型圆括号必须要有。有返回类型 关键字关键字Function与与End Function相呼应。相呼应。 形参列表形参列表的声明语法:的声明语法:ByVal|ByRef 变量名变量名 As 类型类型 6 4.1.1 自定义函数自定义函数 Private Sub command1_Click() Dim m First, Second=; Second If First Seco

3、nd Then swap First, Second End If Print 交换后:交换后:First=; First, Second=; Second End Sub Private Sub swap(a, b) Dim t t = a a = b b = t End Sub 12 4.1.2 自定义子过程(自定义子过程(SUB)调用方式调用方式 使用使用Call关键字时,参关键字时,参 数两边要加圆括号。数两边要加圆括号。 省略省略Call关键字,则必须关键字,则必须 省略参数两边的圆括号。省略参数两边的圆括号。 13 自定义子过程与自定义函数的异同自定义子过程与自定义函数的异同 区别

4、:区别: (1)子过程以关键字)子过程以关键字Sub开始,函数以关键字开始,函数以关键字Function开始。开始。 (1)子过程没有返回值,没有类型;)子过程没有返回值,没有类型; 函数有返回值,有类型。函数有返回值,有类型。 (2)调用时,子过程是一条独立的语句;)调用时,子过程是一条独立的语句; 但函数不能作为独立的语句加以调用,但函数不能作为独立的语句加以调用,必须参与表达式运算必须参与表达式运算。 相同点:相同点: (1)都属于过程。)都属于过程。 (2)都能实现相同的功能。)都能实现相同的功能。 过程过程 函数函数 子过程子过程 内部函数内部函数 自定义函数自定义函数 事件过程事件

5、过程 自定义子过程自定义子过程 14 形参:形参:在函数定义中的参数列表称为形参。形参标在函数定义中的参数列表称为形参。形参标 明了调用自定义的函数或者过程所需参数的个数、明了调用自定义的函数或者过程所需参数的个数、 位置和类型。形参仅仅是一个符号,是要被实际数位置和类型。形参仅仅是一个符号,是要被实际数 据所代替的。据所代替的。 实参:实参:实际参与运算的数据就是实参。实际参与运算的数据就是实参。 参数传递:参数传递:程序在调用函数或过程时,实参代替形参的程序在调用函数或过程时,实参代替形参的 过程。过程。 4.2 参数传递参数传递 15 4.2 参数传递参数传递 参数传递有两种方式:参数传

6、递有两种方式: 按地址传递、按数值传递按地址传递、按数值传递 形参前加形参前加“ByRef”关键字或什么都不加的为按地址传递,关键字或什么都不加的为按地址传递, 形参前加形参前加“ByVal”关键字的是按数值传递。关键字的是按数值传递。 2021-5- 17 4.2.1 参数传递参数传递按数值传递按数值传递 Private Sub Form_Click() Dim First!, Second!, Temp! First = InputBox(请输入第一个数:请输入第一个数:, First) Second = InputBox(请输入第二个数:请输入第二个数:, Second) Print 初

7、始值:初始值:First=; First, Second=; Second Print If First Second Then Call swap(First, Second) End If Print 交换后:交换后:First=; First, Second=; Second End Sub Private Sub swap(ByVal a,ByVal b) Dim t t = a a = b b = t End Sub 形形 参参 实实 参参 2021-5- 19 Private Sub Form_Click() Dim First!, Second!, Temp! First = I

8、nputBox(请输入第一个数:请输入第一个数:, First) Second = InputBox(请输入第二个数:请输入第二个数:, Second) Print 初始值:初始值:First=; First, Second=; Second Print If First Second Then Call swap(First, Second) End If Print 交换后:交换后:First=; First, Second=; Second End Sub Private Sub swap(a, b) Dim t t = a a = b b = t End Sub Private Sub

9、 swap(ByRef a,ByRef b) Dim t t = a a = b b = t End Sub 4.2.2 参数传递参数传递按地址传递按地址传递 按数值传递按数值传递将复印件上交,原件永远不受影响将复印件上交,原件永远不受影响 按地址传递按地址传递将原件上交,改的就是原件将原件上交,改的就是原件 实实 参参 形形 参参 20 1 3 4 Private Sub Command1_Click() Dim A%, B%, C% A = 1 B = 2 C = 3 Call ss(A, B, C) Print A; B; C End Sub 21 数组为参数数组为参数 Private

10、Function tim(n( ) As Integer) Dim t%, i% t = 1 For i = LBound(n) To UBound(n) t = t * n(i) Next i tim = t End Function Private Sub Command1_Click() Dim a(3) As Integer Dim k As Integer, j As Integer For j = LBound(a) To UBound(a) a(j) = InputBox(请输入请输入a( a, b=; b If a b Then Call swap (a, b) Print 交

11、换后:交换后:a=; a, b=; b End Sub Private Sub Command1_Click() Form2.Show End Sub (Form1模块)模块) Private Sub Form_Click() Dim p%, q%, T% p = InputBox(请输入第一个数:请输入第一个数:, p) q = InputBox(请输入第二个数:请输入第二个数:, q) Print 初始值:初始值:p=; p, q=; q If p q Then Call swap (p, q) Print 交换后:交换后:p=; p, q=; q End Sub (Form2模块)模块)

12、 27 4.3.1 过程的作用域过程的作用域 思考:思考: (1)如果)如果swap在标准模块中是用在标准模块中是用Private定义的,定义的, 是否能被是否能被Form1和和Form2调用?调用? (2)如果)如果swap是在是在Form1中用中用Private定义的,定义的, 是否能被是否能被Form1和和Form2调用?调用? (3)如果)如果swap在在在在Form1中用中用Public定义的,定义的, 是否能被是否能被Form1和和Form2调用?调用? (4)如果在两个标准模块里都有)如果在两个标准模块里都有swap过程,过程, 这时应该如何调用?这时应该如何调用? 28 4.3

13、.1 过程的作用域(调用规则)过程的作用域(调用规则) 29 4.3.2 变量的作用域和生存期变量的作用域和生存期 变量的变量的作用域作用域:变量能被使用的:变量能被使用的范围范围。 变量的变量的生存期生存期:变量从产生到消亡的:变量从产生到消亡的时间时间。 按照声明变量的按照声明变量的位置位置和和限定词限定词的不同,变量分为三种:的不同,变量分为三种: 局部变量、模块级变量、全局变量。局部变量、模块级变量、全局变量。 2021-5- 显示声明变量的显示声明变量的格式格式: as Dim、Static、Public、Private 31 什么样的变量才叫局部变量?什么样的变量才叫局部变量? 局

14、部变量的作用域和生存期局部变量的作用域和生存期 局部变量局部变量 以以DimDim声明声明动态动态变量变量 以以StaticStatic声明声明静态静态变量变量 用用DimDim或或StaticStatic在在过程内过程内声明的变量称为局部变量。声明的变量称为局部变量。 2021-5- 局部变量的作用域:局部变量的作用域:只能在声明它的本过程中使用,而不能只能在声明它的本过程中使用,而不能 被其它过程使用。被其它过程使用。 局部变量的生存期:局部变量的生存期:若是动态变量,生存期为变量所在过程的若是动态变量,生存期为变量所在过程的 执行期,因此执行期,因此过程结束,变量的值自动消失过程结束,变

15、量的值自动消失;若是静态变量,;若是静态变量, 生存期为整个应用程序的运行期,生存期为整个应用程序的运行期,过程结束,变量还会保持当过程结束,变量还会保持当 前的值前的值。 33 局部变量的作用域和生存期局部变量的作用域和生存期 Private Sub Command1_Click() Dim n As Integer n = 10 Print n End Sub Private Sub Command2_Click() Dim n As Integer n = 20 Print n End Sub 假设在工程1的Form1窗体中定义了如下两个事件过程事件过程: 打开工程打开工程1 1 202

16、1-5- Private Sub Command2_Click() Static i As Integer i = i + 10 Print Spc(5);i End Sub Private Sub Command1_Click() Dim i As Integer i = i + 10 Print i End Sub 局部变量的作用域和生存期局部变量的作用域和生存期 假设在工程1的Form1窗体中定义了如下两个事件过程事件过程: 打开工程打开工程1 1 35 要活用静态变量(要活用静态变量(Static) 例如:例如:有一个人编了下面一段程序,想用变有一个人编了下面一段程序,想用变量量n记记

17、录单击录单击 窗体的次数。窗体的次数。 Private Sub Form_Click() Dim n As Integer n = n + 1 Print 已单击次数:已单击次数:; n & 次次 End Sub 36 什么样的变量才叫什么样的变量才叫模块级变量模块级变量? 模块级变量的作用域和生存期模块级变量的作用域和生存期 用用Private或或Dim在在模块内模块内的的“通用声明通用声明”段声明的变段声明的变 量。量。 在我在我 这里这里 2021-5- 模块级变量的模块级变量的作用域作用域:只能在声明它的:只能在声明它的本模块本模块中使用,即能中使用,即能 被本模块中的其它过程使用。被

18、本模块中的其它过程使用。 模块级变量的模块级变量的生存期:生存期:整个应用程序的运行期。整个应用程序的运行期。 模块级变量的作用域和生存期模块级变量的作用域和生存期 38 Private Z As Integer Private Sub S( ) Z = Z + 2 Print Z End Sub Private Sub Command1_Click( ) Z = Z + 2 Call S Print Z End Sub 模块级变量的作用域和生存期模块级变量的作用域和生存期 打开程序打开程序 程序执行时,程序执行时, 鼠标单击命令鼠标单击命令 按钮按钮1一次,一次, 会在窗体上看会在窗体上看

19、到什么?到什么? 39 什么样的变量才叫全局变量?什么样的变量才叫全局变量? 全局变量的全局变量的作用域作用域:能被这个应用程序中所有模块的所有:能被这个应用程序中所有模块的所有 过程使用。过程使用。 全局变量的全局变量的生存期生存期:整个应用程序的运行期。:整个应用程序的运行期。 全局变量的作用域和生存期全局变量的作用域和生存期 用用Public限定词在限定词在模块内模块内的的“通用声明通用声明”段声明的变量。段声明的变量。 在编程时,在编程时,全局变量越少越好全局变量越少越好。 40 Rem Form1 Public i As Integer Private Sub Command1_Cl

20、ick() i = i + 1 Print i End Sub Private Sub Command2_Click() Form2.Show End Sub Rem Form2 Private Sub Command1_Click() i = Form1.i + 1 Print i End Sub 全局变量的作用域和生存期全局变量的作用域和生存期 假设在工程假设在工程1中的中的 Form1当中定义当中定义 Command1_Click 事件和事件和 Command2_Click 事件,事件, 在在Form2当中定义当中定义 的另外一个的另外一个 Command1_Click 事件。事件。 打

21、开程序打开程序 41 变量的变量的重名重名问题:问题: 我们可以在我们可以在不同的作用域不同的作用域内声明具有内声明具有相同名称相同名称 的变量。它们是毫无关联的不同变量,不会相互影的变量。它们是毫无关联的不同变量,不会相互影 响。响。 如果发生如果发生作用域重叠作用域重叠,就应该采取,就应该采取“就近原就近原 则则”。 即首先看这个变量在本过程中是否有声明它的语句,即首先看这个变量在本过程中是否有声明它的语句, 有则为局部变量;若无,再看这个变量在本模块中有则为局部变量;若无,再看这个变量在本模块中 是否有声明它的语句,有则为模块级变量或者是全是否有声明它的语句,有则为模块级变量或者是全 局

22、变量。局变量。 4.3.2 变量的作用域和生存期变量的作用域和生存期 42 Private Sub Command1_Click( ) Dim X As Integer, Y As Integer, Z As Integer X = 2 Y = 3 Z = X + Y Call S Print X, Y, Z End Sub Private Sub S( ) Dim X As Integer, Y As Integer, Z As Integer X = 1 Y = 2 Z = X + Y Print X, Y, Z End Sub 在工程在工程1的的Form1 窗体中定义了窗体中定义了 Command1_Click 事件过程和自定义事件过程和自定义 了一个了一个S子过程子过程 4.3.2 变量的作用域和生存期变量的作用域和生存期 打开程序打开程序 43 4.3.2 变量的作用域和生存期变量的作用域和生存期 Private i As Integer Private Sub

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论