《VB子过程子函数》PPT课件.ppt_第1页
《VB子过程子函数》PPT课件.ppt_第2页
《VB子过程子函数》PPT课件.ppt_第3页
《VB子过程子函数》PPT课件.ppt_第4页
《VB子过程子函数》PPT课件.ppt_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

项目四过程编写,1,共74页,主要内容,求组合数函数过程的定义和调用,竞赛评分子过程的定义和调用参数传递可选参数变量的作用域函数过程和子过程的作用域,共74页,2,活动一求组合数,活动说明某班有m名学生,要选派n名学生参加合唱队,计算有多少种选派方法。程序界面如图所示。,共74页,3,活动一求组合数,活动分析本例是一个计算组合数的例子,可以利用如下组合数公式进行计算:在组合公式中,三次用到了求阶乘,其算法相同。对于算法相同的程序段,可以独立编写成函数过程。在程序中用到这段程序时,只需调用这一函数过程。,共74页,4,函数过程的定义、调用-1,函数(Function)过程的定义、调用定义函数过程函数过程定义的格式:Private|PublicFunction()As=或ReturnExitFunction=或ReturnEndFunction,共74页,5,学习支持,函数过程返回值的数据类型,函数过程的定义、调用-2,函数过程由Function语句声明它的名称、参数以及构成其主体的代码Private|Public:用于指出函数过程被调用的范围。Public表示函数过程是公共(全局)过程,Public函数过程可在整个项目内被调用。Private函数过程是局部过程,只能被包含其声明的窗体或模块调用。省略时,系统默认为是“Private”。,共74页,6,学习支持,函数过程的定义、调用-3,参数列表:指明了参数类型和个数。每个参数的格式为:ByVal|ByRef()As在定义函数过程时,“参数列表”中的参数为形式参数(Formalparameter。形参只能是变量名或数组名(数组名后加“()”),定义时没有值,参数名之间用逗号分隔。函数过程没有参数时,函数过程名后的括号不能省。当参数为类、数组、接口、字符串类型时,默认的参数传递方式是按地址传递。,共74页,7,学习支持,表示其后的参数是按值传递还是按地址传递,参数类型,函数过程的定义、调用-4,“As”:定义函数过程返回值的数据类型。如省略,则为Variant。函数过程直接返回一个值到调用处,因此在函数过程体中至少要对“函数过程名”赋一次值;或用Return(表达式)。“ExitFunction”:退出函数过程。,共74页,8,学习支持,函数过程的定义、调用-5,定义函数过程的操作利用命令定义函数过程在代码窗口中,将光标置于所有过程之外,右击鼠标,在快捷菜单中单击“插入代码段”命令,在弹出的下拉列表中,双击“通用代码模式”选项。在弹出的列表中双击“属性和过程”命令。在弹出的第三级下拉列表中双击“定义函数”命令。由此建立了一个函数过程的模板,在其中输入函数过程代码。模板中的函数名可以更改。在代码窗口定义函数过程在代码窗口所有过程之外,直接输入定义函数过程的代码。,共74页,9,学习支持,函数过程的定义、调用-6,函数过程的调用函数过程的调用和标准函数相同,格式如下:函数过程名(参数列表)参数列表:列表中的参数称为实际参数(Actualparameter),简称实参。实参的个数、位置、类型与形参完全一致。实参可以是同类型的常量、变量和表达式。如果是数组,省略维数和括号。与标准函数一样,函数过程不能作为单独的语句使用,只能作为表达式或表达式中的一部分。,共74页,10,学习支持,函数过程的定义、调用-7,例4-1-1:编写计算n!的函数过程。n!=n(n-1)(n-2)21分析:编写计算n!的函数过程,n是一个自变量。因此在函数过程中,将n作为一个参数。,共74页,11,学习支持,函数过程的定义、调用-8,在代码窗口的窗体模块声明段中定义函数过程:,共74页,12,学习支持,PublicClassForm1PublicFunctionfactorial(ByvalnAsInteger)AsDoubleDimtasDouble,iAsIntegert=1Fori=1Tont=t*iNextiReturntEndFunctionEndClass,函数过程的定义、调用-9,共74页,13,学习支持,单击“计算”按钮的事件过程:PrivateSubButton1_Click(ByValsenderAsObject,_ByValeAsSystem.EventArgs)HandlesButton1.ClickLabel3.Text=factorial(Val(TextBox1.Text)EndSub单击“清除”按钮的事件过程:,PrivateSubButton2_Click(ByValsenderAsObject,_ByValeAsSystem.EventArgs)HandlesButton2.ClickTextbox1.Text=Label3.Text=EndSub,函数过程的定义、调用-10,提示:Label3.Text=factorial(Val(TextBox1.Text)中的Val(TextBox1.Text)是实参。下面是形参与实参的关系Label3.Text=factorial(Val(TextBox1.Text)PublicFunctionfactorial(ByValnAsInteger)AsDouble,共74页,14,学习支持,函数过程的定义、调用-11,提示:调用函数过程的程序,称为主调程序或主程序。下图说明了在主程序中调用函数过程的运行情况主程序调用调用点执行函数过程返回主程序,共74页,15,调用函数过程,学习支持,函数过程的定义、调用-12,共74页,16,例4-1-2:计算1n的和及平均数。要求:单击求和按钮,求1n的和,结果显示在标签框中;单击求均数按钮,求1n的平均数,结果显示在标签框中。界面设计如下图。,学习支持,函数过程的定义、调用-13,分析:无论是求和,还是求均数,都要计算出1n个数的和。将求和的程序作为一个函数过程定义。在求和或求均数时,调用这段程序。n的值决定了计算的项数,是一个自变量。因此在函数过程中,将n作为一个参数。因为在同一个窗体的两个事件过程中调用求和程序,所以在代码窗口的窗体模块声明段中编写定义求和的函数过程,共74页,17,学习支持,函数过程的定义、调用-14,共74页,18,PublicClassForm1PrivateFunctionsum(ByValnAsInteger)AsLongDimtAsLong,iAsIntegert=0Fori=1Tont=t+iNextisum=tEndFunctionEndClass,学习支持,初始化变量,将结果赋给函数过程,函数过程的定义、调用-15,单击“求和”按钮的事件过程:单击“求均数”按钮的事件过程:,共74页,19,PrivateSubButton1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesButton1.ClickLabel2.Text=1这样增加了过程调用的灵活性。,共74页,38,学习支持,可选参数-2,在定义函数过程和子过程中,要将参数定义为可选参数,在形参前加关键字Optional。可选参数在定义时,必须注意:一个形参定义为可选参数后,参数列表中其后定义的形参也必须是可选参数。因此,定义为可选参数的形参一般放在参数列表的后部。定义为可选参数的形参,必须指出其类型和默认值。在调用有可选参数的过程时,在可选参数处可以提供实参也可不提供实参。提供实参时,用实参的值;不提供实参时,用定义形参时的默认值。,共74页,39,学习支持,可选参数-3,例4-2-3:定义一个求三个数和的函数过程,将第三个参数定义为可选参数。界面设计如图4-2-4所示。,共74页,40,学习支持,可选参数-4,在代码窗口的窗体模块声明段中定义函数过程Tsum:,共74页,41,PrivatefunctionTsum(ByvalaAsInteger,ByValbasInteger,OptionalByValcasInteger=0)AsIntegerTsum=a+b+cEndFunction,在函数过程Tsum定义时,将第三个参数c定义为可选参数。,学习支持,可选参数-5,单击“求两个数之和”按钮的事件过程:,共74页,42,PrivateSubButton1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimxAsInteger,yAsIntegerx=InputBox(输入第一个数)y=InputBox(输入第二个数)Label1.Text=Str(Tsum(x,y)EndSub,学习支持,可选参数-6,单击“求三个数之和”按钮的事件过程:,共74页,43,学习支持,PrivateSubButton2_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesButton2.ClickDimxAsInteger,yAsInteger,zAsIntegerx=InputBox(输入第一个数)y=InputBox(输入第二个数)z=InputBox(输入第三个数)Label2.Text=Str(Tsum(x,y,z)EndSub,可选参数-7,用数组参数作为可变参数在VB.NET中,还可以将过程中的最后一个形参定义成能接受任意多个实参的形式,这个形参接受实参的个数是可变的。在定义过程时在形参前加关键字ParamArray。注意,关键字ParamArray只能用于参数列表中的最后一个形参前或只有一个参数的过程,且不能与关键字ByRef或Optional同时使用。格式为:Function函数过程名(ParamArray数组名()As数据类型)Sub过程名(ParamArray数组名()As数据类型),共74页,44,学习支持,可选参数-8,例4-2-4:将例4-2-3求三个数和的函数过程改成求任意个数和的函数过程,只要将函数过程Tsum中的形参修改为:无论有几个参数都可用Sum函数过程,VB.NET会自动创建一个过程内的数组,如本例中的数组a。其元素的个数自动与实参个数相同。注意:用实参来替换形参ParamArray数组时,实参可以是一组数据,也可是数组。,共74页,45,PrivatefunctionSum(ByvalParamArraya()AsInteger)AsIntegerDimiAsIntegerFori=0toUBound(a)Sum=Sum+a(i)NextiEndFunction,学习支持,变量的作用域-1,VB.NET中有三种类型模块:窗体、标准和类。VB.NET的应用程序由若干个窗体模块(ClassForm)、若干个标准模块(Module)、若干个类模块(Class)组成。一个VB.NET应用程序的组成如下图所示:,共74页,46,学习支持,变量的作用域-2,变量的作用域变量的有效使用范围称为变量的作用域。按变量作用域从小到大,变量可分为块级变量、过程级变量、模块级变量、全局变量。块级变量某一语句块中声明的变量,只能在该语句块中使用。例如,在分支语句或循环语句中用Dim声明的变量,只能在声明的分支语句或循环语句中使用。,共74页,47,学习支持,变量的作用域-3,过程级变量在某一过程内用Dim或Static语句声明的变量为过程级变量,也称局部变量。其作用域仅在声明它的过程内。不能在过程中使用Public声明变量。例4-2-5:过程级变量(局部变量)。输入两个整数,用两个按钮的单击事件过程分别求两个整数的和及平均数。程序运行结果如图:,共74页,48,单击“求和”命令按钮后,单击“求均数”命令按钮后,学习支持,变量的作用域-4,“求和”按钮单击事件过程:,共74页,49,PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimxAsInteger,yAsInteger,sumAsIntegerx=Val(InputBox(输入第一个数)y=Val(InputBox(输入第二个数)sum=x+yLabel1.Text=sumEndSub,x、y为本过程声明变量,学习支持,变量的作用域-5,“求均数”按钮单击事件过程,共74页,50,PrivateSubButton2_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesButton2.ClickDimaveAsSingle,xAsInteger,yAsIntegerave=(x+y)/2Labell.Text=aveEndSub,x、y为本过程声明变量,学习支持,变量的作用域-6,Button1_Click事件过程中用Dim语句说明的变量x和y,是该事件过程中的局部变量。当执行该事件过程时,系统自动为x和y分配内存单元,并进行初始化(初始化的值为0)。用InputBox函数输入x、y的值后,x、y的值分别存放在系统分配的内存单元中。该事件过程执行结束后,系统立即释放x、y占用的内存单元,它们的值也不存在了。如果再次执行该事件过程时,系统又重新为变量分配内存单元和初始化变量。,共74页,51,学习支持,变量的作用域-7,Button2_Click事件过程中,也声明了变量x、y。注意:此处的x、y非Button1_Click事件过程中的x、y,而是Button2_Click事件过程中的局部变量。在执行该过程时,显示的结果为0。因为Button2_Click的事件过程中出现的变量x、y,在Button2_Click的事件过程中没有赋值,x、y为0,所以它们的平均数也为0。在事件过程中声明的过程级变量,其作用域为本过程。在不同的事件过程中,可以用同名的过程级变量,因为它们只在自己的过程中起作用,不会影响其它过程。在程序设计中,只需在某个过程中使用的变量,最好声明为过程级变量(局部变量)。,共74页,52,学习支持,变量的作用域-8,静态变量用Static语句声明的变量为静态变量。静态变量在该事件过程执行结束后,不释放所占用的内存单元。在下一次执行该事件过程时,系统不对静态变量进行初始化,因此,静态变量保存了上一次执行事件过程后的结果。Static语句只能出现在事件过程、子过程和函数过程中。,共74页,53,学习支持,变量的作用域-9,例4-2-6:单击按钮,变量x的值加1。分别用Static语句和Dim语句声明变量x,观察结果例4-2-6程序1:x声明为静态变量(StaticxasInteger)x声明为静态变量时,静态变量x的值在执行事件过程后被保存;再次单击按钮执行事件过程时,不对x初始化,用前一次执行事件过程后的x的值加1例4-2-6程序2:x为非静态变量(DimxasInteger)x为非静态变量时,每次执行事件过程时非静态变量x都被初始化,前一次执行事件过程后x的值也不复存在。,共74页,54,变量的作用域-10,模块级变量在VB.NET中,有窗体模块、类模块和模块。在模块内所有过程外,用Dim语句或Private语句声明的变量,为模块级变量。这些变量可以在声明的模块中的任何过程中使用;而在其它模块中无效。只要将例4-2-5中变量x、y放在本窗体模块的代码声明段中用Private或Dim语句声明,即可达到题目要求。,共74页,55,学习支持,变量的作用域-11,全局变量在模块的所有过程外,用Public语句声明的变量,为全局(公共)变量。全局变量可以在应用程序的所有模块中使用,不会被初始化。只有应用程序结束时,全局变量才释放所占的内存单元。使用全局变量时应注意:在声明全局变量的模块以外的其它模块的过程中使用该全局变量,应在全局变量名前加声明该全局变量的窗体模块名或模块名。例如:在Form1中用关键字Public声明了变量qq,在其它模块中使用时,应写成:Form1.qq,而不能写成qq。,共74页,56,学习支持,函数过程和子过程的作用域,函数过程和子过程的作用域过程的作用域分为:模块级和全局级模块级过程在窗体或标准模块内定义函数过程或子过程时,在其声明语句(Sub语句或Function语句)前加上关键字Private,则称过程为模块级过程。这些过程只能被本窗体(在本窗体内定义)或本标准模块(在本标准模块内定义)中的过程调用。全局级过程在窗体或标准模块内定义函数过程或子过程时,在其声明语句(Sub语句或Function语句)前加上关键字Public,则称过程为全局级(公用)过程。全局级过程可供该应用程序的所有窗体和所有标准模块中的过程调用。,共74页,57,学习支持,子过程与函数过程之间的区别-1,例4-2-7:分别用子过程和函数过程编写计算求前n项和的程序。公式如下:progression=当=esp)t=t*x2/(n-1)*n)sum=sum+tn=n+2LoopEndSub,编程实践,子过程与函数过程之间的区别-3,定义为函数过程,共74页,60,PublicFunctionprogression2(ByValx!,ByValesp#)AsDoubleDimn%,s#,t#n=2:s=1:t=1DoWhile(Math.Abs(t)=esp)t=t*x2/(n-1)*n)s=s+tn=n+2LoopProgression2=sEndFunction,编程实践,子过程与函数过程之间的区别-4,注意:与子过程progresssion相比,函数过程少一个形参不是所有的子过程都可以用函数过程定义的,但所有的函数过程均可用子过程定义。,共74页,61,编程实践,子过程与函数过程之间的区别-5,提示:函数过程有返回值,因此函数过程要定义类型。另外,还必须在函数过程体中给函数过程名赋值因为子过程没有值,所以子过程名也就不需要定义类型,也不能在过程体中给子过程名赋值。调用函数过程有返回值,因此象内部函数一样只能出现在表达式或语句中,不能单独出现。子过程的调用相当于一个语句。,共74页,62,编程实践,编程实现-1,活动二在学习支持中

温馨提示

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

评论

0/150

提交评论