《第六章 过程优秀PPT.ppt》由会员分享,可在线阅读,更多相关《第六章 过程优秀PPT.ppt(90页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第六章 过程第一页,本课件共有90页一、过程与模块的概念一、过程与模块的概念1.1.过程过程2.2.独立功能的子程序。独立功能的子程序。两类:两类:系统系统提供的内部提供的内部函数过程和事件过程函数过程和事件过程;用户用户根据自己需要定义的根据自己需要定义的通用过程。通用过程。通用过程作用通用过程作用:程序模块化,结构清晰,易于修改和维护。程序模块化,结构清晰,易于修改和维护。1.1.可用于在程序中多处调用。可用于在程序中多处调用。第二页,本课件共有90页通用过程通用过程 函数过程函数过程(Function)(Function)(有返回值)(有返回值)通用过程通用过程 子过程子过程 (Sub)
2、(Sub)(没有返回值)(没有返回值)属性过程属性过程(Property)(Property)事件过程事件过程(Event)(Event)按作用域分通用过程:按作用域分通用过程:公有过程(公有过程(PublicPublic):):可被应用程序任意过程调用可被应用程序任意过程调用 私有过程(私有过程(PrivatePrivate):):只能被同一模块中的过程调用只能被同一模块中的过程调用 第三页,本课件共有90页2.2.模块模块 将不同类型的代码组织到一起而提供的一种结构。将不同类型的代码组织到一起而提供的一种结构。(1 1)窗体模块()窗体模块(.frm.frm):每个窗体对应一个窗体模块每个
3、窗体对应一个窗体模块(2 2)标准模块()标准模块(.bas.bas):多窗体中共享的代码):多窗体中共享的代码 可保存通用过程、相关说明(全局变量、可保存通用过程、相关说明(全局变量、模块级变量)模块级变量)“工程工程”+“”+“添加模块添加模块”(3 3)类模块()类模块(.cls.cls):创建新的对象类的属性、):创建新的对象类的属性、事件、方法等事件、方法等第四页,本课件共有90页 1 1、定义、定义SubSub子过程子过程(被调过程被调过程)Public|PrivatePublic|PrivateStaticStaticSubSub 子过程名子过程名(参数列表参数列表)局部变量或常
4、数定义局部变量或常数定义局部变量或常数定义局部变量或常数定义 语句块语句块 Exit Sub Exit Sub 语句块语句块 End Sub End Sub 说明:说明:过程体过程体形式参数二二.Sub.Sub 子过程的定义及其调用子过程的定义及其调用第五页,本课件共有90页 过程名过程名:(与变量命名规则相同)(与变量命名规则相同)不要与不要与VB 关键字关键字同名同名 不要与不要与WINDOWS API函数函数重名重名 不能与同一级别的变量不能与同一级别的变量重名重名注注意意:参数列表形式参数列表形式:ByVal 变量名变量名 ()As 类型类型 _ ,ByVal 变量名变量名 ()As
5、类型类型 参数参数也称为也称为形参形参,无参过程名后的无参过程名后的()不可缺省不可缺省 ByVal 参数是值传递(参数是值传递(Passed By Value),缺省缺省ByVal:引用传递(引用传递(ByRef),即地址传递),即地址传递(Passed By Reference)Sub子过程不能嵌套定义子过程不能嵌套定义第六页,本课件共有90页 例如:例如:Private Sub exl(ByVal x As Integer,y As Integer)Private Sub exl(ByVal x As Integer,y As Integer)x=x+2 y=y+x*2 Print x,
6、y Print x,yEnd SubEnd SubPrivate Sub swap(x As Integer,y As Integer)Dim temp As Integer If x y Then temp=x:x=y:y=tempEnd If End Sub第七页,本课件共有90页2 2、建立、建立SubSub子过程子过程(有两种方法有两种方法):):在在VBVB中,利用中,利用“工具工具”菜单下的菜单下的“添加过程添加过程”命令定义命令定义 利用代码窗口直接定义利用代码窗口直接定义 在窗体在窗体/标准模块中:插入点放在现有过程标准模块中:插入点放在现有过程之外之外,或在或在“通用说明通用
7、说明”处处 键入:键入:Private Sub Private Sub 过程名,回车过程名,回车 注意:注意:建立建立FunctionFunction函数过程的方法与建立函数过程的方法与建立SubSub子过程相同子过程相同 例例第八页,本课件共有90页3 3、SubSub子过程的调用子过程的调用(主调过程主调过程)调用格式:调用格式:子过程名子过程名 参数列表参数列表 或或 CALL CALL 子过程名子过程名(参数列表参数列表)实在参数第九页,本课件共有90页举例举例.输入两个整数输入两个整数,按从大到小输出。按从大到小输出。Private Sub swap(x As Integer,y A
8、s Integer)过程定义过程定义,交换两个变量值交换两个变量值 Dim temp As Integer (被调过程被调过程)If x y Then temp=x:x=y:y=tempEnd IfEnd SubPrivate Sub Command1_Click()(Private Sub Command1_Click()(主调过程主调过程主调过程主调过程)Dim a As Integer,b As Integer Dim a As Integer,b As Integer a=Val(Text1.Text):b=Val(Text2.Text)a=Val(Text1.Text):b=Val(
9、Text2.Text)If ab Then If ab Then call swap(a,b)call swap(a,b)End If End If Print a,b Print a,bEnd Sub End Sub 形式参数x,y 实在参数a,b 过程的调用过程的调用过程的调用过程的调用,或或或或swap a,b swap a,b 调调调调用点用点用点用点第十页,本课件共有90页过程调用的执行:过程调用的执行:主调过程中执行到过程调用语句时,转去执行被调过程,执行结束后,返回主调过程中本次调用的调用点,继续执行调用点的后序语句。主调过程Call 过程1(参数列表)结束被调过程1结束调用点第
10、十一页,本课件共有90页 参数列表参数列表:称为称为实参或实在参数实参或实在参数,它必须与它必须与 形参保持形参保持个数相同个数相同,位置与类型位置与类型一一一一对应。对应。参数传递参数传递:调用时把实参的值或地址传递给形参;调用时把实参的值或地址传递给形参;多个参数间用逗号分隔。多个参数间用逗号分隔。过程调用过程调用注意事项注意事项:第十二页,本课件共有90页 调用子过程的形式有两种:调用子过程的形式有两种:若用若用CallCall关键字关键字时时,实参必须用圆括号括起实参必须用圆括号括起,且左括号且左括号与过程名间不能有空格;若实参为空,则可省略括号。与过程名间不能有空格;若实参为空,则可
11、省略括号。若用若用过程名过程名则无则无()(),且第一个参数与过程名间要有,且第一个参数与过程名间要有空格。空格。例:例:swap a,bswap a,bcall swap(a,b)call swap(a,b)当参数是数组时当参数是数组时,形参在参数声明时应省略其维数形参在参数声明时应省略其维数,但但括号不括号不能省。能省。若形参变量的类型为若形参变量的类型为StringString,则只能是不定长的。,则只能是不定长的。过程允许嵌套调用。过程允许嵌套调用。过程调用过程调用注意事项注意事项:第十三页,本课件共有90页过程嵌套调用的执行:过程嵌套调用的执行:主调过程Call 过程1(参数列表)结
12、束被调过程2结束调用点被调过程1 Call 过程2(参数列表)结束第十四页,本课件共有90页例例6-16-1,求组合数,求组合数 定义求阶乘的定义求阶乘的Sub子过程子过程facPrivate Sub fac(ByVal n As Integer,f As Long)过程定义过程定义 Dim i As Integer f=1 For i=1 To n f=f*i Next iEnd Sub第十五页,本课件共有90页“=”的的click事件事件Private Sub Command1_Click()Dim m As Integer,n As Integer Dim fm As Long,fn A
13、s Long Dim fmn As Long m=Val(txtm):n=Val(txtn)fac m,fm 计算计算m的阶乘的阶乘 Call fac(n,fn)计算计算n的阶乘的阶乘 Call fac(m-n,fmn)计算计算m-n的阶乘的阶乘 txtResult=Str(fm/(fn*fmn)End Sub见见 求组合数求组合数.vbp第十六页,本课件共有90页 三三.Function.Function函数过程的定义及其调用函数过程的定义及其调用 函数过程是函数过程是带有返回值带有返回值的特殊过程。的特殊过程。1 1、定义、定义Public|PrivateStaticPublic|Priv
14、ateStatic Function Function Function Function 函数名函数名(参数列表参数列表 )AS AS 类型类型 局部变量或常数定义局部变量或常数定义局部变量或常数定义局部变量或常数定义 语句块语句块语句块语句块 函数名函数名函数名函数名=表达式表达式表达式表达式 Exit Function Exit Function Exit Function Exit Function 语句块语句块语句块语句块 函数名函数名函数名函数名=表达式表达式表达式表达式 End Function End Function 说明:说明:函数体函数体第十七页,本课件共有90页 函数体
15、中一般至少要有一个函数体中一般至少要有一个“函数名函数名=表达式表达式”的语句给函数名赋值的语句给函数名赋值 如果没有如果没有“函数名函数名=表达式表达式”,则返回对应类型,则返回对应类型 的缺省值的缺省值 在函数体内,可以像使用简单变量一样使用函在函数体内,可以像使用简单变量一样使用函数名数名 Function函数过程不能嵌套定义函数过程不能嵌套定义第十八页,本课件共有90页 例例6-2 6-2 求圆面积的函数过程:求圆面积的函数过程:Private Function Cir(ByVal r As Single)As Single Const PI=3.1415926 Cir=PI*r*rE
16、nd Function第十九页,本课件共有90页 例例6 6-3 3 求求N N阶乘的函数过程:阶乘的函数过程:Private Function Fact(ByVal N As Integer)As Long Dim k As Integer Fact=1 If N=0 Or N=1 Then Exit Function Else For k=1 To N Fact=Fact*k Next End IfEnd Function第二十页,本课件共有90页2 2、FunctionFunction函数过程的调用函数过程的调用:调用格式:调用格式:变量名变量名=函数过程名函数过程名(参数列表参数列表)
17、注意:注意:必须给实参加括号必须给实参加括号 如无实参,括号也可省略如无实参,括号也可省略 例如:例如:调用例调用例6-36-3,求两个圆面积之和,求两个圆面积之和 Sum=Cir(20)+Cir(30)Sum=Cir(20)+Cir(30)第二十一页,本课件共有90页 比较函数过程与比较函数过程与SubSub子过程子过程 不同之处:不同之处:函数过程通过函数名有返回值,因此函数过程通过函数名有返回值,因此定义时有返回值的类型说明。定义时有返回值的类型说明。Sub Sub子过程通过变量返回值子过程通过变量返回值 相同点:相同点:完成某种特定功能的一组程序代码。完成某种特定功能的一组程序代码。第
18、二十二页,本课件共有90页 例如:调用例例如:调用例6-36-3求阶乘的函数过程,求例求阶乘的函数过程,求例6-16-1中的组合数。中的组合数。Private Sub Command1_Click()Dim m As Long Dim n as Integer m=Val(txtm)n=Val(txtn)txtResult=Fact(m)/(Fact(n)*Fact(m-n)End Sub第二十三页,本课件共有90页例例6-5 6-5 求求1-1001-100之间的孪生素数之间的孪生素数(素数值相差素数值相差2)2)求素数的求素数的primeprime函数过程:函数过程:Private Fun
19、ction prime(ByVal m As Integer)As Boolean Dim i As Integer,t As Boolean i=2 t=True Do While t And i=Sqr(m)If m Mod i=0 Then t=False Else i=i+1 End If Loop prime=tEnd Function第二十四页,本课件共有90页窗体的单击事件调用窗体的单击事件调用prime函数过程函数过程:Private Sub Form_click()Dim k As Integer,j As Integer j=3 Do While j=99 If prime
20、(j)And prime(j+2)Then k=k+1 Print“第第”;k;“对对”,j;Tab(20);j+2 End If j=j+2 LoopEnd Sub用用For循环如何实现?循环如何实现?第二十五页,本课件共有90页四、参数的传递四、参数的传递1.1.形参和实参形参和实参2.2.按值传递与按地址传递按值传递与按地址传递3.3.数组参数的传递数组参数的传递参数传递:参数传递:调用时把实参的值或地址传递给形参。调用时把实参的值或地址传递给形参。第二十六页,本课件共有90页1.1.形参和实参形参和实参 (1 1)形参(形式参数)形参(形式参数)出现在出现在被调过程被调过程(定义定义S
21、ubSub子过程或子过程或FunctionFunction函数过程函数过程)的的形参表中的形参表中的变量名(变量名(除定长字除定长字符串变量外符串变量外)、数组名。)、数组名。在调用时给形参分配内存。在调用时给形参分配内存。(2 2)实参(实在参数)实参(实在参数)出现在出现在主调过程主调过程(调用调用SubSub子过程或子过程或FunctionFunction函数函数)中中调用时调用时,传递给相应的过程或函数的传递给相应的过程或函数的变量名、数组名、常量、表达式。变量名、数组名、常量、表达式。第二十七页,本课件共有90页举例举例.输入两个整数输入两个整数,按从大到小输出。按从大到小输出。Pr
22、ivate Sub swap(x As Integer,y As Integer)过程定义过程定义,交换两个变量值交换两个变量值 Dim temp As Integer (被调过程被调过程)If x y Then temp=x:x=y:y=tempEnd IfEnd SubPrivate Sub Command1_Click()Private Sub Command1_Click()Dim a As Integer,b As Integer Dim a As Integer,b As Integer a=Val(Text1.Text):b=Val(Text2.Text)a=Val(Text1.
23、Text):b=Val(Text2.Text)If ab Then If ab Then call swap(a,b)call swap(a,b)End If End If Print a,b Print a,bEnd Sub End Sub 形参x,y(地址传递)实参a,b 过程的调用过程的调用过程的调用过程的调用,或或或或swap a,b (swap a,b (主调过程主调过程主调过程主调过程)第二十八页,本课件共有90页求组合数求组合数 定义求阶乘的定义求阶乘的Sub子过程子过程facPrivate Sub fac(ByVal n As Integer,f As Long)过程定义过程定
24、义 Dim i As Integer f=1 For i=1 To n f=f*i Next iEnd Sub形参n,f 第二十九页,本课件共有90页 求求N N阶乘的函数过程:阶乘的函数过程:Private Function Fact(ByVal n As Integer)As Long Dim k As Integer Fact=1 If n=0 Or n=1 Then Exit Function Else For k=1 To n Fact=Fact*k Next End IfEnd Function形参n 第三十页,本课件共有90页Private Sub Command1_Click(
25、)主调过程主调过程 Dim m As Long Dim n as Integer m=Val(txtm)n=Val(txtn)txtResult=Fact(m)/(Fact(n)*Fact(m-n)End Sub实参m,n,m-n函数调用函数调用第三十一页,本课件共有90页注意:注意:实参必须与形参保持实参必须与形参保持个数相同,位置与类型个数相同,位置与类型 一一一一对应对应。多个参数间用逗号分隔。多个参数间用逗号分隔。2 2、参数的传递、参数的传递实参实参 形参形参形实结合形实结合参数传递:参数传递:调用时把实参的值或地址传递给形参。调用时把实参的值或地址传递给形参。第三十二页,本课件共有
26、90页参数列表形式参数列表形式:ByVal 变量名变量名 ()As 类型类型 _ ,ByVal 变量名变量名 ()As 类型类型 参数参数也称为也称为形参形参,无参函数无参函数/过程名后的过程名后的()不可缺省不可缺省 ByVal 参数是按值传递(参数是按值传递(Passed By Value),缺省缺省ByVal:引用传递(引用传递(ByRef),即按地址传递),即按地址传递 (Passed By Reference)第三十三页,本课件共有90页按值传递(按值传递(ByValByVal):调用时,给形参分配一个临时内存单元,将实参的值复制到形调用时,给形参分配一个临时内存单元,将实参的值复制
27、到形参对应的内存单元中,实参与形参断开联系。调用结束后,返回参对应的内存单元中,实参与形参断开联系。调用结束后,返回主调过程时,形参对应的内存单元被释放。主调过程时,形参对应的内存单元被释放。实参的值不随形参的值变化而变化。实参的值不随形参的值变化而变化。参数的传递参数的传递 实参实参 m形参形参 n5 510调用结束后内存内存例第三十四页,本课件共有90页Private Private Function Fact(ByVal n As Integer)As Long Dim k As Integer Fact=1 If n=0 Or n=1 Then Exit Function Else F
28、or k=1 To n Fact=Fact*k Next End IfEnd FunctionPrivate Sub Command1_Click()主调过程主调过程 Dim m As Long Dim n as Integer m=Val(txtm)n=Val(txtn)txtResult=Fact(m)/(Fact(n)*Fact(m-n)End Sub 55Fact(5)第三十五页,本课件共有90页参数的传递参数的传递 实参实参形参形参按地址传递按地址传递(不加(不加ByValByVal,或加,或加 ByRef ByRef):):例例 调用时,将实参变量的地址传递给形参,形参和实参共用调
29、用时,将实参变量的地址传递给形参,形参和实参共用同一个内存单元。调用结束后,形参不再占用此内存,由实同一个内存单元。调用结束后,形参不再占用此内存,由实参独占。参独占。实参的值随形参的值变化而改变实参的值随形参的值变化而改变.510调用结束后内存第三十六页,本课件共有90页举例举例.输入两个整数输入两个整数,按从大到小输出。按从大到小输出。Private Sub swap(x As Integer,y As Integer)过程定义过程定义,交换两个变量值交换两个变量值 Dim temp As Integer (被调过程被调过程)If x y Then temp=x:x=y:y=tempEnd
30、 IfEnd SubPrivate Sub Command1_Click()Private Sub Command1_Click()主调过程主调过程主调过程主调过程 Dim a As Integer,b As Integer Dim a As Integer,b As Integer a=Val(Text1.Text):b=Val(Text2.Text)a=Val(Text1.Text):b=Val(Text2.Text)If ab Then If ab Then call swap(a,b)call swap(a,b)End If End If Print a,b Print a,bEnd
31、Sub End Sub 5a bx y 3形参x,y(地址传递)5335第三十七页,本课件共有90页 按值传递与按地址传递按值传递与按地址传递(1 1)按值传递)按值传递 (分析例分析例6-66-6)Private Sub Form_click()Private Sub Form_click()Dim m As Integer,n As Integer m=15:n=10 Print 调用过程调用过程Test前前;m=;m,n=;n Call test(m,n)Call test(m,n)Print 调用过程调用过程Test后后;m=;m,n=;nEnd SubPrivate Sub test
32、(ByVal x As Integer,ByVal y As Integer)x=x+5 :y=x+2*y Print 形参的值形参的值;x=;x,y=;yEnd SubEnd Sub1510 MNXY实参形参20 1540 10第三十八页,本课件共有90页(2 2)按地址传递)按地址传递 (分析例分析例6-76-7)Private Sub Form_click()Dim m As Integer,n As Integer Dim m As Integer,n As Integer m=15:n=10 m=15:n=10 Print“调用过程调用过程 Test前前;m=;m,n=;n Call
33、 test(m,n)Call test(m,n)Print“Print“调用过程调用过程调用过程调用过程 Test Test后后后后;m=;m,n=;n;m=;m,n=;nEnd SubEnd SubSub testSub test(x As Integer,y As Integerx As Integer,y As Integer)x=x+5 x=x+5 :y=x+2*y y=x+2*y Print Print 形参的值形参的值形参的值形参的值;x=;x,y=;y;x=;x,y=;yEnd SubEnd Sub1510MNXY实参形参20 40 第三十九页,本课件共有90页 说明:说明:(1
34、 1)若实参是常量或表达式,)若实参是常量或表达式,则按传数值传递。则按传数值传递。(2 2)若形参和实参类型不一致,)若形参和实参类型不一致,则系统自动进行类型转换。则系统自动进行类型转换。(3 3)参数是字符型或数组时,按地址传递。)参数是字符型或数组时,按地址传递。例例6-86-8第四十页,本课件共有90页Private Sub Form_Click()Dim P As Single P=12.6 Print 调用前;P=;P Call Test2(P),19+.5)Print 调用后;P=;PEnd SubPrivate Sub Test2(X As Integer,Y As Sing
35、le)X=X*3 Y=Y-5.2 Print 形参的值;X=;X,Y=;YEnd Sub第四十一页,本课件共有90页3.3.数组参数的传递数组参数的传递 数组按数组按传址传址方式进行传递。方式进行传递。形参数组的语法格式:形参数组的语法格式:形参数组名形参数组名()As()As 类型 注意:注意:(1 1)对应的实参必须是数组,且类型与形参类型对应。)对应的实参必须是数组,且类型与形参类型对应。(2)(2)当参数是数组时当参数是数组时,形参在参数声明时应省略其维数形参在参数声明时应省略其维数,但但括号不能省。括号不能省。(3 3)实参数组直接放在实参表中,)实参数组直接放在实参表中,忽略维数的
36、定义,圆括忽略维数的定义,圆括号可以省略。号可以省略。第四十二页,本课件共有90页如如:Public Sub sort2(a()As Integer)形参数组形参数组a End Sub Private Sub Form_Click()Dim a()As Integer sort2 a()sort2 a()实参数组实参数组a a End Sub End Sub 第四十三页,本课件共有90页(4 4)被调过程不知道实参数组的上下界,可用被调过程不知道实参数组的上下界,可用Lbound Lbound 和和 Ubound Ubound 函数确定实参数组的下界和上界。函数确定实参数组的下界和上界。Lbo
37、und和和Ubound函数格式:函数格式:L|Ubound(数组名(数组名,维数,维数)其中:其中:维数指明要测试的是第几维下标维数指明要测试的是第几维下标 默认是一维数组默认是一维数组第四十四页,本课件共有90页例题例题6-9 6-9 累乘积问题累乘积问题 private sub Form_click()dim a%(1 to 5),b%(4 to 8),i%,t1#,t2#for i=1 to 5 a(i)=i next i for i=4 to 8 b(i)=i next i t1=tim(a()t2=tim(b)print“t1=”;t1,“t2=”;t2 end subFunctio
38、n tim(a()as integer)Dim t#,i%t=1 for i=Lbound(a)to Ubound(a)t=t*a(i)next i tim=tEnd Function第四十五页,本课件共有90页例题例题6-11 6-11 选择法排序选择法排序(调用排序的子过程)(调用排序的子过程)Public Sub sort2(a()As Integer)Dim i As Integer,j As Integer Dim imin As Integer,t As Integer For i=1 To UBound(a)-1 imin=i For j=i+1 To UBound(a)If a
39、(j)1)递归公式 第六十五页,本课件共有90页 例如例如:计算计算f(n)=n!n!=n*(n-1)!=n*f(n-1)f(5)=f(4)*5 f(3)*4 f(2)*3 f(1)*2 =1*2=2 第六十六页,本课件共有90页递归例递归例例例 求求fac(n)=n!fac(n)=n!的值的值:(1)(1)用递归形式表示用递归形式表示:n!=n*(n-1)!:n!=n*(n-1)!即即 fac(n)=fac(n)=(2)(2)递归结束条件递归结束条件:fac(1)=1 fac(0)=1 fac(1)=1 fac(0)=1(3)(3)递归向终止条件发展递归向终止条件发展 fac(4)=4*fa
40、c(3)=4*3*fac(2)=4*3*2*fac(1)fac(4)=4*fac(3)=4*3*fac(2)=4*3*2*fac(1)1 n=1或或 n=0 终止条件终止条件 n*fac(n-1)n1 递归公式递归公式fac(3)=3*fac(2)fac(1)=1fac(2)=2*1fac(3)=3*2fac(2)=2*fac(1)递推递推回归回归第六十七页,本课件共有90页求fac(n)=n!的函数:Public Function Fac(N As Integer)Fac(N As Integer)As Long If N=0 Or N=1 Then fac=1 递归结束条件 Else fa
41、c=N*fac(N-1)fac(N-1)递归公式 End IfEnd Function1 n=1或或 n=0 终止条件终止条件 n*fac(n-1)n1 递归公式递归公式fac(n)=fac(n)=递归程序例递归程序例计算阶乘计算阶乘第六十八页,本课件共有90页主调过程主调过程Private Sub Form_Click()Dim N As Integer,F As Long N=Val(InputBox(“输入一个非负整数”))F=Fac(N)调用递归函数fac Print N;“!=”;F End Sub递归计算阶乘第六十九页,本课件共有90页 递归调用的执行过程递归调用的执行过程 1.主
42、调程序执行过程中遇到调用递归函数主调程序执行过程中遇到调用递归函数 时时,转去执行相应的函数转去执行相应的函数;2.每次调用时每次调用时,应记录下次调用的返回地址应记录下次调用的返回地址 和本次调用的各有关同名参数值和本次调用的各有关同名参数值;3.递归调用结束时递归调用结束时,按照每次调用的参数与按照每次调用的参数与 返回值的对应关系逐个取出返回值的对应关系逐个取出,进行计算进行计算.第七十页,本课件共有90页 实现软件工具:栈栈 栈:只能在一端进行插入和删除的线形表.后 进 an 栈顶(top)先 .出 a3(LIFO)a2 a1 栈底(bottom)第七十一页,本课件共有90页 递归调用
43、时栈的作用递归调用时栈的作用:记录调用过程中的参数的值的变化和 每次调用函数返回值的返回点 .返回地址栈:每次调用,计入下次调用的返回地址 .与函数有关的参数栈:每个参数对应一个参数栈注意注意:递归调用结束后,从栈顶逐个取出中相应 的元素,进行处理.第七十二页,本课件共有90页 栈顶 最后一次 参数1 参数2 参数1 参数2 返回地址n .第2次调用 参数1 参数2 返回地址2第1次调用 参数1 参数2 返回地址1 栈底 参数1栈 参数2栈 返回地址栈 第七十三页,本课件共有90页 .递推递推 采用一般的子过程或函数 用循环的方法,每次用本次结果递推计算 下次结果.如计算阶乘 乘幂 xn.分析
44、:xn=0 (x=0)1 (x=1或n=0)x*x*x (n0)1/x*1/x*1/x (n=2 2xT(n-1,x)-T(n-2,x)n=2Private Function Chb(n As Integer,x As Single)SinglePrivate Function Chb(n As Integer,x As Single)Single If n=0 Then If n=0 Then Chb=1 Chb=1 ElseIf n=1 Then ElseIf n=1 Then Chb=x Chb=x Else Else Chb=2*x*Chb(n-1,x)-Chb(n-2,x)Chb=2
45、*x*Chb(n-1,x)-Chb(n-2,x)End IfEnd IfEnd FunctionEnd Function 第七十七页,本课件共有90页Private Sub cmdComp_Click()Dim n As Integer,x As Single n=Val(Text1)x=Val(Text2)Text3=Str(Chb(n,x)End Sub第七十八页,本课件共有90页例例6-17 6-17 用辗转相除法求正整数用辗转相除法求正整数 M M 和和 N N 的最的最 大公约数。大公约数。P180-181 P180-181 gcd(m,n)=n m Mod n=0 gcd(m,n)
46、=n m Mod n=0 gcd(n,m Mod n)m Mod n0 gcd(n,m Mod n)m Mod n0 Public Function gcdPublic Function gcd(ByVal m As Integer,ByVal n As Integer)_ByVal m As Integer,ByVal n As Integer)_ As Integer As Integer If m Mod n=0 Then If m Mod n=0 Then gcd=n gcd=n Else Else gcd=gcd(n,m Mod n)gcd=gcd(n,m Mod n)End If
47、End If End FunctionEnd Function第七十九页,本课件共有90页七、常用算法举例七、常用算法举例例例 高次方程求根高次方程求根 求根思想:对方程求根思想:对方程f(x)f(x)给定一个初值给定一个初值x x0 0作为方程的近似值,经过若干次迭代后,作为方程的近似值,经过若干次迭代后,得到方程较高精度的近似值得到方程较高精度的近似值。牛顿切线法迭代公式为:牛顿切线法迭代公式为:x xi+1 i+1=x=xi i-f(x-f(xi i)/f(x)/f(xi i)当当abs(xabs(xi+1i+1-x-xi i)时,时,x xi+1i+1作为方程的近作为方程的近似解。似解
48、。第八十页,本课件共有90页求方程求方程f(x)=2x3-4x2+3x-6的根。的根。f(x)函数:函数:Private Function f1(ByVal x As Single)As Single f1=2*x*x*x-4*x*x+3*x-6End Function f(x)函数:函数:Private Function f2(ByVal x As Single)As Single f2=6*x*x-8*x+3End Function第八十一页,本课件共有90页命令按钮的单击事件调用函数:命令按钮的单击事件调用函数:Private Sub cmdNewton_Click()Dim x0!,x
49、1!,fx!,f1x!,k&x0=Val(txtInput)Do k=k+1 x1=x0-f1(x0)/f2(x0)If Abs(x1-x0)0.00001 Then Exit Do x0=x1 Loop txtOutput=Str(x1)txtNum=Str(k)End Sub第八十二页,本课件共有90页运行界面:运行界面:第八十三页,本课件共有90页1.多窗体的管理多窗体的管理(1 1)添加窗体添加窗体:工程添加窗体工程添加窗体(2)删除窗体:并没有真正从磁盘中删除掉,)删除窗体:并没有真正从磁盘中删除掉,只是只是 与当前的工程分离。两种方法与当前的工程分离。两种方法2.设置启动对象设置启
50、动对象 (1)选用某个窗体作为启动窗体)选用某个窗体作为启动窗体 (2)选用)选用main通用子过程作为启动对象通用子过程作为启动对象,运运main 通用子过通用子过程,根据情况决定加载哪一个窗体。程,根据情况决定加载哪一个窗体。6.8 6.8 多重窗体多重窗体第八十四页,本课件共有90页3.窗体之间的切换语句和方法窗体之间的切换语句和方法1、Load语句语句:把窗体装入到内存,但并不显示出来:把窗体装入到内存,但并不显示出来 Load 窗体名称窗体名称2、Unload语句语句:将窗体从内存中卸载:将窗体从内存中卸载 Unload 窗体名称窗体名称3、Show方法方法:显示一个窗体,触发窗体的