您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > vb教案(过程与函数)
韶关学院课程教学设计(2学时)教学主要内容:第8章过程与函数教学目标与要求:通过对本章的学习,使学生掌握Sub过程与函数过程的使用,理解参数传递的意义。教学重点与难点:教学重点:Sub过程与函数过程的定义与调用教学难点:参数传递的意义教学素材:VisualBasic程序设计教程多媒体课件多媒体课室教学方法:讲授法课型:新授课教学过程:一、[课程引入]:先列出1个问题,让学生思考这样的问题用以前学过的知识怎样解决,之后引入过程。例:某同学遇到了这样的一个编程问题:1!+3!+5!=?分析:该题目是把三个数的阶乘求和。若用前面学习的方法,每个数的阶乘都需要写一段代码。若把求阶乘的代码作为“公共”程序段落,那么求各个数的阶乘时,就只需调用这个“公共”程序段落就可以了。这个“公共”程序段落可以定义成过程,称为“通用过程”。过程的引入:使同类的操作不重复(操作方法相同、参数不同)过程:完成一段独立功能,可供其他过程使用(调用)。过程又称为子程序调用过程:调用其他过程的过程过程分类:Function过程分为:内部函数和自定义函数调用过程:调用fact调用fact调用fact子程序:factSub过程分为:内部过程、事件过程和自定义过程二、[课堂讲解]:§8.1Function过程8.1.1Function过程的定义1.Function过程的格式[Public|Private][Static]Function函数过程名([形参表])[As类型][语句组][函数过程名=表达式][ExitFunction][语句组][函数过程名=表达式]EndFunction2.说明(1)Public:缺省值。使用Public时表示所有模块的所有其他过程都可以调用该Function过程。(2)Private:使用Private时表示只有本模块中的其他过程才可以调用该Function过程。(3)Static:使用Static时表示将过程中的所有局部变量说明为静态变量。(4)函数过程名:Function过程的名称,遵循变量的命名规则。(5)形参表:表示在调用时要传递给Function过程的参数变量列表。多个变量之间用逗号隔开。形参表格式:[ByVal|ByRef]变量名[()][As类型]ByVal:表示该参数按值传递。ByRef:缺省值。表示该参数按地址传递。变量名:遵循变量命名规则的任何变量名或数组名。():当参数为数组时使用。(7)ExitFunction语句:从Function过程中退出。(8)Function过程通过赋值语句函数过程名=表达式将函数的返回值赋给函数过程名。(9)Function过程的定义不能嵌套。3.Function过程的建立:•直接在代码窗口中输入。•在代码窗口:“工具”菜单→“添加过程”命令。8.1.2Function过程的调用直接在表达式中调用。格式:函数过程名([实参表])实参表:常量、变量或表达式,各参数之间用逗号分隔。如果是数组,在数组名之后必须跟一对空括号。【例8-1】求1!+3!+5!=?'自定义求阶乘的函数过程FactFunctionFact(NAsInteger)AsDoubleDimiAsInteger,FAsDoubleF=1'F用于保存阶乘值Fori=1ToNF=F*iNextiFact=F'给函数过程名赋值EndFunction'在按钮的Click事件过程中调用函数过程PrivateSubForm_Click()DimsumAsDoublesum=sum+Fact(1)+Fact(3)+Fact(5)'调用函数Print1!+3!+5!=;sumEndSub1.函数需先定义再调用。2.函数通过函数名返回结果。【例8-2】利用Function过程计算阶乘,求组合数。界面如下图所示。运行时,在文本框Text1和Text2中输入m和n值,单击按钮计算组合数,结果显示于文本框Text3中。'自定义求阶乘的函数FactFunctionFact(NAsInteger)AsDoubleDimFAsDouble,iAsIntegerF=1Fori=1ToNF=F*iNextiFact=FEndFunction'按钮的Click事件过程PrivateSubCommand1_Click()DimmAsInteger,nAsInteger,cAsDoublem=Val(Text1.Text):n=Val(Text2.Text)'调用Fact函数求各阶乘值c=Fact(m)/(Fact(n)*(Fact(m-n)))Text3.Text=Trim(Str(c))EndSub调用时的参数可以是常量,也可以是变量。§8.2Sub过程8.2.1Sub过程的定义1.Sub过程的格式[Private|Public][Static]Sub过程名[(形参表)][语句组][ExitSub][语句组]EndSub2.说明(1)ExitSub用于退出Sub过程。(2)过程名不具有值的意义,在Sub过程中不能给过程名赋值,也不能给过程名定义类型。(3)Sub过程通过形参表中的参数返回值。(4)Sub过程的建立方法与Function过程的建立方法相同。2.说明(1)ExitSub用于退出Sub过程。(2)过程名不具有值的意义,在Sub过程中不能给过程名赋值,也不能给过程名定义类型。8.2.2Sub过程的调用格式一:Call过程名[(实参表)]格式二:过程名[实参表]说明:(1)过程名:要调用的Sub过程名;(2)实参表:可以是常量、变量或表达式,各参数之间用逗号分隔。如果是数组参数,则要在数组名之后跟一对空括号。(3)用Call语句调用一个Sub过程时,如果过程本身没有参数,则省略实参表和括号。(4)格式二省略了Call关键字,同时实参表两边也不能带括号。【例8-3】用Sub过程实现求1!+3!+5!。OptionExplicitSubFact(NAsInteger,FAsDouble)DimIAsIntegerF=1ForI=1ToNF=F*INextIEndSubPrivateSubCommand1_Click()DimF1AsDouble,F2AsDouble,F3AsDoubleDimsumAsDouble'调用Fact过程求1的阶乘,阶乘值存于实参F1中CallFact(1,F1)'调用Fact过程求3的阶乘,阶乘值存于实参F2中CallFact(3,F2)'调用Fact过程求5的阶乘,阶乘值存于实参F3中CallFact(5,F3)sum=F1+F2+F3Print1!+3!+5!=;sumEndSubSub过程通过参数来返回结果。【例8-4】编写Sub过程,打印以下图形。分析:打印以上图形,不需要返回值,因此无需引入参数。Suba()Fori=1To6PrintTab(7-i);Forj=1To2*i-1Print*;NextjPrintNextiEndSubPrivateSubForm_Click()Calla()EndSub*************************【例8-5】编写Sub过程,求三个数中的最大数和最小数。分析:首先要设置三个参数,如x、y、z,用于接收三个原始数据,另外引入两个参数max和min,用于返回最大和最小数。Subs(x,y,z,max,min)max=xmin=xIfymaxThenmax=yIfyminThenmin=yIfzmaxThenmax=zIfzminThenmin=zEndSubPrivateSubForm_Click()Dimmax,minCalls(5,20,4,max,min)Print最大值是;max;最小值是;minEndSub§8.3参数的传递调用过程与被调用过程之间的一种数据通讯方法。数据的传递可以是单向的,也可以是双向的。8.3.1形参和实参形参:出现在Sub或Function语句中。实参:出现在调用程序中。例如,定义如下一个过程:SubSubTest(nAsInteger,SumAsSingle)…EndSubn和sum是形参。调用语句:CallSubTest(a,s)a和s是实参。说明:•在传递参数时,形参表与实参表中对应参数个数、类型、位置顺序必须一一对应。•形参表中的参数可以是:除固定长度字符串之外的合法变量名、数组名()•实参表中的参数可以是:常量、变量、表达式、数组名()•形参与实参的结合有两种方式:按值传递和按地址传递。8.3.2按值传递和按地址传递1.按值传递实参把其值传递给形参而不传递实参的地址。数据的传递是单向的。(1)当实参为常量或表达式时,数据传递总是单向的。例如:CallSubTest(10,1+2)SubSubTest(nAsInteger,SumAsSingle)其中10和1+2是按值传递的。(2)实参是变量时,要实现按值传递需要在形参之前通过关键字ByVal来实现。【例8-6】请阅读下列程序。SubSS(ByValX,ByValY,ByValZ)X=X+1:Y=Y+1:Z=Z+1EndSubPrivateSubCommand1_Click()A=1:B=2:C=3CallSS(A,B,C)PrintA,B,CEndSub运行时,单击命令按钮在窗体上打印:1232.按地址传递指将实参的地址传给形参,使形参和实参具有相同的地址,即形参与实参共享同一存储单元。(1)当实参为变量或数组时,形参使用关键字ByRef定义(或省略)表示要按地址传递。(2)当参数是数组时,数组名之后必须使用一对空的圆括号。按地址传递可以实现调用过程与子过程之间数据的双向传递。【例8-97】请阅读下列程序。SubSS(ByRefX,ByRefY,ByRefZ)X=X+1:Y=Y+1:Z=Z+1EndSubPrivateSubCommand1_Click()A=1:B=2:C=3CallSS(A,B,C)PrintA,B,CEndSub运行时,单击命令按钮在窗体上打印:234【例8-8】编写一个计算乘幂的Function过程,用来计算x的y次幂,其中y0。单击窗体时调用该过程打印51、52、53、54、55的值。OptionExplicitFunctionPower(xAsSingle,ByValyAsInteger)DimresultAsSingleresult=1DoWhiley0result=result*xy=y-1LoopPower=resultEndFunctionPrivateSubForm_Click()DimiAsIntegerFori=1To5PrintPower(5,i)NextiEndSub思考:如果取消过程Power中参数y前的关键字ByVal,则会出现什么情况?§8.6过程的嵌套在一个过程执行期间又调用另一个过程,称为过程的嵌套调用。【例8-9】用Function过程求1!+2!+3!+…+20!PrivateSubCommand1_Click()DimnAsIntegern=Val(InputBox(n=))PrintSigma(n)'调用Sigma过程EndSubFunctionSigma(nAsInteger)AsDoubleDimiAsInteger,sumAsDoublesum=0Fori=1Tonsum=sum+Fact(i)'调用Fact过程NextiSigma=sumEndFunctionFunctionFact(nAsInteger)AsDoubleDimiAsInteger,fAsDoublef=1Fori=1Tonf=f*iNextiFact=fEndFunction过程的递归调用用自身的结构来描述自身,称递归。例如,对阶乘的定义:┇调用S2┇┇调用过程子过程S1子过程S2┇调用S1┇n!=n*(n-1)!(n-1)!=(n-1)*(n-2)!
本文标题:vb教案(过程与函数)
链接地址:https://www.777doc.com/doc-2854066 .html