中国高校课件下载中心 》 教学资源 》 大学文库

同济大学:《Visual Basic程序设计》课程教学课件(PPT讲稿)第六章 过程

文档信息
资源类别:文库
文档格式:PPTX
文档页数:36
文件大小:382.22KB
团购合买:点击进入团购
内容简介
同济大学:《Visual Basic程序设计》课程教学课件(PPT讲稿)第六章 过程
刷新页面文档预览

第六章过程 (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

二、子过程 函数过程的不足: (1)不是为了获得某个函数值,而是为了某种功能的处理,如例1.1。 (2)要获得多个结果。 1.引例 编写一个两个数交换的过程供多次调用。 Swap(xy)子过程的定义 主调程序调用Swap子过程 Public Sub Swap(x,y)Private Sub Form Click() Dim t Dim a,b t=x a=10 x-y b=20 y=t Call Swap (a,b) End Sub Print "a=";a,",b=";b End Sub

二、子过程 函数过程的不足: (1)不是为了获得某个函数值,而是为了某种功能的处理,如例1.1。 (2) 要获得多个结果。 1.引例 编写一个两个数交换的过程供多次调用。 Swap (x,y)子过程的定义 主调程序调用Swap子过程 Public Sub Swap(x, y)Private Sub Form_Click() Dim t Dim a, b t = x a = 10 x = y b = 20 y = t Call Swap (a, b) End Sub Print "a=";a,",b="; b End Sub

2子过程定义 Sub子过程名[(参数列表] 局部变量或常数定义 语句 [Exit Sub] 语句 End Sub 3子过程的调用 子过程名[参数列表] 或 ca子过程名(参数列表 4.子过程与函数过程区别: (1)函数过程名有值,有类型,在函数体内至少赋值一次: 子过程名无值,无类型,在子过程体内不能对子过程名赋值: (2)调用时,子过程调用是一句独立的语句。 函数过程不能作为单独的语句加以调用,必须参与表达式运算。 (3)一般当过程有一个函数值,使用函数过程较直观; 反之若过程无返回值,或有多个返回值,使用子过程较直观

2 子过程定义 Sub 子过程名[(参数列表)] 局部变量或常数定义 语句 [Exit Sub] 语句 End Sub 3 子过程的调用 子过程名 [参数列表] 或 Call 子过程名(参数列表 4.子过程与函数过程区别: (1)函数过程名有值,有类型,在函数体内至少赋值一次; 子过程名无值,无类型,在子过程体内不能对子过程名赋值; (2)调用时,子过程调用是一句独立的语句。 函数过程不能作为单独的语句加以调用,必须参与表达式运算。 (3)一般当过程有一个函数值,使用函数过程较直观; 反之若过程无返回值,或有多个返回值,使用子过程较直观

例6.4分别编一计算某级数部分和的子过程和函数过程,并调用。 级数为: 1+x+ 精度为 eps 2 n. 用函数过程实现求部分级数和 ·用子过程实现求部分级数和 Function jishul(x!,eps#As Double Sub jishu2(s# x, 印$掬 Dim n%,st# Dim n%,t# n=1:s=0:t=1 n=1:s=0:t=1 Do While(Abs(t)>=印s) Do While (Abs(t)>=eps) s=s+t:t=t*x/n s=s+t:t=t*x/n n=n+1 n=n+1 Loop Loop jishul =s End Sub End Function 调用逯数过程 调用子过程 f1 iishu1(2#0 000001) Call iishu2f2 2#n n00001)

例6.4 分别编一计算某级数部分和的子过程和函数过程,并调用。 级数为: 精度为:. ! . 2! 1 2 + + + + + n x x x n eps !  n x n

程序运行流程: Private Sub Command1 Click( Dimfl#,f2# 找函数名调用ishu1 Function jishul(x!,eps#)As Doubl f1=jishu1(2#,0.000001) 函数名带了值返回 ishu=表达式 End Function 找子过程名调用jishu2⑥ Call jishu2(f2,2#,0.000001) Prin"f1=";f1,"f2=";f2 End ub 表达式 End Sub

程序运行流程: Private Sub Command1_Click() Dim f1#, f2# f1 = jishu1(2#, 0.000001) Call jishu2(f2, 2#, 0.000001) Print "f1="; f1, "f2 = "; f2 End Sub Function jishu1(x!, eps#) As Doubl . jishu=表达式 End Function 找函数名调用jishu1 函数名带了值返回 Sub jishu2(s#, x!, eps#) . s=表达式 End Sub ① ② ③ ④ ⑤ 找子过程名调用jishu2 ⑥ ⑦ ⑧

三、参数传递 指主调过程的实参传递给被调过程的形参。 1.传址与传值 传址: 形参得到的是实参的地址,当形参值的改变同时也改变实参的值。 传值: 形参得到的是实参的值,形参值的改变不会影响实参的值。 例6.5两个变量的交换 Sub Swap1(ByVal x%,ByVal y%) Sub Swap2(x%,y%) t%=x:x=y:y=t t%=x:x=y:y=t End Sub End Sub Private Sub Command1_Click() ByVal传值 传地址 a%=10:b%=20:Swap1a,b'传值 a Print "A1=";a,"B1=";b 实参 10 10 a=10:b=20:Swap2 a,b 传地址 Print "A2=";a,"B2=";b X End Sub 形参 10 a的地址

三、 参数传递 指主调过程的实参传递给被调过程的形参。 1. 传址与传值 传址: 形参得到的是实参的地址,当形参值的改变同时也改变实参的值。 传值: 形参得到的是实参的值,形参值的改变不会影响实参的值。 例6.5 两个变量的交换 Sub Swap1(ByVal x%, ByVal y%) t% = x: x = y: y = t End Sub Private Sub Command1_Click() a% = 10: b% = 20: Swap1 a, b '传值 Print "A1="; a, "B1="; b a = 10: b = 20: Swap2 a, b '传地址 Print "A2="; a, "B2="; b End Sub Sub Swap2(x%, y%) t% = x: x = y: y = t End Sub 10 a 的地址 10 10 a a x x 形参 实参 ByVal 传值 传地址

刷新页面下载完整文档
VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
相关文档