自定义函数过程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Function(函数)过程
2.函数过程的调用 1)直接调用,即有返回值的调用,该方法调用的函数必须 作为表达式或表达式中的一部分,再配以其他的语法成 分构成语句。函数过程不能作为独立语句
最简单的情况就是在赋值语句中调用函数过程,其形式 为:变量名=函数过程名(实参表)
2)用call语句调用,即没有返回值的调用,格式为:
Private Sub fact(n as integer, f as double) f=1 for i=1 to n f=f*i Next i End Sub
Private Sub Form_Click() dim a as double …… call fact(5, a) Print a End sub
如果函数在被调用时不需要传递数据,定义时可以不 指定形参(即为无参函数)。
函数被调用后可以返回一个运算结果,即函数值。函 数值是通过给函数名赋值的方法获得的。 函数也可以没有返回值,调用无返回值的函数,或不 需要函数的返回值时,可以采用第二种调用格式
主程序调用函数过程时,实参表中的实参个数必 须与对应函数过程的形参个数完全相同。实参和形参 按它们的位置建立起一一对应的联系,实参的名字和 对应位置上形参的名字无需相同,而类型却必须相容。
a
5!
二、按值传递和按地址传递:
1、按值传递:
调用时,系统将实参的值复制一份给形参。被
调用过程中的操作在形参自己的存储单元中进
行。实参的值不会受到形参的影响。
2、按地址传递:
调用时,将实参的地址传递给形参,实参与形
参公用同一个内存单元,对形参操作实质上是
对实参的操作。
二、按值传递和按地址传递: 3、如何实现两种方式的传递? (1)在对子程序调用时,默认情况下,实参为常量、 表达式或带括号的变量,按值传递;实参为变 量或数组,按地址传递。 (2)在定义过程时,在形参前加:ByVal(按值传 递); ByRef(按地址传递)。 注意:数组只能按地址传递。
在调用sub过程时,实参和形参按位置一一对 应,实参的值或地址传递对应位置上的形参后, 执行过程体。
n! 练习:求组合数 C m!( n m)!
m n
的值,设m=6,n=10。 分析:(1)编写sub过程计算n! (2)编写主程序调用子程序计 算组合数
‘D
‘A ‘B ‘C ‘E ‘F ‘G ‘H ‘I
举例:
sub fact(n as integer,f as double) …… End sub
Private Sub Form_Click() dim a as double,x as integer x=5 call fact(x, a) call fact(x+1,a) call fact((x),a) 按值 Print a 传递 End sub
§6.4 过程调用中的参数传递
一、形式参数和实际参数:
1、形参:接收传递给Sub或Function过程的参数,
只能为变量(除定长字符型变量外)和数组,
不能为常量或表达式。
2、实参:调用时传送给Sub或Function过程的常量、
变量、数组元素、数组名或表达式等。使用时,
与形参个数相等,位置对应,类型相符。
号不能省略,这种过程叫无参函数过程.
4)[Private|Public] 用于确定过程的作用域, [Static]用于确定过程变量的特点 5)函数体:其中的语句用来计算函数值,在返回主 程序之前,必须将函数值赋给函数名。将函数值 赋给函数名形式如下: 函数名=表达式 6)如果在函数体中含有exit Function 语句时,表 示可异常退出过程,该语句通常置于选择结构中。
例2、求5!+8Βιβλιοθήκη Baidu+13!的和
§6.1
过程概述
一.主程序和子程序:
在程序设计过程中,我们会遇到几个要执行同样 动作的不同过程,而每次都以不同的参数进行重复 如果能够把完成这些动作的语句组,设计成能完 成一定功能的,可供其他程序调用的独立程序段, 就是子程序;把调用子程序的程序称为主程序。
在需要执行该任务时,主程序调用子程序,子程 序的运算结果通过参数等传送到主程序调用处。子 程序以模块的形式编写,子程序可以被多次调用。
总结 Function过程和Sub过程的区别:
1、格式上不同 2、调用方式不同
①Function过程的调用形式:
与内部函数调用类似
②Sub过程的调用方式为: call 过程名(参数列表) 过程名 参数列表
3、应用上 Function过程:通过函数名返回一个处理结果; Sub过程:(1)没有返回值只是实现一个功能;(2)通 过参数传递返回多个处理结果。
(1) 过程名:不能用来返回值。
(2)([参数列表]):当有一个以上形参时,它们之 间用逗号隔开。形参只能是变量或数组。 [参数 列表]可以省略,括号不能省略,这种过程叫无参 过程,其形式如下:
[Private|Public][Static]Sub 过程名() (3)语句组:exit sub
(4)[Private|Public]用于确定过程的作用域, [Static]用于确定过程中变量。
Private Sub fact(n as integer, f as double) f=1 for i=1 to n f=f*i Next i End Sub
Private Sub Form_Click() dim a as double …… call fact(5, a) Print a End sub
Private Sub fact(n as integer, f as double) f=1 for i=1 to n f=f*i Next i End Sub
n 5 Private Sub Form_Click() dim a as double …… call fact(5, a) print a End sub a 5! f
Form2.frm
Private sub f1() Public function f2()
Private sub f1() Public function f3()
一、过程的作用域
窗体(模块)级过程
定义:在窗体或标准模块通用声明段定义的、用 Private关键字限制的过程。
作用范围:只能在所属的窗体或标准模块中被其 他过程调用。
调用
程序1
返回 调用 主程序 程序2 返回 程序3 调用 返回 图6-1 主程序与子程序之间的调用和返回关系
过程 (子程序)
6.1 过程概述
二 、 过程的分类:
内部函数过程 Function过程 自定义函数过程 事件过程 用户自定义Sub过程
Sub过程
6.1 过程概述
二 、 过程的分类:
内部函数过程 Function过程 自定义函数过程 事件过程 用户自定义Sub过程 Abs(x)、sqr(x)等
在调用函数过程时,实参的值传送给对应位置上 的形参,程序的流程接着转去执行函数体内的执行语 句,遇到 End Function语句或exit Function语句时, 执行的流程返回到主程序,并把函数值带回主程序参 与表达式的运算。
举例:求出5!+10!+14!
子程序
主程序
5!
10!
14!
Function(函数)过程
a
0
Private Sub fact(n as integer, f as double) f=1 for i=1 to n f=f*i Next i End Sub
n 5 Private Sub Form_Click() 5的值传 递给n dim a as double …… call fact(5, a) print a End sub a把地址 传递给f a 0 f
Sub过程
6.1 过程概述
三、使用过程的优点 消除了重复语句行。 一次定义,多次调用
使程序更易阅读。
简化了程序开发。
6.2
自定义函数过程
自定义函数过程是位于Function语句与End Function语句之间的一系列语句。一般是处理文本、 进行输入或计算一个值。
通过将函数名与任何所需的参数一起置于一条 程序语句中(参数是用来使函数工作的数据) , 可以调用该函数。使用函数过程与使用内置函数
全局级过程 定义:在窗体或标准模块中定义的过程默认是全 局的,也可用Public关键字声明。 作用范围:可供该应用程序的所有窗体和所有标 准模块中的过程调用。
(1)在窗体中定义的全局级过程,该窗体之外的其 他过程要调用,必须在过程名前加该过程所在的
<课堂练习>编写求两个数中最大数的函数过程。
6.3
SUB过程
一、分类
事件过程
比如:Private Sub Command1_Click()
用户自定义Sub过程
二、自定义Sub过程的建立
定义格式为:
[Static][Private|Public] Sub 过程名
(参数列表) 语句组
End sub
举例:编写求两个整数最大公约数的过程, 并在主程序中调用该过程求两个数的最大
公约数,并根据最大公约数求最小公倍数。
在选择参数传递方式时,遵照如下原则:
(1)过程中处理的对象是数组时,只能采用传地址 方式传递参数; (2)过程的运算结果需要通过参数返回时,必须采 用传地址方式传递参数。 注意:在传值方式下,实参与形参数据类型只要相容 即可;在传地址方式时,实参的类型必须与形参一致, 否则会出现编译错误。
三、自定义Sub过程的调用
两种形式:
(1) (2) call 过程名 过程名[(参数列表)] 参数列表
参数列表:代表要传递给sub过程的实际值,称为实 际参数(简称实参),可以为常量、变量、数组元 素、数组名或表达式等。与形参类似,参数之间用 逗号分隔
三、自定义Sub过程的调用
两种形式:
(1) (2) call 过程名 过程名[(参数列表)] 参数列表
第六章 过程
§6.1 §6.2 §6.3 §6.4 §6.5 过程概述 自定义函数过程 SUB过程 向过程传递参数 变量、过程的作用域
引例
例1、求sin5+sin8+sin13的值
Private Sub Command1_Click() MsgBox Sin(5) + Sin(8) + Sin(13) End Sub
call
或 过程名
过程名(实际参数表)
实际参数表
如:Now Time Date等函数
3)无参函数调用,调用无参函数,只须写出函数名
Function(函数)过程
说明: 在定义函数时,在函数名后指定的参数称为形式参数; 在调用函数时,函数名后指定的参数称为实际参数。 在函数调用时,实参通过形参将数据传递给被调用函 数。
举例:分别用传地址方式和传值方式编写交换两 个整数的过程并调用。(例6-4)
举例:编写求一组整数平均值的过程,并在主程
序中调用。(例6-5)
举例:编写能获得一组整数的最大值和最小值的
过程并调用。(例6-6)
§6.5 过程、变量的作用域
一、过程的作用域
Project1.vbp
Form1.frm
1)函数过程名:命名规则同变量命名。它有两方面的作用, 一方面标识一个函数过程,另一方面把函数运算的结果 传回到主程序 2)[As 数据类型]:是函数返回值的类型,默认为变体类 型。 3)([形参列表]):代表在调用时要传递给函数过程的参数 变量列表。多个参数间应用逗号隔开。形式参数本身没 有值,只代表了参数的个数、位置和类型,系统不开辟 实际内存空间。([形式参数列表])可以省略,但一对括
(比如Time、Int或Str等)的方法完全相同。
一 定义函数过程
1. 利用菜单建立:
用 “工具”→“添加函数”菜单命令来添加函数过程
2. 在代码窗口下直接建立 基本语法为:
[static][public/private]Function 函数名([形参 表])[As Type]
[语句组] [<函数名>=<表达式>] [exit function] [语句组] [<函数名>=<表达式>] End Function
Sub过程
6.1 过程概述
二 、 过程的分类:
内部函数过程 Function过程 自定义函数过程 事件过程 用户自定义Sub过程 Private sub command1_click()
Sub过程
6.1 过程概述
二 、 过程的分类:
内部函数过程 Function过程 自定义函数过程 事件过程 自定义Sub过程