版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本章要点:子过程(Sub)的定义与调用函数(Function)过程的定义与调用变量、过程的作用域参数的传递过程的嵌套与递归本章要点:子过程(Sub)的定义与调用函数(Function16.1子过程(Sub)的定义与调用6.1.1子过程的定义[Private|定义子过程的一般格式如下:Public|Friend][Static]Sub过程名([参数列表])语句块[Exitsub][语句块]EndSub6.1子过程(Sub)的定义与调用6.1.1子过程的2说明:(1)子过程以Sub开头,以EndSub结束,而在Sub和EndSub之间的语句块,称为“过程体”或“子过程体”,它决定着子过程的功能;(2)Private表示只有在包含其声明的模块中的其他过程可以访问该Sub过程;(3)Public表示Sub过程是公有过程,可以在程序的任何地方调用。缺省[Private|Public]时,系统默认为
Public;(4)Friend只能在类模块中使用;6.1子过程的定义与调用说明:6.1子过程的定义与调用3(5)Static表示在调用期间保留Sub过程的局部变量的值。Static属性对在Sub外声明的变量不会产生影响,即使过程中也使用了这些变量。(6)过程名的命名规则与变量命名规则相同,在同一个模块中,同一符号名不得既用作Sub过程名,又用作Function过程名。(7)参数列表中的参数称为形式参数(简称形参),它可以是变量名或数组名,也可以是简单变量,但不能是常量、数组元素、表达式;若有多个参数时,各参数之间用逗号分隔,形参没有具体的值。6.1子过程的定义与调用(5)Static表示在调用期间保留Sub过程的局部变量的值4形式参数格式为:[ByVal]变量名[()][As数据类型](8)ExitSub语句可以提前结束过程调用,使执行立即从一个Sub过程中退出。(9)Sub过程不能嵌套定义,但可以嵌套调用。6.1子过程的定义与调用形式参数格式为:6.1子过程的定义与调用56.1.2建立Sub过程建立一个子过程有如下两种方法。1.利用菜单“工具”|“添加过程”命令定义具体方法如下:(1)进入代码窗口,在左侧显示对象名的下拉框中选择“通用”,在右侧显示过程的下拉框中选择“声明”,然后键入Sub及子程序名。(2)按Enter键后,VisualBasic系统会自动加上EndSub与子程序名后的一对括号,此时便可输入子程序语句。6.1子过程的定义与调用6.1.2建立Sub过程6.1子过程的定义与调用62.利用代码窗口直接定义6.1子过程的定义与调用2.利用代码窗口直接定义6.1子过程的定义与调用7【例6-2】打印一个平行四边形。PrivateSubtriangle(StrAsString,nAsInteger)Dimi%,j%Fori=1Tonprintspc(6-i);Forj=1TonPrintSpc(1);Str;NextjPrintNextiEndSub6.1子过程的定义与调用【例6-2】打印一个平行四边形。6.1子过程的定义86.1.3调用Sub过程1.用Call语句调用Sub过程语法:Call过程名(实际参数表)说明:(1)实际参数的个数、类型和顺序,应该与被调用过程的形式参数相匹配,有多个参数时,用逗号分隔。(2)如果子程序不带参数,Call语句中子程序名后的一对括号可以省去,例如:
CallAdd1这是允许的。6.1子过程的定义与调用6.1.3调用Sub过程6.1子过程的定义与调用9【例6-3】编写一个名为MyDay过程输入,用户输入一个0~6的数字,在窗体上显示对应的星期。程序运行效果如图6-1-3所示。6.1子过程的定义与调用查看代码【例6-3】编写一个名为MyDay过程输入,用户输入一个10【例6-4】利用过程编写求任意三角形面积的程序。(1)界面设计6.1子过程的定义与调用【例6-4】利用过程编写求任意三角形面积的程序。6.111PrivateSubarea(X!,Y!,z!,s!)Dimp!p=(X+Y+z)/2s=Sqr(p*(p-X)*(p-Y)*(p-z))EndSub6.1子过程的定义与调用PrivateSubcmdJs_Click()Dima!,b!,c!,w!a=Val(txtA.Text)b=Val(txtB.Text)c=Val(txtC.Text)Ifa>b+cOrb>a+cOrc>a+bThenMsgBox"输入的三条边不能构成一个三角形!"ElseCallarea(a,b,c,w)txtMj.Text=Str(w)EndIfEndSubPrivateSubarea(X!,Y!,z!,s122.把过程名作为一个语句来用语法:
过程名
[实参1[,实参2……]]它与Call语句的不同点是:去掉了Call关键字和实参列表的括号。如上例中可以改成:areaa,b,c,w6.1子过程的定义与调用2.把过程名作为一个语句来用6.1子过程的定义与调用136.2.1函数过程的定义定义函数过程的语法格式如下:[Public|Private][Static]Function函数名([<参数列表>])[As<类型>] <局部变量或常数定义> <语句块> [函数名=返回值] [ExitFunction] <语句块> [函数名=返回值]EndFunction6.2函数过程的定义与调用6.2.1函数过程的定义6.2函数过程的定义与调用14说明:(1)函数过程以Function开头,以EndFunction结束,两者之间是描述函数操作的语句块为“函数体”。(2)函数名命名规则与变量名规则相同。但不能与系统的内部函数或其他通用子过程同名,也不能与已定义的全局变量和本模块中模块级变量同名。(3)在函数体内,函数名可以当变量使用,函数的返回值就是通过对函数名的赋值语句来实现的。6.2函数过程的定义与调用说明:6.2函数过程的定义与调用15(4)如果函数体内没有给函数名赋值,则返回对应类型的缺省值,数值函数返回0,字符串函数返回空字符串,变体型函数返回Empty。(5)As类型:是指函数返回值的类型,若省略,则函数返回变体类型值(Variant)。
(6)ExitFunction:表示退出函数过程,常常是与选择结构(If或SelectCase语句)联用,即当满足一定条件时,退出函数过程。(7)形参数列表:形参的定义与子过程完全相同。(8)函数过程内部不得再定义Sub过程或Function过程。6.2函数过程的定义与调用(4)如果函数体内没有给函数名赋值,则返回对应类型的缺省值,166.2.2建立函数过程1.用代码窗口直接定义其步骤如下:(1)打开代码窗口,在“对象”列表框中选择“通用”选项。(2)在“过程”列表框中选择“声明”选项。(3)输入Function和函数名。(4)按Enter键后,VisualBasic系统会自动加上EndFunction与函数名后的一对括号,此时便可输入函数语句。6.2函数过程的定义与调用6.2.2建立函数过程6.2函数过程的定义与调用172.利用菜单“工具”|“添加过程”命令定义其步骤如下:(1)打开代码窗口,选择菜单“工具”|“添加过程”栏命令。打开“添加过程”对话框。(2)在“名称”文本框中输入函数名;在“类型”栏中选取“函数”定义函数过程;在“范围”栏中若选取“公有的”则定义一个公共级全局函数;若选取“私有的”,则定义一个标准模块板/窗体板的局部函数。(3)单击“确定”按钮后,系统自动建立一个函数模板,之后就可以在其中编写函数代码。6.2函数过程的定义与调用2.利用菜单“工具”|“添加过程”命令定义6.2函数186.2.3调用函数过程函数过程返回一个值,这是与子过程的主要区别,其调用方式与标准函数调用一样,作为表达式中的一个部分被引用。语法:函数名([实参列表])注意:必须给参数加上括号,即使没有参数也不可省略括号;实际参数和形式参数对应关系的要求与子过程相同。6.2函数过程的定义与调用6.2.3调用函数过程6.2函数过程的定义与调用19【例6-5】编写一个程序,对输入的成绩进行评定,要求程序的评定在函数中完成,评定结果(字符串)为函数的返回值。6.2函数过程的定义与调用【例6-5】编写一个程序,对输入的成绩进行评定,要求程序的20PrivateFunctionAppraise(ByValscore%)AsStringSelectCasescoreCase0To59Appraise="重修"Case60To100Appraise="通过"CaseElseAppraise="数据超出范围!"EndSelectEndFunctionPrivateSubCommand1_Click()Text2=Appraise(Val(Text1))EndSub6.2函数过程的定义与调用PrivateFunctionAppraise(ByVa21【例6-6】编写计算阶乘的函数过程,当用户单击窗体时,利用下列近似公式计算
(直到最后一项小于10-7为止)。6.2函数过程的定义与调用PrivateSubForm_Click()Dimn!s=1:n=1:t=1Dot=1/Fact(n)s=s+tn=n+1LoopWhilet>=10^-7PrintsEndSub调用函数Fact的程序代码如下:PrivateFunctionFact(x!)Dimp!p=1Forn=1Toxp=p*nNextFact=pEndFunction【例6-6】编写计算阶乘的函数过程,当用户单击窗体时,利226.3.1模块概述VisualBasic应用程序通常由3种模块组成,即窗体模块(Form)、标准模块(Module)和类模块(Class)。6.3变量、过程的作用域应用程序窗体模块标准模块类模块声明部分通用过程事件过程全局声明部分模块层声明部分通用过程模块层声明部分通用过程6.3.1模块概述6.3变量、过程的作用域应用程序窗23(1)窗体模块窗体模块是大多数
VisualBasic应用程序的基础。窗体模块可以包含处理事件的过程、通用过程以及变量、常数、类型和外部过程的窗体级声明。如果要在文本编辑器中观察窗体模块,则还会看到窗体及其控件的描述,包括它们的属性设置值。写入窗体模块的代码是该窗体所属的具体应用程序专用的;它也可以引用该应用程序内的其他窗体或对象。6.3变量、过程的作用域(1)窗体模块6.3变量、过程的作用域24(2)标准模块标准模块(文件扩展名为.BAS)是应用程序内其他模块访问的过程和声明的容器。它们可以包含变量、常数、类型、外部过程和全局过程的全局(在整个应用程序范围内有效的)声明或模块级声明。写入标准模块的代码不必绑在特定的应用程序上;如果不小心用名称引用窗体和控件,则在许多不同的应用程序中可以重用标准模块。6.3变量、过程的作用域(2)标准模块6.3变量、过程的作用域25(3)类模块在VisualBasic中类模块(文件扩展名为.CLS)是面向对象编程的基础。可在类模块中编写代码建立新对象。这些新对象可以包含自定义的属性和方法。实际上,窗体正是这样一种类模块,在其上可安放控件、可显示窗体窗口。6.3变量、过程的作用域(3)类模块6.3变量、过程的作用域266.3.2变量的作用域1.局部变量
在过程内部(如Command1_Click)使用Dim或者Static关键字来声明的变量,只在声明它们的过程中才能被访问或改变该变量的值,别的过程不可访问。所以可以在不同的过程中声明相同名字的局部变量而互不影响。6.3变量、过程的作用域6.3.2变量的作用域6.3变量、过程的作用域27【例6-7】编写一个程序,用来演示局部变量的作用范围和生存期。程序界面由1个窗体、2个文本框、2个命令按钮组成。6.3变量、过程的作用域【例6-7】编写一个程序,用来演示局部变量的作用范围和生存28PrivateSubcmdDim_Click()DimnAsIntegern=n+1txtDim.Text=nEndSubPrivateSubcmdSta_Click()StaticnAsIntegern=n+1txtSta.Text=nEndSub6.3变量、过程的作用域PrivateSubcmdDim_Click()6.3292.窗体/模块级变量在“通用声明”段中用Dim语句或用Private语句声明的变量,可被本窗体/模块的任何过程访问。但其他模块却不能访问该变量。声明窗体/模块级变量要先进入程序代码窗口,单击左侧的下拉框并选择“通用”,再单击右侧下拉框并选择“声明”。例如,在“通用声明”段声明如下变量:PrivatesAsStringDimaAsInteger,bAsSingle6.3变量、过程的作用域2.窗体/模块级变量6.3变量、过程的作用域303.全局变量
全局变量也称工程级变量,在窗体模块或标准模块的顶部的“通用”声明段用Public或Global关键字声明,它的作用范围是整个应用程序,即可被本应用程序的任何过程或函数访问。例如:PublicaAsIntegerGlobalbAssingle6.3变量、过程的作用域3.全局变量6.3变量、过程的作用域31【例6-8】编写一个应用程序,其由1个窗体模块和1个标准模块组成,界面由1个窗体及其中的3个文本框、3个标签和2个命令按钮组成。6.3变量、过程的作用域查看代码【例6-8】编写一个应用程序,其由1个窗体模块和1个标准模326.3.3过程的作用域◆在窗体或模块中用Private定义的过程为窗体或模块级过程,只能在定义它的窗体或模块中调用。◆在窗体中用Public定义的过程,可以在其他窗体中调用,但必须在过程名前加上自定义过程所在的窗体名。◆在模块中用Public定义的过程为全局级过程,可在任意窗体中调用。6.3变量、过程的作用域6.3.3过程的作用域6.3变量、过程的作用域336.4.1形参与实参的概念形式参数(简称形参)指出现在Sub和Function过程的定义中出现的变量名、数组名,过程被调用前,没有分配内存,其作用是说明自变量的类型和形态以及在过程中的角色。形参可以是:(1)除定长字符串变量之外的合法变量名;(2)后面跟()括号的数组名。6.4参数的传递6.4.1形参与实参的概念6.4参数的传递34例如定义了下面一个过程:SubSwap2(x%,y%,str$) …EndSub可以用下面的语句调用该过程:CallSwap2(a%,y%,"Student")6.4参数的传递过程定义:SubSwap2(x%,y%,str$)过程调用:CallSwap2(a%,y%,"Student")例如定义了下面一个过程:6.4参数的传递过程定义:Sub356.4.2按值传递参数按值传递参数(PassedByValue)时,是将实参变量的值复制一个到临时存储单元中,如果在调用过程中改变了形参的值,不会影响实参变量本身,即实参变量保持调用前的值不变.6.4参数的传递88实参x形参y在VisualBasic中,传值方式通过关键字ByVal来实现。也就是说,在定义通用过程时,如果形参前面有关键字ByVal,则该参数用传值方式传递。6.4.2按值传递参数6.4参数的传递88实参x形参36【例6-9】编写一个程序,实现两个整数的相加。SubAddTest(ByValm%,ByValn%) Dimsum% sum=m+n print"a+b=";sumEndSubPrivateSubCommand1_Click() a%=10:b%=20 CallAddTest(a,b)'传值 Print"a=";a,"b=";bEndSub6.4参数的传递【例6-9】编写一个程序,实现两个整数的相加。6.4参376.4.3按地址传递参数
缺省或加“ByRef”关键字的为按地址传递参数。按地址传递参数时,把实参变量的地址传送给被调用过程,形参和实参共用内存的同一地址。在被调用过程中,形参的值一旦改变,相应实参的值也跟着改变。这意味着实参与形参共用同一个内存单元。6.4参数的传递8实参x形参y6.4.3按地址传递参数6.4参数的传递8实参x形参38【例6-10】通过下面程序观察值传递和地址传递方式的区别。【例6-11】阅读程序并写出程序的运行结果。6.4参数的传递查看代码查看代码【例6-10】通过下面程序观察值传递和地址传递方式的区别。396.4参数的传递实参x 实参y 实参y形参x 形参y 形参z3412420x=3*zy=2*z8z=x+y6.4参数的传递实参x 实参y 实参y形参x 形参406.4.4数组参数VB允许把数组作为形参出现在形参表中,语法为:形参数组名()[As数据类型]在传送数组时,除遵守参数传送的一般规则外,还应注意以下几点:(1)形参数组只能按地址传递参数,对应的实参也必须是数组,且数据类型相同。(2)把一个数组的全部元素传送给一个过程,应将数组名分别写入形参列表中,并略去数组的上下界,但括号不能省略。6.4参数的传递6.4.4数组参数6.4参数的传递41(3)在过程中不可以用Dim语句对形参数组进行声明,否则会产生“重复声明”的错误。但在使用动态数组时,可以用ReDim语句改变形参数组的维界,重新定义数组的大小。(4)被调过程可通过Lbound和Ubound函数确定实参数组的上、下界。(5)实参和形参结合是按地址传递,即形参数组和实参数组共用一段内存单元。(6)调用时形参数组m和实参数组n进行形实结合,它们共用一段内存单元。6.4参数的传递(3)在过程中不可以用Dim语句对形参数组进行声明,否则会产42【例6-12】编写一个程序,用数组作参数,计算方阵对角元素的和。它由一个窗体模块构成,其中包括一个自定义过程和一个命令按钮的单击事件过程。6.4
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小红书:小红书官方直播间三招教你账户成长
- 九年级化学下册 第九章 现在生活与化学9.2 化学合成材料说课稿 (新版)粤教版
- 2024秋九年级语文上册 第六单元 22《范进中举》教学设计 新人教版
- 八年级道德与法治下册 第一单元 坚持宪法至上 第一课 维护宪法权威 第1框 公民权利的保障书教案 新人教版
- 2024-2025学年高中历史 第四单元 雅尔塔体制下的“冷战”与和平 第15课“冷战”的形成(1)教学教案 岳麓版选修3
- 2024-2025学年高中语文 第四单元 古代人物传记 第12课 苏武传教案 新人教版必修4
- 2023三年级英语下册 Unit 1 Let's go to school Lesson 1教案 人教精通版(三起)
- 租赁桥面板合同(2篇)
- 颐和园课件 总结
- 苏教版江苏省东台市2023-2024学年高二上学期期末数学试题
- 2023年高考浙江卷英语试题(2023年1月考试-含听力音频、听力原文和答案)
- 五年级上册数学苏教版课件第1课时 用列举法解决问题-教案
- 中国历史文选第四单元 典志体政书、诏令奏议
- YC/T 11.4-2006烟草机械产品图样及设计文件第4部分:编号原则
- RB/T 047-2020检验检测机构管理和技术能力评价设施和环境通用要求
- 食品安全保障措施方案
- 九年级化学上册复习课件(1-7单元)(2)第一单元复习课件
- GB 4806.1-2016食品安全国家标准食品接触材料及制品通用安全要求
- 输出共模电感规格书
- 煤矿干部个人思想工作总结(四)
- 【外科学】微创外科技术-课件
评论
0/150
提交评论