版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、关于过程调用与参数传递第一张,PPT共五十页,创作于2022年6月知识要点1、过程的基本概念2、sub过程定义格式定义方法窗体事件的执行顺序3、Function过程(定义格式、定义方法)第二张,PPT共五十页,创作于2022年6月7.3 过程调用7.3.1 事件过程的调用7.3.2 调用Sub过程7.3.3 调用Function过程7.3.4 调用其它模块中的公有过程 第三张,PPT共五十页,创作于2022年6月 事件过程由一个发生在Visual Basic中的事件来自动调用或者由同一模块中的其它过程显式调用。 请看示例。p1317.3.1 事件过程的调用第四张,PPT共五十页,创作于2022
2、年6月 Sub过程和function过程必须在事件过程或其他过程中显式调用,否则过程代码就永远不会被执行。 在调用程序时,程序执行到调用某通用过程的语句后,系统就会将控制转移到被调用的过程。在被调用的过程中,从第一条sub或function语句开始,依次执行其中的所有语句,当执行到end sub或end function语句后,返回到主调程序的断点,并从断点处继续程序的执行。7.3.2 调用Sub过程第五张,PPT共五十页,创作于2022年6月主调程序 调用过程AEnd Sub过程AEnd Sub调用Sub通用过程流程第六张,PPT共五十页,创作于2022年6月Sub子过程的调用(1) 用Ca
3、ll语句调用Sub过程 语法:Call 过程名(实在参数表) 实在参数的个数、类型和顺序,应该与被调用过程的形式参数相匹配,有多个参数时,用逗号分隔。如果被调用的过程是一个无参过程,则括号可以省略.第七张,PPT共五十页,创作于2022年6月Private Sub Command1_Click() Dim a As Integer, b As Integer a = Val(Text1.Text): b = Val(Text2.Text) Call add(a, b)End Sub例:Private Sub add(x As Integer, y As Integer) s = x + y T
4、ext3.Text = sEnd Sub调用add子过程第八张,PPT共五十页,创作于2022年6月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等价于:第九张,PPT共五十页,创作于2022年6月例7-2编写一个找出任意一个正整数的因子的程序Private Sub Command1_Click() Dim Inta As Integer, St As String Inta =
5、 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第十张,PPT共五十页,创作于2022年6月(2)把过程名作为一个语句来用语法:过程名 实参1,实参2它与(1)的不同点是:去掉了关键字call和实参列表的括号Private Sub Command1_Click()
6、 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第十一张,PPT共五十页,创作于2022年6月练一练:使用第2种调用方式修改例7.2。 Private Sub Command1_Click() Dim Inta As Integer, St As String Inta = Text1.Text Factor Inta,
7、 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第十二张,PPT共五十页,创作于2022年6月课堂练习2:编写一个实现两数交换的程序,要求程序中定义一个交换两数的通用过程。 Private Sub command1_click()Dim a%,b% a=text1.text b=text2.text call swap(a
8、,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第十三张,PPT共五十页,创作于2022年6月 调用Function过程的方法与调用Visual Basic内部函数方法相同。即在表达式中写出它的名称和相应的实在参数: Function 过程名(实在参数表) 1)调用Function过程与调用Sub过程不同,必须给参数加上括号,即使调用无参函数,括号也不能缺省; 2) Visual Bas
9、ic也允许像调用Sub过程那样调用Function过程。(即使用call语句和把函数名当作一个语句使用。)7.3.3 调用Function过程第十四张,PPT共五十页,创作于2022年6月例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 A
10、s Integer, ByVal B As Integer) 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第十五张,PPT共五十页,创作于2022年6月1. 调用窗体模块中的公有过程 Call Form1.ExamSub(实参表) 2调用标准模块中的公有过程 Call CommonSub (实在参数) 或 Call Module2.CommonSub(实参表) 7.3.4 调用其它模块中的公有过程(了解)第十六张,PPT共五十页,创作于2
11、022年6月课堂练习在调用过程中,下述说明中正确的是( )A)只能使用Call语句调用Sub过程B)调用Sub过程时,实在参数必须用括号括起来C)在表达式中调用Function过程时, 可以不用括号把实在参数括起来D)Function过程也可用Call语句调用第十七张,PPT共五十页,创作于2022年6月课堂练习在Visual Basic中,以下说法正确的是( )A)过程的定义可以嵌套,但过程的调用不能嵌套B)过程的定义不可以嵌套,但过程的调用能嵌套C)过程的定义和过程的调用均可以嵌套D)过程的定义和过程的调用均不可以嵌套第十八张,PPT共五十页,创作于2022年6月课堂练习在语句Public
12、 Sub Sort(I As Integer)中,I是一个按( )传递的参数A)地址B)值C)变量D)常量第十九张,PPT共五十页,创作于2022年6月7.4 参数的传递(重点、难点)7.4.1 形参与实参7.4.2 按值传递参数7.4.3 按地址传递参数7.4.4 数组参数7.4.5 对象参数第二十张,PPT共五十页,创作于2022年6月 在调用一个有参数的过程时,首先进行的是“形实结合”,即按传值传递或按地址传递方式,实现调用程序和被调用的过程之间的数据传递。Private Sub command1_click()Dim a%,b% a=text1.text b=text2.text ca
13、ll 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 形参与实参第二十一张,PPT共五十页,创作于2022年6月1. 形参 出现在Sub过程和Function过程的形参表中的变量名、数组名称之为形式参数,过程被调用之前,并未为其分配内存,其作用是用来接收传送给子过程的数据 形参可以是: 1) 除定长字符串变量之外的合法变量名; 2) 后面跟有左、右圆括号(注意:不
14、含下标)的数组名。 第二十二张,PPT共五十页,创作于2022年6月2. 实参 实际参数是指包含在过程调用的实参表中的变量,数组等。其作用是将它们的数据(数值或地址)传送给Sub或Function过程与其对应的形参变量。 实参可以是常量、表达式、有效的变量名、数组名组成。如call test(x2,true,a,st)算术表达式第二十三张,PPT共五十页,创作于2022年6月 参数传递是按对应“位置”结合而不是按名字结合,即第一个实参与第一形参结合,第二个实参与第二个形参结合,依此类推。3、参数传递(虚实结合) 参数传递指主调过程的实参(调用时已有确定值和内存地址的参数)传递给被调过程的形参,
15、参数的传递有两种方式:按值传递、按地址传递。形参前加“ByVal”关键字的是按值传递,缺省或加“ByRef”关键字的为按地址传递。 第二十四张,PPT共五十页,创作于2022年6月例: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实参形参第二十五
16、张,PPT共五十页,创作于2022年6月 说明:(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第二十六张,PPT共五十页,创作于2022年6月形 参 实 参变量 变量、常数、表达式、数组元素、对象数组 数组(2)形参与实参的个数必须相同,对应位置的参数类型必须一致。对应关系如下表第二十七张,PPT共五十页,创作于2022年6月
17、按值传递时,系统分配临时的变量单元给形参。系统仅把实参的值复制一份,然后把这个副本再传给形参。 被调过程执行时,对形参的任何改变,都不会影响实参变量。结论:按值传递,形参变,相应的实参不变。7.4.2 按值传递参数第二十八张,PPT共五十页,创作于2022年6月分析下列程序的值 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,
18、ByVal Y As Integer) X=X+20 Y=X+Y Print “X=“;X,”Y=“;Y End Sub1520返回地址1520MNXY100010021004100510031520返回地址3555MNXY10001002100410051003第二十九张,PPT共五十页,创作于2022年6月结论:按地址传递参数,形参变,相应的实参也跟着变7.4.3 按地址传递参数 按地址传递参数是把实参变量的地址传给形参,即系统并不分配临时的变量单元给形参,而是形参与实参共用同一存储单元,因此,被调过程执行时,形参变量的任一变化,实参也相应改变。 按地址传递参数可节省内存,执行效率高,但也
19、可能对程序运行产生某些干扰。第三十张,PPT共五十页,创作于2022年6月分析下列程序的值 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=“;Y End SubX=35 y=55M=35 N=20第三十一张,PPT共五十页,创作于
20、2022年6月1520返回地址1000(地址)20MNXY100010021004100510033520返回地址1000(地址)55MNXY10001002100410051003第三十二张,PPT共五十页,创作于2022年6月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!的值调用函数,循环变量作为实参Public Function fact
21、(n As Integer) As Integer fact = 1 Do While n 0 fact = fact * n n = n - 1 LoopEnd Function按地址传递参数产生不良干扰的示例:(1)循环变量作为实参Why?如何修改?结果:120正确结果应为:153第三十三张,PPT共五十页,创作于2022年6月参数数据类型转换的例子Private Sub Form_Click() Dim S as Single S=125.5 Call Convert(S),”12”+”.5”)End Sub如果为Call Convert(S),”125a”)呢?Private Sub
22、Convert(Inx As Integer,Sing As Single) Inx = Inx * 2 Sing = Sing + 23 Print “Inx+”;Inx,”sing=”;SingEnd Sub第三十四张,PPT共五十页,创作于2022年6月Private Sub Form_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
23、 As Integer, c As Integer) a = a + 10 b = b + 10 c = c + 10 f = a + b + cEnd Function调用函数语句,实参是传地址的。实参变量又出现在表达式中结果是571,而非161。why?(2)实参出现在表达式中第三十五张,PPT共五十页,创作于2022年6月 因为在print语句中,计算表达式时,优先执行函数调用。调用结束时f=39,而v1,v2,v3的值也变了,不是2,3,4 而是 12,13,14所以结果是:12+13+14*39=571第三十六张,PPT共五十页,创作于2022年6月Private Sub Form_
24、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修改成赋值语句结果为161 因为执行赋值语句时,计算右侧表达式的值不是首先调用函数,而是按从左到右的顺序进行的,即计算2+3+4*39第三十七张,PPT共五十页,创作于2022年6月如果修改成: Private Sub Form_Click() Dim v1 As Integer, v2 As Integer, v3 As Integer v1
25、= 2: v2 = 3: v3 = 4 V4=v1 + v2 + v3 * f(v1, v2, v3)*1.0) Print v4End Sub这是一个非整型的()也叫实型表达式 结果又是571了,因为计算实型表达式时优先调用函数第三十八张,PPT共五十页,创作于2022年6月 结论:函数调用的优先级是不确定的,与诸多因素有关。编程时尽量不把按地址传递的实参变量放在函数调用的前面,可能会使算术表达式的值难以预料。第三十九张,PPT共五十页,创作于2022年6月 形参数组只能是按地址传递的参数。 对应实参必须也是数组且数据类型必须和形参数组的数据类型相一致。7.4.4 数组参数第四十张,PPT共
26、五十页,创作于2022年6月对数组作形参作几点说明: 1)如果形参数组的类型是变长字符串型,则对应的实参数组的类型也必须是变长字符串型。第四十一张,PPT共五十页,创作于2022年6月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 preserve a(7) For i =1 to 7 a(i)=i Next IEnd sub形参是变长数组 错误:实参是定长数组第四
27、十二张,PPT共五十页,创作于2022年6月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形参是定长数组实参也是定长数组 2)如果形参数组的类型定长字符串型,则对应的实参数组的类型也必须是定长字符串型,但长度可以不同。第四十三张,PPT共五十页,创作于2022年6
28、月3)调用过程时,只要把传递的数组名放在实参表中即可,数组名后面不跟圆括号。Private sub form_click() Dim array(5) as string * 8 Call changedim(array)End sub第四十四张,PPT共五十页,创作于2022年6月4)在过程中不可以用dim语句对形参数组进行声明,否则将产生“重复声明”的错误 ,但是使用动态数组时,可以用redim语句改变形参数组的维界,重新定义数组的大小。当控制返回调用程序时,对应参数的维界也跟着发生变化。第四十五张,PPT共五十页,创作于2022年6月Private sub form_click() Dim array() as integer,i as integer Redim array(5) Print “调用前数组上界:”;ubound(array) Call changedim(array) P
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《GA 561-2005互联网上网服务营业场所信息安全管理系统管理端功能要求》专题研究报告
- 《FZT 95024-2017热转移印花机》专题研究报告
- 《GAT 760.3-2008公安信息化标准管理分类与代码 第3部分:标准性质代码》专题研究报告
- 《GAT 16.28-2012道路交通管理信息代码 第28部分:驾驶证限制申请原因代码》专题研究报告
- 养老院健康档案管理制度
- 人力资源制度
- 企业员工绩效反馈制度
- 企业加班管理制度
- 2026湖北省定向上海交通大学选调生招录备考题库附答案
- 2026湖南长沙矿产资源勘查中心公开招聘事业编制工作人员参考题库附答案
- 《肺癌的诊断与治疗》课件
- 人教版三年级上册数学应用题100题及答案
- 防污闪涂料施工技术措施
- 环卫清扫保洁、垃圾清运及绿化服务投标方案(技术标 )
- 房地产运营-项目代建及管理实务
- 神经病学教学课件:脑梗死
- GB/T 21393-2008公路运输能源消耗统计及分析方法
- GB/T 13803.2-1999木质净水用活性炭
- GB/T 12385-2008管法兰用垫片密封性能试验方法
- 中国近代史期末复习(上)(第16-20课)【知识建构+备课精研】 高一历史上学期期末 复习 (中外历史纲要上)
- GB 11887-2008首饰贵金属纯度的规定及命名方法
评论
0/150
提交评论