过程是VB的基本组成单位.ppt

上传人:牧羊曲112 文档编号:6028209 上传时间:2023-09-16 格式:PPT 页数:50 大小:248.63KB
返回 下载 相关 举报
过程是VB的基本组成单位.ppt_第1页
第1页 / 共50页
过程是VB的基本组成单位.ppt_第2页
第2页 / 共50页
过程是VB的基本组成单位.ppt_第3页
第3页 / 共50页
过程是VB的基本组成单位.ppt_第4页
第4页 / 共50页
过程是VB的基本组成单位.ppt_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《过程是VB的基本组成单位.ppt》由会员分享,可在线阅读,更多相关《过程是VB的基本组成单位.ppt(50页珍藏版)》请在三一办公上搜索。

1、第六章 过程,过程是VB的基本组成单位,一些复杂的任务可以分解成为基本的过程来负责完成!,过程的作用,当需解决的问题规模较大、复杂时,可以按功能细分成一个一个小的功能模块,这样的小程序段,在VB中被称为过程;过程是VB程序的基本组成单位。,过程的分类,VB过程分为子过程(Sub)、函数过程(Function)、属性过程(Property)三种。本书我们主要学习子过程和函数过程。考试时,要严格区分子过程和函数过程的用法。,引例,6.1 定义Sub子过程,我们早就使用过子过程,因为在VB中每一个事件过程都是子过程;VB程序是从某个事件过程首先驱动开始的。本章主要学习用户自定义子过程的定义方法。,6

2、.1.1 事件过程,Private Sub 对象名_事件名(参数列表)局部变量和常量的声明语句块Exit Sub语句块End Sub事件过程原型用户不能改变;事件过程是私有的,6.1.2 通用子过程(用户自定义过程),Private|Public Static Sub 过程名(形参列表)局部变量和常量的声明语句块Exit Sub语句块End Sub通用子过程的作用在于将重复出现的程序段或功能较复杂的程序段独立或细分出来的小的程序段,即为通过子过程。,6.1.2 通用子过程(用户自定义),子过程定义说明:1)子过程以Sub开始,End Sub结束,中间可以利用Exit Sub中途退出过程;2)以

3、Private定义的子过程是私有的,只允许本模块内的过程调用;用Public定义的子过程是公有的,允许被整个工程中的任意过程调用;系统缺省为Public;3)Static表示静态“局部”变量,变量一经定义,在整个程序运行期间不会被重新初始化,不能使用在“通用”-“声明”字段中;,6.1.2 通用子过程(用户自定义),4)过程名的命名规则与变量名一样,即第一个字符必须是字母或汉字,后面由字母、汉字、数字或下划线组成,不能使用VB中的关键字;过程名不要重名;5)形参列表:这个列表的功能再于接收必要的数据信息,建立与主调程序之间的关系;参数的个数可以为零个、1个甚至多个;参数间用逗号分隔;括号不可省

4、略;6)形参列表的形式:(ByVal a As Integer,ByRef b As Integer),6.1.2 通用子过程(用户自定义),7)End Sub标志Sub过程执行结束,程序将返回调用该Sub过程的语句处继续执行;8)过程不能嵌套定义。Private Sub Command1_Click()Call P()End Sub,Private Sub()Print“输出结果为:”End Sub,6.1.2 通用子过程(用户自定义),Sub子过程的建立方法1)利用命令建立(不常用)进行“代码窗口”;执行“工具”菜单中的“添加过程”命令;在出现的对话框中进行设置。,6.1.2 通用子过程(

5、用户自定义),Sub子过程的建立方法2)直接在代码窗口中生成进行“代码窗口”;选择“通用”-“声明”,光标停留在所有过程外面的空白行处;按Sub子过程的定义规则输入Private Sub 过程名(参数)按回车键,即可创建一个空的Sub子过程。,6.1.2 通用子过程(用户自定义),Sub子过程的过程体代码:子过程的功能主要是在过程体内完成的,过程名主要是为找到这个过程而提供路线的;子过程的代码和事件过程的代码类似;如:Private Sub Change(x1 As Integer,x2 As Integer)Dim Temp As IntegerTemp=x1x1=x2x2=TempEnd

6、Sub,6.2 定义Function过程,Function过程又称函数过程;在第三章中,我们学习了大量的VB系统函数,这些函数用户只可以使用,不可以修改;VB提供的Function过程,就是让用户可以自己创建特殊功能的函数,用户自定义函数。,6.2 定义Function过程,定义Function过程的形式如下:Private|PublicStatic Function 函数名(参数列表)As 数据类型局部变量和常数声明语句块函数名=表达式Exit Function语句块函数名=表达式End Function,6.2 定义Function过程,定义Function过程说明:1)Function过

7、程以Function语句开头,以End Function结束;中间代码部分为函数体;2)函数名有返回值,其值类型由As 数据类型指定;3)函数名不同于子过程名,在VB中,为函数名赋予了存储值的功能,而过程名不可以,所以函数体内一般都会至少为函数名赋值一次;如果不赋值,函数返回值默认为0或空;4)函数中途可以利用Exit Function退出。,6.2 定义Function过程,例如,求n!Private Function fac%(ByVal n As Integer)Dim i As IntegerIf n0 Then fac=-1:Exit FunctionElsefac=1For i=1

8、 To nfac=fac*iNext iEnd IfEnd Function,6.2 定义Function过程,例如,求gcd(m,n)最大公约数Private Function gcd%(ByVal m%,ByVal n%)Dim r%,t%If m0m=nn=rr=m Mod nLoopgcd=nEnd Function,Private Sub Change(x1%,x2%)Dim Temp As IntegerTemp=x1x1=x2x2=TempEnd Sub,6.3 过程调用,除了事件过程是由使用者发出动作触发外,多数过程都是要间接的由事件过程或其他过程调用才能够使用。,6.3.2

9、Sub过程调用,Sub子过程调用方法:1)用Call语句调用Sub过程Call 过程名(实参表)说明:过程名为被调用过程的名字;实参与形参是对应的,个数、类型一一对应;在过程定义的列表中为形参,在调用时,为实参;实参可以是具体的值、或有值的变量、属性,而形参则是负责接收实参值的。2)直接将过程写成语句形式:过程名 实参表说明:这种调用形式,不用加Call;同时要将实参表的括号去掉并与过程名之间加一个空格。,6.3.2 Sub过程调用,编写一个子过程,打印杨辉三角形。,Private Sub YH(n As Integer)Dim a()As Integer,i%,j%Redim a(1 To

10、n,1 To n)For i=1 To n For j=1 To i If j=1 Or i=j Then a(i,j)=1 Else a(i,j)=a(i-1,j)+a(i-1,j-1)End If Print Tab(6*j-Len(Cstr(a(i,j)+1);a(i,j);Next j Print Next iEnd Sub,6.3.3 调用Function过程,调用Function过程的方法比较简单,与VB内部函数的调用方法一样,即在表达式中写出它的名称和相应的参数;v=函数名(实参列表)Print 函数名(实参列表)当然也可以用Call语句形式,此时将放弃函数名返回值的功能,功能与

11、子过程一致,6.3.4 调用其他模块中的过程,当一个过程可以被其他模块调用时,首先要求这个过程为Public公有的。1)调用窗体模块中的公有过程Call 窗体名.子过程名(实参表)2)调用标准模块中的公有过程,在没有重名的前提下,可直接调用:Call 子过程名(实参表)否则,Call Module1.子过程名(实参表),例题,编写一个求任意三角形面积的函数,Private Function Area!(a!,b!,c!)Dim t!t=(a+b+c)/2Area=Sqr(t*(t-a)*(t-b)*(t-c)End Function,例题,编写一个求任意三角形面积的子过程,Private Su

12、b Area(a!,b!,c!,s!)Dim z!z=(a+b+c)/2s=Sqr(z*(z-a)*(z-b)*(z-c)End Sub,6.4.1 形参与实参,形参:置于过程定义时,参数列表中的变量或数组;在过程被调用前,系统不对其分配空间;实参:当程序中想调用某过程时,所提供的实际值;当实参和形参结合的时候,形参才被分配空间,接收由实参传递过来的值;形参、实参个数、类型、位置要一致。,6.4.1 形参与实参,常见的错误Private Sub F1(a%,b%).End SubPrivate Sub Command1_Click()Dim x!,y!x=3.14:y=123Call F1(x

13、,y)Call F1(x)End Sub,6.4.23 参数传递方式,传值(ByVal)传址(ByRef或省略默认)区别1:形参定义前面放的关键字不一样;区别2:形参接收到的值不一样;区别3:形参对实参的影响不一样,6.4.23 参数传递方式,例如:(两个数的交换)Private Sub Exchange(ByVal a%,ByVal b%)Dim t%t=aa=bb=tPrint a,bEnd Sub,Private Sub Command1_Click()Dim x%,y%x=12y=21Call Exchange(x,y)Print“主过程中:“;x,yEnd Sub,6.4.23 参数

14、传递方式,说明:形参前加ByVal时表示传值不加或加ByRef时表示传址传值是单方向的传址是“双方向的”,6.4.23 参数传递方式,Private sub add(x as integer,y as integer,z as integer)z=x+yx=x+1y=y+1print“子过程中”&x&y&zEnd subPrivate sub Form_Click()dim a as integer,b as integer,c as integera=3:b=2:c=1add a,b,c 或者写成Call add(a,b,c)print“外部过程中”&a&b&cEnd sub,6.4.23

15、参数传递方式,Private sub add(ByVal x as integer,ByVal y as integer,ByVal z as integer)z=x+yx=x+1y=y+1print“子过程中”&x&y&zEnd subPrivate sub Form_Click()dim a as integer,b as integer,c as integera=3:b=2:c=1add a,b,cprint“外部过程中”&a&b&cEnd sub,6.4.23 参数传递方式,下列程序运行后,单击Command1结果为:Private Sub Command1_Click()a=10:

16、b=20 Call xy1(a,b)Print a,b xy2 a,b Print a,bEnd Sub,Public Sub xy1(x,ByVal y)x=x+y y=x-y x=x-yEnd SubPublic Sub xy2(ByVal x,y)x=x+y y=x-y x=x-yEnd sub,6.4.4 数组(元素)参数,在某些问题中,会将数组中的某个值或者全部元素传递给形参编写一个子过程:求任意一维数组中存放数据的乘积,程序,6.4.4 数组(元素)参数,编写一个函数求任意数组中的最大值,Private Function Max%(a%()Dim i%,m%m=a(LBound(a

17、)For i=LBound(a)+1 To UBound(a)If ma(i)Then m=a(i)Next iMAX=mEnd Function,6.4.4 数组(元素)参数,编写一个子过程求任意数组中的最大值,Private Sub Max(a%(),ByRef m%)Dim i%m=a(LBound(a)For i=LBound(a)+1 To UBound(a)If ma(i)Then m=a(i)Next iEnd Sub,程序,6.4.5 对象参数,对象参数的传递为传址,6.5 嵌套过程和递归过程,嵌套过程并非嵌套定义过程,在VB中不可以嵌套定义过程,这里指嵌套调用过程,即在一个被

18、调用过程中还可以调用另一个过程递归是指程序的递推与回归调用是本章中一个非常重要的概念,调用伴随着等待(系统会保留“现场”,等待从被调用过程返回调用过程)。,6.5.1 嵌套过程(书中的例子自己看),求任意三角形面积,程序,Sub Command1_Click()Call F1(y)Print yEnd Sub,Sub F1(x)x=4*F2(x-1)End Sub,Function F2(x)F2=3*F3(x-1)End Sub,Function F3(x)F3=2*xEnd Sub,6.5.2 递归过程,递归过程属于嵌套调用过程的一种特殊情况;在VB中,允许某过程自己调用自己,这样调用被称

19、为递归调用,递归包括递推式和终止值两个缺一不可的条件。,程序,6.5.2 递归过程,Function fac%(n%)If n=1 then fac=1 Else fac=n*fac(n-1)End IfEnd function,Function fac%(n%)If n=1 then fac=1 Else fac=n*fac(n-1)End IfEnd function,Function fac%(n%)If n=1 then fac=1 Else fac=n*fac(n-1)End IfEnd function,递推,回归,Sub Form_Click()k%=3 x=fac(3)End

20、Sub,6.5.2 递归过程,求最大公约数Private Function gcd(ByVal m%,ByVal n%)If m Mod n=0 Thengcd=nElsegcd=gcd(n,m Mod n)End IfEnd Function,6.5.2 递归过程,记住:若上述求阶乘的函数中少了:If n=0 or n=1 Then fac=1 即仅有语句:fac=n*fac(n-1)程序运行将造成何结果?由此可见构成递归的结构如下:递归结束条件及结束时的值;能用递归形式表示,并且递归向终止条件发展。,6.6 变量的作用域,变量的作用域,即变量起作用的范围和生存期变量的作用域在VB中分三个级

21、别:过程级、模块级、工程级,6.6 变量的作用域,过程级:指在某过程内定义的变量,定义时可以利用Dim和Staic两个关键字,这种级别的变量又称为局部变量模块级:指在窗体的通用声明和标准模块中用Dim和Private定义的变量工程级:指在窗体的通用声明和标准模块中用Public定义的变量,这个级别的变量又称为全局变量。,6.6 变量的作用域,过程级的作用域:仅在定义它的过程中起作用模块级的作用域:对定义它的窗体或标准模块中的全部过程都起作用工程级的作用域:对整个程序中的任意窗体任意模块中的过程都起作用,6.6 变量的作用域,同名变量的使用:当变量的级别不一样时,可以同名同名在使用上以最内层为主

22、特殊情况下,需要指出属于哪个窗体或模块Form1.xModule1.y。,6.7 综合应用,若n=3-,Private Sub RightMove(xx%()Dim t%t=xx(UBound(xx)For i=UBound(xx)-1 To LBound(xx)Step-1 xx(i+1)=xx(i)Next ixx(LBound(xx)=tEnd Sub,Private Sub Command1_Click()Dim a%(1 To 10),n%,i%For i=1 To 10a(i)=iNext in=InputBox(“输入要向右移动的位数n:”)For i=1 To nCall Ri

23、ghtMove(a()Next iFor each e In aPrint e;Next End Sub,6.7 综合应用,十进制向其他进制转换遵循除r取余法(倒着取),直到商为0,Private Function T$(m%,n%)Dim s$,r%Do While m0 r=m Mod nIf r10 Then s=Chr(65+r-10)&sElses=r&sEnd If m=m nLoopT=sEnd Function,6.7 综合应用,加密和解密简单加密的思想是:将每个字母C加一序数K,式子 c=chr(Asc(c)+k),例如序数k为5,这时“A”“F”,“a”“f”,“B”“G”当加序数后的字母超过“Z”或“z”则 c=chr(Asc(c)+k-26)解密为加密的逆过程。,程序,6.7 综合应用,字符串处理,HELLO PASSENGER!welcome TO My taxi.,Hello passenger!Welcome to my taxi.,程序,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号