文档介绍:第六章过程(5学时)
函数过程的定义与调用
子过程的定义与调用
参数传递
变量、过程的作用域
递归
常用算法(三)
重点和难点
除了系统提供的内部函数过程和事件过程外,用户可自定义过程:
“Sub”保留字开始的为子过程
“Function”保留字开始的为函数过程
一、函数过程的定义
1.
已知多边形的各条边的长度,要计算多边形的面积。
计算多边形面积,可将多边形分解成若干个三角形。
计算三角形面积的公式如下:
x
y
z
定义函数过程
Public Function area(x!, y!, z!) As Single
Dim c!
c = 1 / 2 * (x + y + z)
area = Sqr(c * (c - x) * (c - y) * (c - z))
End Function
调用函数过程:
mand1_click()
……输入若干个三角形边长
S=area(a,b,c)+area(c,d,e)+area(e,f,g)
Print s
End Sub
自定义函数过程有两种方法:
(1)利用“工具”菜单下的“添加过程”命令定义,生成一个函数的框架
(2)利用代码窗口直接定义
函数过程形式:
Function 函数过程名([参数列表]) [As 类型]
局部变量或常数定义
语句块
函数过程名= 返回值函数过程体
[Exit Function]
语句块
函数过程名= 返回值
End Function
函数过程名:命名规则同变量名
参数列表形式: [ByVal]变量名[()][As 类型]
称为形参或哑元,仅表示参数的个数、类型,无值。
函数名= 返回值在函数体内至少对函数名赋值一次
[Exit Function] :表示退出函数过程
,定义MyReplace(S,OldS,NewS)函数过程
当调用MyReplace("abcdefgabcdecd","cd","3")
时函数的返回值为"ab3efgab3e3"
Function MyReplace(s$, OldS$, NewS$) As String
Dim i%, lenOldS%
lenOldS = Len(OldS) '取OldS字符子串长度
i = InStr(s, OldS) '在字符串中找有否OldS字符子串
Do While i > 0 '找到用NewS 字符子串替换OldS字符子串
s = Left(s, i - 1) + NewS + Mid(s, i + lenOldS)
i = InStr(s, OldS) '找下一个OldS字符子串
Loop
MyReplace = s '替换后的字符串赋值给函数过程名
End Function
假定S为“abcdefgabcdecd”,Oolds为“cd”,News为"3"
(“abcdefgabcdecd”,“cd”,“3”) 第1 次 I=3 结果“ab3efgabcdecd”(“ab3efgabcdecd”,“cd”,“3”) 第2 次 I=9 结果“ab3efgab3ecd”(“ab3efgab3ecd”,“cd”,“3”) 第3 次 I=11 结果"ab3efgab3e3"
函数过程的调用同标准函数调用,参与表达式运算,形式如下:
函数过程名([参数列表])
参数列表:称为实参或实元,它必须与形参个数相同,位置与类型一一对应
可以是同类型的常量、变量、表达式
执行流程:
Private mand1_Click()
Text1 = MyReplace(Text1, "cd", "3")
ST= (“Visual Basic ”
Print MyReplace(ST, "", "")
End Sub
Function MyReplace$(s$, OldS$, NewS$)
Dim i%, lenOldS%
lenOldS = Len(OldS)
i = InStr(s, OldS)
Do While i > 0
s= Left(s, i - 1) + NewS + Mid(s, i + lenOldS)
i = InStr(s, OldS)
Loop
MyReplace = s
End Function
二、子过程
函数过程的不足:
(1)不是为了获得某个函数值,而是为了某种功能的处理,。
(2) 要获得多个结果。
编写一个两个数交换的过