VB计算机语言基础第五章过程资料

上传人:桔**** 文档编号:591882203 上传时间:2024-09-18 格式:PPT 页数:39 大小:2.13MB
返回 下载 相关 举报
VB计算机语言基础第五章过程资料_第1页
第1页 / 共39页
VB计算机语言基础第五章过程资料_第2页
第2页 / 共39页
VB计算机语言基础第五章过程资料_第3页
第3页 / 共39页
VB计算机语言基础第五章过程资料_第4页
第4页 / 共39页
VB计算机语言基础第五章过程资料_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《VB计算机语言基础第五章过程资料》由会员分享,可在线阅读,更多相关《VB计算机语言基础第五章过程资料(39页珍藏版)》请在金锄头文库上搜索。

1、VB计算机语言基础第五章过程资料VB计算机语言基础第五章-过程资料3main contents 子子过程的定程的定义与与调用用 函数函数过程的定程的定义与与调用用 参数参数传递重点重点过程的程的递归调用用难点点变量的作用范量的作用范围4验证哥德巴赫猜想:哥德巴赫猜想: 任一大于任一大于2 2的偶数都可的偶数都可写成两个写成两个质数之和。数之和。5过程(程(ProcedureProcedure)是一)是一组能能够完成特定功能的代完成特定功能的代码,以一,以一个名字来个名字来标识,用,用这个名字来个名字来调用。用。 过程的两个重要作用:程的两个重要作用: 以大化小使程序具有清晰的模以大化小使程序具

2、有清晰的模块化化结构,便于多个程序构,便于多个程序员的的协同工作。同工作。 编写具有通用性的独立写具有通用性的独立过程,便于重复程,便于重复调用,从而用,从而简化程化程序。序。过程分程分为:自定:自定义子子过程、函数程、函数过程、事件程、事件过程程6自定自定义子子过程:由程序程:由程序员自己自己编写,用来求解特定重复任写,用来求解特定重复任务的的子子过程。程。子子过程的程的调用及返回:用及返回: 5.1 子子过程的定程的定义与与调用用7子子过程的程序定程的程序定义:Sub (形式参数表形式参数表)Exit Sub 需要需要时提前退出子提前退出子过程程End Sub子子过程的程的调用:用:l 使

3、用使用Call关关键字字调用用- Call 过程名程名(实际参数表参数表) 例:例:call t(1,2)l 直接直接调用用- 过程名程名 实际参数表参数表 例:例:t 1,28Private Sub Hello三 定义名为Hello的无参数子过程 MsgBox 您好!五一节快乐!End Sub Private Sub Form_Click三 Call Hello 调用名为Hello的无参数子过程End Sub例例5.1 无参数的无参数的“节日日问候候”通用子通用子过程程9Private Sub Command1_Click三Call Hello(Text1, Text2, Text3)Cal

4、l Hello Text1, Text2, Text3 End SubPrivate Sub Hello(name1 As String, job1 As String, festival As String) Dim a As String, b As String a = 您好!值此 b = 来临之际,向您和您的全家致以亲切的问候。 MsgBox name1 & job1 & a & festival & bEnd Sub例例5.2 带参数的参数的“节日日问候候” 子子过程程10Sub Main( )子子过程程Sub Main( )是标准模块中一个具有特殊作用的子过程,通常用于创建应用程序

5、的初始化条件。每个工程只能有一个Sub Main( )子过程。这个通用子过程可以设置在应用程序启动时首先被调用。Sub Main三 x = InputBox(请输入密码:, 密码)If x = 12345 Then Form1.Show Else MsgBox (密码不正确,即将关闭程序)End Sub111.1.函数函数过程与自定程与自定义子子过程的区程的区别:函数函数执行完后将得到一个返回行完后将得到一个返回值,而子,而子过程只是程只是执行一行一系列系列动作,没有返回作,没有返回值。2.2.函数函数过程的定程的定义:Function Function (形式参数表形式参数表)As )As

6、函数函数类型型 程序代程序代码函数函数过程名程名= = 返回返回值表达式表达式 End Function End Function 5.2 函数函数过程的定程的定义与与调用用12Private Sub Form_Click三 Dim a!, b!, c! a = Val(InputBox(第一个数:, 输入) b = Val(InputBox(第二个数:, 输入) c = MaxValue(a, b) Print 较大的数值 =; cEnd SubFunction MaxValue(x!, y!) As Single MaxValue = IIf( x y, x, y)End Function

7、例例5.3 根据根据键盘输入的两个数入的两个数值,调用用MaxValue函数求得其函数求得其中中较大的一个大的一个 调用函数用函数过程程时应注意:注意:函数函数过程的程的调用方式与用方式与标准函数相同,作准函数相同,作为表达式中的一个部分被引用。表达式中的一个部分被引用。引用引用时参数表必参数表必须放在括号内放在括号内所使用的参数的个数、位置和所使用的参数的个数、位置和类型必型必须与函数中的声明一致。与函数中的声明一致。13l形式参数形式参数定定义子子过程和函数程和函数过程程时,通常都会包括,通常都会包括须从外部从外部获取的参数,取的参数,这些参数也称些参数也称为形式参数。在形式参数。在过程被

8、程被调用前,形式参数既不占有用前,形式参数既不占有实际的存的存储空空间,也没有,也没有值。 l实际参数参数在在调用子用子过程或函数程或函数过程程时,必,必须把要把要处理的数据提供理的数据提供给被被调用的用的过程。程。这些数据称些数据称为实际参数,将参数,将实际参数参数传递给形式参数,由被形式参数,由被调用的用的过程来程来处理。理。Call Post( 6 Call Post( 6 , 8 ) 8 ) 实际参数参数 Sub Post(x As Single, y As Single) Sub Post(x As Single, y As Single) 形式参数形式参数5.3 参数参数传递14参

9、数的参数的传递方式方式l按地址按地址传递(ByRefByRef)这是默是默认的参数的参数传递方式。在被方式。在被调用用过程中程中对形式参形式参数所做的任何修改,也就是数所做的任何修改,也就是对实际参数的修改。参数的修改。l按按值传递(ByValByVal)如果在如果在过程定程定义时,形式参数前面用关,形式参数前面用关键字字ByValByVal界定,界定,就是按就是按值传递方式。被方式。被调用用过程运行期程运行期间形式参数的任形式参数的任何何变化,化,对实际参数不会参数不会产生任何影响。生任何影响。15Private Sub Form_Click三Dim a As Single, b As Si

10、ngle, c As Single a = InputBox(第一个直角边的值:) b = InputBox(第二个直角边的值:) Call Hypotenuse(a, b) Print 两直角边分别为:; a; bEnd SubPrivate Sub Hypotenuse(x!, y!) Dim c As Single x = x 2: y = y 2 c = Sqr(x + y) Print 直角三角形斜边的值 =; cEnd Sub 例例5.4 计算直角三角形的斜算直角三角形的斜边按地址按地址传递(ByRefByRef)16Private Sub Form_Click三Dim a As

11、Single, b As Single, c As Single a = InputBox(第一个直角边的值:) b = InputBox(第二个直角边的值:) Call Hypotenuse(a, b) Print 两直角边分别为:; a; bEnd SubPrivate Sub Hypotenuse(ByVal x!, ByVal y!) Dim c As Single x = x 2: y = y 2 c = Sqr(x + y) Print 直角三角形斜边的值 =; cEnd Sub 例例5.4 计算直角三角形的斜算直角三角形的斜边按按值传递(ByValByVal)17数数组参数只能按

12、地址参数只能按地址传递,而不能按,而不能按值传递。 在在过程定程定义时,若以数,若以数组作作为过程的参数,程的参数,则形式形式参数表中的数参数表中的数组名后要有一名后要有一对空的空的圆括号表示。括号表示。 例:例:Private Sub sum(x三三 As Integer) 而在而在过程程调用用时,实际参数表中的数参数表中的数组可以只用数可以只用数组名表示,名表示,圆括号可以省略。括号可以省略。数数组作作为参数参数传递18Private Sub Form_Click三Dim a%(9), s%Print 数组各元素的值为: For i = 0 To 9 a(i) = Int(Rnd * 10

13、) Print a(i); Next iPrintPrint “总和为:; sum(a)End Sub例例5.5 利用利用sum子子过程求数程求数组各元素的和各元素的和Function sum%(x%三)For i = LBound(x) To UBound(x) sum = sum + x(i)Next iEnd Function19验证哥德巴赫猜想:哥德巴赫猜想: 任一大于任一大于2 2的偶数都可的偶数都可写成两个写成两个质数之和。数之和。实例例练习20分析:分析:(1)取出从起始数至终止数的每个数i(2)对每一个i,取2至i/2的每一个数j,分别判断j和i-j是否同时为素数(3)如果同为

14、素数,则输出21主主过程:程:Private Sub Command1_Click三三Dim i%, j%a = Val(Text1) : b = Val(Text2)If a Mod 2 0 Then a = a + 1For i = a To b Step 2Next iEnd SubFor j = 2 To i / 2 If PrimeMagic(j) And PrimeMagic(i - j) Then Picture1.Print i & = & j & + & i - j & ; Exit For End IfNext j22函数函数过程程:Public Function Prim

15、eMagic(a%) As BooleanDim t As Booleant = True定义并竖起标旗For i = 2 To Sqr(a) If a Mod i = 0 Then如果有一个i能整除a t = False 则倒下标旗,表示a不是一个素数 Exit For End IfNext iIf t = True Then根据标旗,返回True或False PrimeMagic = TrueElse PrimeMagic = FalseEnd IfEnd Function235.4 过程的程的递归调用用1)1)递归的概念的概念 在过程自身结构内部来调用自身,称为递归调用2)2)递归的分的

16、分类直接递归:一个过程在执行时直接调用过程本身间接递归:过程A在执行时调用过程B,而过程B又调用过程A24例:有如下子例:有如下子过程程Sub1Sub Sub1三 End SubSub Sub1三Y=Sub1(n)End Sub25进行如下形式的行如下形式的调用用Sub Form_Click三Call Sub1End SubSub Sub1三Y=Sub1(n)End Sub过程的嵌套程的嵌套调用用26例例 用用递归的方法的方法计算算Fac(n)=n!分析:根据分析:根据阶乘的定乘的定义改写成改写成递归的形式:的形式: n!=n*(n-1)!n!=n*(n-1)! (n-1)!=(n-1)*(n

17、-2)! (n-1)!=(n-1)*(n-2)! 1!=1 1!=1由此得到由此得到递归公式如下:公式如下: 注意:注意:递归的的结束条件束条件为n=0n=0或或1 1时,n!=1n!=127主主调过程程Option ExplicitPrivate Sub Form_Click三三 Dim F%, x% x = InputBox( ) F = Fac (x) Print x; ! =; FEnd Sub函数函数过程程Function Fac%(n As Integer) If n = 0 Or n = 1 Then Fac= 1 Else Fac = n*Fac (n - 1) End IfE

18、nd Functionxn28 Fac(4)=4* Fac(3) Fac(3)=3* Fac(2) Fac(2)=2* Fac(1) Fac(1)=1 Fac(2)=1*2 Fac(3)=1*2*3 Fac(4)=1*2*3*4 递推推 回回归29函数函数过程程Function Fac% (n % ) If n = 0 Or n = 1 Then Fac= 1 Else Fac = n*Fac (n - 1) End IfEnd Function思考:若缺少思考:若缺少思考:若缺少思考:若缺少该语该语句,句,句,句,程序运行程序运行程序运行程序运行结结果将如何?果将如何?果将如何?果将如何?

19、30l使用使用递归算法必算法必须要注意以下两点:要注意以下两点:设定定递归结束条件及束条件及结束束时的的值能用能用递归形式表示,并且形式表示,并且递归向向结束条件束条件发展展31运行下面的程序,当运行下面的程序,当单击窗体之后,窗体上窗体之后,窗体上显示内示内容是什么?容是什么?Private Sub Form_Click三 Test 2End SubPrivate Sub Test(x%) x = x * 2 + 1 If x 6 Then Call Test(x) End If x = x * 2 + 1 Me.Print xEnd Sub 第一次调用2xx=2*2+1=56x=11*2+

20、1=23Print x 23x=23*2+1=47Print x 4732斐波那契数列问题 “如果1对兔子每月能繁殖1对小兔子,而每对小兔在它出生后的第3个月里,又能繁殖1对小兔子,假定在不发生死亡的情况下,由1对初生的兔子开始,1年后能繁殖成多少对兔子?” 函数表达式: 33斐波那契数列问题求解Private Sub Form_Click三 Print fibonacci(12)End SubFunction fibonacci(x as integer) If x=1 or x=2 then fib = 1 Else fibonacci=fibonacci(x-1)+ fibonacci(

21、x-2) End IfEnd Function34lDimDim语句句自自动变量量作用范作用范围取决于其声明的位置取决于其声明的位置lStaticStatic语句句静静态变量量作用范作用范围只在于它定只在于它定义的的过程中,但程中,但过程程结束后,束后,变量量值保存保存lPrivatePrivate语句句模模块级变量量只能在只能在窗体窗体/模模块的通用声明段声明(的通用声明段声明(过程外),作用范程外),作用范围是窗体是窗体/模模块中的所有中的所有过程程lPublicPublic语句句全局全局变量量l只能在只能在窗体窗体/模模块的通用声明段声明(的通用声明段声明(过程外),程外), 变量有效量

22、有效范范围从声明点算起,生存期是整个从声明点算起,生存期是整个应用程序用程序 5.5 变量的作用范量的作用范围35Visual Basic 应用程序的模用程序的模块化化结构构应用程序用程序工程文件(工程文件(.vbp)窗体模窗体模块(.frm)文件)文件类模模块(.cls)文件)文件标准模准模块(.bas)文件)文件事件事件过程程(sub)子子过程程(sub)函数函数过程程(Function)子子过程程(sub)函数函数过程程(Function)36作用范围作用范围局部变量局部变量窗体窗体/模块级模块级变量变量全局变量全局变量窗体窗体标准模块标准模块声明方式声明方式DimStaticDimPr

23、ivatePublic声明位置声明位置在过程中窗体/模块的通用声明段窗体/模块的通用声明段能否被本模能否被本模块的其他过块的其他过程存取程存取不能能能能否被其他能否被其他模块存取模块存取不能不能能,但在变量名前加窗体名能37Dim x As Integer, y As IntegerPrivate Sub Command1_Click三Dim Result As Single x=10: Result=x-y Print ResultEnd SubPrivate Sub Command2_Click三Dim Result As Singley=20: Result=x+yPrint Resul

24、tEnd Sub思考:先单击Command1,再单击Command2,输出?分析:先单击Command1 X=10 Result=10-0=10再单击Command2, Y=20 Result=10+20=30思考:先单击Command2,再单击Command1,输出?38通通过文本框文本框输入若干个入若干个值,每,每输入一个按入一个按EnterEnter键,直到,直到输入的入的值为100100,输入入结束,求束,求输入数的平均入数的平均值。 Private Sub Text1_KeyPress(KeyAscii As Integer)Dim sum!, n%If KeyAscii = 13

25、Then If Val(Text1) = 100 Then sum = sum / n Print sum Else sum = sum + Val(Text1) n = n + 1 Text1 = End IfEnd IfEnd Sub思考:思考:该程序有无程序有无错误?Static sum!, n%sum = sum / nSum=-1.#INDn=0 进一步思考:一步思考: 应怎怎样改改进?391 1两两类过程的定程的定义与与调用用 小 结分类分类定义形式定义形式特点特点子子过过程程Sub (形参表) End Sub无返回值无类型函函数数过过程程Function (形参表) As 数据类型 = End Sub有返回值有类型在过程内至少赋值一次

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号