函数和过程PPT课件_第1页
函数和过程PPT课件_第2页
函数和过程PPT课件_第3页
函数和过程PPT课件_第4页
函数和过程PPT课件_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

1、在处理具体问题的程序设计时,常常会遇到需要多次执行能够完成一个或几个功能的程序段或多次按某一规律计算某一类数值的问题。 Visual Basic系统提供了过程。 过程是用来执行一个特定任务的一段程序代码。VB应用程序(又称工程或项目)由若干过程组成。第1页/共47页过程分两类:n事件过程:当发生某个事件(click)时,对该事件做出响应的程序段。n通用过程:当多个 不同的事件过程可能需要使用一段相同的程序代码,可以把这一段代码独立出,作为一个过程。第2页/共47页通用过程以“Function”保留字开始的函数过程以“sub”保留字开始的子程序过程第3页/共47页(一一)Function函数过程

2、函数过程VB提供了许多内部函数,如Sin(N),Sqr(N)等,在编写程序时,只需写出函数名和相应的参数,就可得到函数值。同内部函数一样,函数过程也有一个返回值。1、函数(Function)的定义函数过程的定义方法也有以下两种。(1)利用“工具”菜单下的“添加过程”命令定义第4页/共47页 Public|PrivateStaticFunction 函数名()As函数名=表达式Exit FunctionEnd Function函数体(2)用代码窗口直接定义第5页/共47页(1) Public声明该自定义函数可以在所有模块的任何子程序中使用。Private 声明该函数可以在定义它的模块的任何子程序

3、中使用。若无public 和private,则系统默认为public;Static 表示在该函数内所定义的变量在函数结束时使用的变量值将保留到下次该函数被访问时。如果省略,则每次执行该自定义时该区域的变量都重新置初值。说明:第6页/共47页(2)函数名:命名规则与变量名规则相同。但不能与系统的内部函数或其它通用子过程同名,也不能与已定义的全局变量和本模块中模块级变量同名。(3)在函数体内,函数名可以当变量使用,函数的返回值就是通过对函数名的赋值语句来实现的,在函数中至少要对函数名赋值一次。(4)AS类型:是指函数返回值的类型,若省略,则函数返回变体类型值(Variant)。 第7页/共47页(

4、)Exit Function:表示退出函数过程,常常是与选择结构(If或Select Case语句)联用,即当满足一定条件时,退出函数过程。()参数列表:形式参数通常简称“形参”,仅表示形参的类型、个数、位置,定义时是无值的,只有在被调用时,与实参结合后才获得相应的值。 第8页/共47页参数的定义形式: ByValByRef变量名( )As 类型,,nByVal表示当该过程被调用时,参数是按值传递的;在过程中的变化不会返回到主程序。n缺省或ByRef表示当该过程被调用时,参数是按地址传递的,即参数值在过程中的任何变化都返回主程序。第9页/共47页例:下面的全局函数MyAbs计算给定数的绝对值P

5、ublic function MyAbs(dbl1 as Double) as DoubleIf dbl1=0 Then MyAbs =dbl1Else MyAbs=-dbl1End ifEnd function函数值表达式第10页/共47页Private Function Fac(ByVal n As Long) As Long Dim F&, i% F = 1 For i = 1 To n F = F * i Next i End FunctionFac = F函数=返回值例:用函数求阶层,填空。第11页/共47页2、函数的调用调用形式如下:变量名函数名(实参列表)其功能是求得函数

6、的返回值。说明:u 在调用时实参和形参的数据类型、顺序、个数必须匹配。u 函数过程不能作为单独的语句加以调用,必须作为表达式或表达式的一部分。 变量名 = 函数名(参数列表)第12页/共47页下面的语句调用上例中的MyAbs函数。int1 =MyAbs(-5)Sng1=sin(2*MyAbs(3)-MyAbs(-2)第13页/共47页Function jch&(n%) Dim i% jch = 1 For i = 1 To n jch = jch * i Next i End FunctionPrivate Sub Form_Click() Dim d& d = jch(7)+

7、 jch(11) jch(10) Print 7!+11!10!=;dEnd Sub调用过程的语句为:jch(7),jch(11),jch(10)第14页/共47页 例43 显示11000之间的素数。要求编制函数过程,用于判断1个整数是否是素数例4 44 4 计算a a数组中的最大值与b b数组中最大值之差第15页/共47页(二)sub过程(子过程)1、子过程的定义形式如下:Public|PrivateStatic Sub 子过程名(形参表) 语句组 Exit Sub 语句组End Sub Public Sub sum(x%,y%,s%) s = x + y End Sub第16页/共47页说

8、明: 1)定义的关键字是sub 和end sub 2)无返回值,亦即无s类型 3) 中可以有多个形参,它们之间用逗号“,”隔开。也可以无形式参数,同时括号也应无.第17页/共47页Public Sub Swap( X As Integer, Y As Integer) Dim Temp As Integer Temp=X X=Y Y=TempEnd Sub例例: :编一个交换两个整型变量值的子过程。编一个交换两个整型变量值的子过程。第18页/共47页2、子过程的调用、子过程的调用参数必须在括号内(1) 用Call语句调用Sub过程 格式:Call 过程名(参数列表)例如: Call swap(

9、a,b)(2) 把过程名作为一个语句来使用 格式: 过程名参数列表 与第一种调用方法相比,这种调用方式省略了关键字Call,去掉了“参数列表”的括号。 例如: swap a,b第19页/共47页 子过程调用的执行过程:子过程调用的执行过程:Private Sub CmdOK() Call Swap(a,b) Swap a,bEnd SubPrivate Sub Swap(x%,y%) Dim temp% Temp=X X=Y Y=TempEnd Sub第20页/共47页程序如下:Sub jch(n%,p&) Dim i% p = 1 For i = 1 To n p = p * i N

10、ext IEnd SubPrivate Sub Form_Click() Dim a&,b&,c&,d& Call jch(7,a) Call jch(11,b) Call jch(10,c) d = a + bc Print 7!+11!-10!=;dEnd Sub第21页/共47页sub过程与function函数过程的区别区别:(1)子过程以关键字Sub开始,函数以关键字Function开始。(2)子过程没有返回值,没有类型; 函数有返回值,有类型。(3)调用时,子过程是一条独立的语句; 但函数不能作为独立的语句加以调用,必须参与表达式运算。第22页/共47

11、页例47 将数组中各元素按值从大到小排序,要求将数组排序编写为sub过程第23页/共47页参数传递参数传递 在调用过程时,一般主调过程与被调过程之间有数据传递,即将主调过程的实参传递给被调过程的形参,完成实参与形参的结合,然后执行被调过程体。主调过程:调用函数语句所在的母体被调过程:调用语句中的过程如:Form_click()为主调过程,jch()为被调过程第24页/共47页n形式参数(简称”形参“)是指在定义sub子过程或Function函数中后面圆括号内的参数。它用来接收传送给过程的数据。Public Function psqr(a1 as Integer,b1 as Integer) a

12、s Integer psqr=Sqr(a12+b12)+a1*b1End Function形参第25页/共47页实际参数n实际参数(简称“实参”)是指在调用sub或Function时,写入子过程名或函数名后面圆括号内的参数。它将它们的数据(数值或地址)传送给sub或Function与其对应的形式参数。实参可以是常量、表达式、有效的变量名、数组名等。Sub form_click() . . x=psqr(1,2) .End sub第26页/共47页(1 1)传值)传值传值的参数传递过程是:当调用一个过程时,系统传值的参数传递过程是:当调用一个过程时,系统将实参的将实参的值复制给形参值复制给形参,

13、之后实参与形参便断开了联系。,之后实参与形参便断开了联系。被调过程对形参被调过程对形参的操作是在形参自己的存储单元中进行,的操作是在形参自己的存储单元中进行,当过程调用结束时,这当过程调用结束时,这些形参所占用的存储单元也同时被释放。因此些形参所占用的存储单元也同时被释放。因此在过程中对形参的在过程中对形参的任何操作都不会影响到实参。任何操作都不会影响到实参。形参加ByVal.两种方式:传值和传地址第27页/共47页(2)(2)传址传址 传址的参数传递过程是:当调用一个过程时,它传址的参数传递过程是:当调用一个过程时,它将实参的地址传递给形将实参的地址传递给形参参。因此在被调过程体中对形参的任

14、何操作都变成了对相应实参的操作,因。因此在被调过程体中对形参的任何操作都变成了对相应实参的操作,因此此实参的值就会随形参的改变而改变。实参的值就会随形参的改变而改变。当参数是字符串或数组时,使用传址当参数是字符串或数组时,使用传址传递直接将实参的地址传递给过程,会使程序的效率提高。传递直接将实参的地址传递给过程,会使程序的效率提高。形参加ByRef。若省略,则按地址传递。第28页/共47页Private Sub Command1_Click() a% = 10 b% = 20 Swap1 a, b print a,bEnd SubSub Swap1(ByVal x%, ByVal y%) t%

15、 = x: x = y: y = tEnd Sub第29页/共47页传值(形参前有ByVal说明)实参的值不随形参的值变化而改变第30页/共47页Private Sub Command2_Click() a% = 10 b% = 20 Swap2 a, b print a, bEnd SubSub Swap2(x%, y%) t% = x: x = y: y = tEnd Sub第31页/共47页传址(形参前有ByRef说明)实参的值随形参值的改变而改变第32页/共47页例:单击Command1后的运行结果Sub SS(ByVal X%, ByRef Y%, Z%)X = X + 1Y = Y

16、 + 1Z = Z + 1End SubPrivate Sub Command1_Click()Dim A%, B%, C%A = 1B = 2C = 3Call SS(A, B, C)Print A; B; CEnd Sub 1 3 4第33页/共47页注意: 如果在调用时该形参对应的实参是常量或者表达式,则按值传递方式调用过程。Private Sub Command1_Click()Dim A%, B%, C%A = 1B = 2C = 3Call SS(A, 2, C+1)Print A; B; CEnd Sub Sub SS(ByVal X%, ByRef Y%, Z%)X = X +

17、 1Y = Y + 1Z = Z + 1End Sub1 2 3第34页/共47页数组参数的传递VB允许把数组作为实参传送到过程中。例如:Sub s( a() ,b() .End sub该过程有两个参数,这两个参数都是数组。用数组作为参数时,应在数组后面加上一对括号。可以用下面的语句调用该过程:Call s( p (),q()把数组p和q传送给ab。当用数组传递时,使用传地址方式第35页/共47页246810p数组实参数组与形参数组p(0)=2a(0)=2如果在过程中改变了a数组的值,例如a(4)=2,那么在执行完过程后,数组p的第4个元素的值变为20。a数组第36页/共47页注意:n过程定义

18、时,形参列表中的数组用数组名后的一对空的圆括号表示,维数省略。而在调用时不需要一定要加括号。n用数组作为过程的参数时,进行的不是“值”的传递,而是“址”的传递。第37页/共47页例:输入一维数组,对数组中的值进行求积,用函数实现。例:输入一维数组,对数组中的值进行求积,用函数实现。Private Sub form_Click() Dim a(3) As Integer Dim k As Integer, j As IntegerEnd SubFor j = LBound(a) To UBound(a) a (j) = j1Next jk = tim(a( )Print k数组作实参省略维数函数

19、返回一个值第38页/共47页Private Function tim(n( ) As Integer) Dim t%, i% t = 1 For i = LBound(n) To UBound(n) t = t * n(i) Next i tim = tEnd Function数组作形参省略维数第39页/共47页例49 编制sub过程,用于在数组中找出最大值、最小值。第40页/共47页习题:设function pd()是自定义函数;函数被调用多次,请仔细分析每次调用后有关变量的变化。Function pd(ByVal x as Integer,y as Integer) As integer

20、Dim m as Integer Dim n as Integer m=x+y : x=x+1 y=y+1: n=x-y print “m=“;m;”x=”;x ;”y=”;y _ ;”n=”;n pd=nEnd FunctionSub Form_click() Dim a as integer,b as integer Dim c as integer,d as integer a=2:b=3:c=0 d=pd(a,b) print “a=”;a,”b=“;b d=pd(a,b) print “a=“;a,”b=“;b d=pd(a+b,c) print “a=“;a,”b=”;bEnd sub第41页/共47页(1) 当第一次调用函数pd时,实在参数a 取代形式参数x,形式参数y 等于实在参数b的地址,即x=2、y=b.由于y是地址传递,所以m=x+y相当于m=x+b、y=y+1相当于b=b+1,那么语句执行结果为:m=5 x=3 y=4 n=-1返

温馨提示

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

评论

0/150

提交评论