第六章过程 (5学时) 6.1函数过程的定义与调用 6.2子过程的定义与调用 6.3参数传递 6.4变量、过程的作用域 6.5递归 6.6常用算法(三) 6.7重点和难点
第六章 过程 (5学时) 6.1 函数过程的定义与调用 6.2 子过程的定义与调用 6.3 参数传递 6.4 变量、过程的作用域 6.5 递归 6.6 常用算法(三) 6.7 重点和难点
除了系统提供的内部函数过程和事件过程外,用户可自定义过程: ● “Sub”保留字开始的为子过程 ● “Function'"保留字开始的为函数过程 一、j 函数过程的定义 1.引例6.1 已知多边形的各条边的长度,要计算多边形的面积。 计算多边形面积,可将多边形分解成若干个三角形。 . 计算三角形面积的公式如下: S3 area=c(c-x(c-y)(c-z) c-(x+y+2) 定义函数过程 调用函数过程 Public Function area(x!,y!,z!)As Single Sub command1 clickO Dim c! 输入若干个三角形边长 c=1/2*(X+y+Z) S-area(a,b,c)+area(c,d,e)+area(e,f,g area=Sqr(c *(c-x)*(c-y)*(c-z)) Print s End Function 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
2.函数过程的定义 自定义函数过程有两种方法: (1)利用“工具”菜单下的“添加过程”命令定义,生成一个函数的框架 (2)利用代码窗口直接定义 函数过程形式: Function函数过程名([参数列表])[As类型] 局部变量或常数定义 语句块 函数名=返回值 函数过程体 [Exit Function] 语句块 函数名=返回值 End Function 函数过程名:命名规则同变量名 参数列表形式:By Vall变量名[O[As类型] 称为形参或哑元,仅表示参数的个数、类型,无值。 函数名=返回值在函数体内至少对函数名赋值一次 [Exit Function:表示退出函数过程
2.函数过程的定义 自定义函数过程有两种方法: (1)利用“工具”菜单下的“添加过程”命令定义,生成一个函数的框架 (2)利用代码窗口直接定义 函数过程形式: Function 函数过程名([参数列表]) [As 类型] 局部变量或常数定义 语句块 函数名 = 返回值 函数过程体 [Exit Function] 语句块 函数名 = 返回值 End Function 函数过程名:命名规则同变量名 参数列表形式: [ByVal]变量名[()][As 类型] 称为形参或哑元,仅表示参数的个数、类型,无值。 函数名 = 返回值 在函数体内至少对函数名赋值一次 [Exit Function] :表示退出函数过程
例6.2同标准函数Replace一样,定义MyReplace(S,OldS,NewS)函数过程 当调用MyReplace("abcdefgabedecd","cd","3") 时函数的返回值为"ab3 efgab3e3" 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 yReplace=s '替换后的字符串赋值给函数过程 名 End Function 假定S为“abcdefgabcdecd',Oolds为“cd',News为"3" (abcdefgabcdecd,“cd,3)第1次=3结果“ab3 efgabcdecd” ab3 efgabcdecd,cdp,3第2次I=9 结果 “ab3 efgab.3ecd' ab3 efgab3ecdP,cd,3)第3次=l1 结果"ab3 efgab.3e3
例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 MyReplace$(s$,OldS$,NewS$) Dim i%,lenOldS% Private Sub Command1 Click( lenOldS =Len(OldS) Text1=MyReplace(TextI,"cd","3") i=InStr(s,OldS) ST=(Visual Basic程序设计教程5.0版”Do While i>q Print MyReplace(ST,"5.0","6.0") s=Left(s,i-1)+NewS Mid(s,i+lenOldS) End Sub i=InStr(s,OldS) Loop MyReplace= End Function Text1=MyReplace(Text1,"cd","3") Public Function MyReplace(S$,OldS$,NewS$)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