vb标准课时第08章(10学时)

上传人:无*** 文档编号:244018868 上传时间:2024-10-02 格式:PPT 页数:71 大小:983KB
收藏 版权申诉 举报 下载
vb标准课时第08章(10学时)_第1页
第1页 / 共71页
vb标准课时第08章(10学时)_第2页
第2页 / 共71页
vb标准课时第08章(10学时)_第3页
第3页 / 共71页
资源描述:

《vb标准课时第08章(10学时)》由会员分享,可在线阅读,更多相关《vb标准课时第08章(10学时)(71页珍藏版)》请在装配图网上搜索。

1、,,,,单击以编辑母版标题样式,,单击以编辑母版文本样式,,第二级,,第三级,,第四级,,第五级,,,*,第八章 过程,8.2,Function,函数定义及调用,,8.4 递归过程,8.3 参数的传递,8.1,SUB,过程及其调用,8.5 变量的,作用域,8.6,程序示例,8.7,实验,,,如同常量的定义一样,有时不仅仅是几个数字反复出现在程序中,而且是很多段代码在做几乎同样的事,如果有一些通用的代码可供调用的话,那么程序就会简练得多,而且更为清晰,这就是过程与函数。,Vb,中使用的过程分为子程序过程、函数过程和属性过程。,,§,8 过 程,过程,子程序过程(,SUB),,

2、函数过程(,FUNCTION),属性过程(,PROPERTY),事件过程,通用过程,窗体过程,控件过程,,§,8.1,,SUB,过程及其调用,通用过程,过程,事件过程,,(1)打开代码窗口(双击控件或窗体,单击查看代码)—选择对象和事件—输入代码——保存,,1、,建立事件过程,加入对发生事件进行处理的代码的过程,称为事件过程。,§,8.1.1,,事件过程,(2)“工具”菜单——“添加过程”(如下图)——输入代码——保存,,,,(1),控件事件过程形式:,§,8.1.1 事件过程,Private Sub,控件名_事件名 ([,argumentlist,]),,,语句块,,End Sub,,说

3、明:,,(1)控件名必须与窗体中某个控件相匹配,否则为通用过程且该过程也属于私有过程。,,(2),argumentlist,,指的是参数列表,所谓参数,就是指过程操作所需的指导条件。有无参数由事件本身决定,用户不可以自行添加。,,2、定义事件过程,Private Sub cmd1_Click(),,end,,End Sub,,,Private Sub,Form,_,事件名 ([,argumentlist,]),,,,语句块,,,End Sub,,2)窗体事件过程形式:,,§8.1.1 事件过程,说明:,,(1),Private,表明该过程的使用范围是模块级的,在该窗体之外是不可见的。,,(

4、2)不论定义的窗体名称为什么,均用,Form,,或,MIDFORM,(,多文档界面窗体)表示。,,(3),事件由,VB,提供。注意部分事件的发生顺序:,Initialize、 Load、Activate、,GotFocus,事件的发生顺序是依次的。,如有一窗体名为,f1,,则可以有如下代码:,,Private Sub Form_Activate(),,L2.,ForeColor,= RGB(0, 255, 255),,End Sub,,,,例题,§8.1.1 事件过程,演示,,引例1:编程时经常要用到两个数的交换,可以将其编写成过程。,,§8.1.2,,通用过程,将多次被重复使用的程序段设计

5、成一个具有一定功能的独立程序段,即为通用过程。,,§8.1.2 通用过程,1、建立通用过程,,,(1)打开代码编辑器窗口——选择工具菜单——选择添加过程,(2)在代码编辑器窗口中选择“通用——声明”,,形式如下:,,,[,Private/Public][Static],Sub,,过程名 ([参数列表]),,[局部变量和常量声明],,,语句块,,,[,Exit Sub],,,,,语句块,,,,End Sub,2.,,通用过程的定义:,,§8.1.2 通用过程,Public Sub swap(x, y),,Dim t As Integer,,t = x: x = y: y = t,,End

6、 Sub,,例,,说明:,,(1)[,Private/Public],可缺省,若缺则系统默认为,Public。Static,如果不省则指定过程中的局部变量为“静态”变量。,,,(2)过程名命名规则和变量名相同,且不能重名。,,,(3)参数列表中的参数是形式参数,可以是变量名或数组名(此时要加()),参数可以省略,但是外层()不可省,若有多个参数,则用逗号分开。,,,(4)过程体中,Exit Sub,可以有多个,执行到此语句,立即退出该过程。,Sub,过程不可以嵌套。,,§8.1.2 通用过程,,3.,SUB,过程调用,,§8.1.2 通用过程,格式1:,CALL,过程名 [(实参表)],

7、,格式2:过程名 [实参1,[实参2,……]],说明:,,(1)过程名是被调用过程的名字,当调用程序执行到此代码时,,VB,将开始执行被调用过程。,,(2)实参是传送给被调用过程的变量、常数或表达式。,实参的个数和类型、顺序应与被调过程的形参相匹配,,且个参数之间应用逗号分隔。对于格式1,若被调过程无参数,则(实参表)可以省略。而格式2,不论是否有参数,实参列表均不需要加括号。,,,例题,§8.1.2 通用过程,,若在应用程序中用“,Private Sub Sub1(X As Integer, Y As Single)”,定义了子程序,Sub1,,调用程序中的变量,I,J,均为,Intege

8、r,型,则正确调用子程序,Sub1,的,Call,语句是______。,,①,Call Sub1(I,J),,②Call Sub1(3.1415,I),,③ Call Sub1(3.14,234),,④Call Sub1("245","231.5"),,A. ①③,,B. ③④ C. ①②③ D.,无,,例1:调用两数交换过程,§8.1.2 通用过程,Public Sub swap(x, y),,Dim t As Integer,,t = x: x = y: y = t,,End Sub,,,Private Sub Command2_Click(),,Dim a As

9、 Integer, b As Integer,,a = Val(Text2.Text): b = Val(Text3.Text),,call swap (a,b),,Text2.Text =,Str,(a):Text3.Text =,Str,(b),,End Sub,,或,swap a, b,,例2:将以前学过的冒泡排序改写成过程调用的形式,§8.1.2 通用过程,,Private Sub bubble_sort(sort() As Integer),,Dim,ub,As Integer, Tem As Integer, I As Integer, switch As Boolean,,,u

10、b,=,UBound,(sort),,:switch = True,,Do While switch,,switch = False,,:,ub,=,ub,- 1,,For i = 1 To,ub,,,If sort(i) > sort(i + 1) Then,,switch = True,,:Tem = sort(i),,sort(i) = sort(i + 1) :sort(i + 1) = Tem,,End If,,,Next i,,Loop,,End Sub,,§8.1.2 通用过程,,Option Explicit,,:Option Base 1,,Private Sub Comm

11、and1_Click(),,Dim number(10) As Integer, i As Integer,,Randomize,,,For i = 1 To 10,,,number(i) =,Int,((100 - 1) *,Rnd,) + 1,,,Text1 = Text1 &,Str,(number(i)),,,Next i,,,,Call bubble_sort(number),,,For i = 1 To 10,,,Text2 = Text2 &,Str,(number(i)),,Next i,,End Sub,,§,8.2,FUNCTION,函数及其调用,FUNCTION,函数的建

12、立与定义,FUNCTION,函数的调用,调用其它模块中的过程,函数,,1,.,FUNCTION,函数的建立,Function,函数的建立与,SUB,类似。,2,.,FUNCTION,函数的定义,[,Private/Public][Static] Function,函数名 ([参数列表]),[,as,数据类型],,语句块,,,[函数名=表达式],,[,Exit Sub],,,语句块,,,[函数名=表达式],,End,,§,8.2.,1,FUNCTION,函数的建立与定义,,Private Function swap1(x, y),,,,Dim t As Integer,,,,t = x: x

13、= y: y = t,,End Function,,,§8.2.1,FUNCTION,函数的建立与定义,,说明:,,,Function,函数和,Sub,过程的区别及注意事项:两者的主要区别是有无返回值。,SUB,过程没有返回值,而,Function,函数有返回值。“函数名=表达式”语句功能是给函数名赋值,通常情况下在函数体内至少要对函数名进行一次赋值,若缺省,则返回对应类型的缺省值。因为函数有返回值,所以过程名也有类型。“,as,数据类型”指定函数类型,若缺省,默认为变体型。而,SUB,过程名没有值,因而也没有类型,且在子过程体内也不能对子过程名赋值。只要能定义成函数过程的就一定能定义成子过程

14、,反之不一定。,,,格式如下:,格式1:,Function,过程名,(,[实参表],),,格式2:,CALL,过程名(实参),格式3:过程名 实参,§,8.2.2,,FUNCTION,函数的调用,说明:通常用第一种比较多,用后两种方法调用函数时,VB,放弃函数的返回值。,,例题,,在应用程序中用“,Private Function Fun( X As Integer,Y As Integer)”,定义了函数,Fun.,调用函数,Fun,的过程中的变量,I,定义为,Integer,型,变量,J,定义为,STRING,型,能正确引用函数,Fun,的是______。,,①,Fun(I,J),,②Ca

15、ll Fun(I,3.65),,③Fun(3.14,234),,④Fun("245","231.5"),,A. ①③,B. ②③④,,C. ①②③ D. ①②③④,,§,8.2.2,,FUNCTION,函数的调用,B,,,,例题,,2、编写一段求三角形面积的函数,并多次调用。(设三角形,,三边长为,x,y,z,,则面积为,c = 1 / 2 * (x + y + z);,,area =,Sqr,(c * (c - x) * (c - y) * (c - z))),,Public Function area(x, y, z) As Single,,Dim c As Single,,c = 1

16、/ 2 * (x + y + z),,,area,=,Sqr,(c * (c - x) * (c - y) * (c - z)),,End Function,,§,8.2.2,,FUNCTION,函数的调用,,,,调用,,,Private Sub Command1_Click(),,Dim a As Single, b As Single, c As Single, d As Single, e As Single, f As Single, s1 As Single, s2 As Single,,a =,InputBox,(",输入,a:"),,,b =,InputBox,(",输入,

17、b:"),,,c =,InputBox,(",输入,c:"),,d =,InputBox,(",输入,d:"),,,e =,InputBox,(",输入,e:"),,,f =,InputBox,(",输入,f:"),,s1 = area(a, b, c): s2 = area(d, e, f),,Text1.Text = Val(s1 + s2),,End Sub,§,8.2.2,,FUNCTION,函数的调用,函数调用,,,,例: 试分别用,Sub,和,Function,编写求某级数部分和的过 程,并调用之。,,,级数为,,,x,2,x,n,,,,1 + x + — +,… +,— +,…

18、,,2! n!,,精度为,,|,x,n,,|,,|—| <,eps,,,|n! |,,,§,8.2.2,,FUNCTION,函数的调用,演示,,,,,Private Sub js2(s As Double, x As Single,,eps,As Double),,Dim n As Integer, t As Double,,n = 1: s = 0: t = 1,,Do While (Abs(t) >=,eps,),,,s = s + t,,,t = t * x / n,,,n = n + 1,,Loop,,End Sub,,§,8.2.2,,FUNCTION,函数

19、的调用,Sub,过程:,,,,Function,函数:,,,Private Function js1(x As Single,,eps,As Double) As Double,,Dim n As Integer, s As Double, t As Double,,n = 1: s = 0: t = 1,,Do While (Abs(t) >=,eps,),,,s = s + t,,,t = t * x / n,,,n = n + 1,,Loop,,,js1 = s,,End Function,,§,8.2.2,,FUNCTION,函数的调用,,,,分别调用:,,,Private Sub

20、Command1_Click(),,Dim f1 As Double, f2 As Double,,Dim x As Single,,x = Val(Text1.Text),,f1 = js1(x, 0.0000001),,Call js2(f2, x, 0.0000001),,Text2.Text =,Str,(f1),,Text3.Text =,Str,(f2),,End Sub,,§,8.2.2,,FUNCTION,函数的调用,函数调用,过程调用,,,,在程序中只能调用其他模块中的公有过程。,§,8.2.3,,调用其它模块中的过程,,,1、窗体模块,,格式:,CALL,窗体名.过程名([

21、实参表]),,2、标准模块,,(1)若调用自身模块中的过程,格式为:,CALL,过程名(实参),,(2)若调用别的模块中的过程且有两个或以上的模块中含有同名过程则格式为:,CALL,模块名.过程名(实参),,(3)如果标准模块中的过程名是唯一的,应用程序中不再有同名过程存在,则调用该过程是不用加模块名。,,3、类模块,例如窗体模块中有一过程为事实,则可写成,Call  Form1.,ss,(,[,实参表,],),,,如果两模块,m1,和,m2,中都含有过程,gc,,,则,调用,m1,中的,gc,应写成,Call m1 .,gc,,习题,1、在调用过程时,下述说明中正确的是,,。,,,A,,只

22、能使用,Call,语句调用,Sub,过程,,,B,调用,Sub,过程时,实在参数必须用括 号括起来,,,C,在表达式中调用,Function,过程时,可以不用括号把实在参数括起来,,D Function,过程也可以使用,Call,语句调用,D,,习题,考点:,,,Sub,过程用,Call,语句调用(无参数时括号可省略)或作为一个语句使用,当做语句使用时实参表不需要加括号;,Function,过程的调用和,VB,内部函数的方法一样,此时有返回值,若像调用,Sub,过程那样调用,Function,过程,其返回值被放弃。,,习题,1,、(,2001,年春)应用程序窗体的名称属性为,Frm1,,,窗

23、体上有一个命令按钮,其名称属性为,cmd1,,,窗体和命令按钮的,Click,事件过程名分别为,,,。,,,A,.,Form_Click( ) Command1_Click( ),,B,.,Frm1_Click( ) Command1_Click( ),,C,.,Form _Click( ) Cmd1_Click( ),,D,.,Frm1_Click( ) Cmd1_Click( ),C,,习题,2,、(,2003,年春)第一次显示某窗体时,将引发一系列事件,正确的事件系列是,,。,A.Load,—,Initialize,—,Activate B,.,Init

24、ialize,—,Load,—,Activate,,C,.,Load,—,Activate,—,Initialize D,.,Initialize,—,Activate,—,Load,B,,§,8.3 参数的传递,按值,传递,按,地址传递,数组参数,参数,对象参数,,,,§,8.3,,参数的传递,,,在调用有参过程的时候,首先进行的是参数的“形实结合”的过程,即将调用程序中的实参和被调用过程中的形参结合,实现主调程序和过程之间的数据传递,在结合时一定要按顺序进行并且类型要相同,特别注意不可以按名字进行结合。该传递分为传值和传址(引用)两种方式。,,,,,§,8.3.1,按值,传递,

25、按值传送时传送的是实参的值,仅将实参变量的值复制了一,,,份,执行完调用语句后,调用程序中的实参值不变。,,格式如下:,,,形式参数为,byval,变量名[()][,AS,类型],,,[,,byval,变量名[()][,AS,类型]…],,,,,§,8.3.1,按值,传递,例:,,Private Sub Command1_Click(),,Dim m As Integer, n As Integer,,m = 15: n = 20,,Call value(m, n),,Print "m="; m, "n="; n,,End Sub,,,Private Sub value(,ByVal,x As

26、 Integer,,ByVal,y As Integer),,x = x + 20: y = y + x,,Print "x="; x, "y="; y,,,,End Sub,,m,n,的值不变,,没有数值往回传递,接收,m,的值,接收,n,的值,演 示,,,,§,8.3.2,按,地址传递,按地址传送时传送的是实参的地址,在调用时,被调用过程,,,直接将接受到的地址里的值进行修改,从而将原来的实参值覆盖,,,掉,所以,执行完调用语句后,实参的值将会有所改变。,,格式如下:,,,形式参数为 [,byref,],变量名[()][,AS,类型],,,[,[,byref,],变量名[()][,AS,类

27、型]…],,,,§,8.3.2,按,地址传递,例:,,Private Sub Command2_Click(),,Dim m As Integer, n As Integer,,m = 15: n = 20,,Call value1(m, n),,Print "m="; m, "n="; n,,End Sub,,,Private Sub value1(,ByRef,,x,As Integer,,y,As Integer),,x = x + 20: y = y + x,,Print "x="; x, "y="; y,,End Sub,,接收,m,的地址,接收,n,的地址,m,n,的值即为,,x

28、,y,的值,(数值往主调过程传递),演 示,,,,§,8.3.2,按,地址传递,传值和传址在形式上表现的主要区别为:,,如果是按值传送,则形参的参数前加有,BYVAL,,若形,,,参前没有加上任何关键字或是加上“,BYREF”,,则指定他是按,,,地址传递的参数。使用时应具体分析,否则容易产生错误。,,,10,10,b,的地址,20,主调过程:,被调过程:,传值,传地址,实参,形参,a,b,x,y,,,,§,8.3.2,按,地址传递,例题,,,,用语句,Private Sub Convert(Y As Integer),定义的,Sub,过程时,以下不是按值传递的语句是___,25,___。,,

29、A. Call Convert((X)),,B. Call Convert(X*1),,C. Convert(X),,D. Convert X,说明:,按地址传送的形参,若调用时与之结合的实参是常数或表达式,则,vb,会将之,变为“按值传递”,,,,§,8.3.2,按,地址传递,例1:求1!+2!+3!+4!+5!的和。,,Private Static Function fact(,n,As Integer) As Integer,,fact = 1,,,,Do While n > 0,,fact = fact * n,,n = n – 1,,Loop,,End Function,,,,,§

30、,8.3.2,按,地址传递,例1:求1!+2!+3!+4!+5!的和。,,Private Sub Form_Click(),,,Dim sum As Integer, i As Integer,,,For i = 5 To 1 Step –1,,,sum = sum +,fact(i),,,Next I,,,Print "sum="; sum,,,End Sub,sum = sum +,fact(,(,i,),),演 示,,,,§,8.3.2,按,地址传递,例2:四则运算,,Private Function add(a As Integer, b As Integer,,,c As Integ

31、er),,a = a + 10: b = b + 10: c = c + 10,,add = a + b + c,,End Function,,,Private Sub Form_Click(),,Dim v1 As Integer, v2 As Integer, v3 As Integer,,v1 = 2: v2 = 3: v3 = 4,,Print v1 + v2 + v3 * add(v1, v2, v3),,End Sub,,函数的优先级高,演 示,,,,§,8.3.2,按,地址传递,例3:验证9的倍数(如果一个数的各位数之和等于该数的两倍的各位数之和,则该数为9的倍数。如:99的两倍

32、是198,且9+9=1+9+8,则99就是9的倍数。),,Private Function,sm,(________________) As Integer,,Dim sm1 As Integer,,sm1 = 0,,Do While n 0,,sm1 = sm1 + n Mod 10,,n = n \ 10,,Loop,,,sm,= sm1,,End Function,,,ByVal,n As Integer,,,,§,8.3.2,按,地址传递,例3:验证9的倍数,,,Private Sub Command1_Click(),,Dim n As Integer, s1 As Intege

33、r, s2 As Integer,,n = Val(Text1.Text),,s1 =,sm,(n),,s2 = _________________,,If s1 = s2 Then,,,MsgBox,",该数是9的倍数",,,Else,,,MsgBox,",该数不是9的倍数",,,End If,,Text1.Text = "",,Text1.,SetFocus,,,End Sub,,sm,(2 * n),演 示,,数组可以作为形式参数。,,,格式为:,形参数组名()[,AS,类型]。,,,,但形参数组只能是按地址传递的参数。对应实参的类型,长度必须和形参一致,数组名在实参中后面不加一对括号。

34、在被调用的过程中不可以用,DIM,对形参进行声明,但是动态数组时,可以用,REDIM,来重新定义数组的维界与大小。,,,,,§,8.3.3,,数组参数,,,,§,8.3.3,,数组参数,例4:求任一一维数组元素之和,,,Private Function,tim,(a() As Integer),,Dim t As Double, i As Integer,,t = 1,,For i =,LBound,(a) To,UBound,(a),,t = t * a(i),,Next i,,,tim,= t,,End Function,,,,§,8.3.3,,数组参数,例4:求任一一维数组元素之和,,P

35、rivate Sub Form_Click(),,Dim a(1 To 5) As Integer, b(2 To 10) As Integer,,,i As Integer, t1 As Integer, t2 As Long,,For i = 1 To 5,,,a(i) = i,,Next i,,For i = 2 To 10,,,b(i) = i,,Next i,,t1 =,tim,(,a,),,t2 =,tim,(,b,),,Print "t1="; t1, "t2="; t2,,End Sub,,实参数组后不,,加圆括号,,,,§,8.3.3,,数组参数,例5:数组参数传递(教材,P

36、,173,),,Private Sub change(,a(),As Integer),,,Dim i As Integer,,,,ReDim,a(7),,,For i = 1 To 7,,,a(i) = I,,,Next I,,,End Sub,形参数组只能按地址传递,,,,§,8.3.3,,数组参数,例5:数组参数传递,,Option Explicit,,,Option Base 1,,Private Sub Form_Click(),,Dim,arraya,() As Integer, i As Integer,,,ReDim arraya,(5),,Print ",调用前上界是:";,

37、UBound,(,arraya,),,Call change(,arraya,),,Print ",调用后上界是:";,UBound,(,arraya,),,Print ",数组各元素的值是:";,,,For i = 1 To,UBound,(,arraya,),,,Print,arraya,(i);,,Next i,,Print,,End Sub,,演 示,,,对象也可以作为参数传递,但也,,,只能是按地址来传递。在形参中若是,,,控件,则类型声明为“,CONTRAL”,,若是,,,窗体,则类型声明为“,FORM”。,,,,§,8.3.4,,对象参数,,,,§,8.3.4,,对象参数,例6:

38、,Public Sub,cf,(,ByVal colorfrm,As Form),,Dim i As Integer,,gradcolor,As Long,,,colorfrm,.,ScaleMode,= 3:,colorfrm,.,DrawStyle,= 6,,,colorfrm,.,DrawWidth,= 2:,colorfrm,.,AutoRedraw,= True,,For i = 1 To 64,,gradcolor,= RGB(0, 0, 255 - (i * 4 - 1)),,colorfrm,.Line (0,,colorfrm,.,ScaleHeight,* (i - 1)

39、/ 64)- (,colorfrm,.,ScaleWidth,,,colorfrm,.,ScaleHeight,*i/64),,gradcolor,, BF,,Next i,,,colorfrm,.Refresh,,Form1.Hide,,,colorfrm,.Show,,End Sub,演 示,,§,8.4 递归过程,递归的概念,,用自身的结构来描述自身称为“递归”即一个过程调用过程本身,在递归调用中,一个过程执行的某一步要用到它自身的上一步或上几步的结果。例如:最典型的例子是对阶乘运算可作如下定义:,,,n!=n*(n-1)!,,(n-1)!=(n-1) *(n-2)!,,,,,§,8

40、.4,,递归过程,递归有两种,,•,,直接递归:自己调用自己,,•,,间接递归:,A,调用,B,B,调用,A,,递归过程中必须有递归结束语句。,递归子过程和递归函数,,,VB,允许一个子过程或函数在自身定义的内部调用自己,这样的子过程或函数称为,递归子过程,或,递归函数,。许多问题中具有递归的特性,用递归调用描述它们就非常方便。,,注意:递归过程必须有一个结束递归的终止条件,否则会无限制的执行下去。,,,,,§,8.4,,递归过程,例7、 求,fac,(n)=n!,的值,,(,n,已4为例),递推,fac,(4)=4*,fac,(3),fac,(3)=3*,fac,(2),fac,(2)=2*

41、,fac,(1),fac,(1)=1,fac,(2)=2*1,fac,(3)=3*2,fac,(4)=4*6,回归,,§,8.4,,递归过程,Public Function,fac,(n As Integer) As Integer,,If n=1 Then,,,fac,=1,,Else,,fac,=n*,fac,(n-1),,End If,,End Function,,,Private Sub Command1_Click(),,Print “,fac,(4)=“;,fac,(4),,End Sub,,递归调用,演示,,§,8.4,,递归过程,1、求阶乘。,n!=n*(n-1)!,,2、

42、,求菲波那契数列前10项。,F(1)=1,F(2)=1,,后面各项满 足:,F(n)=F(n-1)+F(n-2),,3,、,,求两个数的最大公约数。,,4,、,逆转输出一个字符串。,,5,、,汉诺塔游戏。,,相关习题:,,§,8.5 变量的作用域,变量的作用域,过程的作用域,静态变量,同名变量,,,§,8.5,,,变量的作用域,,应用程序,,(.,vbp,文件),类,模块(.,cls,),文件,一个或若干个窗体,,模块(*.,frm,),文件,用户自定义子过程(,Sub),,用户自定义函数过程(,Function),事件过程(,Sub),,用户自定义子过程(,Sub),,用户自定义函数过程(,

43、Function),一个或若干个标准,,模块(*.,bas),文件,全局级,模块级,过程级,,§,8.5.1,,变量的作用域,1.局部变量,,作用域为定义的过程内。指在过程内用,Dim,语句声明的变量(或不加声明直接使用的变量),只能在本过程中使用,别的过程不可访问。局部变量随过程的调用而分配存储单元,并进行变量的初始化,一旦该过程体结束,变量的内容自动消失,占用的存储单元释放。不同的过程中可有相同名称的变量,彼此互不相干。使用局部变量有利于程序的调试,,如,Dim b as string,,§,8.5.1,,变量的作用域,2.窗体/模块级变量,作用域为定义的窗体/模块内。指在一个窗体/,,,

44、模块的任何过程外,即在“通用声明”段中用,Dim,语句,,,或用,Private,语句声明的变量,可被本窗体/模块的,,,任何过程访问。,,如,Dim c as string,,§,8.5.1,,变量的作用域,3.全局变量,作用域为整个应用程序内。指在窗体或标准模块的任何过程或函数外,即在“通用声明”段中用,Public,语句声明的变量,可被应用程序的任何过程或函数访问。全局变量的值在整个应用程序中始终不会消失和重新初始化,只有当整个应用程序结束时,才会消失。,4、例题,如,Dim a as string,,§,8.5.1,,变量的作用域,,演示,,§,8.5.2,,过程的作用域,1.窗体/模

45、块级,指在某个窗体或标准模块内定义的过程,定义子过程或函数时前加,Private,关键字,过程只能被本窗体或本标准模块中的过程调用,,§,8.5.2,,过程的作用域,2、全局级,指在窗体或标准模块中定义的过程,其默认是全局的,也可加,Public,进行说明。全局级过程可供该应用程序的所有窗体和所有标准模块调用,调用方式有如下两种:,,在窗体定义的过程,外部过程调用时,必须加窗体名,,在标准模块定义的过程,外部过程均可调用,但过程名必须唯一,否则要加标准模块名,,§,8.5.3,,静态变量,,每次调用过程时,用,Static,说明的变量保持原来的值,而用,Dim,说明的变量,每次调用过程时,都重

46、新初始化。,,,形式如下:,,Static,变量名 [,As,类型],,Static Function,函数名([参数列表])[,As,类型],,Static Sub,过程名[(参数列表)],,,§,8.5.3,,静态变量,Private Sub Command1_Click(),,Dim k As Integer,,k = 5,,Call,ss,(k),,Print k :k = 5,,Call,ss,(k),,Print k,,End Sub,,,Private Sub,ss,(,ByRef,n As Integer),,Static,sta,As Integer,,sta,= n +,s

47、ta,:n = n +,sta,,End Sub,,,运行结果:,,,第一次调用:,,K=10,,,第二次调用:,,K=15,,演 示,,§,8.5.4,,同名变量,变量的作用域不同时,名字可以相同,但在使用时如果不在本模块内,则必须加上变量所在模块的模块名。,,,同名变量的引用,,,a.,不同模块的全局变量同名:,,在本模块中:直接用变量名引用。,,在外模块中:模块名.变量名,,,b.,同一模块的全局变量与局部变量同名:,,在过程内:只能引用局部变量(用变量名)。,,在过程外:只能引用全局变量(用变量名)。,,c.,同一模块的模块级变量与局部变量同名,,在过程内:用变量名引用局部变量,,在过

48、程外:用变量名引用模块级变量。,,§,8.6 程序示例,逆序输出,求,反正弦,最大公约数,直接插入,运动员名次,示例,,实 验,,1、实验指导书,P,93,实验11-1,,2、实验指导书,P,101,实验11-6,,3、实验指导书,P,101,实验11-8,,4、实验指导书,P,101,实验11-9,,5、实验指导书,P,104,实验12-1,,6、实验指导书,P,107,实验12-3,,7、实验指导书,P,110,实验12-6,,,8、求方程,ax,2,+,bx,+c=0,的根,用3个函数分别求当,b-4ac,大于0、等于0和小于0时的根,并输出结果,要求从主函数输入,a、b、c,的值。,,实 验,,综合实验,,,写几个函数:,,1)、输入10个学生的姓名和学号;,,2)、可增加、删除学生;,,3)、按学号从小到大排序,姓名顺序也随之调整;,,4)、输入一个学号,可显示姓名;,,要求从主函数中输入学号,输出姓名,,

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

相关资源

更多
正为您匹配相似的精品文档
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!