版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1Visual Basic 6.0 程序设计教程第四章 函数和过程2主要内容自定义过程、函数的定义过程掌握限定词Private和PublicStatic 和 DimByVal ByRef3事件过程 (1)窗体事件Private Sub Form_Click()语句组End Sub (2)控件事件Private Sub Command1_Click()语句组 End Sub函数与过程内部函数i=sqr(4*a-(b+c)/(a*c)24函数与过程 内部函数是VB事先定义好的函数,我们可以直接拿过来用,但内部函数并不能解决所有的问题,有很多地方需要我们亲自动手,编写自定义的函数或者过程。完成特定功
2、能的一段封装起来的程序。函数过程内部函数自定义函数事件过程自定义子过程5函数和过程的区别:函数有返回值,过程无返回值。函数与过程MsgBox函数和MsgBox过程 函数形式:变量名 = MsgBox(提示,按钮,标题) 过程形式:MsgBox 提示,按钮,标题例:3-466Private Sub Form_Click() Dim i%, r%, s#: Const PI = 3.14 r = InputBox(请输入圆的半径, 求圆的面积) s = PI * r * r i = MsgBox(圆的面积: & s,1, 计算的最终结果)End SubPrivate Sub Form_Click(
3、) Dim i%, r%, s#: Const PI = 3.14 r = InputBox(请输入圆的半径, 求圆的面积) s = PI * r * r MsgBox 圆的面积: & s,1, 计算的最终结果End Sub7自定义函数8Function Fac( n As Long) As Long Dim F&, i% F = 1 For i = 1 To n F = F * i Next i Fac = FEnd FunctionPrivate Sub CmdOk_Click() Dim m&, n&, c&, i% Dim FacN&, FacM&, FacNM& m = InputB
4、ox(请输入m的值, 组合公式) n = InputBox(请输入n的值, 组合公式) c = Fac(n) / (Fac(m) * Fac(n - m) lblResult.Caption = Str(c)End Sub 可以将代码中功能重复的部分用自定义函数来编写,这将大大提高编程的效率。自定义函数9Static Public | Private Function 函数名(形参列表) As 类型 局部 变量或常数定义语句函数名 = 表达式End Function自定义函数定义方式 Function 函数名(形参列表) As End FunctionFunction Fac( n As Lo
5、ng) As Long Dim F&, i% F = 1 For i = 1 To n F = F * i Next i Fac = FEnd Function就是一个变量作用域,起作用的范围10Private,Public,Static “Private”限定所编制的函数只限于在本窗体中被调用;“Public”声明该函数可以被其他窗体、模块调用;选项“Public”是缺省值。 “Static”声明函数名以及函数中声明的局部变量都是静态变量(详见4.3.3节),Dim近光 ,Dynamics 函数体为实现该函数运算的若干声明语句和执行语句,其中至少应有1个赋值语句为函数名赋值。函数被调用后的返
6、回值,为返回时函数名的当前值。11自定义函数调用方式调用的语法形式: 函数名()说明: 函数调用时实参和形参的数据类型、顺序、个数必须匹配; 例如:c = Fac(n) / (Fac(m) * Fac(n - m) 由于函数过程名返回一个值,故函数不能作为单独的语句加以调用,必须作为表达式或表达式的一部分,再配以其他的语法成分构成语句。函数的主要功能是求得函数的返回值。12函数过程的调用: 变量名 = 函数名(参数列表)参数列表称为实参,它必须与形参保持个数相同,位置与类型一一对应。f(x,y) = 3x+4ya=f(3,4)+f(2,1)定义:Function area(x!, y!, z!
7、) As Single 调用:s1 = area(a, b, c)s2= area(c, e, d)abcd efgS1S2S3 例:已知多边形的各条边的长度,要计算多边形的面积。13自定义函数参数形参:在函数定义中的参数列表称为形参。形参标明了在调用函数时参数的个数、位置和类型。形参仅仅是一个符号,是要被实际数据所代替的。实参:函数调用中的参数列表就是实参。实参就是替换掉形参,参与运算的实际数据。参数传递:程序在调用函数时,实参代替形参的过程。参数:就是指函数操作时所需要的数据。 14自定义函数参数参数传递:实参代替形参的时候,是用相对应的实参把中所遇到的全部形参一一替换掉。数学上函数的使用
8、:F(x,y)=2x+5y-xyx, y: 形参a=3, b=5a, b: 实参F(a,b)=?F(a,b)=2a+5b-ab =2*3+5*5-3*5 =16实参代替每一处存在的形参执行过程体中的代码获得函数的结果VB中函数的参数传递与数学中的过程是一样的。位置排序对应,数据类型一致,个数一致15例4-3 显示1100之间的素数。Private Function prime(n As Integer) As Boolean Dim i As Integer If n Sqr(n) Then prime = True Else prime = False End IfEnd Function1
9、6SUB过程定义方式SUB过程其实质就是去执行其中的一系列语句来实现某种功能;语句全部执行完就是过程的任务完成之时。而函数的执行目的是为了追求函数的返回值,再利用此值参与运算。SUB过程的定义形式如下:Public|PrivateStatic Sub (形参列表) SUB 过程体 Exit Sub SUB 过程体End SubPrivate Sub Form_Click()语句组End SubPrivate Sub Form_事件名()语句组End Sub17说明: SUB过程名:命名规则与变量名规则相同。 SUB过程无返回值,亦即无 内不存在类似中用来返回值的特殊赋值语句。形参列表:形式参数
10、通常简称“形参”,仅表示形参的类型、个数、位置,定义时是无值的,只有在过程被调用时,虚实参结合后才获得相应的值。 参数的定义形式:ByValByRef 变量名 As 类型,ByVal表示当该过程被调用时,参数是按值传递的(值的拷贝);ByRef或缺省表示当该过程被调用时,参数是按地址传递的,所有操作是针对实参。18 a=10 b=20 x=y=t=a = 10:b = 20exchange(a,b)print a=;a,b=;bsub exchange(ByVal x!, ByVal y!)dim t! t = x : x=y: y = t t = : = : = tend sub值拷贝,co
11、py实参没有任何变化19 a=10 b=20 x=y=t=a = 10:b = 20exchange(a,b)print a=;a,b=;bsub exchange(ByRef x!, ByRef y!)dim t! t = x : x=y: y = t t = : = : = tend sub传递地址对形参的操作就是对实参的操作20SUB过程的建立 通过 “工具”菜单中的“添加过程”命令,出现“添加过程”对话框(见右图),选择过程类型(子过程、函数、属性、事件)及作用范围(公有的Public、私有的Private),单击确定后得到一个过程或函数定义的结构框架(模板),如:Public Sub
12、 Sort( )End Sub21SUB过程调用方式 两种调用方式: (1) SUB过程名 实参列表 (2) Call SUB过程名(实参列表)使用Call关键字时,参数两边要加圆括号省略Call关键字,则必须省略参数两边的圆括号。22Private Sub Form_Click() Dim First%, Second% First = Val(InputBox(请输入第一个数:, First) Second = Val(InputBox(请输入第二个数:, Second) Print 初始值:First=; First, Second=; Second swap First, Second
13、 Print 交换后:First=; First, Second=; SecondEnd SubPrivate Sub swap(x%, y%) Dim Temp! Temp = a: a = b: b = TempEnd Sub例:编写一个交换两个整型变量值的SUB过程。23Private Sub cmdOK() Call Swap(a,b) Swap a,b End SubPrivate Sub Swap(x%,y%) Dim temp% Temp=x x=y y=TempEnd Sub SUB过程调用的执行过程:24例4-6 编程,单击窗体后,在窗体上显示如下图案所有输出行的共性为:先输
14、出m个空格、n个指定字符,然后换行。m、n以及所输出的字符作为形参,调用时由对应的实参表达式确定。因此,可以编写为SUB过程25本次课的内容总结值传递和地址传递,要求掌握;数组作为参数的传递以及多参数返回;复习排序,掌握;深入拓展参数的作用域和生存期;学会、掌握多窗体和多模块程序的编程;26参数传递小结 参数的传递是实参一一替换形参的过程; 而实参传递给形参存在两种传递的方式: 按值传递、按地址传递,即传值和传址按值传递:形参得到的是实参的值,形参的改变不会影响实参的值。按地址传递:形参得到的是实参的地址,当形参的值改变时,实参的值也跟着改变。形参前加“ByVal”关键字的是按值传递形参前加“
15、ByRef”关键字或什么都不加的是按地址传递27参数传递按值传递Private Sub Form_Click() Dim a As Integer, b As Integer a = 10 b = 20 Print 初始值:a=; a, b=; b Print Call swap1(a, b) Print 交换后:a=; a, b=; bEnd SubPrivate Sub swap1(ByVal x As Integer, ByVal y As Integer) Dim t As Integer t = x: x = y: y = tEnd Sub例28参数传递按值传递按值传递将复印件上交,
16、在复印件上修改,原件不受影响29参数传递按地址传递Private Sub Form_Click() Dim a As Integer, b As Integer a = 10 b = 20 Print 初始值:a=; a, b=; b Print Call swap2(a, b) Print 交换后:a=;a, b=; bEnd SubPrivate Sub swap2(x, y) Dim t t = x : x = y : y = tEnd SubPrivate Sub swap2(ByRef x,ByRef y) Dim t t = x : x = y : y = tEnd Sub例30参
17、数传递按地址传递按地址传递将原件上交,在原件上修改31例:单击Command1后的运行结果Private Sub ss(ByVal x%, ByRef y%, z%) x = x + 1 y = y + 1 z = z + 1End SubPrivate Sub Form_Click() Dim A%, B%, C% A = 1 B = 2 C = 3 Call ss(A, B, C) Print A; B; CEnd Sub1 3 432数组为参数(新内容)当参数是数组时,无论是形参还是实参,都应省略其维数。但形参括号不能省略!如:private sub sort( a( ) as inte
18、ger, n as integer).End sub数组参数在传递时只能按地址传递!例4-9 编制SUB过程,用于在数组中找出最大值、最小值33Private Sub Form_Click() Dim b(6) As Single, x As Single, y As Single, i As Integer For i = 1 To 6 b(i) = InputBox(b( + Str(i) + )=) Next i find b( ), 6, x, y Print x, yEnd SubPrivate Sub find( a( ) As Single, n%, ByRef max!, By
19、Ref min!) max = a(1): min = max While n 1 If a(n) max Then max = a(n) If a(n) a(j) then 交换a(1),a(j)next jnext ij36例4-7 将数组中各元素按值从大到小排序,要求将数组排序编写为Sub过程。(很重要)(选择法排序)Private Sub sort( a( ) As Integer, n As Byte) Dim i As Byte, j As Byte, k As Byte, temp As Integer For i = 1 To n - 1 确定第i大, For j = i +
20、1 To n 如果a(i) a(j),将它们交换 If a(i) a(k) Then k = j If a(k) a(j) Then k = j Next j temp = a(k): a(k) = a(i): a(i) = temp Next iEnd Sub3、1、4、9、5、2、638小 结过程Sub过程函数过程问题:Sub过程与函数过程有什么区别?事件过程自定义子过程内部函数自定义函数问题:参数传递的两种方式?39Private Sub Form_Click() Dim x As Integer, y As Integer x = 1 Call AA(x) Print x y = BB
21、(x) Print x, yEnd SubPublic Sub AA(ByVal a As Integer) a = a + 1End SubPublic Function BB(ByRef b As Integer) b = b + 1 BB = b + 1End Function404.3 多模块程序设计O、VB程序设计的模块概念一、变量的作用域二、变量的生存期三、模块间调用41VB程序的构成工程(*.vbp)模块1模块2模块3过程1过程2过程3过程1过程2过程3过程1过程2过程3变量a变量b变量c变量a变量b变量c变量a变量b变量c窗体模块1(form1.frm)文件窗体模块2(form2.frm)文件标准模块(.bas)文件42变量的声明及分类声明变量的语法形式: Dim|static public|private as 1、Dim | static 只能有一个(static只能用在过程内)2、public
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论