1第六章过程 (5学时) 61函数过程的定义与调用 6.2子过程的定义与调用 6.3参数传递 64变量、过程的作用域 65递归 6.6常用算法(三) 6.7重点和难点
第六章 过程 (5学时) 6.1 函数过程的定义与调用 6.2 子过程的定义与调用 6.3 参数传递 6.4 变量、过程的作用域 6.5 递归 6.6 常用算法(三) 6.7 重点和难点
除了系统提供的内部函数过程和事件过程外,用户可自定义过程 “sub"保留字开始的为子过程 “ Function"保留字开始的为函数过程 函数过程的定义 1.引例61 已知多边形的各条边的长度,要计算多边形的面积 计算多边形面积,可将多边形分解成若干个三角形。 e 计算三角形面积的公式如下 8 S3. area=vc(c-x(c-y(c-z)c=6(x+y+z) 2 X Z 定义函数过程 调用函数过程 Public Function area(x! y!, Z! As Single Sub command1 click( Dim c ∴输入若干个三角形边长 C=1/2*(x+y+2) s=area(a, b, c)+area(c, d, e)+area(e, f, g area= Sqr(c*(c-x)*(c-y*(c-z)) End function 1-n Print s End sub
除了系统提供的内部函数过程和事件过程外,用户可自定义过程: ⚫ “Sub”保留字开始的为子过程 ⚫ “Function”保留字开始的为函数过程 一、函数过程的定义 1. 引例6.1 已知多边形的各条边的长度,要计算多边形的面积。 计算多边形面积,可将多边形分解成若干个三角形。 计算三角形面积的公式如下: a b c e d f g S1 S2 S3 ( ) 2 1 area = c(c − x)(c − y)(c − z) c = x + y + z 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 调用函数过程: Sub command1_click() …… 输入若干个三角形边长 S=area(a,b,c)+area(c,d,e)+area(e,f,g) Print s End Sub
1)利用“工具”菜单下的“添加过程”命令定义生成一个函数的框架1m、M 2.函数过程的定义 自定义函数过程有两种方法: 2)利用代码窗口直接定义 函数过程形式 Function函数过程名([参数列表])[As类型] 局部变量或常数定义 语句块 [Exit Function). lminspxihg 一函数名=返回值 中函数过程体 语句块 函数名=返回值 End Function 函数过程名:命名规则同变量名 参数列表形式:[ByVa变量名[As类型] 称为形参或哑元仅表示参数的个数、类型,无值。 函数名=返回值在函数体内至少对函数名赋值一次 [ Exit function]:表示退出函数过程
2.函数过程的定义 自定义函数过程有两种方法: (1)利用“工具”菜单下的“添加过程”命令定义,生成一个函数的框架 (2)利用代码窗口直接定义 函数过程形式: Function 函数过程名([参数列表])[As 类型] 局部变量或常数定义 语句块 函数名 = 返回值 函数过程体 [Exit Function] 语句块 函数名 = 返回值 End Function 函数过程名:命名规则同变量名 参数列表形式: [ByVal]变量名[()][As 类型] 称为形参或哑元,仅表示参数的个数、类型,无值。 函数名= 返回值 在函数体内至少对函数名赋值一次 [Exit Function] :表示退出函数过程
例62同标准函数 Replace一样,定义 MyReplace(SdS,NewS)函数过程 当调用 MyReplace(" abcdefgabcdecd""cd","3")时函数的返回值为"ab3egab3e3 Function MyReplace(ss, OldSS, NewSS)As String Dim i%, renoldS% renOldS Len(oldS) 取Ods字符子串长度 i=In Strs, OldS) 在字符串中找有否odsS字符子串 Do Whilei>0 找到用№ewS字符子串替换Ods字符子串 S=Left(s, i-1)+ NewS Mid(s, i+lenOldS i=InStr(s, oldS) 找下一个S字符子串 oop MyReplace =s 替换后的字符串赋值给函数过程名 End function (" abcdefgabcdecd'sut"3")第1次|=3结果“ab3 Befgabcdecd"1mb 假定S为“ abcdefgabcdec"oods为“c"News为"3" (ab3efgabcdecd"cd 3)第2次仁=9结果“ab3egab3ecr (“ab3egab3ecd""cd"“3")第3次l=11结果"ab3egab3e
例6.2同标准函数Replace一样,定义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
3函数过程的调用 函数过程的调用同标准函数调用,参与表达式运算,形式如下 函数过程名参数列表] 参数列表:称为实参或实元,它必须与形参个数相同,位置与类型一一对应 可以是同类型的常量、变量、表达式 执行流程: function Myreplaces(ss, oldSS, Newss) Private Sub Command1 Click( Dim i%, len OldS% Text1 My Replace(Text1, cd,3) renOldS Len(oldS) i=InStr(s, OldS) Do Whilei>0 ST=(sua|Basc程序设计教程50版”s=ef(s-1)+NeWs+Misi+| renolds Print MyReplace(S°5:0) i= InStr(s, OldS) End sub oop MyReplace End functio TextI= MyReplace(Textl, "cd,3 Public Function MyReplace(ss, oldss, NewSs)As String
3.函数过程的调用 函数过程的调用同标准函数调用,参与表达式运算,形式如下: 函数过程名([参数列表]) 参数列表:称为实参或实元,它必须与形参个数相同,位置与类型一一对应 可以是同类型的常量、变量、表达式 执行流程: Private Sub Command1_Click() Text1 = MyReplace(Text1, "cd", "3") ST= (“Visual Basic 程序设计教程5.0版” Print MyReplace(ST, "5.0", "6.0") 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 Text1 = MyReplace(Text1, "cd", "3") Public Function MyReplace(S$, OldS$, NewS$) As String