




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第四章第四章 过程与变量的作用域过程与变量的作用域在Visual Basic.NET中有3种类型的过程:Sub过程、Function过程和Property过程。 Sub过程过程执行操作,但不向调用它的过程返回值。执行操作,但不向调用它的过程返回值。 Function过程过程可以向调用它的过程返回值。可以向调用它的过程返回值。 Property过程过程可以返回类、结构或模块属性的可以返回类、结构或模块属性的值,或向它们赋值。值,或向它们赋值。 过程可以被其他过程调用,当一个过程调用另一过程可以被其他过程调用,当一个过程调用另一个过程时,控制权将会转移到后一个过程,当后个过程时,控制权将会转移到后
2、一个过程,当后一个过程的代码执行完毕时,它将控制权返回给一个过程的代码执行完毕时,它将控制权返回给调用它的过程。调用它的过程。4.1 Sub过程的创建与调用过程的创建与调用知识点知识点1 Sub过程的创建过程的创建1. 声明Sub过程的语法格式如下:访问修饰符访问修饰符 Sub 过程名过程名 ( 形参列表形参列表 ) 语句块语句块1 Exit Sub 语句块语句块2 End Sub说明:见说明:见P81表表4-1知识点知识点2 Sub过程的调用过程的调用定义一个过程后,就可以在程序中调用该过程了。定义一个过程后,就可以在程序中调用该过程了。调用调用Sub过程的语法格式如下所示:过程的语法格式如
3、下所示: Call 过程名过程名 ( 实参列表实参列表 ) 说明:说明: 调用调用Sub 过程要使用独立的调用语句,不能在表过程要使用独立的调用语句,不能在表达式中调用达式中调用Sub 过程。过程。 调用时必须提供所有非可选参数的值,并且必须调用时必须提供所有非可选参数的值,并且必须用括号将参数列表括起来。如果未提供任何参数,用括号将参数列表括起来。如果未提供任何参数,可以省略括号。可以省略括号。 Call 关键字是可选项,但是建议使用。关键字是可选项,但是建议使用。知识点知识点3 事件过程事件过程Windows应用程序采用事件驱动事件驱动的编程机制,在图形用户界面上,要实现用户和应用程序之间
4、的交互就必须对事件进行响应,为此必须编写对象的事件过程代码。对象的事件过程也是Sub过程,其过程名称通常是对对象名象名_事件名称事件名称,如frmSub窗体的加载事件frmSub_Load()、单击事件frmSub_Click()等。在事件过程中可以调用其他Sub过程。任务任务1 Sub过程的应用过程的应用 要求:编写一个Sub 过程,通知用户应用程序将要执行哪个任务,并且显示一个时间戳。分别在窗体的Load事件和Click事件过程中调用该过程。 任务任务1 解析解析编写Sub过程tellOperator,其形参task表示任务名称。Sub tellOperator(ByVal task As
5、 String) Dim stamp As Date stamp = TimeOfDay()系统时间系统时间 MsgBox(执行执行 & task & 任务任务 at & CStr(stamp)End Sub编写窗体的Load事件过程,在调用Sub过程时使用的实参是窗体加载。Private Sub frmSub_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click Call tellOperator(单击窗体单击窗体) End Sub编写窗体的Click事件过程,在调用Su
6、b过程时使用的实参是单击窗体。 Private Sub frmSub_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Call tellOperator(窗体加载窗体加载) End Sub4.2 Function过程的创建与调用过程的创建与调用Function过程又称为函数过程,它是过程的另一种形式,当过程的执行仅需要返回一个值时,用函数过程就比较简单。 知识点知识点1 Function过程的创建过程的创建Function过程和Sub过程类似,但Function过程可以向其调用过程返回值。创建F
7、unction过程的语法格式如下所示:访问修饰符访问修饰符 Function 函数名函数名 ( 形参列表形参列表 ) As 数据类型数据类型 语句块语句块1 函数名函数名= 表达式表达式 | Return 表达式表达式 Exit Function 函数名函数名= 表达式表达式 | Return 表达式表达式 语句块语句块2 End Function例如,下面是一个计算正整数n阶乘的函数过程fact (n ) Public Function Fact (n As Integer) As LongDim t As Long, i As Integert = 1For i = 1 To nt = t
8、 * iNext iFact = t 或者或者 Return tEnd Function知识点知识点2 Function过程的调用过程的调用 调用 Function 过程的方法是将其名称和参数放在赋值语句的右边或表达式中。必须提供所有非可选参数的值,并且必须用括号将参数列表括起来。如果未提供任何参数,则也可以选择省略括号。 调用 Function 过程的语法格式如下: 函数名函数名( 实参列表实参列表 )例如,调用Fact函数过程计算5!,并将结果显示在文本框TextBox1的语句如下:TextBox1.Text = Cstr(Fact(5)任务2 使用Function过程求最大公约数和最小公
9、倍数 要求:编写一个求最大公约数的Function 过程,调用这个过程求任意两个正整数的最大公约数和最小公倍数。 任务任务2 解析解析思路分析:求两个数m和n的最大公约数可以使用“辗转相除法”,步骤是:n以数m作为被除数,数n作为除数,相除后余数为r。n若r不为零,则 继续相除得到新的r。若r仍不为零,则重复此过程,直到r0。n最后的n就是最大公约数。 最小公倍数最大公约数mn, rn, nm编写一个Function 过程Gcd,用于求两个形参m和n的最大公约数。 Dim num1, num2 As Integer Function Gcd(ByVal m As Integer, ByVal
10、n As Integer) As Integer Dim r As Integer r表示两数相除得到的余数表示两数相除得到的余数 r = m Mod n Do While r 0当余数不为当余数不为0时时 m = n n = r r = m Mod n Loop Gcd = n End Function编写按钮的编写按钮的Click事件过程,通过调用事件过程,通过调用Gcd过程计算得到任意两个数的最大公约数。过程计算得到任意两个数的最大公约数。 Private Sub btnGcd_Click(ByVal sender As Object, ByVal e As System.EventAr
11、gs) Handles btnGcd.Click num1 = Val(txtFirst.Text) num2 = Val(txtSecond.Text) txtGcd.Text = Gcd(num1, num2) End Sub编写按钮的编写按钮的Click事件过程,通过调用事件过程,通过调用Gcd过程计算得到任意两个数的最小公倍数。过程计算得到任意两个数的最小公倍数。 Private Sub btnLcm_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnLcm.Click num1 = Val(tx
12、tFirst.Text) num2 = Val(txtSecond.Text)txtLcm.Text = num1 * num2 / Gcd(num1, num2) End Sub4.3 过程中参数的传递过程中参数的传递 调用过程时可以把数据传递给被调用的过程,也可以把过程中的数据传递回来。在调用过程中,要考虑调用过程和被调用过程之间的数据是怎样传递的。知识点知识点1 形参与实参形参与实参形参是形式参数的简称,是指在定义Sub过程或Function过程时,出现在Sub或Function过程中的变量名,是接收数据的变量。实参是实际参数的简称,是指在调用Sub过程或Function过程时,传递给S
13、ub或Function过程的常量、变量或表达式。和中的对应变量名不必相同,但是变量的个数必须相等,而且各实参的书写顺序必须与相应的形参顺序一致,类型相符。知识点知识点2 传值与传地址传值与传地址在调用过程时,参数的传递有两种方式:传值方式和传地址方式,其中传值方式传值方式是默认方式。是默认方式。1. 传值方式 形式:形参前带有关键字ByVal。 对实参的影响:形参得到的是实参的值,形参值的改变不会影响实参的值。引子:以两个人在两台机器的文件拷贝做例子,值传递好比是你把文件复制一份,通过网络传给他,然后他可以在他本机上对文件做任何的修改,修改会保存下来,但是你机器上的文件不会发生任何的变化。即形
14、参与实参是两个不同的变量,各自占用不同的存储单元2. 传地址方式 形式:形参前带有关键字ByRef。 对实参的影响:形参得到的是实参的地址,形形参得到的是实参的地址,形参和实参使用相同的内存单元,改变形参的值也参和实参使用相同的内存单元,改变形参的值也即改变实参的值。即改变实参的值。 要求:实参必须是变量时才可以实现传地址调用。当实参是常量或表达式时无法实现传地址方式,实际上是传值方式。 Visual Basic.NET中允许参数是数组,数组只能通过传址的方式进行传递。在传递数组时要在实参列表和形参列表中放入数组名,忽略维数的定义,但圆括号不能省略。任务任务3 传值与传地址方式传递参传值与传地
15、址方式传递参数数编写交换两个数的Sub过程,过程Swap1使用传值方式,过程Swap2使用传地址方式。 Dim num1 As Single, num2 As Single Sub Swap1(ByVal a As Single, ByVal b As Single) Dim t As Single t = a a = b b = t End Sub Sub Swap2(ByRef a As Single, ByRef b As Single) Dim t As Single t = a a = b b = t End SubNum1的值的值 aNum2的值的值 b变量变量a的存储单元的存储单
16、元ab变量变量b的存储单元的存储单元num1num2 Private Sub btnByVal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnByVal.Click num1 = Val(txtNum1.Text) num2 = Val(txtNum2.Text) Call Swap1(num1, num2) Label2.Text = 传值方式传值方式 txtResult1.Text = num1 txtResult2.Text = num2 End SubPrivate Sub bt
17、nByRef_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnByRef.Click num1 = Val(txtNum1.Text) num2 = Val(txtNum2.Text) Call Swap2(num1, num2) Label2.Text = 传地址方式传地址方式 txtResult1.Text = num1 txtResult2.Text = num2 End Sub4.4 过程的嵌套与递归调用过程的嵌套与递归调用在一个过程(Sub过程或Function过程)中调用另外一个过程,称为过
18、程的嵌套调用;而过程直接或间接地调用其自身,则称为过程的递归调用。知识点1 过程的嵌套 在VB.NET中过程的定义不能嵌套,但可以嵌套调用过程,也就是主程序可以调用子过程,在子过程中还可以调用另外的子过程,这种过程的嵌套调用如图4-7所示。主程序调用Sub1End SubSub1调用Sub2End Sub Sub2End Sub知识点2 过程的递归 递归调用是指一个过程直接或间接地调用自身,即自己调用自己。 例如,编写一个用递归调用的方法求n!的Function过程。 根据求n!的定义,n!=n*(n-1)!可以写成如下的形式:1n) 1n(fac*n1n1)n(fac计算n!的Functio
19、n过程如下:Private Function fac(Byval n As Integer) As LongIf n = 1 Then fac = 1Else fac = n * fac(n - 1)End IfEnd Function任务4 使用过程的嵌套求组合数 编写一个求组合数 的程序。要求将求阶乘和求组合数公式分别定义成两个Function过程来实现。 )!( !mnmnCmn任务任务4 解析解析思路分析: 编写一个求阶乘的Function过程Fact,一个求组合数的Function过程Comb。在Comb过程中要调用Fact过程3次,这就是过程的嵌套调用。最后在按钮的Click事件中
20、调用Comb过程,就可以得到任意两个正整数的组合数。 求阶乘的Function过程Fact的代码如下: Private Function Fact(ByVal num As Integer) As Long Dim i As Integer, t As Long t = 1 For i = 1 To num t = t * i Next i Fact = t End Function 求组合数的Function过程Comb的代码如下: Private Function Comb(ByVal n As Integer, ByVal m As Integer) As Long Comb = Fac
21、t(n) / Fact(m) * Fact(n - m) End FunctionPrivate Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click Dim n, m, temp As Integer n = Val(txtN.Text) m = Val(txtM.Text) If n n则交换两数则交换两数 temp = n n = m m = temp txtN.Text = n txtM.Text = m End If txtResult.Text
22、= Comb(n, m) End Sub4.5 变量的作用域变量的作用域 变量可以在语句块、过程、窗体模块、标准模块或类中定义。根据声明变量的位置,可以把变量的作用域分为:局部变量、模块级变量和全局变量。知识点知识点1 局部变量局部变量局部变量具有以下特点: 是在过程或语句块中使用Dim或或Static关键字声明的变量; 只能在定义它的过程或语句块中使用; 如果两个过程或两个语句块定义相同名称的变量,它们是完全独立的,作用域范围互不相同,都只在各自的过程或语句块中起作用。知识点2 模块级变量 在窗体模块、标准模块或类的所有过程外用关键字Private或Dim定义的变量是模块级变量,其作用域是定
23、义的模块,在模块内的所有过程都可以使用它们,但其他模块不能访问这些变量。知识点3 全局变量 在窗体模块、标准模块或类的所有过程外用关键字Public或或Shared定义的变量是全局变量,其作用域为整个程序。全局变量定义后,本模块中的过程和同一项目中的所有其他模块中的过程均可以使用该变量。由于全局变量具有能被同一项目中的所有模块中的多个过程共同访问的特点,所以可以使用全局变量在多模块多过程之间进行数据传递。任务任务5 变量作用域的演示变量作用域的演示在“局部变量”的单击事件过程中定义了3个局部变量:过程级变量a、静态变量m、语句块级变量s,并引用了模块级变量strName的值作为电影的名称,注意每单击一次该按钮,这些变量值的变化。在“模块级变量”的单击事件过程中定义了1个模块级变量strName,每单击一次该按钮,变量strName就被赋值为一个新的电影名称。在“全局变量”的单击事件过程中引用了1个全局变量pub,每单击一次该按钮,pub的值累加10,并在标签中显示新值。在项目中添加一个标准模块,在模块中定义一个全局变量pub。Public Class frmRangePrivate strName As String = 哈利波特 定义模块级变量定义
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 行政管理建立人际关系试题及答案
- 中国邮政创意设计体系构建
- 心室颤动的治疗策略课件
- 深度解析执业医师考试试题及答案
- 结构力学梁柱应力分布、变形分析课件
- 小学音乐技能课件
- 路基防护与支挡结构设计课件解析
- 主管护师批判性思维试题及答案
- 2025执业护士考试复习重点试题及答案
- 职场潜力主管护师试题及答案
- 杭州市高层次人才分类认定申请表-
- 高考语文答题思维导图
- 天然气管道工程段线路安装工程鱼塘(水塘)穿越施工方案
- 教练技术三阶段讲义
- 证券公司营业部网络结构拓扑图
- 2001船舶修理价格本中文
- 某污水处理厂自控系统调试方案(常用)
- 蓝色背景-PPT模板
- 设备检维修作业票填写模板
- 危大工程动态管控表
- 商场重大危险源评估标准
评论
0/150
提交评论