过程VB武科大教学市公开课获奖课件_第1页
过程VB武科大教学市公开课获奖课件_第2页
过程VB武科大教学市公开课获奖课件_第3页
过程VB武科大教学市公开课获奖课件_第4页
过程VB武科大教学市公开课获奖课件_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、过 程第六章第1页第1页目的过程定义和调用参数传递递归变量作用域多窗体与Sub Main过程2第2页第2页过程引入公司年终评先进,所有部门必须依据公共文献:计算先进人数、评选办法等公司经营遵守和使用相关法律、法规、行业规则在财务管理、进销存、物流等系统中金额必须大写(代码见试验教程实例)3第3页第3页过程引入数据连接、网页顶部和底部如何结构?以ASP.NET运营为例(以教务系统为例)4第4页第4页过程引入5第5页第5页过程引入6第6页第6页过程引入分而治之:将复杂问题尽也许地分解成若干个易于处理子问题 许多窗体都需要做一样工作,避免代码重复 和共享代码,需引入过程。7第7页第7页VB应用程序构

2、成 VB应用程序 (.vbp文献)原则模块(.bas文献)至少一个窗体模块(.frm文献)Sub过程图片或图 标事件过程Sub过程VB应用程序构成函数过程Function ()函数过程(Function)8第8页第8页 定义: 将程序分割成较小逻辑部件就能够简化程序设计任务,称这些部件为过程。 过程作用:压缩重复任务和共享任务。 如:数据连接和大小写转换等 过 程 概 述9第9页第9页过 程 概 述VB过程分类:事件过程:与窗体相关联,发生某个事件时调用相应事件过程。通用过程:用户自已拟定程序结构(Sub过程、Function过程)。10第10页第10页通用过程和事件过程关系11第11页第11

3、页事件过程事件过程:如FORMClick(load)等原理:(举例滚动条调字体颜色)用户动作对象该对象事件过程Windows操作系统辨认告知窗体上相同对象事件过程都不同,类似于相同岗位在不同部门做事过程不同12第12页第12页通用过程建立通用过程就相称于创建自己办法或自己命令动词,该办法(命令)完毕一定操作当需要计算机完毕这一定操作时,发出自己命令。我们称之为调用。建立通用过程允许带有参数(虚拟参数、形式参数);在调用时相应予以真正参数(实际参数)包括SUB和Function过程13第13页第13页SUB过程普通格式下列 Static PrivatePublic Sub过程名(参数列表) 语句

4、块 Exit Sub 语句块 End Sub 14第14页第14页通用(SUB)过程Public 和Private区别Static涵义子过程命名符合变量命名规则参数列表阐明:BYVA和ByRef区别有始有终:-Sub-End Sub过程内语句中能够出现Exit Sub语句,用于提前退出通用过程15第15页第15页静态和动态变量区别Dim t as integer t=t+1 print t换成静态变量:Static t as integer t=t+1 print t16第16页第16页SUB过程建立办法一:快捷方式(利用工具中添加过程:代码窗口)17第17页第17页SUB过程建立和调用办法二

5、:在窗体或原则模块代码窗口通用段,输入Sub过程名18第18页第18页SUB过程建立和调用调用办法Call 过程名(实参列表)过程名 实参列表调用阐明主程序段调用子过程,程序流自动指向被调用过程被调用时形参和实参在个数、顺序、类型要完全一致19第19页第19页形参与实参形式参数:被调过程中参数。出现在Sub过程和Function过程中 形式参数能够是变量名和数组名。实际参数:在主调过程中参数。过程调用时实参数据会传递给形参 形参表和实参表中对应变量名能够不同,但实参和形参个数、次序以及数据类型必须相同。20第20页第20页举例Sub Dprint(n As Integer) For i = 1

6、 To n Print “欢迎进入VB世界” Next iEnd SubPrivate Sub Command1_Click() Call Dprint (5)End Sub形式参数实际参数21第21页第21页程序举例Private Sub Form_Load() Show Call mysub1(30) Call mysub2(1) Call mysub2(1) Call mysub2(1)Call mysub1(30) End Sub Private Sub mysub1(n) Print String(n, *) End SubPrivate Sub mysub2(n) Print *;

7、 Tab(30); *End Sub22第22页第22页例 编写一个互换两个整型变量值过程Swap,然后在窗体Click事件过程中,随机产生两个小于1000正整数,调用过程Swap完毕对其值互换,并输出互换前后结果。程序代码下列:Sub Swap(x As Integer, y As Integer)Dim t as IntegerT=y:y=x:x=tEnd SubSub Form_Click( )Dim a As Integer, b As Integera=Int(Rnd*1000)b=Int(Rnd*1000)Print 互换前:Print a=;a,b=;bSwap a,b 或 Ca

8、ll Swap(a,b)Print 互换后:Print a=;a,b=;bEnd Sub23第23页第23页举例Sub Pyramid() For i = 1 To 5 Print Spc(10 - i); For j = 1 To 2 * i - 1 Print *; Next j Print Next iEnd SubPrivate Sub FORM_Click() Call PyramidEnd Sub调用建立Pyramid过程24第24页第24页程序举例-计算 5!+10!先定义阶乘办法: Private Sub Jc(n As Integer, t As Long) Dim i As

9、 Integer t = 1 For i = 1 To n t = t * i Next i End SubPrivate Sub Form_Load() Show Dim y As Long, s As Long Call Jc(5, y) s = y Call Jc(10, y) s = s + y Print 5! + 10! =; s End Sub25第25页第25页课堂练习计算1!+2!+.+10!以下图型怎样设计: * * * * * * * * * * * * *26第26页第26页 自定义函数过程有两种办法: (1)利用代码窗口下“工具”菜单下“添加过程”命令 定义,生成一个

10、函数框架。 (2)利用代码窗口直接定义。 Function函数过程27第27页第27页Function函数过程函数过程形式: Function 函数名(参数列表) As 类型 局部变量或常数定义 语句块 函数名 = 表示式 函数体 Exit FunctionEnd Function28第28页第28页Function函数过程函数过程名:命名规则同变量名参数列表形式: 变量名 As 类型形参仅表示参数个数、类型,无值。函数名 = 返回值 : 在函数体内至少对函数名赋值一次。 Exit Function : 表示退出函数过程。29第29页第29页Function函数过程与调用Function过程有

11、返回值,通惯用于完毕特定计算过程内语句中能够出现Exit Function语句,用于提前退出函数过程过程内语句中必须至少有一条对函数名赋值语句函数名=表示式调用办法:与原则函数利用完全同样,能够出现在表示式中30第30页第30页Function过程调用直接调用 像使用VB内部函数同样,只需写出函数名和相应参数即可。比如: s = Max(a, b) Print Max(s, c)用Call语句调用 与调用Sub过程同样来调用Function过程 Call Max(a, b) 当用这种办法调用Function过程时,将会放弃返回值。31第31页第31页举例-输入三个数,求出它们最大数定义求最大值

12、函数Function max(m, n) As Single If m n Then max = m Else max = n End If End Function Private Sub Form_click () Dim a As Single, b As Single, c As SingleDim s As Singlea = Val(InputBox(输入第一个数) b = Val(InputBox(输入第二个数) c = Val(InputBox(输入第三个数) s = max(a, b) Print 最大数是:; max(s, c) End Sub 函数作为变量使用函数作为变量

13、使用形式参数m,n函数名32第32页第32页举例计算计算1!+2!+.+10!Private Sub Form_Click() Dim i As Integer, s As Double s = 0 For i = 1 To 10 s = s + f(i) Next i Print 1!+2!+.+10!=; sEnd Sub自定义函数:Public Function f(x As Integer) As Double t = 1 For i = 1 To x t = t * i Next i f = tEnd Function33第33页第33页举例Function nFactor(n As

14、 Integer) As Long T=1 For i = 1 To n T=T*i Next i nFactor=TEnd FunctionPrivate Sub FORM_Click() s=0 For i=1 to 10s=s+nFactor(i) Next I Print “1!+2!+ +10!=”;sEnd Sub形式参数实际参数函数名34第34页第34页Fabonacci数列Option ExplicitPrivate Sub Command1_Click()Dim n As IntegerDo n = Val(InputBox(n=)Loop While n = 0Print

15、Fabonacci数列第; n; 项=; f(n)End SubPublic Function f(x As Integer) As Long If x = 1 Then f = 0: Exit Function If x = 2 Then f = 1: Exit Function f = f(x - 1) + f(x - 2)End Function35第35页第35页课堂练习Private Sub Command1_Click() Dim I As Integer Dim e As Single, F As Long For I = 0 To 10 F = Factorial(I) 计算

16、I! e = e + 1 / F Next I Print e=; eEnd Sub返回目录Function Factorial(X As Integer) As Long Dim I As Integer, T As Long T = 1 For I = 1 To X 计算 X! T = T * I Next I Factorial = TEnd Function 计算阶乘函数过程36第36页第36页总结-sub 和function过程比较(1) 过程申明关键字不同(2) 子过程无返回值,函数过程有返回值(其返回值类型要定义)。(3) Sub 过程中没有对过程名赋值语句,而Function过

17、程中一定有对函数名赋值语句 。37第37页第37页总结-sub 和function过程比较(4) 调用方式不同,子过程是一条独立语句,可用Call子过程名或省略Call直接以子过程名调用;函数过程不是一条独立语句,是一个函数值,必须参加表示式运算。(5) 普通来说,一个函数过程能够被一个子过程代替,代替时只要改变函数过程定义形式,并在子过程形参表中增加一个地址传递形参来传递结果。38第38页第38页参数传递按值传递 和 按地址传递(VB默认数据传递方式)ByVal 传值 Byref传址实参暂时单元实参形参形参39第39页第39页按值传递 和 按地址传递Private Sub xyz(ByVal

18、 n As Integer) n = n + 5End SubPrivate Sub abc(ByRef n As Integer) n = n + 5End SubPrivate Sub Command1_Click() Dim x As Integer x = 3 Call xyz(x) x值传给n,相称于n=3 Print x x仍然操持原有值 Call abc(x) x值传给n,相称于n=3 Print x 由于在执行abc过程中n=8了,x同时变为8End Sub单击Command1后,打印出:3840第40页第40页数组作为参数值传递方式数组参数只能按地址传递在实参和形参中无需阐明

19、数组维数数组上界和下界可用Lbound()和Ubound()函数测出返回目录 41第41页第41页3.数组参数 在一个通用过程中使用数组作为参数时,除遵循参数基本原则外,还须注意下列几点: 数组作形参时,普通不申明大小,但括号不能省略,以便与普通变量混淆。 数组作形参时,只能采用按地址传送方式,即在定义数组时,前面不能加关键字ByVal。 在过程体内,形参数组下标改变范围能够使用LBound函数或UBound函数来拟定。比如,要将一个二维数组中元素输出,则通用程序段下列:Sub printarray(x( )Dim row%,col%For row=LBound(x,1) to UBound(

20、x,1)For col=LBound(x,2) to UBound(x,2)Print tab(6*col);x(row,col);Next colPrintNext rowEnd Sub42第42页第42页 调用通用过程时,假如形参是数组,则相应实参必须是与形参同类型数组。实参数组格式为:实参数组名( )或实参数组名。 整个数组必须以ByRef(按地址方式)传递,但数组中数组元素可用ByVal(按值)传递。当数组元素作为实参出现时,一定要写上下标。 数组作参数时,对形参数组元素改变,将最后改变实参数组中相应元素值。43第43页第43页例 Private Sub Form_Click() Di

21、m a As Integer, b(4) As Single, c As String * 5 a = 3 For i = 0 To 4 b(i) = i Next i c = “china” Call testsub ( a, b, c) Print “返回后数组b值为:” For i = 0 To 4 Print b(i); Next i End SubSub testsub ( x As Integer, y() As Single, z As String) Print x For i = 0 To UBound(y) Print y(i); Next i y(4) = 8 Print

22、 Print zEnd Sub44第44页第44页数组参数传递参数:任意一维数组,数组个数,打印时每行个数Public Sub printarray(x() As Integer, n As Integer, k As Integer)调用:Call Print array(a,50,5)Print array b,100,8注意:数组作为形参时,不要定义下标界线;而在调用时,数组作为实参时,只须给出数组名形参实参45第45页第45页数组参数传递Public Sub printarray(x() As Integer, n As Integer, k As Integer) For I = 1

23、 To n Print x(I);If I Mod k = 0 Then PrintNext IEnd Sub在需要输出数组时,调用printarray过程Private Sub Form_Click()Dim a(20) As Integer, b(30) As Integer For I = 1 To 20 a(I) = Int(Rnd * 90) + 10 Next IFor I = 1 To 30b(I) = Int(Rnd * 900) + 100 Next ICall printarray(a, 20, 4) printarray b, 30, 5End Sub46第46页第46页

24、顺序查找代码Private Sub Form_ click() Const N As Integer = 9 Dim List As Variant List = Array(65, 72, 83, 79, 97, 87, 75, 57, 91, 78) Dim key, i As Integer key = Val(InputBox(请输入要查找数:) i = 1 Do While i N Then Print 没找到! Else Print 找到了! 位置是: & i End IfEnd Sub public Sub sxcz(b, k As Single) N = UBound(b) D

25、im i As Integer i = lBound(b)Do While i N Then Print 没找到! Else Print 找到了! 位置是: & i End IfEnd SubPrivate Sub Form_Click() Dim a As Variant, key As Single a = Array(65, 72, 83, 79, 97, 87, 75, 57, 91, 78) key = Val(InputBox(请输入要查找数:) Call sxcz(a, key)End Sub想一想,查找位置为何不对?47第47页第47页折半查找代码Option Base 1Pr

26、ivate Sub Form_Activate() Const N As Integer = 10 Dim List As Variant List = Array(57, 65, 72, 75, 78, 79, 83, 87, 91, 97) Dim key, i, low, mid, high, found As Integer For i = 1 To N Print List(i); Next i Print key = Val(InputBox(请输入要查找数:) low = 0: high = N: found = 0Do While low List(mid) Then low

27、= mid + 1 Else high = mid - 1 End If Loop If found = 1 Then Print 找到了! 位置是: & mid Else Print 没找到! End IfEnd Sub折半查找代码过程如何实现?48第48页第48页冒泡法冒泡法排序 Const N = 10 : Dim D(N) As Integer, I%, J%, T% Randomize Timer For I = 1 To N D(I) = Rnd * 100: Print D(I); Next I Print: Print For I = N - 1 To 1 Step -1 大数

28、逐一沉底 For J = 1 To I If D(J) D(J + 1) Then T = D(J): D(J) = D(J + 1): D(J + 1) = T End If Next J Next I For I = 1 To N 输出排序结果 Print D(I); Next I49第49页第49页使用过程处理冒泡法先定义过程Private Sub rank(n As Integer, a() As Long)n=ubound(a) c=lbound(a) For i = c To n - 1 For j =c+1 To n If a(j - 1) a(j) Then t = a(j -

29、 1): a(j - 1) = a(j): a(j) = t End If Next jNext iEnd Sub50第50页第50页使用过程处理冒泡法Private Sub Form_Click()Dim D(10) As Long, I%, J%, T% Randomize For I = 1 To 10 D(I) = Rnd * 100 + I: Print D(I); 排序前数据序列 Next I PrintCall rank(10, D() For I = 1 To 10 Print D(I) 竖向输出数列 Next IEnd Sub51第51页第51页选择法选择法排序Const N

30、 = 10 : Dim D(N) As Integer, I%, J%, T% Randomize Timer For I = 1 To N D(I) = Rnd * 100: Print D(I); 排序前数据序列 Next I Print: Print For I = 1 To N - 1 挑出前N-1个小数 For J = I + 1 To N If D(I) D(J) Then 数据元素互换 T = D(I) : D(I) = D(J) : D(J) = T End If Next J Next I For I = 1 To N 输出排序结果 Print D(I); Next I52第

31、52页第52页使用过程处理选择法(升序)Option Base 1Private Sub rank(n As Integer, a() As Long)c = LBound(a)n = UBound(a)For I = c To n - 1For J = I + 1 To nIf a(J) a(I) Then T = a(I): a(I) = a(J): a(J) = TNext JNext IEnd SubPrivate Sub rank(n As Integer, a() As Long)For I = 1To n - 1For J = I + 1 To nIf a(J) a(I) The

32、n T = a(I): a(I) = a(J): a(J) = TNext JNext IEnd Sub53第53页第53页使用过程处理选择法Private Sub Form_Click()Dim D(10) As Long, I%, J%, T% Randomize Timer For I = 1 To 10 D(I) = I * Rnd * 100: Print D(I); 排序前数据序列 Next I PrintCall rank(10, D() For I = 1 To 10 Print D(I) 竖向输出数列 Next IEnd Sub54第54页第54页变量作用域按空间角度分1局部

33、变量 局部变量是只能在一个函数或过程中访问变量,其它过程或函数不能访问此变量数据。2. 窗体/模块级变量 窗体/模块级变量是指在一个窗体/模块任何过程之外,即在“通用申明”段中用Dim或Private语句申明变量。3. 全局变量 全局变量是指在一个窗体/模块任何过程之外申明变量,即在“通用申明”段中用Public语句申明变量。注:不同标准模块或不同学体通用段定义全局变量能够重名,但引时需加载对象名,如:窗体名.变量名。55第55页第55页变量作用域表56第56页第56页变量作用域问题 局部变量:调用一次,初始化一次,变量值不保留模块级变量:当窗体模块装入时,分派该变量存储空间,直到该窗体模块从

34、内存中缷掉,才回收该变量分派存储空间。57第57页第57页过程作用域 对过程而言,也有模块级过程和全局级过程之分1. 模块级过程 在一个窗体模块中以Private定义过程为模块级过程,可为模块内各个过程引用。2. 全局级过程 在一个窗体模块中以Public定义过程为全局级过程,其它窗体可通过“窗体模块名.过程名”引用;在原则模块中定义全局过程可直接通过过程名引用。 返回目录58第58页第58页例:下面程序中有三个同名变量wv,图是运营该程序后,三次单击Command1后显示结果。Public wv As IntegerPrivate Sub Command1_Click() Dim wv As

35、 Integer wv = wv + 3 Call wholesub Print Command1事件过程wv=; wv, 全局wv=; Form1.wvEnd SubPublic Sub wholesub() Static wv As Integer wv = wv + 1 Form1.wv = wv + 5 Print wholesub过程wv=; wv, 全局wv=; Form1.wvEnd SubPrivate Sub Form_Load() wv = 1End Sub图 全局变量、局部变量、静态变量假如将dim改为static,结果如何?59第59页第59页过程作用域 对过程而言,也

36、有模块级过程和全局级过程之分1. 模块级过程 在一个窗体模块中以Private定义过程为模块级过程,可为模块内各个过程引用。2. 全局级过程 在一个窗体模块中以Public定义过程为全局级过程,其它窗体可通过“窗体模块名.过程名”引用;在原则模块中定义全局过程可直接通过过程名引用。 返回目录60第60页第60页Sub Main过程-启动过程 作用:在一个含有多个窗体或多个工程应用程序中,有时需要在显示多个窗体之前对一些条件进行初始化在原则模块窗口中建立 :执行“工程”菜单中“添加模块”命令,打开原则模块窗口,在该窗口中键入:Sub Main61第61页第61页练习 指出下面过程语句阐明中错误:(1) Sub f1(n%) As Integer(2) Fuction f1%(f1%) (3) Sub f1(ByVal n%()(4) Sub f1(x(i) As Integer)62第62页第62页练习已知有下列求两个平方数和Fsum子过程:Public Sub fsum(sum%,Byval m%, Byval n%) sum=m*m+n*nEnd Sub在事件过程中若有下列变量申明:Private Sub Command1_Click() Dim a%, b%, c! a=10 :b=2063第63页第63页练习指出下列过程调用语句错误所在: fsum 3,

温馨提示

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

评论

0/150

提交评论