过程调用与参数传递讲稿.ppt

上传人:石*** 文档编号:51226335 上传时间:2022-10-18 格式:PPT 页数:50 大小:1.23MB
返回 下载 相关 举报
过程调用与参数传递讲稿.ppt_第1页
第1页 / 共50页
过程调用与参数传递讲稿.ppt_第2页
第2页 / 共50页
点击查看更多>>
资源描述

《过程调用与参数传递讲稿.ppt》由会员分享,可在线阅读,更多相关《过程调用与参数传递讲稿.ppt(50页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、关于过程调用与参数传递第一页,讲稿共五十页哦知识要点知识要点1、过程的基本概念、过程的基本概念2、sub过程过程定义格式定义格式定义方法定义方法窗体事件的执行顺序窗体事件的执行顺序3、Function过程(定义格式、定义方法)过程(定义格式、定义方法)第二页,讲稿共五十页哦7.3 7.3 过程调用过程调用7.3.1 7.3.1 事件过程的调用事件过程的调用7.3.2 7.3.2 调用调用SubSub过程过程7.3.3 7.3.3 调用调用FunctionFunction过程过程7.3.4 7.3.4 调用其它模块中的公有过程调用其它模块中的公有过程 第三页,讲稿共五十页哦 事件过程由一个发生在

2、事件过程由一个发生在Visual BasicVisual Basic中的事件来中的事件来自动调用或者由同一模块中的其它过程显式调用。自动调用或者由同一模块中的其它过程显式调用。请看示例。请看示例。p131p1317.3.1 7.3.1 事件过程的调用事件过程的调用第四页,讲稿共五十页哦 Sub Sub过程和过程和functionfunction过程必须在事件过程或其他过程过程必须在事件过程或其他过程中中显式调用显式调用,否则过程代码就永远不会被执行。,否则过程代码就永远不会被执行。在调用程序时,程序执行到调用某通用过程的语在调用程序时,程序执行到调用某通用过程的语句后,句后,系统就会将控制转移

3、到被调用的过程。系统就会将控制转移到被调用的过程。在被调用的在被调用的过程中,过程中,从第一条从第一条subsub或或functionfunction语句开始语句开始,依次执行其,依次执行其中的所有语句,中的所有语句,当执行到当执行到end subend sub或或end functionend function语句后语句后,返回到主调程序的断点返回到主调程序的断点,并,并从断点处继续从断点处继续程序的执行。程序的执行。7.3.2 7.3.2 调用调用SubSub过程过程第五页,讲稿共五十页哦主调程序主调程序 调用过程调用过程AEnd Sub过程过程AEnd Sub调用调用SubSub通用过程

4、流程通用过程流程第六页,讲稿共五十页哦Sub子过程的调用子过程的调用(1)用用Call语句语句调用调用Sub过程过程 语法:语法:Call 过程名(实在参数表)过程名(实在参数表)实在参数的实在参数的个数个数、类型类型和和顺序顺序,应该与被调,应该与被调用过程的形式参数相匹配,有多个参数时,用逗用过程的形式参数相匹配,有多个参数时,用逗号分隔。如果被调用的过程是一个无参过程,则号分隔。如果被调用的过程是一个无参过程,则括号可以省略括号可以省略.第七页,讲稿共五十页哦Private Sub Command1_Click()Dim a As Integer,b As Integer a=Val(T

5、ext1.Text):b=Val(Text2.Text)Call add(a,b)End Sub例:例:Private Sub add(x As Integer,y As Integer)s=x+y Text3.Text=sEnd Sub调用调用add子过程子过程第八页,讲稿共五十页哦Private Sub Command1_Click()Dim a As Integer,b As Integer a=Val(Text1.Text):b=Val(Text2.Text)s=a+b Text3.Text=sEnd Sub等价于:等价于:第九页,讲稿共五十页哦例7-2编写一个找出任意一个正整数的因子

6、的程序编写一个找出任意一个正整数的因子的程序Private Sub Command1_Click()Dim Inta As Integer,St As String Inta=Text1.Text Call Factor(Inta,St)Text2.Text=StEnd SubPrivate Sub Factor(ByVal N As Integer,S As String)Dim I As Integer For I=1 To N-1 If N Mod I=0 Then S=S&Str(I)Next IEnd Sub第十页,讲稿共五十页哦(2)把)把过程名作为一个语句过程名作为一个语句来用来

7、用语法:过程名语法:过程名 实参实参1,实参,实参2它与(它与(1)的不同点是:)的不同点是:去掉了关键字去掉了关键字call和和实参列表的实参列表的括号括号Private Sub Command1_Click()Dim a As Integer,b As Integer a=Val(Text1.Text):b=Val(Text2.Text)add a,bEnd SubPrivate Sub add(x As Integer,y As Integer)s=x+y Text3.Text=sEnd Sub第十一页,讲稿共五十页哦练一练练一练:使用第使用第2种调用方式修改例种调用方式修改例7.2。P

8、rivate Sub Command1_Click()Dim Inta As Integer,St As String Inta=Text1.Text Factor Inta,St Text2.Text=StEnd SubPrivate Sub Factor(ByVal N As Integer,S As String)Dim I As Integer For I=1 To N-1 If N Mod I=0 Then S=S&Str(I)Next IEnd Sub第十二页,讲稿共五十页哦课堂练习课堂练习2:编写一个实现两数交换的程序,要求程:编写一个实现两数交换的程序,要求程序中定义一个交换两

9、数的通用过程。序中定义一个交换两数的通用过程。Private Sub command1_click()Dim a%,b%a=text1.text b=text2.text call swap(a,b)text1.text=a text2.text=bEnd SubPrivate Sub Swap(X As Integer,Y As Integer)Dim temp As Integer Temp=X:X=Y:Y=TempEnd Sub第十三页,讲稿共五十页哦 调调用用FunctionFunction过过程程的的方方法法与与调调用用Visual Visual BasicBasic内内部部函函数数

10、方方法法相相同同。即即在在表表达达式式中中写写出出它它的的名名称称和和相相应应的的实在参数:实在参数:Function Function 过程名过程名(实在参数表实在参数表)1)1)调调用用FunctionFunction过过程程与与调调用用SubSub过过程程不不同同,必必须须给给参参数加上括号,即使调用无参函数,数加上括号,即使调用无参函数,括号也不能缺省括号也不能缺省;2)2)Visual BasicVisual Basic也允许像调用也允许像调用SubSub过程那样调用过程那样调用FunctionFunction过程。过程。(即使用即使用callcall语句和把函数名当作一个语句使语句

11、和把函数名当作一个语句使用。用。)7.3.3 7.3.3 调用调用FunctionFunction过程过程第十四页,讲稿共五十页哦例例7-3 编写程序,求两个正整数的最大公约数。编写程序,求两个正整数的最大公约数。Private Sub Form_Click()Dim N As Integer,M As Integer,G As Integer N=InputBox(输入N)M=InputBox(输入M)G=Gcd(N,M)Print N;和;M;的最大公约数是:;GEnd SubPrivate Function Gcd(ByVal A As Integer,ByVal B As Intege

12、r)As Integer Dim R As Integer R=A Mod B Do While R 0 A=B:B=R:R=A Mod B Loop Gcd=BEnd Function第十五页,讲稿共五十页哦1.1.调用调用窗体窗体模块中的模块中的公有公有过程过程 Call Form1.ExamSubCall Form1.ExamSub(实参表实参表)2 2调用调用标准标准模块中的模块中的公有公有过程过程 Call CommonSub Call CommonSub(实在参数实在参数)或或 Call Module2.CommonSub(Call Module2.CommonSub(实实参表参表

13、)7.3.4 7.3.4 调用其它模块中的公有过程调用其它模块中的公有过程(了解了解)第十六页,讲稿共五十页哦课堂练习课堂练习在调用过程中,下述说明中正确的是()A A)只能使用)只能使用CallCall语句调用语句调用SubSub过程过程B B)调用)调用SubSub过程时,实在参数必须用括号括起来过程时,实在参数必须用括号括起来CC)在表达式中调用)在表达式中调用FunctionFunction过程时,过程时,可以不用括号把实在参数括起来可以不用括号把实在参数括起来D D)FunctionFunction过程也可用过程也可用CallCall语句调用语句调用第十七页,讲稿共五十页哦课堂练习课

14、堂练习在Visual Basic中,以下说法正确的是()A A)过程的定义可以嵌套,但过程的调用不能嵌套)过程的定义可以嵌套,但过程的调用不能嵌套B B)过程的定义不可以嵌套,但过程的调用能嵌套)过程的定义不可以嵌套,但过程的调用能嵌套CC)过程的定义和过程的调用均可以嵌套)过程的定义和过程的调用均可以嵌套D D)过程的定义和过程的调用均不可以嵌套)过程的定义和过程的调用均不可以嵌套第十八页,讲稿共五十页哦课堂练习课堂练习在语句Public Sub Sort(I As Integer)中,I是一个按()传递的参数A A)地址)地址B B)值)值CC)变量)变量D D)常量)常量第十九页,讲稿共

15、五十页哦7.4 7.4 参数的传递参数的传递(重点、难点重点、难点)7.4.1 7.4.1 形参与实参形参与实参7.4.2 7.4.2 按值传递参数按值传递参数7.4.3 7.4.3 按地址传递参数按地址传递参数7.4.4 7.4.4 数组参数数组参数7.4.5 7.4.5 对象参数对象参数第二十页,讲稿共五十页哦 在调用一个有参数的过程时在调用一个有参数的过程时,首先进行的是首先进行的是“形实结形实结合合”,即按传值传递或按地址传递方式,实现调用程序,即按传值传递或按地址传递方式,实现调用程序和被调用的过程之间的数据传递。和被调用的过程之间的数据传递。Private Sub command1

16、_click()Dim a%,b%a=text1.text b=text2.text call swap(a,b)text1.text=a text2.text=bEnd SubPrivate Sub Swap(X As Integer,Y As Integer)Dim temp As Integer Temp=X X=Y Y=TempEnd Sub实参实参形参形参7.4.1 7.4.1 形参与实参形参与实参第二十一页,讲稿共五十页哦1.1.形参形参 出出现现在在SubSub过过程程和和FunctionFunction过过程程的的形形参参表表中中的的变变量量名名、数数组组名名称称之之为为形形式

17、式参参数数,过过程程被被调调用用之之前前,并并未未为为其其分分配配内存内存,其作用是,其作用是用来接收传送给子过程的数据用来接收传送给子过程的数据 形参可以是:形参可以是:1)1)除定长字符串变量之外的合法变量名;除定长字符串变量之外的合法变量名;2)2)后后面面跟跟有有左左、右右圆圆括括号号(注注意意:不不含含下下标标)的的数组名。数组名。第二十二页,讲稿共五十页哦2.2.实参实参 实实际际参参数数是是指指包包含含在在过过程程调调用用的的实实参参表表中中的的变变量量,数数组组等等。其其作作用用是是将将它它们们的的数数据据(数数值值或或地地址址)传传送送给给Sub或或Function过程与其对

18、应的形参变量。过程与其对应的形参变量。实实参参可可以以是是常常量量、表表达达式式、有有效效的的变变量量名名、数数组组名名组组成。成。如如call test(x2,true,a,st)算术表达式算术表达式第二十三页,讲稿共五十页哦 参数传递是按对应参数传递是按对应“位置位置”结合而不是按名字结合,即结合而不是按名字结合,即第一个实参与第一形参结合,第二个实参与第二个形参结第一个实参与第一形参结合,第二个实参与第二个形参结合,依此类推。合,依此类推。3 3、参数传递(虚实结合)、参数传递(虚实结合)参数传递指主调过程的实参(调用时参数传递指主调过程的实参(调用时已有确定值和内存已有确定值和内存地址

19、的参数地址的参数)传递给被调过程的形参,参数的传递有两种方式:)传递给被调过程的形参,参数的传递有两种方式:按值传递、按地址传递。形参前加按值传递、按地址传递。形参前加“ByVal”关键字的是按关键字的是按值值传递传递,缺省缺省或加或加“ByRef”关键字的为按关键字的为按地址传递地址传递。第二十四页,讲稿共五十页哦例:例:Private Sub command1_click()Dim a%,b%a=text1.text b=text2.text call swap(a,b)text1.text=a text2.text=bEnd SubPrivate Sub Swap(X As Intege

20、r,Y As Integer)Dim temp As Integer Temp=X X=Y Y=TempEnd Sub实参实参形参形参第二十五页,讲稿共五十页哦 说明:(说明:(1 1)形参表和实参表中的对应变量名可以不)形参表和实参表中的对应变量名可以不必相同。必相同。Private sub examsub(x as integer,y as single).End subPrivate sub form_click()dim x as integer,y as single .Call examsub(y,x)End sub第二十六页,讲稿共五十页哦形形 参参 实实 参参变量变量 变量、常

21、数、表达式、数组元素、对象变量、常数、表达式、数组元素、对象数组数组 数组数组(2 2)形参与实参的个数必须相同,对应位置的参数)形参与实参的个数必须相同,对应位置的参数类型必须一致。对应关系如下表类型必须一致。对应关系如下表第二十七页,讲稿共五十页哦 按按值值传递时,系统分配临时的变量单元给形参。系传递时,系统分配临时的变量单元给形参。系统仅把实参的值复制一份,然后把这个统仅把实参的值复制一份,然后把这个副本副本再传给形再传给形参。参。被调过程执行时,对形参的任何改变,都不会影响实被调过程执行时,对形参的任何改变,都不会影响实参变量。参变量。结论:按值传递,形参变,相应的实参不变。结论:按值

22、传递,形参变,相应的实参不变。7.4.2 7.4.2 按按值值传递参数传递参数第二十八页,讲稿共五十页哦分析下列程序的值 Private Sub Command1_Click()Dim M As Integer,N As Integer M=15:N=20 Call Value_Change(M,N)Print M,NEnd SubPrivate Sub Value_Change(ByVal X As Integer,ByVal Y As Integer)X=X+20 Y=X+Y Print“X=“;X,”Y=“;Y End Sub1520返回地址返回地址1520MNXY10001002100

23、4100510031520返回地址返回地址3555MNXY10001002100410051003第二十九页,讲稿共五十页哦结论:按地址传递参数,形参变,相应的实结论:按地址传递参数,形参变,相应的实参也跟着变参也跟着变7.4.3 7.4.3 按按地址地址传递参数传递参数 按按地址地址传递参数是把实参变量的传递参数是把实参变量的地址地址传给形参,传给形参,即系统并不分配临时的变量单元给形参,而是即系统并不分配临时的变量单元给形参,而是形参与形参与实参共用同一存储单元实参共用同一存储单元,因此,被调过程执行时,形,因此,被调过程执行时,形参变量的任一变化,实参也相应改变。参变量的任一变化,实参也

24、相应改变。按按地址地址传递参数可节省内存,执行效率高,但也可能传递参数可节省内存,执行效率高,但也可能对程序运行产生某些干扰。对程序运行产生某些干扰。第三十页,讲稿共五十页哦分析下列程序的值分析下列程序的值 Private Sub Command1_Click()Dim M As Integer,N As Integer M=15:N=20 Call Value_Change(M,N)Print M,N End Sub Private Sub Value_Change(X As Integer,by value Y As Integer)X=X+20 Y=X+Y Print“X=“;X,”Y=

25、“;Y End SubX=35 y=55M=35 N=20第三十一页,讲稿共五十页哦1520返回地址返回地址1000(地址地址)20MNXY100010021004100510033520返回地址返回地址1000(地址(地址)55MNXY10001002100410051003第三十二页,讲稿共五十页哦Private Sub Form_Click()Dim sum As Integer,i As Integer For i=5 To 1 Step-1 sum=sum+fact(i)Next i Print sum=;sumEnd Sub编写程序计算编写程序计算5!+4!+3!+2!+1!的值的

26、值调用函数,循环变量调用函数,循环变量作为实参作为实参Public Function fact(n As Integer)As Integer fact=1 Do While n 0 fact=fact*n n=n-1 LoopEnd Function按地址传递参数产生不良干扰的示例:按地址传递参数产生不良干扰的示例:(1)循环变量循环变量作为实参作为实参Why?如何修改?如何修改?结果:结果:120120正确结果应为:正确结果应为:153153第三十三页,讲稿共五十页哦参数数据类型转换的例子Private SubPrivate Sub Form_Click()Form_Click()Dim

27、S as Single Dim S as Single S=125.5 S=125.5 Call Convert(S),”12”+”.5”)Call Convert(S),”12”+”.5”)End SubEnd Sub如果为如果为Call Convert(S),”125a”)Call Convert(S),”125a”)呢?呢?Private Sub Convert(Inx As Integer,Sing As Single)Inx=Inx*2 Sing=Sing+23 Print“Inx+”;Inx,”sing=”;SingEnd Sub第三十四页,讲稿共五十页哦Private Sub F

28、orm_Click()Dim v1 As Integer,v2 As Integer,v3 As Integer v1=2:v2=3:v3=4 Print v1+v2+v3*f(v1,v2,v3)End SubPublic Function f(a As Integer,b As Integer,c As Integer)a=a+10 b=b+10 c=c+10 f=a+b+cEnd Function调用函数语句,调用函数语句,实参是传地址实参是传地址的。的。实参变量又出现在实参变量又出现在表达式中表达式中结果是结果是571571,而非,而非161161。why?why?(2)实参出现在表达式

29、中)实参出现在表达式中第三十五页,讲稿共五十页哦 因为因为在在print语句中语句中,计算表达式时,计算表达式时,优优先执行函数调用先执行函数调用。调用结束时。调用结束时f=39,而,而v1,v2,v3的值也变了,的值也变了,不是不是2,3,4 而是而是 12,13,14所以结果是:所以结果是:12+13+14*39=571第三十六页,讲稿共五十页哦Private Sub Form_Click()Dim v1 As Integer,v2 As Integer,v3 As Integer v1=2:v2=3:v3=4 V4=v1+v2+v3*f(v1,v2,v3)Print v4End Sub修

30、改成赋值语句修改成赋值语句结果为结果为161 因为因为执行赋值语句执行赋值语句时,计算右侧表达式的值不是首先调时,计算右侧表达式的值不是首先调用函数,而是用函数,而是按从左到右的顺序按从左到右的顺序进行的,即计算进行的,即计算2+3+4*39第三十七页,讲稿共五十页哦如果修改成如果修改成:Private Sub Form_Click()Dim v1 As Integer,v2 As Integer,v3 As Integer v1=2:v2=3:v3=4 V4=v1+v2+v3*f(v1,v2,v3)*1.0)Print v4End Sub这是一个非整型的这是一个非整型的()也也叫实型表达式叫

31、实型表达式 结果又是结果又是571了,因为了,因为计算实型表达式时优先调用函数计算实型表达式时优先调用函数第三十八页,讲稿共五十页哦 结论结论:函数调用的优先级是不确定的,函数调用的优先级是不确定的,与诸多因素有关。编程时尽量不把按地址与诸多因素有关。编程时尽量不把按地址传递的实参变量放在函数调用的前面,可传递的实参变量放在函数调用的前面,可能会使算术表达式的值难以预料。能会使算术表达式的值难以预料。第三十九页,讲稿共五十页哦 形参数组形参数组只能是按只能是按地址地址传递的参数。传递的参数。对应实参对应实参必须也是必须也是数组数组且数据类型必须和形参且数据类型必须和形参数组的数据类型相一致数组

32、的数据类型相一致。7.4.4 7.4.4 数组参数数组参数第四十页,讲稿共五十页哦对数组作形参作几点说明:对数组作形参作几点说明:1)如果形参数组的类型是变长字符串型,)如果形参数组的类型是变长字符串型,则对应的实参数组的类型也必须是变长字则对应的实参数组的类型也必须是变长字符串型。符串型。第四十一页,讲稿共五十页哦Private sub form_click()Dim array(5)as string*8 Call changedim(array)End subPrivate sub changedim(a()as string)Dim i as integer Redim preserv

33、e a(7)For i=1 to 7 a(i)=i Next IEnd sub形参是变长形参是变长数组数组 错误:实参是错误:实参是定长数组定长数组第四十二页,讲稿共五十页哦Private sub form_click()Dim array(5)as string*10 Call changedim(array)End subPrivate sub changedim(a()as string*8)Dim i as integer Redim preserve a(7)For i=1 to 7 a(i)=i Next IEnd sub形参是定形参是定长数组长数组实参也是定实参也是定长数组长数组

34、 2)如果形参数组的类型定长字符串型,则对应的实参数组的)如果形参数组的类型定长字符串型,则对应的实参数组的类型也必须是定长字符串型,但长度可以不同。类型也必须是定长字符串型,但长度可以不同。第四十三页,讲稿共五十页哦3)调用过程时,只要把传递的数组名放在)调用过程时,只要把传递的数组名放在实参表中即可,数组名后面不跟圆括号。实参表中即可,数组名后面不跟圆括号。Private sub form_click()Dim array(5)as string*8 Call changedim(array)End sub第四十四页,讲稿共五十页哦4)在过程中不可以用)在过程中不可以用dim语句对形参数组

35、语句对形参数组进行声明,否则将产生进行声明,否则将产生“重复声明重复声明”的错的错误误,但是使用动态数组时,可以用,但是使用动态数组时,可以用redim语句改变形参数组的维界,重新定义数组语句改变形参数组的维界,重新定义数组的大小。当控制返回调用程序时,对应参的大小。当控制返回调用程序时,对应参数的维界也跟着发生变化。数的维界也跟着发生变化。第四十五页,讲稿共五十页哦Private sub form_click()Dim array()as integer,i as integer Redim array(5)Print“调用前数组上界:调用前数组上界:”;ubound(array)Call

36、changedim(array)Print“调用后数组上界:调用后数组上界:”;ubound(array)Print“数组各元素的值为:数组各元素的值为:”For i=1 to ubound(array)print array(i);Next IEnd subPrivate sub changedim(a()as interger)Dim i as integer Redim preserve a(7)For i=1 to 7 a(i)=i Next IEnd sub第四十六页,讲稿共五十页哦 在在Visual BasicVisual Basic中也可以把对象作为参数向过程中也可以把对象作为参

37、数向过程传递。传递。在形参表中,把形参变量的类型声明为在形参表中,把形参变量的类型声明为“ControlControl”就可以向过程传递就可以向过程传递控件控件。若把类型声明为若把类型声明为“FormForm”则可向过程传递则可向过程传递窗体窗体。对象的传递只能是按对象的传递只能是按地址地址传递。传递。7.4.5 7.4.5 对象参数对象参数第四十七页,讲稿共五十页哦Private Sub frmarg(f As Form)f.Left=(Screen.Width-f.Width)/2 f.Top=(Screen.Height-f.Height)/2 frmfirst.Hide f.ShowE

38、nd SubPrivate Sub objarg(lad As Control)lad.BackColor=vbRed lad.ForeColor=vbGreen lad.Font=14 lad.FontItalic=True lad.Caption=对象参数的传递对象参数的传递End Sub传窗体传窗体传控件传控件第四十八页,讲稿共五十页哦Private Sub cmd1_Click()Call objarg(lab1)End SubPrivate Sub cmd2_Click()Call frmarg(frmsecond)End SubPrivate Sub Form_Load()frmfirst.Left=2000frmfirst.Top=1500End Sub将将lab1作为实参传作为实参传递给过程递给过程将窗体将窗体2作为实参传递作为实参传递给过程给过程第四十九页,讲稿共五十页哦感感谢谢大大家家观观看看第五十页,讲稿共五十页哦

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁