vb过程绝对有用_第1页
vb过程绝对有用_第2页
vb过程绝对有用_第3页
vb过程绝对有用_第4页
vb过程绝对有用_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

第六章过程6.1函数过程的定义与调用6.2子过程的定义与调用6.3参数传递6.4递归6.5综合应用12例:已知的值。47,求Cm!(n-m)!n!Cmn=k1=1:k2=1:k3=1n=7:m=4Fori=1Tonk1=k1*iNextiFori=1Tomk2=k2*iNextiFori=1Ton-mk3=k3*iNextis=k1/k2/k3本章目录3调用过程:调用Sprg1调用Sprg1调用Sprg2子过程:Sprg1子过程:Sprg2过程的引入:

使同类的操作不重复编写,写一次多次用把一项复杂的工作分成简单的功能块,分而治之过程:完成一段独立功能,可供其他过程使用。本章目录4Sub过程事件过程自定义子过程Function过程

内部函数(标准函数)自定义函数过程1)过程是一段程序代码,是相对独立的逻辑模块。2)一个完整的VB应用程序由若干过程和模块组成。Sub子过程:完成一定的操作和功能,无返回值。Function函数过程:完成一定的操作和功能,并且可将数据处理的结果返回。常用过程分类:本章目录6.1函数过程的定义和调用5例6.1:已知多边形各条边的长度,计算多边形的面积。计算多边形面积,可将多边形分解成若干个三角形。计算三角形面积的公式如下:本章目录6定义函数过程area:Functionarea(x!,y!,z!)AsSingleDimc!c=1/2*(x+y+z)area=Sqrt(c*(c-x)*(c-y)*(c-z))EndFunctionSubcommand1_click()…输入若干个三角形边长

S=area(a,b,c)+area(c,d,e)+area(e,f,g)Msgbox("面积="&S)EndSub6.1函数过程的定义和调用调用函数过程本章目录6.1.1函数过程的定义7

在窗体、模块等的代码窗口把插入点放在所有现有过程之外,直接输入函数过程。定义函数过程的形式如下:[Public|Private]Function函数名(形参)[As类型]

变量声明语句块函数名=表达式EndFunction6.1函数过程的定义和调用本章目录8Public全局函数过程,可被程序任何模块调用Private仅供本模块中的其它过程调用形参(或称哑元)只能是变量或数组名(),仅表示参数的个数和类型,无值。例6.2

编写一个求最大公约数的函数过程。

Functiongcd(m%,n%)AsIntegerIfm<nThent=m:m=n:n=tDowhilen<>0r=mModn:m=n:n=rLoopgcd=m

EndFunction6.1函数过程的定义和调用本章目录6.1.2函数过程的调用9调用形式:函数过程名([参数列表])

参数列表(称为实参或实元):必须与形参个数相同,位置与类型一一对应。可以是同类型的常量、变量、表达式。6.1函数过程的定义和调用本章目录6.1函数过程的定义和调用

Sub

Form_Click()Dimx%,y%,z%x=124:y=24z=gcd(x,y)MsgBox("最大公约数是"&z)EndSub

程序运行流程Functiongcd(m%,n%)AsIntegerIfm<nThent=m:m=n:n=tDowhilen<>0r=mModn:m=n:n=rLoopgcd=mEndFunction10本章目录11例6.3

编一函数,统计字符串中汉字的个数。分析:在VB中,字符以Unicode码存放,每个汉字和英文是一个字符、占有两个字节,区别是汉字的机内码最高位为1,若利用Asc函数求其码值为小于0(以补码表示),而西文字符的最高位为0,Asc函数求其码值为大于0。

6.1函数过程的定义和调用本章目录6.2子过程的定义与调用126.2.1引例以下情况使用函数过程存在不便:不是为了获得某个函数值,而是为了某种功能的处理。要获得多个结果。VB中提供了使用更灵活的子过程。例6.4编一过程,对Label1控件进行移动,通过参数Tag的值(1或-1)决定移动方向。该过程不是为了计算获得某个结果,而是进行对控件移动的处理。本章目录6.2.2子过程的定义13子过程定义的方法类似函数过程,形式如下:[Public|Private]Sub

子过程名([参数列表])

局部变量或常数定义

语句

[ExitSub]

语句EndSub子过程名、形参同函数过程中对应项的规定,当无形参时不要括号。6.2子过程的定义与调用本章目录1.子过程与函数过程的区别14

把某功能定义为函数过程还是子过程,没有严格的规定。一般若程序有一个返回值时,函数过程直观;当有多个返回值时,习惯用子过程。函数过程必须有返回值,函数名有类型。子过程名没有值,也没有类型,不能在子过程体内对子过程名赋值。

6.2子过程的定义与调用本章目录2.参数问题15形参是过程与主调程序交互的接口,从主调程序获得初值,或将计算结果返回给主调程序;不要将过程中所有使用过的变量均作为形参;形参没有具体的值,只代表了参数的个数、位置、类型;形参只能是简单变量、数组名,不能是常量、数组元素、表达式。6.2子过程的定义与调用本章目录6.2子过程的定义与调用例6.5:找定冠词的ProcThe子过程。

SubProcThe(ByVals$,ByRefCount%)……EndSub……CallProcThe(Text1.Text,n)……16本章目录6.2.3子过程调用17子过程的调用是一句独立的调用语句,有两种形式:

Call

子过程名[(实参列表)]

子过程名([实参列表])用Call关键字时,若有实参,则实参必须用圆括号括起,无实参圆括号省略。注意:若实参要获得子过程的返回值,则实参只能是变量(与形参同类型的简单变量、数组名、结构类型),不能是常量、表达式,也不能是控件名。6.2子过程的定义与调用本章目录18例6.6

分别编一个统计字符串S中定冠词The出现个数的子过程和函数过程,并分别调用。处理方法:利用InStr函数反复在字符串S找The子串。分析:当定义好函数过程后,要改为子过程,只要将函数过程的返回结果作为子过程的形参,即在子过程中增加一个参数。6.2子过程的定义与调用本章目录6.3参数传递196.3.1形参与实参在参数传递中,一般是按位置传送,按实参的位置次序与形参的位置次序对应传送,与参数名没有关系。按位置传送是最常用的参数传递方法,如在调用标准函数时,用户根本不知道形参名,只要关心形参的个数、类型、位置,例如Mid函数形式:

Mid(字符串$,起始位%,取几位%)调用语句:s=Mid("ThisisVB",9,2)则s中的结果为“VB”。本章目录6.3.2传地址与传值20实参与形参的结合有传地址(ByRef)和传值(ByVal)两种方法。传地址方式当调用一个过程时,它将实参的地址传递给形参。因此在被调过程体中对形参的任何操作都变成了对相应实参的操作,实参的值就会随过程体内对形参的改变而改变。传值方式当调用一个过程时,系统将实参的值复制给形参,实参与形参断开了联系。在过程体内对形参的任何操作不会影响到实参。缺省关键字6.3参数传递本章目录例6.7

编写交换两个数的过程,Swap1用传值方式,Swap2用传地址方式。21形参获得实参的值形参获得实参的地址6.3参数传递本章目录22选用传值还是传地址一般进行如下考虑:要将被调过程中的结果返回给主调程序,则形参必须是传址方式。这时实参必须是同类型的变量,不能是常量、表达式;不希望过程修改实参的值,则应选用传值方式,减少各过程间的关联。因为在过程体内对形参的改变不会影响实参;形参是数组都是地址传递。6.3参数传递本章目录6.3.3数组参数的传递23例6.8

如下sum子过程求数组a各元素和、并改变数组各元素值:Functionsum%(ByRefx()AsInteger)Dimi%sum=0Fori=0ToUBound(x)

sum=sum+x(i):x(i)=2*x(i)NextiEndFunction6.3参数传递本章目录24形参是数组要以数组名加圆括号表示,不要给出维数上界;多维数组,每维以逗号分隔。在过程中通过Ubound函数确定每维的上界。实参是数组要给出数组名(不需要圆括号)。当数组作为参数传递时,系统将实参数组的起始地址传给过程,使形参数组也具有与实参数组相同的起始地址。13579形参数组实参数组6.3参数传递本章目录6.4递归25用自身的结构来描述自身就称为递归。最典型的例子是阶乘运算,作如下的定义:递归过程在自身定义的内部调用自己。本章目录26例6.9编fac(n)=n!的递归函数。Functionfac(nAsInteger)AsIntegerIfn=1Then fac=1Else fac=n*fac(n-1)EndIfEndFunction6.4递归本章目录27递推过程:每调用自身,当前参数压栈,直到达到递归结束条件。回归过程:不断从栈中弹出当前的参数,直到栈空。递归算法设计简单,但消耗的机时和占据的内存空间比非递归大,由此可见构成递归的结构如下:递归结束条件及结束时的值;能用递归形式表示,并且递归向终止条件发展。fac(2)=2*fac(1)fac(1)=1fac(4)=4*6fac(3)=3*2fac(2)=2*1fac(3)=3*fac(2)fac(4)=4*fac(3)6.4递归本章目录28例6.10用递归求最大公约数。PublicFunctiongcd(mAsInteger,nAsInteger)AsIntegerIf(mModn)=0Thengcd=nElsegcd=gcd(n,mModn)EndIfEndFunction6.4递归本章目录6.5变量的作用域29过程级变量在一个过程内用Dim或Static语句声明的变量,只能在本过程中使用;模块级变量在模块内、任何过程外用Dim、Private语句声明的变量,可被本模块的任何过程访问;全局变量在模块级用Public语句声明的变量,可被应用程序的任何过程或函数访问。本章目录6.5.1变量的作用域30例如,在下面一个标准模块文件中不同级的变量声明:

PublicPaAsinteger '全局变量

PrivateMbAsstring*10'窗体/模块级变量

SubF1()DimFaAsinteger '过程级变量

…EndSubSubF2()DimFbAsSingle '过程级变量

EndSub6.5变量的作用域6.5.2静态变量31静态变量程序运行过程中可保留变量的值。声明形式:Static变量名[AS类型]用Dim声明的变量,每次调用过程时重新初始化。6.5变量的作用域本章目录32例6.11

编写程序,利用变量count统计单击窗体的次数。PrivateSubForm_Click()Staticcount%count=count+1Print"已单击窗体";count;"次"EndSubPrivateSubForm_Click()Dimcount%count=count+1Print"已单击窗体";count;"次"EndSub6.5变量的作用域本章目录6.6综合应用331.数制转换不同进制数之间的转换,可通过编程来实现;也可通过VB提供的内部函数:十进制转换为八进制函数(Oct)、转换为十六进制函数(Hex)来实现。本章目录34例6.12

编一函数,实现一个十进制整数转换成二至十六任意进制的字符。分析:十进制正整数m转换成r进制数,将m不断除r取余数(若余数超过9,还要进行相应的转换,例如10变成A,11变成B等),直到商为零,以反序得到结果,即最后得到的余数在最高位。6.6综合应用本章目录352.加密和解密信息加密是信息安全性的措施之一。信息加密有各种方法,最简单的加密方法是将每个字母平移一个位置(称为密钥)。例如,后移5个位置,这时,A→F,B→G…

温馨提示

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

评论

0/150

提交评论