VB子过程子函数.ppt
《VB子过程子函数.ppt》由会员分享,可在线阅读,更多相关《VB子过程子函数.ppt(65页珍藏版)》请在三一办公上搜索。
1、项目四 过程编写,1,共 74 页,主要内容,求组合数函数过程的定义和调用,竞赛评分子过程的定义和调用参数传递可选参数变量的作用域函数过程和子过程的作用域,共 74 页,2,活动一 求组合数,活动说明某班有m名学生,要选派n名学生参加合唱队,计算有多少种选派方法。程序界面如图所示。,共 74 页,3,活动一 求组合数,活动分析 本例是一个计算组合数的例子,可以利用如下组合数公式进行计算:在组合公式中,三次用到了求阶乘,其算法相同。对于算法相同的程序段,可以独立编写成函数过程。在程序中用到这段程序时,只需调用这一函数过程。,共 74 页,4,函数过程的定义、调用-1,函数(Function)过程
2、的定义、调用定义函数过程函数过程定义的格式:Private|Public Function()As=或Return Exit Function=或Return End Function,共 74 页,5,学习支持,函数过程返回值的数据类型,函数过程的定义、调用-2,函数过程由Function语句声明它的名称、参数以及构成其主体的代码Private|Public:用于指出函数过程被调用的范围。Public表示函数过程是公共(全局)过程,Public函数过程可在整个项目内被调用。Private函数过程是局部过程,只能被包含其声明的窗体或模块调用。省略时,系统默认为是“Private”。,共 74
3、页,6,学习支持,函数过程的定义、调用-3,参数列表:指明了参数类型和个数。每个参数的格式为:ByVal|ByRef()As 在定义函数过程时,“参数列表”中的参数为形式参数(Formal parameter。形参只能是变量名或数组名(数组名后加“()”),定义时没有值,参数名之间用逗号分隔。函数过程没有参数时,函数过程名后的括号不能省。当参数为类、数组、接口、字符串类型时,默认的参数传递方式是按地址传递。,共 74 页,7,学习支持,表示其后的参数是按值传递还是按地址传递,参数类型,函数过程的定义、调用-4,“As”:定义函数过程返回值的数据类型。如省略,则为Variant。函数过程直接返回
4、一个值到调用处,因此在函数过程体中至少要对“函数过程名”赋一次值;或用Return(表达式)。“Exit Function”:退出函数过程。,共 74 页,8,学习支持,函数过程的定义、调用-5,定义函数过程的操作利用命令定义函数过程在代码窗口中,将光标置于所有过程之外,右击鼠标,在快捷菜单中单击“插入代码段”命令,在弹出的下拉列表中,双击“通用代码模式”选项。在弹出的列表中双击“属性和过程”命令。在弹出的第三级下拉列表中双击“定义函数”命令。由此建立了一个函数过程的模板,在其中输入函数过程代码。模板中的函数名可以更改。在代码窗口定义函数过程在代码窗口所有过程之外,直接输入定义函数过程的代码。
5、,共 74 页,9,学习支持,函数过程的定义、调用-6,函数过程的调用函数过程的调用和标准函数相同,格式如下:函数过程名(参数列表)参数列表:列表中的参数称为实际参数(Actual parameter),简称实参。实参的个数、位置、类型与形参完全一致。实参可以是同类型的常量、变量和表达式。如果是数组,省略维数和括号。与标准函数一样,函数过程不能作为单独的语句使用,只能作为表达式或表达式中的一部分。,共 74 页,10,学习支持,函数过程的定义、调用-7,例4-1-1:编写计算n!的函数过程。n!=n(n-1)(n-2)21分析:编写计算n!的函数过程,n是一个自变量。因此在函数过程中,将n作为
6、一个参数。,共 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 FunctionEnd Class,函数过程的定义、调用-9,共 74 页,13,学习支持,单击“计算”按钮的事件过程:Private Sub Button1_Cli
7、ck(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.
8、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,共
9、74 页,16,例4-1-2:计算1n的和及平均数。要求:单击求和按钮,求1n的和,结果显示在标签框中;单击求均数按钮,求1n的平均数,结果显示在标签框中。界面设计如下图。,学习支持,函数过程的定义、调用-13,分析:无论是求和,还是求均数,都要计算出1n个数的和。将求和的程序作为一个函数过程定义。在求和或求均数时,调用这段程序。n 的值决定了计算的项数,是一个自变量。因此在函数过程中,将n作为一个参数。因为在同一个窗体的两个事件过程中调用求和程序,所以在代码窗口的窗体模块声明段中编写定义求和的函数过程,共 74 页,17,学习支持,函数过程的定义、调用-14,共 74 页,18,Public
10、 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 FunctionEnd Class,学习支持,初始化变量,将结果赋给函数过程,函数过程的定义、调用-15,单击“求和”按钮的事件过程:单击“求均数”按钮的事件过程:,共 74 页,19,Private Sub Button1_Click(ByVal sender As Object,ByVal e As System.EventArgs)Ha
11、ndles 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,在
12、例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
13、(TextBox2.Text)c=factorial(m)/(factorial(n)*factorial(m-n)Label3.Text=共有&c&种选派方法End Sub,调用factorial函数过程,编程实践,共 74 页,22,活动二 竟赛评分,活动说明在竞赛活动中,有十位评委为选手评分。在十位评委的评分中,去掉一个最高分和一个最低分,再计算出选手的平均分。,共 74 页,23,活动二 竞赛评分,活动分析在本活动中,十位评委给出分数后,要去掉最低分和最高分。简单的办法是:将十个分数排序,去掉排序后的第一个和最后一个分数。在评委给每位选手评分后,用排序程序将选手得分排序。对于多次使用的
14、排序程序,编写一段通用程序,像函数过程一样,一次定义,多处使用。这个问题与函数过程有所不同,它最终不是得到一个值,而是完成一组数据排序的功能。,共 74 页,24,子过程的定义和调用-1,子过程函数过程调用的结果是得到一个函数值。在实际应用中,有时是要完成某一种功能,无须返回一个值。在VB.NET中也可以像函数过程一样,将程序中多次重复使用的程序代码抽出来,使之成为一段独立的程序并给它一个名字。需要使用这段程序时,只要用它的名字来调用即可,这段程序代码称为子过程。,共 74 页,25,学习支持,子过程的定义和调用-2,子过程是取了名字的一段程序代码,它通常完成一个独立的(子)功能。在主程序中通
15、过子过程的名来使用(调用)子过程。子过程执行结束后,自动返回主程序的调用点,继续执行调用点后的程序代码。子过程与函数过程的性质基本相同,它们之间的区别是:子过程名不带值;而函数过程名带值。,共 74 页,26,学习支持,子过程的定义和调用-3,子过程的定义子过程定义语句的格式:Private|Public Sub()Exit Sub 子过程体 End Sub格式中的“子过程名”、“参数列表”、“Public”、“Private”、“Exit”的含义与函数过程中的相同,共 74 页,27,学习支持,子过程的定义和调用-4,建立子过程的操作与函数过程相同子过程的调用调用子过程的两种格式:Call
16、子过程名()子过程名()说明:调用子过程是一个独立的语句。若实参要获得子过程的返回值,则形参必须是“传址”方式(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
17、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 页,3
18、0,学习支持,参数传递-2,传址方式传址是将实参的地址传递给形参,在调用语句处,将实参变量的内存地址传递给被调用过程的形参,形参用得到的地址(实参的地址)访问变量。因此,如果在过程体中改变形参的值,实际上被改变的是实参的值。传址方式是通过关键字ByRef来定义的。在定义函数过程或子过程时,如果形参前面有关键字ByRef,表示该参数用传地址的方式传送,共 74 页,31,学习支持,参数传递-3,例4-2-1:编写分别改变两个自变量的值,第一个变量为两个变量和,第二个变量为两个变量积,并打印两个变量的子过程。参数传送采用“传址”方式。在单击窗体事件过程中对两个变量(实参)赋值,并显示两个变量(实参
19、)的值;调用子过程后,再显示两个变量(实参)的值;观察实参值的变化。,共 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 Label
20、1.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,传值方式 在调用带参数的函数过程或子
21、过程时,将实参的值复制给函数过程(或子过程)的形参,称为值传递(传值)。实际上形参只是实参的一个副本,无论函数过程体中形参的值怎样变化,实参的值均不受影响。在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 A
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB 过程 子函数
链接地址:https://www.31ppt.com/p-6522642.html