第6章过程讲义

上传人:今*** 文档编号:107023757 上传时间:2019-10-17 格式:PPT 页数:48 大小:923KB
返回 下载 相关 举报
第6章过程讲义_第1页
第1页 / 共48页
第6章过程讲义_第2页
第2页 / 共48页
第6章过程讲义_第3页
第3页 / 共48页
第6章过程讲义_第4页
第4页 / 共48页
第6章过程讲义_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《第6章过程讲义》由会员分享,可在线阅读,更多相关《第6章过程讲义(48页珍藏版)》请在金锄头文库上搜索。

1、第6章 过程,一个较大的程序一般应分为若干个程序模块,每一个模块用来实现一个特定的功能,这些模块就叫做过程。 Visual Basic有两类过程: 1、内部函数过程和事件过程; 2、用户自定义的可被多次调用的通用过程。 Sub过程(子程序过程) Function过程(函数过程),6.1 建立通用过程,通用过程不与用户界面中的对象联系。当不同的事件过程或同一事件过程多次要执行同一动作时,为了不必重复编写代码,可以采用通用过程来实现,由事件过程调用通用过程。,6.1.1 过程的定义 定义Sub过程的一般格式如下: Private | PublicStatic Sub 子过程名(形式参数列表) 语句

2、块 Exit Sub 语句块 End Sub Function函数过程的定义: Private | PublicStatic Function 函数过程名(形式参数列表) As 类型 语句块 函数过程名 = 表达式 Exit Function 语句块 Return 表达式 End Function,6.1.2 过程的建立 通用过程不属于任何一个事件过程,可以通过事件过程调用它,创建通用过程的方法如下: 打开“代码编辑器”窗口,选择“对象列表框”中的“常规”选项。 在代码编辑区的空白行处输入通用过程代码。,6.2 通用过程的调用,6.2.1 调用Sub过程 Sub过程的调用有两种方式 1. 用C

3、all语句调用Sub过程 格式: Call 子过程名(实际参数列表) 例如: Call TestSub(“你好“) 2. 直接使用过程名 (1)去掉关键字Call; (2)去掉“实际参数列表”两端的括号。 例如: TestSub “你好“,6.2.2 调用Function过程 Function过程调用形式如下: 变量名 = 函数过程名(实际参数列表) 例如上面的计算矩形面积的Function过程可以被调用如下: c = RecArea(20,30.1) 调用Sub和Function的不同点,6.3 参数传递,在调用一个过程时,必须把实际参数传递给过程,完成形式参数与实际参数的结合,然后用实际参

4、数执行调用的过程。 实际参数? 形式参数? 值传递? ByVal 地址传递? ByRef,例6.1 编写交换两个数的过程,过程Swap1使用按值传递,Swap2过程使用按地址传递。程序运行结果如图6-1所示,从中可以看出只有Swap2才能成功交换两个数。在调用的过程中,实参与形参的关系如图6-2所示。 Public Sub Swap1(ByVal x%, ByVal y%) Dim t% t = x : x = y : y = t End Sub Public Sub Swap2(ByRef x%, ByRef y%) Dim t% t = x : x = y : y = t End Sub,

5、Private Sub Form1_Click(ByVal sender As Object, ByVal e As _ System.EventArgs) Handles Me.Click Dim a As Integer, b As Integer a = 3 : b = 5 label1.text = “调用过程前:“ & “a=“ & a & “ b=“ & b & vbcrlf Swap1(a, b) label1.text &= “按值传递参数后: “ & “a=“ & a & “ b=“ & b & vbcrlf a = 3 : b = 5 Swap2(a, b) label1.

6、text &= “按地址传递参数后: “ & “a=“ & a & “ b=“ & b & vbcrlf End Sub,例6.2 计算5!+4!+3!+2!+1!。先按地址传递方法给出代码。 Private Function M(ByRef n%) As Integer M = 1 Do While n 0 M = M * n n = n - 1 Loop End Function Private Sub Form1_Click(ByVal sender As Object, ByVal e As _ System.EventArgs) Handles Me.Click Dim sum As

7、 Integer, i As Integer For i = 5 To 1 Step -1 sum = sum + M(i) Next i Debug.WriteLine(“Sum = “ & sum) End Sub,程序分析 运行结果:Sum=120 本例的运行结果是120,而不是153,是因为本程序只计算了5!。在本例中n是按地址传递的,在第一次调用M函数后n的值为0,由于实参于形参共享地址单元,实参i的值也是0。当执行 For i = 5 To 1 Step -1时就退出了For循环,For循环就执行了一次,求出了5!的值。 解决办法有两种: 将地址传递改为值传递 Private Fu

8、nction M(ByVal n%) As Integer 将实参i改为表达式,因为表达式是按值传递的。把变量改为表达式最简单的方法是用()将变量括起来,调用语句改为: sum = sum + M(i),3. 数组参数的传递 在Visual Basic 的6.0版本后,支持数组作为参数在过程的调用中使用。数组传递是按地址传递,实际传递的是数组首元素的地址。 在传递数组时,形参只写数组名,与之所对应的实参须写上所要传递的数组的名称和一对圆括号。在子程序中不可再用Dim语句来定义所要的传递的数组。,例6.3 编写排序子过程,将存有随机数的数组作为参数传递给排序子过程sort。 Public Sub

9、 sort(ByVal A() As Integer) 冒泡法排序 Dim i As Integer, j As Integer, t As Integer For i = 1 To 9 For j = 1 To 10 - i If A(j) A(j + 1) Then t = A(j) : A(j) = A(j + 1) : A(j + 1) = t Next j Next i End Sub,Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click Dim Ar

10、r(10) As Integer Dim i As Integer Label1.text = “ For i = 1 To 10 随机产生10个1100的自然数 Arr(i) = Int(Rnd * 99) + 1 Label1.text &= Arr(i) & “ “ Next i Label1.text &= vbcrlf Call sort(Arr) 调用排序过程 For i = 1 To 10 Label1.text &= Arr(i) & “ “ Next i Label1.text &= vbcrlf End Sub,Public Sub sort2(A() As Integer

11、) 冒泡法排序 Dim i As Integer, j As Integer, t As Integer Dim head As Integer, tail As Integer 如果不是固定的10个元素的数组,可通过下面方法得到下标头(下界)和下标尾(上界) head = LBound(A) tail = UBound(A) For i = head To tail - 1 For j = head To tail - i If A(j) A(j + 1) Then t = A(j): A(j) = A(j + 1): A(j + 1) = t Next j Next i End Sub,4

12、. 对象参数的传递 Visual Basic还允许使用对象,即窗体或者控件作为通用过程的参数。 用对象作为参数与用其他数据类型作为参数的过程在格式上是相同的,惟一的区别是对象参数的数据类型是Control,不能够使用值传递,而只能使用地址传递方式。,例6.4 使用窗体对象参数。 用鼠标右击“解决方案资源管理器”菜单中的“项目名称”,在弹出的快捷菜单上选择“添加”选项中的“Windows窗体”命令,建立三个窗体,分别是Form1、Form2和Form3。 希望在程序中设置各窗体的大小和位置,可以通过下面的代码来实现: 可以在应用中编写一个通用程序,以窗体作为参数,用来对窗体的大小和位置进行设置。

13、 Public Sub SetForm(FormName As Form, x As Double, y As _ Double, l As Double, w As Double) FormName.Left = x FormName.Top = y FormName.Width = l FormName.Height = w End Sub,Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click SetForm(Me, 100, 20, 300, 300) S

14、etForm(Form2, 100, 200, 500, 300) SetForm(Form3, 100, 120, 800, 300) Form2.Show() Form3.Show() End Sub,例6.5 使用控件对象参数 Public Sub frmtrans(ByRef l As Label, ByRef t As String) l.Text = t l.Visible = True End Sub Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Ha

15、ndles Button1.Click Call frmtrans(Label1, Me.Text) End Sub 程序运行时,单击button1按钮,将窗体的标题传递给标签Label1。,6.4 变量的作用域,变量可被访问的范围称为变量的作用域。 在Visual Basic中,可以在过程或模块中声明变量,根据声明变量的位置,变量分为两类:过程级变量和模块级变量。它们的作用范围分别在过程级和模块级。过程级变量也就是局部变量。,6.4.1 过程级变量 过程级变量是指在过程内用Dim或Static关键字声明的变量、或不加声明而直接使用的变量,它只能在本过程中使用,其他的过程不可访问。 过程级变量

16、随过程的调用而分配内存单元,并进行变量的初始化,在此过程体内进行数据的存取,一旦该过程体结束,变量的内容自动消失,占用的内存单元释放。不同的过程中可有相同名称的变量,彼此互不相干。,6.4.2 模块级变量 模块级变量指在一个模块的任何过程外面,即在“通用”声明段中声明的变量。模块级变量分为私有和公有。,例6.6 不同作用域变量的定义位置。 Public a As Integer 全局变量 Private b As Single 私有的模块级变量 Sub p1() Dim c As Double 局部变量 . End Sub,6.4.3 变量的生存期 变量的生存期是指,假设过程内部有一个变量,当程序运行进入该过程时,要为该变量分配一定的内存单元,一旦退出该过程,该变量占有的内存单元是释放还是保留决定了该变量的生命周期。 根据变量在程序运行期间的生存期,把变量分为动态变量和静态变量。 1. 动态变量 用

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号