第八讲VB自定义函数与子过程

上传人:ali****an 文档编号:118769096 上传时间:2019-12-25 格式:PPT 页数:45 大小:422KB
返回 下载 相关 举报
第八讲VB自定义函数与子过程_第1页
第1页 / 共45页
第八讲VB自定义函数与子过程_第2页
第2页 / 共45页
第八讲VB自定义函数与子过程_第3页
第3页 / 共45页
第八讲VB自定义函数与子过程_第4页
第4页 / 共45页
第八讲VB自定义函数与子过程_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《第八讲VB自定义函数与子过程》由会员分享,可在线阅读,更多相关《第八讲VB自定义函数与子过程(45页珍藏版)》请在金锄头文库上搜索。

1、第八章 自定义函数与子过程 几个概念 一、VB程序的基本构成是过程。 二、VB6.0中过程有两大类:内部过程和外部过程。 1、内部过程:系统提供的,不需要用户编写,如内部函数。 2、外部过程:用户根据需要定义的,供调用的程序段,外部过 程分为子过程、函数过程。 几个概念 三、在VB中使用过程编程有两个优点: 1、过程可使程序划分成离散的逻辑单元,每个单元都比没有使 用过程的整个程序容易调试。 2、一个程序中的过程,往往不必修改或只需稍作改动,便可以 成为另一个程序的构件。 四、Visual Basic 的两类过程: 1、Sub 过程(子过程),不返回值或多个返回值。 2、Function 过程

2、(函数过程),有一个返回值。 8.2 自定义义函数过过程 例8.1 设计程序将50,100区间内的偶数拆成两个 素数之和 分析:可先将偶数拆分成两个数之和,在分别对这两个 数进行素数判定,若都是素数就输出。例如:可将50拆 分为:3+47、4+46、. 47+3,然后对每种组合中的两个数 分别进行素数判断。 因此,可以定义一个专门用于素数判断的 函数过程。 8.2 自定义义函数过过程 Private Function prime(ByVal x As Integer) As Boolean Dim I% prime = True 函数赋初值True For I = 2 To Sqr(x) If

3、 x Mod I = 0 Then 判断x是否可被i整除 prime = False 函数取值False,则x不是素数 Exit Function 函数结束 End If Next I End Function 在事件过程中调用以上定义的函数,得到结果。 Private Sub Form_Click() Dim I%, N, K% I = 1 计数 For N = 50 To 100 Step 2 取偶数 For K = 3 To N / 2 第一个数的取值区间折半 If prime(K) And prime(N - K) Then 二次调用结果都是 素数输出 Print I; :; N; =

4、; K; +; N - K Exit For 退出k循环 End If Next K I = I + 1 Next N End Sub 8.2 自定义义函数过过程 8.2.2 函数过程的定义 函数过程在被调用前,一定要先定义,函数定义的方式一般 有两种: 1利用“添加过程”对话框定义 打开窗体或模块的代码窗口,单击“工具”菜单,选择“添 加过程”命令,即可打开“添加过程”对话框。 8.2 自定义义函数过过程 在“添加过程”对话框中输入并选择相应的内容和项目即 可。在“名称”文本框内输入待定义函数过程的名称,在“类型 ”选项组中选择“函数”单选按钮。 单击确定按钮,则可建立一个函数过程的框架 。

5、 8.2 自定义义函数过过程 2直接在代码窗口定义 进入代码窗口后,在左侧显示对象名的下拉列表框中选 择“(通用)”,在右侧显示过程的下拉列表框中选择“( 声明)”,然后输入Function及函数名即可。 自定义函数过程的格式如下: Public| PrivateStaticFunction()As 函数名= Exit Function 函数名= End Function 8.2 自定义义函数过过程 1)Public或Private:表示函数是“公有的”或“私有的”。Public 表示该函数为公有过程,定义后整个程序范围内均可调用该函 数,但调用时必须加上该函数所在的窗体或标准模块作为前辍 ,

6、而Private表示私有子过程,用它定义的函数只能在本窗体或 模块中被调用。缺省默认是公有的。 2)Static:表示函数中的局部变量是静态变量,在函数被调用 后,其值仍然被保留; 说明 3)():该项中的参数为形式参数,又称哑元,可 以是变量名或数组名,当参数为数组名时,形参和实参在参 数声明时应省略其维数,但括号()不能省略。当参数有多项时 ,参数间要用逗号分隔开。使用格式为ByVal|ByRefAs 4)ByVal:表示调用时参数为值传递方式,实参的值不随形 参值的变化而变化; 说明 说说明 5)ByRef:参数默认选项,表示参数为地址传递方式,实参 的值随形参值的改变而改变,数组只能以

7、传地址的方式引用; 6) As 表示函数返回值的类型,默认为变体型。在函 数体内至少应对对函数名赋值一次。 7) 函数名=,用于函数运行后返回一个值。如在 定义中未对函数名赋值,则将返回一个默认值。其中,数值 型为0,字符型为“”,变量型为Empty。 8) Exit Function用于退出函数过程,该项一般嵌套在if结构 中使用,在满足if条件时退出该函数过程。 例8.2 设计一个程序统计字符串中西文字符个数。 算法:汉字的Asc()函数的返回值小于0;西文字符的Asc()函数 的返回值大于0。 Function CountXw%(ByVal S$) Dim I%, T%, K%, C$

8、For I = 1 To Len(S) C = Mid(S, I, 1) 逐个地取出字符 If Asc(C) 0 Then K = K + 1 字符ASCII码大于 0,则个数累加1 Next I CountXw = K 返回函数值 End Function 例8.2 设计一个程序统计字符串中西文字符个数。 Private Sub Command1_Click() Dim C1% C1 = CountXw(Text1.Text) 调用CountXw函数 Picture1.Print Text1 在Picture1中显示统计的结果 Picture1.Print 有; C1; 个西文字符数 End

9、 Sub 8.2.3 函数过程的调用 1函数调用的形式 其调用形式如下: 变量=函数过程名(实参列表) 其中,实参列表中的实参是传递给被调用过程的变量或表达式 。 例题8.2中的C1 = CountXw(Text1.Text) 就是一次函数调用。 注意:调用函数后,函数过程名将有一个返回值,函数是 一个特殊的表达式。因此,函数不能作为单独的一条语句,而 必须要以给变量赋值或与命令一起使用的形式。 例如: If prime(K) And prime(N - K) Then 8.2 自定义义函数过过程 8.2 函数过过程的定义义和调调用 2函数过程调用的执行流程 在事件过程调用一个函数过程时,程序

10、在执行这两个过 程时的流程如下图所示。 Function Hypotenuse( x%,y%) Hypotenuse = Sqr (x 2 + y 2) End Function Private Sub Command1_Click() s = Hypotenuse(a,b) End Sub 函数过程调用的执行流程图函数过程调用的执行流程图 过程调用时执行顺序如下: 1)事件过程Command1_Click()在执行到函数过程调 用语句“s = Hypotenuse(a,b)”时,程序执行控制权转 移到Hypotenuse()函数过程中; 2)执行控制权转移时,实参a和b的值将分别传递 给Hy

11、potenuse()函数中的形参x和y; 3)x和y获得初值后,即可执行函数过程中的程序 代码并给函数过程名赋值,该值即为整个函数过程 的返回值; 4)函数执行结束后,函数的返回值将赋给主调事 件过程的变量s; 5)变量s得到赋值后,接着执行调用函数过程后面 的剩余语句。 8.3 子过过程的定义义和调调用 引例 调用函数后,将得到函数的返回值,但是,在有些问题的 中,过程执行结束后不需要返回值,用函数过程实现就会非常 困难,而应该使用子过程的形式。 例8.3 试编写一个将两个数进行交换的过程供其它过程多次 调用。 分析:先编写一个具有将两个数进行交换的子过程,需要进 行两数交换时,调用该子过程

12、,同时将待交换的两个数传送到 该子过程中,在子过程实现两数交换。子过程执行结束后,将 被交换后的两个数返回到主调过程中。 Cp()子过程的定义 Private Sub Cp(A As Integer, B As Integer) 形参为 传址方式 If A = 0 Then Exit Sub End If A = A + B A和B的值交换,带回主调过程 B = A - B A = A - B Print 在子过程中交换后的值 Print A=; A, B=; B End Sub 主调程序Cp子过程 Private Sub Command1_Click() Dim Str1$, Va%, Vb

13、% Str1$ = 输入对话框 Va = InputBox(Va=, Str1$) Vb = InputBox(Vb=, Str1$) Print 在主调过程中调用子过程前的值 Print Va=; Va, Vb=; Vb 输出原始值 Call Cp(Va, Vb) Print 在主调过程中调用子过程后的值 输出经子 过程处理过后的返回值 Print Va=; Va, Vb=; Vb End Sub 运行结结果: 程序运行后,单击窗体以触发Form_Click()事件过程,运 行结果如下图所示。 从程序中可以看到,Va和Vb的初值分别是45和23,而在 窗体中输出时Va和Vb的值分别是23和4

14、5,达到了两个数交换 的目的。 8.3 子过过程的定义义和调调用 8.3.1 子过程的定义 子过程以过程名来标识,被其它过程调用。子过程与事件 过程有一定区别,事件过程可以在该事件触发或调用时执行 ,而用户自定义的子过程只有在被其它过程调用时才能执行 。 子过程的定义跟函数过程的定义相类似,在代码窗口中输 入Sub及子过程名即可,系统会自动加上End Sub与子过程名 后的一对括号(),然后即可在子过程的框架中输入程序代 码。 子过程的定义格式: Private|PublicStatic Sub () Exit Sub End Sub 说明: Public|Private与Static:它们的

15、含义和作用与函数过程中 相应的这些关键词相同。 ():该项中参数的形式和调用方法也与函数过程 相同。 Exit Sub:退出过程,该项一般嵌套在if结构中使用,在满 足if条件时退出该过程。 6.2 子过过程的定义义和调调用 例:分别计算两个数的和与差,而当两个数的值均 为0时则不进行任何计算。 Sub Operation(x As Integer , y As Integer) Dim t1 as Integer, t2 as Integer If x =0 and y=0 Then Exit Sub End If t1=x+y t2=x-y Print “t1=”;t1; “t2=”;t2 End Sub 6.2 子过过程的定义义和调调用 在Sub 过程与Function 过程之间的

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号