第7章过程过程1_第1页
第7章过程过程1_第2页
第7章过程过程1_第3页
第7章过程过程1_第4页
第7章过程过程1_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章过程教学要求掌握VB的两种过程:事件过程和通用过程掌握Sub过程的定义掌握Function过程的定义掌握过程的调用掌握参数的传递——按值传递和按地址传递掌握递归算法掌握变量的作用域

7.1Sub过程

7.2Function过程

7.3过程调用

7.4参数的传递

7.5递归过程

7.6变量的作用域

7.7程序示例

7.8创建与设置启动过程教学内容

基本思想:将一个大的程序按功能分割成一些小模块特点:各模块相对独立、功能单一、结构清晰、接口简单控制了程序设计的复杂性避免程序开发的重复劳动易于维护和功能扩充模块化程序设计cnm=m!(n-m)!n!PrivateSubCommand1_Click()n=Val(Text1.Text)m=Val(Text2.Text)k=nt=1Fori=1Tokt=t*iNextis=tk=mt=1Fori=1Tokt=t*iNextis=s/tk=n-mt=1Fori=1Tokt=t*iNextis=s/tText3.Text=Str(s)EndSub共同代码计算k!能不能简化?计算:模块化程序设计举例函数定义计算k!PrivateSubCommand1_Click()DimmAsInteger,nAsIntegerDimsAsLongn=Val(Text1.Text)m=Val(Text2.Text)s=fact(n)/(fact(m)*fact(n-m))Text3.Text=Str(s)EndSubPrivateFunctionfact(kAsInteger)AsLongDimiAsIntegerfact=1Fori=1Tokfact=fact*iNextiEndFunction函数调用(三次)使用函数过程的分类事件过程Sub过程通用过程子程序过程Sub函数过程Function7.1Sub过程--事件过程1.概念:由控件对象通过事件触发所执行的一系列代码。2.说明:事件过程之前一般都有PrivateSub,表明事件过程是局部的,只在本窗体中有效。

事件过程是否有参数由系统自动添加,不能人为改动。3.分类:

窗体事件过程控件事件过程PrivateSubForm_事件名([参数列表])

[局部变量和常数声明]

语句块EndSubPrivateSub控件名_事件名([参数列表])

[局部变量和常数声明]

语句块EndSub窗体的事件过程名中不使用其具体名称,而固定用Form控件的事件过程名中必须使用其具体名称7.1Sub过程--事件过程4.窗体启动时的4个相关事件(p.126)Initialize(初始化)事件——配置窗体,在Load之前。Load(加载)事件——窗体加载到内存时触发。Activate(激活)事件——成为被激活窗体时触发GotFocus(聚焦)事件——窗体成为当前焦点时触发,一般是窗体上的控件成为焦点,而不是窗体。执行次序:

InitializeLoadActivateGotfocus注意:窗体的Initialize、Load事件发生在窗体被显示之前,其中可放置系统初始化命令,但其中语句有所限制;窗体加载后,只要不被卸载,就不会再执行Initialize、Load事件,但Activate事件会多次发生;当访问另一窗体上的“非可视”数据或调用其中定义的全局过程时,只会触发该窗体的Initialize事件,而Load事件不触发;当访问另一窗体上的“可视”数据时,会同时触发该窗体的Initialize和Load事件在以下两种情况下,经常使用自定义过程:(1)应用程序中出现较频繁处理的部分,仅仅是每次处理的数据不同而已;(2)程序中比较复杂的算法,独立出来,增强程序的可读性。

通用过程的引入使得整个程序的结构更加清晰,模块化更强。7.1Sub过程—通用过程概念:完成某一特定功能的程序段

说明:

必须显式调用方可执行。3.分类:

公有过程(Public)私有过程(Private)4.通用Sub过程的定义[格式]:

[Private|Public][static]Sub<过程名>([<参数列表>])<过程体>EndSub[说明]:(1)以Sub开头,EndSub结束,中间是过程体——包括变量声明和语句块;(2)以Private为前缀的过程是模块级的,以Public为前缀的过程是应用程序级的,缺省默认是Public;(3)Static选项说明过程中的局部变量是静态变量;(4)过程名的命名规则和变量名相同,在同一个模块中,过程名必须是唯一的;(5)参数列表中的参数称为形式参数,可以没有,但无参数时圆括号不能省略;有多个参数时,参数之间用逗号间隔;(6)参数说明格式:

[Optional][ByVal|ByRef]<变量名>[()][As<数据类型>]其中:

a)若参数是数组,则在变量名后面加一对圆括号,但无维界定义;b)ByVal:指明参数传递方式是传值;

c)ByRef:指明参数传递方式是传地址,为缺省值;

d)若参数是字符型的,必须是不定长字符串;e)Optional:参数是可选的,必须定义在必选参数后面。(7)当过程调用结束,即执行到EndSub语句,系统自动返回调用程序的调用语句处,执行调用语句的下一条语句;(8)在过程体中不能再定义过程,但可以调用其他过程;(9)可用ExitSub语句提前退出过程调用,返回调用语句。例:PrivateSubExchange(xAsInteger,yAsInteger)DimTempAsIntegerTemp=x:x=y:y=TempEndSub该通用过程实现交换功能,包含两个参数,均是ByRef形式的参数。调用语句(Call语句)下一条语句Sub过程体EndSub主调程序被调过程主调程序被调过程5.

建立通用Sub过程方法一:在“代码编辑窗口”的“通用”中自行输入;方法二:进入代码编辑器窗口,执行“工具”菜单的“添加过程”,在“添加过程”对话框中输入定义过程的名称、类型和范围后单击“确定”按钮,系统会自动在代码窗口添加自定义过程的框架(过程头和过程结束语句)。6.Sub过程调用[格式一]:Call<过程名>[(<实在参数表>)][格式二]:<过程名>[<实在参数表>][功能]:对已定义的过程进行调用。[说明]:(1)调用的过程必须是已经定义的,否则系统会出现“子程序或函数未定义”的信息提示;(2)实在参数可以是常量、变量或表达式、数组;(3)实在参数的数目及类型要和定义时必选参数保持一致,否则系统会出现“参数不可选”的信息提示,参数之间用逗号间隔;(4)若子程序没有参数,则格式一中的括号可以省略;(5)格式一和格式二的区别在于:格式二的参数表无须括号,而是和过程名之间用空格隔开;举例1:将键盘输入的三个数按从小到大的顺序排列输出。

[程序一]:PrivateSubCommand1_Click()DimaAsInteger,bAsInteger,cAsIntegerDimtAsIntegera=Text1.Text:b=Text2.Text:c=Text3.TextIfa>bThent=aa=bb=tEndIfIfa>cThent=aa=cc=tEndIfIfb>cThent=bb=cc=tEndIfText1.Text=a:Text2.Text=b:Text3.Text=cEndSub[程序二]:定义子程序Change实现交换功能,该子程序定义了两个为ByRef方式的必选参数,来传递交换功能实现前的原始数据和返回交换功能实现后的结果数据,至于交换过程中需要的临时变量Temp则因没有保留的价值无须定义为参数,仅在子程序体中定义。子程序即Sub过程的使用不仅可以缩短程序的长度,还能够使程序的结构更加清楚。PrivateSubCommand1_Click()DimaAsInteger,bAsIntegerDimcAsIntegera=Text1:b=Text2:c=Text3Ifa>bThenCallChange(a,b)Ifa>cThenCallChange(a,c)Ifb>cThenCallChange(b,c)Text1=a:Text2=b:Text3=cEndSubPrivateSubChange(x1AsInteger,x2AsInteger)DimTempAsIntegerTemp=x1x1=x2x2=TempEndSubCallChange(a,b)语句也可以用Changea,b来替代。PrivateSubvalue(a()AsInteger,minAsInteger)DimiAsIntegermin=a(1)Fori=2ToUBound(a) Ifa(i)<minThenmin=a(i)NextiEndSub

举例2:定义一个通用过程用以求一维数组中的最小值7.2Function过程

Function过程的特点是返回一个值,因此我们通常也称之为自定义函数。1.Function过程的定义

[格式]:

[Private|Public]Function<函数名>([参数列表])[As<数据类型>]<函数体>EndFunction

[说明]:

(1)以Function开头,以EndFunction结束,中间是函数体;(2)函数名命名规则、参数列表的表示都和Sub过程相同;(3)As数据类型:函数过程将由函数名返回一个值,值的类型由[As数据类型]定义;★(4)函数体中一定要有对函数名赋值的语句——函数名=表达式,否则返回相应类型的初值;★(5)函数体内可有ExitFunction语句——无条件退出函数过程,返回主程序。(6)Function过程不能嵌套定义,但可嵌套调用。PrivateFunctionf(ByvalxAsInteger)AsIntegerf=3*x^3-2*x^2+6*x-1EndFunction举例1:定义函数:函数名=表达式举例2:编写一个求n!的函数。(p131)PrivateFunctionFact(ByvalNAsInteger)AsLongDimKAsIntegerFact=1Ifn=0Orn=1ThenExitFunctionElseForK=1ToNFact=Fact*KNextKEndIfEndFunction函数名=表达式函数类型传值的参数函数类型2.

调用Function过程

[格式]:<函数名>([实在参数表])

[功能]:返回一个函数值。

[说明]:(1)一般情况下,函数的调用出现在赋值语句中,并且在赋值号的右侧;(2)若函数没有参数,函数名后的括号不能省略;(3)虽然VB允许象调用Sub过程那样调用Function过程,但这样调用时系统不返回函数值,建议大家不要使用这种调用方法。Callfact(x)Factx

这两种方法均放弃函数的返回值例如:PrivateSubForm_Click()DimSAsLong,iAsIntegerFori=1To10

NextiPrint”S=";SEndSubPrivateFunctionFact(nAsInteger)AsLongDimiAsIntegerFact=1Fori=1TonFact=Fact*iNextiEndFunction函数名=表达式函数调用:S=S+Fact(i)举例3:S=1!+2!+…+10!PrivateFunctionmin(a()AsInteger)AsIntegerDimiAsInteger

min=a(1)Fori=2ToUBound(a) Ifa(i)<minThenmin=a(i)NextiEndSub举例4:用函数实现求一维数组中的最小值(对比前例Sub)PrivateSubvalue(a()AsInteger,minAsInteger)DimiAsIntegermin=a(1)Fori=2ToUBound(a) Ifa(i)<minThenmin=a(i)NextiEndSub

函数名=表达式函数类型PrivateFunctionPrime(NAsInteger)AsBooleanDimiAsIntegerPrime=FalseFori=2ToN-1IfNModi=0ThenExitForNextiIfi=NthenPrime=TrueEndFunction函数名=表达式可省略,因Prime的初始值就是false举例5:定义函数用以判断一个数是否是素数PrivateFunctionGcd(ByVal

AAsInteger,ByValBAsInteger)AsIntegerDimRAsIntegerR=AModBDoWhileR<>0A=BB=RR=AModBLoopGcd=BEndFunction使用赋

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论