vb子程序和函数PPT学习课件_第1页
vb子程序和函数PPT学习课件_第2页
vb子程序和函数PPT学习课件_第3页
vb子程序和函数PPT学习课件_第4页
vb子程序和函数PPT学习课件_第5页
已阅读5页,还剩38页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、第八章子程序和函数,8.1子程序概述在VB5.0/6.0中,除了系统提供的内部函数过程和事件过程外,用户还可以定义以下四个过程:sub保留字作为子过程开始;function保留字作为函数过程开始Property保留字作为属性过程开始;Event保留字作为事件过程开始;1, 子过程分为:事件过程和一般过程8.2.1事件过程(1)表单事件私有子表单的语法_事件名称(参数列表) 结束子过程(2)控制事件私有子控制名称_事件名称(参数列表) 结束子过程,8.2子过程、 子过程的定义形式如下:公共|私有静态子过程名(参数表)退出子结束子,8.2.2通用过程(子过程)的定义,描述:(1)子过程名:命名规则

2、与变量名相同。 子过程名称不返回值,而是通过正式参与传递参数来获得结果。调用时可以返回多个值。3、(2)形式参数列表:形式参数通常简称为“形式参数”,仅表示形式参数的类型、数量和位置,定义时没有值。只有在调用过程时,结合虚拟和真实参数才能得到相应的值。(3)过程可以没有形式参数,但是不能省略括号。(4)参数的定义形式:ByVal | ByRef变量名() 类型,ByVal是指调用过程时,参数按值传递;默认值或ByRef表示当调用过程时,参数通过地址传递。在示例8.1中,编译一个用于交换两个整数变量值的子过程。建立私有子交换(x为整数,y为整数)dim temp为整数temp=x:x=y:y=t

3、emp结束sub,4,8.2.3子进程,通过“工具”菜单中的“添加进程”命令,出现“添加进程”对话框(见图6.1),选择进程类型(子进程、函数、属性、事件)和范围(公共、私有),点击“确定”得到进程或函数定义的结构框架(模板),如:公共子排序().结束子、5、8.2.4调用过程1调用子过程名参数列表或调用子过程名(参数列表)2调用函数过程的变量名=函数过程名(参数列表)描述:(1)参数列表被称为实参数或实元素,必须与形式参数保持相同的编号,其位置和类型一一对应。(2)调用时,将实际参数值传递给相应的参数。当值被传递时(形式参数之前的值),实际参数的值不会随着形式参数值的变化而变化。而在地址传输

4、中,实参数的值随着形式参数值的变化而变化。6、(3)当参数是数组时,声明参数时应省略形式参与参数的维数,但不能省略括号。(4)调用子流程有两种形式。使用call关键字时,参数必须用括号括起来,否则,参数之间用“,”分隔。示例:上面定义的调用Sawp子流程的形式:交换a,b调用交换(a,b),7,私有子cmdok () 调用交换(a,b) 交换a,b结束子,私有子交换(x%,Y %)dimtemp % temp=x=Y=temp结束子,过程调用的执行流程:8.3函数流程,Visual Basic函数分为内部函数和外部函数,外部函数是用户根据需要用函数关键字定义的函数流程。8.3.1函数过程的定义

5、,公共|私有静态函数名()As函数体函数名=返回值退出函数函数名=返回值 endfunction,描述:(1)函数名:但是,它不能与系统的内部函数或其他常规子过程同名,也不能与此模块中定义的全局变量和模块级变量同名。(2)在函数体中,函数名可以作为变量使用,函数的返回值通过函数名的赋值语句实现,函数名在函数过程中至少要赋值一次。(3)AS类型:指函数返回值的类型。如果省略,函数返回变量类型值。(4)退出函数:退出函数过程,通常与选择结构(如果或选择事例语句)结合,即在满足一定条件时退出函数过程。(5)表单参数列表:表单参数的定义与子流程的定义完全相同。示例6.2、10、8.3.2。调用形式如下

6、:函数名(参数列表)描述:调用时参数和形式参数的数据类型、顺序和数量必须匹配。函数调用只能出现在表达式中,它们的功能是寻找函数的返回值。11、8.4过程范围,公共|私有子过程名称(形式参数列表).结束子过程、概念、一般子过程和功能过程可以以模块和标准模块的形式编写,并且可以使用关键字私有和公共来确定它们是否可以被定义,12、1。表单/模块级过程:具有私有关键字的过程只能由定义的表单或模块中的过程调用。2.全局级过程:应用程序的所有标准模块中的所有表单和过程都可以调用带有公共关键字(或默认值)的过程。根据流程的范围,流程可以分为:模块级流程,全局级流程,用用例7.1来解释流程的范围,13、总结流

7、程的定义和范围如下表所示(课本第163页),14、8.5参数在流程之间的传递,还有两种不同模块(流程)之间的数据传递,在每个流程中使用全局变量来共享数据。8.5.1形式参数和实际参数,1。在定义一般过程时,形式参数是指Sub或Function语句中变量名后面括号中的数字,用于接收传输到子过程的数据,形式参数表中的变量用逗号分隔。实际参数实际参数是指调用子过程或函数过程时,写在子过程名称或函数名称后面括号中的参数,其功能是将数据(数值或地址)传输给子过程或函数过程及其相应的参数变量。参数可以由常量、表达式、有效变量名和数组名组成(后跟左括号和右括号,如()。参数表中的每个参数都用逗号分隔。8.5

8、.2参数传递(虚拟和真实的结合),这意味着主音过程的实际参数(调用时具有确定值和内存地址的参数)被传递到调谐过程的形式参数。传递参数有两种方式:按值和按地址。如果在参数前添加了“ByVal”关键字,则按值传递;如果默认添加或按ByRef关键字添加,则按地址传递。16、按值寻址和按值寻址:形式参数获取实际参数的地址,当形式参数的值改变时,它也会改变实际参数的值。传递值:形式参数获取实际参数的值,形式参数值的变化不会影响实际参数的值。子Swap2(x%,y %)Dim Temp % Temp=x : x=y :y=Temp End Sub,子Swap1(ByVal x%,ByVal y %)Dim

9、 Temp % Temp=x : x=y :y=Temp End Sub,示例8.4、17、私有子cmdok _ click()a %=103360 b %=2033 360s wap1a,b 传递值打印 A1=。 B1=;B a=10: b=20: Swap2 a,b地址打印 A2=;“B2=”;B结束子、程序调用执行过程:18、值传递的执行过程如下:地址数据传递的执行过程,19、数据传递的一些注意事项:1。参数2的数据类型。参数参数值是实际参数3的副本。地址参数、实际参数、公共存储单元4。函数过程返回值。注意:如果实际参数是常量(系统常量、符号常量)或表达式,则常量或表达式的计算值将通过值

10、传递传递给参数,而不管在定义过程中是否使用值传递或地址传递。20,8.6高级用法(数组作为参数),Visual Basic允许将数组作为参数传递到过程中。数组作为参数是通过地址传输的。在传递数组时,除了遵循参数传递的一般规则外,还应注意以下几点:1 .当将一个数组的所有元素转移到一个进程中时,我们应该将数组名称分别写入参数列表,并省略数组的上下限,但是不能省略括号。私有子排序(单个).结束sub,其中形参“a()”是一个数组。21、2。调整后的过程可以通过Lbound和Ubound函数来确定参数数组的上限和下限。3.当数组用作形式参数时,相应的实际参数也必须是相同类型的数组。4.实际参数和形式

11、参数的组合是通过地址传递的,即形式参数组和实际参数数组共享一个存储单元。例如,参数数组b(1到8)被定义并赋值,调用Sort()函数的过程如下:Sort b()或Call Sort(b()的参数数组后面的括号可以省略,但是为了阅读方便,通常建议不要省略它们。22、调用虚拟和实时参数组A和实际参数组B的组合,并共享一个内存单元,如下图所示。因此,在Sort()过程中更改数组A中每个元素的值相当于更改参数数组b中相应元素的值。当调用结束时,形式参数组A变得未定义。B(1)B(2)B(3)B(4)B(5)B(6)B(7)B(8)A(1)A(2)A(3)A(4)A(5)A(6)A(7)A(8)补充示例

12、:编写判断整数是否为素数的过程。如果给定的整数是质数,逻辑值为真,否则为假,私有函数质数(n为整数)为布尔二进制数k%,yes为布尔yes=真,k=2到n 2如果n mod k=0,则yes=false :退出下一个k质数=是给函数名赋值作为函数的返回值,如何调用此函数?使用这个函数,编译一个来验证哥德巴赫猜想。24,private子窗体_ click () dim n%,n1%,n2% n=val (inputbox(输入大于6的正整数)对于n1=3到n2步骤2让n1分解n2=n-n1,从3找到n2 如果n1和n2都是质数,则打印出如果质数(n1)和质数(N2),然后打印出n = n1退出,

13、如果下一个n1结束,则结束循环Sub,25, 对于I=1到n-1p=1,对于j=1到n,如果a (p) a (j),那么p=j下一个j温度=a (I) a (I)=a (p) a (p)=温度下一个I,VB程序选择排序(升序):如何写排序VB程序?补充示例2:排序子过程、26、私有子排序(a()为单个)dim I%、j%、p%、n%、temp!n=Ubound(a)For I=1 To n-1 p=I For j=I 1 To n如果a(p) a(j)则p=j NeXt j temp=a(I)a(I)=a(p)a(p)=temp NeXt I End Sub、27、8.7进程嵌套和递归调用,8

14、.7.1进程嵌套,其中一个子进程在程序中调用,另一个子进程在子进程中调用,此程序结构称为进程嵌套。过程的嵌套调用的执行过程如下:28、8.7.2过程的递归调用用它们自己的结构来描述它们自己,这称为递归。例如,阶乘:的定义允许在子过程和函数过程(即递归子过程和递归函数函数)的定义内调用自己。例8.8编译阶乘fac(n)=n!29、私有函数fac (n为整数)为整数,如果n=1,则fac=1,否则fac=n * fac (n-1)结束,如果结束函数私有子窗体_ click()打印“fac (4)=”;Fac(4) End Sub,程序的递归过程:30,描述:递归处理一般通过堆栈实现,分为递归和回归两个过程,如上图所示。递归过程:每次调用自己时,推当前参数(形式参数、局部变量、返回地址等)。)放到堆栈上,直到递归结束条件建立。回归过程:然后从堆栈中弹出当前参数,直到堆栈为空。递归算法设计简单,解决了同样的问题。使用递归

温馨提示

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

评论

0/150

提交评论