版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第6章 数组,开始学习,本章要点:,6.1 子过程(Sub)的定义与调用,6.1.1 子过程的定义 Private|定义子过程的一般格式如下: Public|FriendStatic Sub 过程名(参数列表) 语句块 Exit sub 语句块 End Sub,说明: (1)子过程以Sub开头,以End Sub结束,而在Sub和End Sub之间的语句块,称为“过程体”或“子过程体”,它决定着子过程的功能; (2)Private表示只有在包含其声明的模块中的其他过程可以访问该Sub过程; (3)Public表示Sub过程是公有过程,可以在程序的任何地方调用。缺省 Private | Publi
2、c 时,系统默认为 Public; (4)Friend只能在类模块中使用;,6.1 子过程的定义与调用,(5)Static表示在调用期间保留Sub过程的局部变量的值。Static属性对在Sub外声明的变量不会产生影响,即使过程中也使用了这些变量。 (6)过程名的命名规则与变量命名规则相同,在同一个模块中,同一符号名不得既用作Sub过程名,又用作Function过程名。 (7)参数列表中的参数称为形式参数(简称形参),它可以是变量名或数组名,也可以是简单变量,但不能是常量、数组元素、表达式;若有多个参数时,各参数之间用逗号分隔,形参没有具体的值。,6.1 子过程的定义与调用,形式参数格式为: B
3、yVal 变量名() As 数据类型 (8)Exit Sub语句可以提前结束过程调用,使执行立即从一个Sub过程中退出。 (9)Sub 过程不能嵌套定义,但可以嵌套调用。,6.1 子过程的定义与调用,6.1.2 建立Sub过程 建立一个子过程有如下两种方法。 1. 利用菜单“工具”|“添加过程”命令定义 具体方法如下: (1)进入代码窗口,在左侧显示对象名的下拉框中选择“通用”,在右侧显示过程的下拉框中选择“声明”,然后键入Sub及子程序名。 (2)按Enter键后,Visual Basic系统会自动加上End Sub与子程序名后的一对括号,此时便可输入子程序语句。,6.1 子过程的定义与调用
4、,2. 利用代码窗口直接定义,6.1 子过程的定义与调用,【例6-2】 打印一个平行四边形。 Private Sub triangle (Str As String, n As Integer) Dim i%, j% For i = 1 To n print spc(6-i); For j = 1 To n Print Spc(1); Str; Next j Print Next i End Sub,6.1 子过程的定义与调用,6.1.3 调用Sub过程 1. 用Call语句调用Sub过程 语法:Call 过程名(实际参数表) 说明: (1)实际参数的个数、类型和顺序,应该与被调用过程的形式参
5、数相匹配,有多个参数时,用逗号分隔。 (2)如果子程序不带参数,Call语句中子程序名后的一对括号可以省去,例如: Call Add1 这是允许的。,6.1 子过程的定义与调用,【例6-3】 编写一个名为MyDay过程输入,用户输入一个06的数字,在窗体上显示对应的星期。程序运行效果如图6-1-3所示。,6.1 子过程的定义与调用,查看代码,【例6-4】 利用过程编写求任意三角形面积的程序。 (1)界面设计,6.1 子过程的定义与调用,Private Sub area(X!, Y!, z!, s!) Dim p! p = (X + Y + z) / 2 s = Sqr(p * (p - X)
6、* (p - Y) * (p - z) End Sub,6.1 子过程的定义与调用,Private Sub cmdJs_Click() Dim a!, b!, c!, w! a = Val(txtA.Text) b = Val(txtB.Text) c = Val(txtC.Text) If a b + c Or b a + c Or c a + b Then MsgBox 输入的三条边不能构成一个三角形! Else Call area(a, b, c, w) txtMj.Text = Str(w) End If End Sub,2. 把过程名作为一个语句来用 语法: 过程名 实参1,实参2
7、它与Call语句的不同点是:去掉了Call关键字和实参列表的括号。 如上例中可以改成:area a,b,c,w,6.1 子过程的定义与调用,6.2.1 函数过程的定义 定义函数过程的语法格式如下: Public|PrivateStaticFunction 函数名()As 函数名=返回值 Exit Function 函数名=返回值 End Function,6.2 函数过程的定义与调用,说明: (1)函数过程以Function开头,以End Function结束,两者之间是描述函数操作的语句块为“函数体”。 (2)函数名命名规则与变量名规则相同。但不能与系统的内部函数或其他通用子过程同名,也不能
8、与已定义的全局变量和本模块中模块级变量同名。 (3)在函数体内,函数名可以当变量使用,函数的返回值就是通过对函数名的赋值语句来实现的。,6.2 函数过程的定义与调用,(4)如果函数体内没有给函数名赋值,则返回对应类型的缺省值,数值函数返回0,字符串函数返回空字符串,变体型函数返回Empty。 (5)As类型:是指函数返回值的类型,若省略,则函数返回变体类型值(Variant)。 (6)Exit Function:表示退出函数过程,常常是与选择结构(If或Select Case语句)联用,即当满足一定条件时,退出函数过程。 (7)形参数列表:形参的定义与子过程完全相同。 (8)函数过程内部不得再
9、定义Sub过程或Function过程。,6.2 函数过程的定义与调用,6.2.2 建立函数过程 1. 用代码窗口直接定义 其步骤如下: (1)打开代码窗口,在“对象”列表框中选择“通用”选项。 (2)在“过程”列表框中选择“声明”选项。 (3)输入Function和函数名。 (4)按Enter键后,Visual Basic系统会自动加上End Function与函数名后的一对括号,此时便可输入函数语句。,6.2 函数过程的定义与调用,2. 利用菜单“工具”|“添加过程”命令定义 其步骤如下: (1)打开代码窗口,选择菜单“工具”|“添加过程”栏命令。打开“添加过程”对话框。 (2)在“名称”文
10、本框中输入函数名;在“类型”栏中选取“函数”定义函数过程;在“范围”栏中若选取“公有的”则定义一个公共级全局函数;若选取“私有的”,则定义一个标准模块板/窗体板的局部函数。 (3)单击“确定”按钮后,系统自动建立一个函数模板,之后就可以在其中编写函数代码。,6.2 函数过程的定义与调用,6.2.3 调用函数过程 函数过程返回一个值,这是与子过程的主要区别,其调用方式与标准函数调用一样,作为表达式中的一个部分被引用。 语法:函数名(实参列表) 注意:必须给参数加上括号,即使没有参数也不可省略括号;实际参数和形式参数对应关系的要求与子过程相同。,6.2 函数过程的定义与调用,【例6-5】 编写一个
11、程序,对输入的成绩进行评定,要求程序的评定在函数中完成,评定结果(字符串)为函数的返回值。,6.2 函数过程的定义与调用,Private Function Appraise(ByVal score%) As String Select Case score Case 0 To 59 Appraise=重修 Case 60 To 100 Appraise=通过 Case Else Appraise=数据超出范围! End Select End Function Private Sub Command1_Click() Text2= Appraise(Val(Text1) End Sub,6.2
12、函数过程的定义与调用,【例6-6】 编写计算阶乘的函数过程,当用户单击窗体时,利用下列近似公式计算 (直到最后一项小于10-7为止)。,6.2 函数过程的定义与调用,Private Sub Form_Click() Dim n! s = 1: n = 1: t = 1 Do t = 1 / Fact(n) s = s + t n = n + 1 Loop While t = 10 -7 Print s End Sub,调用函数Fact的程序代码如下: Private Function Fact(x!) Dim p! p = 1 For n = 1 To x p = p * n Next Fac
13、t = p End Function,6.3.1 模块概述 Visual Basic应用程序通常由3种模块组成,即窗体模块(Form)、标准模块(Module)和类模块(Class)。,6.3 变量、过程的作用域,(1)窗体模块 窗体模块是大多数 Visual Basic 应用程序的基础。窗体模块可以包含处理事件的过程、通用过程以及变量、常数、类型和外部过程的窗体级声明。如果要在文本编辑器中观察窗体模块,则还会看到窗体及其控件的描述,包括它们的属性设置值。写入窗体模块的代码是该窗体所属的具体应用程序专用的;它也可以引用该应用程序内的其他窗体或对象。,6.3 变量、过程的作用域,(2)标准模块
14、标准模块(文件扩展名为.BAS)是应用程序内其他模块访问的过程和声明的容器。它们可以包含变量、常数、类型、外部过程和全局过程的全局(在整个应用程序范围内有效的)声明或模块级声明。写入标准模块的代码不必绑在特定的应用程序上;如果不小心用名称引用窗体和控件,则在许多不同的应用程序中可以重用标准模块。,6.3 变量、过程的作用域,(3)类模块 在Visual Basic中类模块(文件扩展名为.CLS)是面向对象编程的基础。可在类模块中编写代码建立新对象。这些新对象可以包含自定义的属性和方法。实际上,窗体正是这样一种类模块,在其上可安放控件、可显示窗体窗口。,6.3 变量、过程的作用域,6.3.2 变
15、量的作用域 1. 局部变量 在过程内部(如Command1_Click)使用Dim或者Static关键字来声明的变量,只在声明它们的过程中才能被访问或改变该变量的值,别的过程不可访问。所以可以在不同的过程中声明相同名字的局部变量而互不影响。,6.3 变量、过程的作用域,【例6-7】 编写一个程序,用来演示局部变量的作用范围和生存期。程序界面由1个窗体、2个文本框、2个命令按钮组成。,6.3 变量、过程的作用域,Private Sub cmdDim_Click() Dim n As Integer n = n + 1 txtDim.Text = n End Sub Private Sub cmd
16、Sta_Click() Static n As Integer n = n + 1 txtSta.Text = n End Sub,6.3 变量、过程的作用域,2. 窗体/模块级变量 在“通用声明”段中用Dim语句或用Private语句声明的变量,可被本窗体/模块的任何过程访问。但其他模块却不能访问该变量。 声明窗体/模块级变量要先进入程序代码窗口,单击左侧的下拉框并选择“通用”,再单击右侧下拉框并选择“声明”。例如,在“通用声明”段声明如下变量: Private s As String Dim a As Integer,b As Single,6.3 变量、过程的作用域,3. 全局变量 全局
17、变量也称工程级变量,在窗体模块或标准模块的顶部的“通用”声明段用Public或Global关键字声明,它的作用范围是整个应用程序,即可被本应用程序的任何过程或函数访问。例如: Public a As Integer Global b As single,6.3 变量、过程的作用域,【例6-8】 编写一个应用程序,其由1个窗体模块和1个标准模块组成,界面由1个窗体及其中的3个文本框、3个标签和2个命令按钮组成。,6.3 变量、过程的作用域,查看代码,6.3.3 过程的作用域 在窗体或模块中用Private定义的过程为窗体或模块级过程,只能在定义它的窗体或模块中调用。 在窗体中用Public定义的
18、过程,可以在其他窗体中调用,但必须在过程名前加上自定义过程所在的窗体名。 在模块中用Public定义的过程为全局级过程,可在任意窗体中调用。,6.3 变量、过程的作用域,6.4.1 形参与实参的概念 形式参数(简称形参)指出现在Sub和Function过程的定义中出现的变量名、数组名,过程被调用前,没有分配内存,其作用是说明自变量的类型和形态以及在过程中的角色。形参可以是: (1)除定长字符串变量之外的合法变量名; (2)后面跟()括号的数组名。,6.4 参数的传递,例如定义了下面一个过程: Sub Swap2(x%, y%,str$) End Sub 可以用下面的语句调用该过程: Call
19、Swap2(a%, y%, Student ),6.4 参数的传递,过程定义:Sub Swap2( x%, y%, str$) 过程调用:Call Swap2( a%, y%, Student),6.4.2 按值传递参数 按值传递参数(Passed By Value)时,是将实参变量的值复制一个到临时存储单元中,如果在调用过程中改变了形参的值,不会影响实参变量本身,即实参变量保持调用前的值不变.,6.4 参数的传递,在Visual Basic中,传值方式通过关键字ByVal来实现。也就是说,在定义通用过程时,如果形参前面有关键字ByVal,则该参数用传值方式传递。,【例6-9】 编写一个程序,
20、实现两个整数的相加。 Sub AddTest(ByVal m%, ByVal n%) Dim sum% sum=m+n print a+b=; sum End Sub Private Sub Command1_Click() a% = 10: b% = 20 Call AddTest(a, b) 传值 Print a=; a, b=; b End Sub,6.4 参数的传递,6.4.3 按地址传递参数 缺省或加“ByRef”关键字的为按地址传递参数。按地址传递参数时,把实参变量的地址传送给被调用过程,形参和实参共用内存的同一地址。在被调用过程中,形参的值一旦改变,相应实参的值也跟着改变。这意味
21、着实参与形参共用同一个内存单元。,6.4 参数的传递,【例6-10】 通过下面程序观察值传递和地址传递方式的区别。 【例6-11】 阅读程序并写出程序的运行结果。,6.4 参数的传递,查看代码,查看代码,6.4 参数的传递,z=x+y,6.4.4 数组参数 VB允许把数组作为形参出现在形参表中,语法为: 形参数组名() As 数据类型 在传送数组时,除遵守参数传送的一般规则外,还应注意以下几点: (1)形参数组只能按地址传递参数,对应的实参也必须是数组,且数据类型相同。 (2)把一个数组的全部元素传送给一个过程,应将数组名分别写入形参列表中,并略去数组的上下界,但括号不能省略。,6.4 参数的传递,(3)在过程中不可以用Dim语句对形参数组进行声明,否则会产生“重复声明”的错误。但在使用动态数组时,可以用ReDim语句改变形参数组的维界,重新定义数组的大小。 (4)被调过程可通过Lbound和Ubound函数确定实参数组的上、下界。 (5)实参和形参结合是按地址传递,即形参数组和实参数组共用一段内存单元。 (6
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 茶多酚联合紫杉醇对食管癌Eca - 109细胞作用机制及协同抗癌效应研究
- 交通运输行业安全生产信用管理办法
- 肠梗阻患者护理查房
- 一级建造师考试(通信与广电工程管理与实务)真题及答案(河南三门峡)
- 高压办公人群失眠亚健康调理共识 (2026 版)
- 2026年经济师(中级)工商管理模拟卷
- 老年人处方精简临床实践指南(2026版)
- 小儿骨折微创治疗专家共识(2026版)
- 2026年工程合规生产排程优化协议
- 奥尔夫音乐教师培训大纲
- 凉山州2025年四川凉山州第一批引进人才(559人)笔试历年参考题库典型考点附带答案详解
- 2026年二级建造师市政工程管理考试真题答案及详细解析
- 2026重庆北碚区静观镇招聘在村挂职本土人才8人考试参考题库及答案解析
- 2026年高考冲刺作文审题立意训练:选择题32道(附深度解析+答案)
- 2026“才聚齐鲁 成就未来”山东铁投能源集团、山东清洁热网有限公司招聘128人笔试参考试题及答案详解
- (2026年)检验检测机构资质认定“一单一库”的学习与解读(2026年实施)课件
- 2026中国期货市场市场深度与流动性风险研究报告
- 《上海音乐学院硕博连读研究生培养工作办法(试行)》
- 支气管哮喘患者急救措施
- 2026年腐蚀监测技术及应用
- 统编版初中历史七年级下册《清朝的边疆治理》教案
评论
0/150
提交评论