收藏 分销(赏)

VB子过程子函数.ppt

上传人:s4****5z 文档编号:10391782 上传时间:2025-05-26 格式:PPT 页数:65 大小:1.42MB
下载 相关 举报
VB子过程子函数.ppt_第1页
第1页 / 共65页
VB子过程子函数.ppt_第2页
第2页 / 共65页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,共,74,页,*,大学,VB.NET,程序设计实践教程(第三版),项目四 过程编写,项目四,过程编写,1,共,74,页,主要内容,求组合数,函数过程的定义和调用,竞赛评分,子过程的定义和调用,参数传递,可选参数,变量的作用域,函数过程和子过程的作用域,共,74,页,2,活动一,求组合数,活动说明,某班有,m,名学生,要选派,n,名学生参加合唱队,计算有多少种选派方法。程序界面如图所示。,共,74,页,3,活动一,求组合数,活动分析,本例是一个计算组合数的例子,可以利用如下组合数公式进行计算:,在组合公式中,三次用到了求阶乘,其算法相同。对于算法相同的程序段,可以独立编写,成函数,过程。在程序中用到这段程序时,只需调用这一,函数,过程。,共,74,页,4,函数过程的定义、调用,-1,函数(,Function,)过程的定义、调用,定义函数过程,函数过程定义的格式:,Private|Public Function,()As,=,或,Return ,Exit Function,=,或,Return ,End Function,共,74,页,5,学习支持,函数过程返回值的数据类型,函数过程的定义、调用,-2,函数过程由,Function,语句声明它的名称、参数以及构成其主体的代码,Private|Public,:,用于指出函数过程被调用的范围。,Public,表示函数过程是公共(全局)过程,,Public,函数过程可在整个项目内被调用。,Private,函数过程是局部过程,只能被包含其声明的窗体或模块调用。省略时,系统默认为是“,Private,”。,共,74,页,6,学习支持,函数过程的定义、调用,-3,参数列表:指明了参数类型和个数。,每个参数的格式为:,ByVal|ByRef()As,在定义函数过程时,,“参数列表”中的参数为形式参数,(,Formal parameter,。形参只能是,变量名,或,数组名,(数组名后加“,(),”),定义时没有值,参数名之间用逗号分隔。,函数过程没有参数时,函数过程名后的括号不能省。,当参数为,类、数组、接口、字符串类型,时,默认的参数传递方式是,按地址传递,。,共,74,页,7,学习支持,表示其后的参数是按值传递,还,是按地址传递,参数,类型,函数过程的定义、调用,-4,“,As,”,:定义函数过程返回值的数据类型。如省略,则为,Variant,。,函数过程直接返回一个值到调用处,因此,在函数过程体中至少要对,“,函数过程名,”,赋一次值,;或,用,Return (,表达式,),。,“,Exit Function,”,:退出函数过程。,共,74,页,8,学习支持,函数过程的定义、调用,-5,定义函数过程的操作,利用命令定义函数过程,在代码窗口中,将光标置于所有过程之外,右击鼠标,在快捷菜单中单击“,插入代码段,”命令,在弹出的下拉列表中,双击“,通用代码模式,”选项。在弹出的列表中双击“,属性和过程,”命令。在弹出的第三级下拉列表中双击“,定义函数,”命令。由此建立了一个函数过程的模板,在其中输入函数过程代码。模板中的函数名可以更改,。,在代码窗口定义函数过程,在代码窗口所有过程之外,直接输入定义函数过程的代码。,共,74,页,9,学习支持,函数过程的定义、调用,-6,函数过程的调用,函数过程的调用和标准函数相同,格式如下:,函数过程名,(,参数列表,),参数列表:列表中的参数称为,实际参数,(Actual parameter),,简称实参。实参的个数、位置、类型与形参完全一致。实参可以是同类型的常量、变量和表达式。如果是数组,省略维数和括号。,与标准函数一样,,函数过程不能作为单独的语句使用,只能作为表达式或表达式中的一部分,。,共,74,页,10,学习支持,函数过程的定义、调用,-7,例,4-1-1,:,编写计算,n,!的函数过程。,n!=n,(n-1),(n-2),2,1,分析:编写计算,n,!的函数过程,,n,是一个自变量。因此在函数过程中,将,n,作为一个参数。,共,74,页,11,学习支持,函数过程的定义、调用,-8,在代码窗口的窗体模块声明段中定义函数过程:,共,74,页,12,学习支持,Public Class Form1,Public Function,factorial,(,Byval n As Integer,)As,Double,Dim t as Double,i As Integer,t=1,For i=1 To n,t=t*i,Next i,Return,t,End Function,End Class,函数过程的定义、调用,-9,共,74,页,13,学习支持,单击“计算”按钮的事件过程:,Private Sub Button1_Click(ByVal sender As Object,_,ByVal e As System.EventArgs)Handles Button1.Click,Label3.Text=factorial(Val(TextBox1.Text),End Sub,单击,“,清除,”,按钮的事件过程:,Private Sub Button2_Click(ByVal sender As Object,_,ByVal e As System.EventArgs)Handles Button2.Click,Textbox1.Text=,Label3.Text=,End Sub,函数过程的定义、调用,-10,提示,:,Label3.Text=factorial(Val(TextBox1.Text),中的,Val(TextBox1.Text),是实参。下面是形参与实参的关系,Label3.Text=factorial(,Val(TextBox1.Text),),Public Function factorial(,ByVal n As Integer,)As Double,共,74,页,14,学习支持,函数过程的定义、调用,-11,提示,:,调用函数过程的程序,称为主调程序或主程序。下图说明了在主程序中调用函数过程的运行情况,主程序,调用,调用点,执行函数过程,返回主程序,共,74,页,15,调用函数过程,学习支持,函数过程的定义、调用,-12,共,74,页,16,例,4-1-2,:,计算,1,n,的和及平均数。要求:单击求和按钮,求,1,n,的和,结果显示在标签框中;单击求均数按钮,求,1,n,的平均数,结果显示在标签框中。界面设计如下图。,学习支持,函数过程的定义、调用,-13,分析:,无论是求和,还是求均数,都要,计算出,1,n,个数的和,。将求和的程序作为一个函数过程定义。在求和或求均数时,调用这段程序。,n,的值决定了计算的项数,是一个自变量。因此在函数过程中,将,n,作为一个参数,。,因为在同一个窗体的两个事件过程中调用求和程序,所以在代码窗口的,窗体模块声明段,中编写定义求和的函数过程,共,74,页,17,学习支持,函数过程的定义、调用,-14,共,74,页,18,Public Class Form1,Private Function,sum,(ByVal n As Integer)As Long,Dim t As Long,i As Integer,t=0,For i=1 To n,t=t+i,Next i,sum=t,End Function,End Class,学习支持,初始化变量,将结果赋给函数过程,函数过程的定义、调用,-15,单击“求和”按钮的事件过程:,单击“求均数”按钮的事件过程:,共,74,页,19,Private Sub Button1_Click(ByVal sender As Object,ByVal e As System.EventArgs)Handles Button1.Click,Label2.Text=1,&TextBox1.Text&,的和,Label3.Text,=sum(Val(TextBox1.Text),调用函数过程,End Sub,Private Sub Button2_Click(ByVal sender As Object,ByVal e As System.EventArgs)Handles Button2.Click,Label2.Text=1,&TextBox1.Text&,的均数,Label3.Text=sum(Val(TextBox1.Text)/Val(TextBox1.Text),End Sub,编程实现,-1,在例,4-1-1,中已定义了计算阶乘的函数过程,factorial,。在活动一的求组合数中,可以调用这一函数过程。,在活动一的单击“计算”按钮的事件过程中,调用,factorial,函数过程,计算组合数,共,74,页,20,编程实践,编程实现,-2,程序代码如下:,共,74,页,21,Private Sub Button1_Click(ByVal sender As Object,ByVal e As System.EventArgs)Handles Button1.Click,Dim m As Integer,n As Integer,c As Double,m=Val(TextBox1.Text),n=Val(TextBox2.Text),c=factorial(m)/(factorial(n)*factorial(m-n),Label3.Text=,共有,&c&,种选派方法,End Sub,调用,factorial,函数过程,编程实践,共,74,页,22,活动二 竟,赛,评,分,活动说明,在竞赛活动中,有十位评委为选手评分。在十位评委的评分中,去掉一个最高分和一个最低分,再计算出选手的平均分。,共,74,页,23,活动二 竞赛评,分,活动分析,在本活动中,十位评委给出分数后,要去掉最低分和最高分。简单的办法是:将十个分数排序,去掉排序后的第一个和最后一个分数。,在评委给每位选手评分后,用排序程序将选手得分排序。对于多次使用的排序程序,编写一段通用程序,像函数过程一样,一次定义,多处使用,。,这个问题与函数过程有所不同,它最终不是得到一个值,而是完成一组数据排序的功能。,共,74,页,24,子过程的定义和调用,-1,子过程,函数过程,调用的结果是,得到一个函数值,。在实际应用中,有时是,要完成某一种功能,无须返回一个值,。在,VB.NET,中也可以像函数过程一样,将程序中多次重复使用的程序代码抽出来,使之成为一段独立的程序并给它一个名字。需要使用这段,程序,时,只要用它的名字来调用即可,这段程序代码称为,子过程,。,共,74,页,25,学习支持,子过程的定义和调用,-2,子过程是取了名字的一段程序代码,它通常完成一个独立的(子)功能,。在主程序中通过子过程的名来使用(调用)子过程。子过程执行结束后,自动返回主程序的调用点,继续执行调用点后的程序代码。,子过程与函数过程的,性质基本相同,,它们之间的区别是:,子过程名不带值;而函数过程名带值,。,共,74,页,26,学习支持,子过程的定义和调用,-3,子过程的定义,子过程定义语句的格式:,Private|Public Sub(),Exit Sub,子过程体,End Sub,格式中的,“,子过程名,”,、,“,参数列表,”,、,“,Public,”,、,“,Private,”,、,“,Exit,”,的含义与函数过程中的相同,共,74,页,27,学习支持,子过程的定义和调用,-4,建立子过程的操作与函数过程相同,子过程的调用,调用子过程的两种格式:,Call,子过程名,(),子过程名(,),说明:,调用子过程是一个独立的语句。,若实参要获得子过程的返回值,则形参必须是“传址”方式(,ByRef,);实参只能是变量,不能是常量、表达式或控件名。,共,74,页,28,学习支持,子过程的定义和调用,-5,将活动二中,排序,程序定义为一个,子过程,。将这段程序放在代码窗口的窗体模块声明段中定义,然后在其他的事件过程中调用。定义子过程,sort,:,共,74,页,29,学习支持,Public Sub sort(ByRef a()As Integer),Dim i As Integer,j As Integer,t As Integer,For i=0 To UBound(a)-1,For j=i+1 To UBound(a),If a(i)a(j)Then,t=a(i),a(i)=a(j),a(j)=t,End If,Next j,Next i,End Sub,参数传递,-1,在调用函数过程和子过程时,在调用语句处由,实参向形参传递数据后,执行函数过程和子过程程序,。,形参是在子过程或函数过程的定义中出现的变量名,实参则是在调用子过程或函数过程时传送给子过程或函数过程的常数、变量、表达式或数组。,在,VB.NET,中,实参和形参的数据传递有两种方式:,传址(,ByRef,),又称为,引用,和,传值(,ByVal,),。区分两种参数传送方式的方法是在定义的形参前加,“,ByRef,”,或,“,ByVal,”,关键字。,共,74,页,30,学习支持,参数传递,-2,传址方式,传址是将实参的地址传递给形参,在调用语句处,,将实参变量的内存地址传递给被调用过程的形参,形参用得到的地址(实参的地址)访问变量,。因此,,如果在过程体中改变形参的值,实际上被改变的是实参的值,。,传址方式是通过关键字,ByRef,来定义的。在定义函数过程或子过程时,如果形参前面有关键字,ByRef,,表示该参数用传地址的方式传送,共,74,页,31,学习支持,参数传递,-3,例,4-2-1,:编写分别改变两个自变量的值,第一个变量为两个变量和,第二个变量为两个变量积,并打印两个变量的子过程。参数传送采用“传址”方式。,在单击窗体事件过程中对两个变量(实参)赋值,并显示两个变量(实参)的值;调用子过程后,再显示两个变量(实参)的值;观察实参值的变化。,共,74,页,32,学习支持,参数传递,-4,在代码窗口的窗体模块声明段中定义子过程,Change,:,共,74,页,33,Sub Change(,ByRef,x As Integer,ByRef,y As Integer),x=x+y,y=x*y,End Sub,Private Sub Form1_Click(ByVal sender As Object,ByVal e As System.EventArgs)Handles Me.Click,Dim a As Integer,b As Integer,a=10:b=20,Label1.Text=,调用前:,&a=&Str(a)&b=&Str(b),Change(a,b),Label2.Text=,调用后:,&a=&Str(a)&b=&Str(b),End Sub,学习支持,参数传递,-5,提示,:,在子过程,change,中,参数,x,、,y,采用的是传址方式。在单击窗体事件过程中,调用子过程,change(a,、,b),,将实参,a,、,b,的地址传给形参,x,、,y,。在调用子过程时,用地址去访问,,真正被访问的就是实参,a,、,b,。因此,,在子过程体中形参,x,、,y,的值被改变,从而改变了实参,a,、,b,的值,。从程序运行的结果可以看出,实参,a,、,b,的值被改变了。,共,74,页,34,学习支持,参数传递,-6,传值方式,在调用带参数的函数过程或子过程时,将实参的值复制给函数过程(或子过程)的形参,称为值传递(传值)。实际上,形参只是实参的一个副本,无论函数过程体中形参的值怎样变化,实参的值均不受影响,。在,Visual Basic.NET,中,传值方式通过在形参前加关键字,ByVal,或省略来实现。,共,74,页,35,学习支持,参数传递,-7,例,4-2-2,:将例,4-2-1,中参数传递改为传值方式。只要将子过程,change,中形参,x,、,y,前的,ByRef,换成,ByVal,。,对事件过程,Form_Click,未作任何修改。,由此可见,传值方式没有改变实参,a,和,b,的原有值。,共,74,页,36,Sub change(,ByVal,x As Integer,ByVal,y As Integer),x=x+y,y=x*y,End Sub,学习支持,参数传递,-8,注意,:,在传值方式中,形参和实参分别占有不同的内存单元,形参值的变化不会影响实参的值。,在传址方式中,形参与实参占有相同的内存单元。因此,当形参的值发生变化时,实参的值也随之而变。,数组,作为过程的参数时,可以定义为传址或传值,但,系统按传址方式处理,。,ByVal,方式下,形参数组值改变影响实参数组,但若对形参数组使用了,ReDim,,则形参数组获得新的存储空间,不再影响实参数组;,ByRef,方式下,形参数组的所有改变均影响实参数组,。,共,74,页,37,学习支持,可选参数,-1,可选参数,用关键字,Optional,指定可选参数,一般情况下,,函数过程和子过程中形参的个数是固定的,在调用时实参的个数也是固定的,。但,Visual Basic 2005,中,定义函数过程和子过程时可以将,一部分形参定义成可选参数,;,在调用时,可以给可选参数提供实参,也可以不提供实参,;,这样增加了过程调用的灵活性。,共,74,页,38,学习支持,可选参数,-2,在定义函数过程和子过程中,要将参数定义为可选参数,在形参前加关键字,Optional,。可选参数在定义时,必须注意:,一个形参定义为可选参数后,参数列表中其后定义的形参也必须是可选参数。因此,,定义为可选参数的形参一般放在参数列表的后部,。,定义为可选参数的形参,必须指出其类型和默认值,。,在调用有可选参数的过程时,在可选参数处可以提供实参也可不提供实参。,提供实参时,用实参的值,;,不提供实参时,用定义形参时的默认值,。,共,74,页,39,学习支持,可选参数,-3,例,4-2-3,:定义一个求三个数和的函数过程,将第三个参数定义为可选参数。界面设计如图,4-2-4,所示。,共,74,页,40,学习支持,可选参数,-4,在代码窗口的窗体模块声明段中定义函数过程,Tsum,:,共,74,页,41,Private function,Tsum(Byval a As Integer,ByVal b as Integer,Optional ByVal c as Integer=0,)As Integer,Tsum=a+b+c,End Function,在函数过程,Tsum,定义时,将第三个参数,c,定义为可选参数。,学习支持,可选参数,-5,单击,“,求两个数之和,”,按钮的事件过程:,共,74,页,42,Private Sub Button1_Click(ByVal sender As Object,ByVal e As System.EventArgs)Handles Button1.Click,Dim x As Integer,y As Integer,x=InputBox(,输入第一个数,),y=InputBox(,输入第二个数,),Label1.Text=,Str(Tsum(x,y),End Sub,学习支持,可选参数,-6,单击,“,求三个数之和,”,按钮的事件过程:,共,74,页,43,学习支持,Private Sub Button2_Click(ByVal sender As Object,ByVal e As System.EventArgs)Handles Button2.Click,Dim x As Integer,y As Integer,z As Integer,x=InputBox(,输入第一个数,),y=InputBox(,输入第二个数,),z=InputBox(,输入第三个数,),Label2.Text=,Str(Tsum(x,y,z),End Sub,可选参数,-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,Private function,Sum(Byval,ParamArray,a()As Integer)As Integer,Dim i As Integer,For i=0 to UBound(a),Sum=Sum+a(i),Next i,End Function,学习支持,变量的作用域,-1,VB.NET,中有三种类型模块:,窗体、标准和类,。,VB.NET,的应用程序由若干个窗体模块,(Class Form),、若干个标准模块(,Module,)、若干个类模块,(Class),组成。一个,VB.NET,应用程序的组成如,下,图所示,:,共,74,页,46,VB,应用程序,一个或多个窗体模块,事件过程,自定义子过程,自定义函数过程,一个或多个的标准模块,自定义子过程,自定义函数过程,学习支持,变量的作用域,-2,变量的作用域,变量的,有效使用范围,称为变量的作用域。,按变量作用域从小到大,变量可分为,块级变量,、,过程级变量,、,模块级变量,、,全局变量,。,块级变量,某一语句块中声明的变量,只能在该语句块中使用,。例如,在分支语句或循环语句中用,Dim,声明的变量,只能在声明的分支语句或循环语句中使用。,共,74,页,47,学习支持,变量的作用域,-3,过程级变量,在某一过程内用,Dim,或,Static,语句声明的变量为过程级变量,也称局部变量,。其作用域仅在声明它的过程内。不能在过程中使用,Public,声明变量。,例,4-2-5,:过程级变量(局部变量)。输入两个整数,用两个按钮的单击事件过程分别求两个整数的和及平均数。程序运行结果如图,:,共,74,页,48,单击“求和”命令按钮后,单击“求均数”命令按钮后,学习支持,变量的作用域,-4,“,求和,”,按钮单击事件过程:,共,74,页,49,Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles Button1.Click,Dim x As Integer,y As Integer,sum As Integer,x=Val(InputBox(,输入第一个数,),y=Val(InputBox(,输入第二个数,),sum=x+y,Label1.Text=sum,End Sub,x,、,y,为本过程,声明变量,学习支持,变量的作用域,-5,“,求均数”按钮单击事件过程,共,74,页,50,Private Sub Button2_Click(ByVal sender As Object,ByVal e As System.EventArgs)Handles Button2.Click,Dim ave As Single,x As Integer,y As Integer,ave=(x+y)/2,Labell.Text=ave,End Sub,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,声明为静态变量,(Static x as Integer),x,声明为静态变量,时,,静态变量,x,的值在执行事件过程后被保存;再次单击按钮执行事件过程时,不对,x,初始化,用前一次执行事件过程后的,x,的值加,1,例,4-2-6,程序,2,:,x,为非静态变量,(Dim x as Integer),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+t,n=n+2,Loop,End Sub,编程实践,子过程与函数过程之间的区别,-3,定义,为,函数过程,共,74,页,60,Public,Function progression2,(ByVal x!,ByVal esp#)As Double,Dim n%,s#,t#,n=2:s=1:t=1,Do While(Math.Abs(t)=esp),t=t*x2/(n-1)*n),s=s+t,n=n+2,Loop,Progression2=s,End Function,编程实践,子过程与函数过程之间的区别,-4,注意,:,与子过程,progresssion,相比,函数过程少一个形参,不是所有的子过程都可以用函数过程定义的,但所有的函数过程均可用子过程定义,。,共,74,页,61,编程实践,子过程与函数过程之间的区别,-5,提示,:,函数过程有返回值,因此函数过程要定义类型。另外,还必须在函数过程体中给函数过程名赋值,因为子过程没有值,所以,子过程名也就不需要定义类型,也不能在过程体中给子过程名赋值,。,调用函数过程有返回值,因此象内部函数一样只能出现在表达式或语句中,不能单独出现。子过程的调用相当于一个语句,。,共,74,页,62,编程实践,编程实现,-1,活动二,在学习支持中已将活动二排序程序定义为一个子过程。在程序中评委亮分后,需要调用该子过程,以完成活动二的要求。,在代码窗口的窗体模块声明段中声明存放分数的数组,c,。,单击,“,评委亮分,”,按钮的事件过程:,共,74,页,63,Dim c(9)As Integer,Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles Button1.Click,Dim i As Integer,For i=0 To 9,c(i)=Int(Rnd()*100),随机产生,10,个分数,Next i,Call sort(c),调用排序子过程,End Sub,编程实践,编程实现,-2,单击“去掉最低分”按钮的事件过程:,单击“去掉最高分”按钮的事件过程:,共,74,页,64,Private Sub Button2_Click(ByVal sender As Object,ByVal e As System.EventArgs)Handles,Button2.Click,Label3.Text=CStr(c(0),显示去掉的最低分,End Sub,Private Sub Button3_Click(ByVal sender As Object,ByVal e As System.EventArgs)Handles Button3.Click,Label4.Text=CStr(c(9),显示去掉的最高分,End Sub,编程实践,编程实现,-3,单击“选手得分”按钮的事件过程:,共,74,页,65,Private Sub Button4_Click(ByVal sender As Object,ByVal e As System.EventArgs)Handles Button4.Click,Dim i As Integer,s As Integer,For i=1 To 8,去掉,c,数组中第一个和最后一个元素,,即,去掉的最低、最高分,s=s+c(i),Next i,ave=s/8,Label6.Text=CStr(ave),显示平均分,End Sub,编程实践,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 百科休闲 > 社会民生

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服