背景:                 
[本书目录] [图书首页] [本书讨论区]  
链接地址:http://www.17xie.com/read-3369.html    注册17xie 一起来写书 实现您的出书梦想!

2)编写代码。

Sub triarea (area As Double, x As Double, y As Double, z As Double)

Dim s As Double

    s = (x +y + z) / 2

    area = Sqr ((s - x) * (s - y) * (s - z) * s)

End Sub

             

Sub suberr (intyorn As Integer)

    intyorn = MsgBox ("请检查数据", vbYesNo + vbInformation, "数据错误")

End Sub

 

Private Sub Command1_Click()

Dim a As Double, b As Double, c As Double, s As Double

    Dim intYesorNo As Integer

    a = Val (Text1.Text): b = Val (Text2.Text): c = Val (Text3.Text)

    If a + b > c And b + c > a And c + a > b Then

        Call triarea (s, a, b, c)         '  使用Call关键字,实参用括号括起来

        Picture1.Print " 面积 ="; s

    Else

        suberr intYesorNo            '  不使用Call关键字,实参不用括号

    End If

End Sub

程序运行结果如图5-6所示。

5.2  函数过程

前面介绍了子过程,它不返回值,可以作为独立的基本语句调用。而函数过程要返回一个值,通常出现在表达式中。

Visual Basic包含了许多内部函数,如SinSqrDate。另外用户可以自己定义函数过程。

5.2.1  函数过程的定义

函数过程的定义也有以下两种方法。

1.利用代码窗口直接定义

在窗体或标准模块的代码窗口中,把光标定位在已有过程之外,键入Function函数名即可。定义形式如下:

[Static] [Public|Private] Function 函数名 [形参表] [As 类型]

            [局部变量或常数定义]

            [语句序列]

            [Exit  Function]

            [语句序列]

            函数名=表达式

End  Function

说明:

1 As 类型指定Function过程返回值的类型。若缺省,则返回Variant

2 无论函数有无参数,函数名后的括号不能省略。

3 表达式的值是函数返回的结果。在函数体内至少应该有一条为函数过程名赋值的语句。

4 Exit  Function语句从函数中退出。

Function语法中其他部分的含义与Sub相同。

2.利用“工具”菜单下的“添加过程”命令定义

步骤与定义子过程相似,只是在第3步“类型”组中选取“函数”即可。

5.2.2  调用函数过程

通常,调用自定义函数过程的方法与调用Visual Basic内部函数的方法一样,即在表达式中写上它的名称。

调用函数过程的方法有三种:

1.把函数用于赋值语句,表达式中。

2Call 函数过程名([实参表]

3.函数过程名 实参表

说明:后两种方法都忽略了函数的返回值。

5-2  将例5-1中两个Sub过程改为Function过程。

程序代码为:

Function triarea (x As Double, y As Double, z As Double) As Double

    Dim s As Double, area As Double

    s = (x + y + z) / 2

    area = Sqr ((s - x) * (s - y) * (s - z) * s)

    triarea = area

End Function

 

Function suberr() As Integer

suberr = MsgBox ("请检查数据", vbYesNo + vbInformation, "数据错误")

End Function

 

Private Sub Command1_Click()

    Dim a As Double, b As Double, c As Double, s As Double

    Dim intYesorNo As Integer

    a = Val (Text1.Text): b = Val (Text2.Text): c = Val (Text3.Text)

    If a + b > c And b + c > a And c + a > b Then

    Picture1.Print " 面积 ="; triarea (a, b, c)

    else

    intYesorNo = suberr()         '  无参数时,括号不能省略

    End If

End Sub

5.3  过程中的参数引用

定义Sub过程和Function函数过程中的参数称为形式参数(简称形参),在程序中调用Sub过程和Function函数过程时的参数称为实际参数(简称实参)。过程调用的过程,就是实参与形参结合的过程。

5.3.1  传值与传址

在调用过程时,一般主调过程与被调过程之间有数据传递,即将主调过程的实参传递给被调过程,完成实参与形参的结合,然后执行被调过程体。在Visual Basic中,实参与形参的结合有两种方法:传值与传址。其中传址又称为“引用”,是默认的方法。区分二者的方法是在要使用传值的形参前加“ByVal”。

1.传值

传值的结合过程是:当调用一个过程时,系统将实参的值复制给形参,实参与形参断开了联系。被调用过程中的操作是在形参自己的存储单元中进行,当过程调用结束时,这些形参所占用的存储单元也同时被释放。因此在过程中对形参的任何操作不会影响到实参。

2.传址

传址的结合过程是:当调用一个过程时,它将实参的地址传递给形参。因此在被调过程体中对形参的任何操作都变成了对相应实参的操作,因此实参的值就会随形参的改变而改变。当参数是字符串、数组时,使用传址传递直接将实参的地址传递给过程,会使程序的效率提高。

在传址调用时,实参必须是变量,常量或表达式无法传址。

5-3  编写交换两个数的过程,Swap1用传值传递,Swap2用传址传递。

程序代码如下:

Sub Swap1 (ByVal  x%, ByVal  y%)

t% = x: x = y: y = t

End Sub

 

Sub Swap2 (x%, y%)

t% = x: x = y: y = t

End Sub

 

Private Sub Command1_Click()

a% = 10: b% = 20

    Print "交换前:      "; "A="; a, "B="; b

Swap1 a, b                    '传值

    Print "传值交换后:  ";"A="; a, "B="; b

    a = 10: b = 20

    Swap2 a, b                    '传地址

    Print "传址交换后:  ";"A="; a, "B="; b

End Sub

程序运行结果如图5-7所示。


字数:4634    最后更新:1年以前 [09-06 01:57]我爱钱 修改
本页编辑者:我爱钱  
[前一页]:第五章  [后一页]:第五章
[在本页中加入书签] [收藏本书] [推荐本书]
  17xie论坛 > 本书讨论区 > 本页评论   (共0条)
发表评论

用户名称 匿名发表
评论内容
验证码

关于我们 | 版权声明 | 免责声明 | 诚聘英才 | 联系我们 | 合作伙伴 | 友情链接 | 广告合作 | 提交意见
Copyright © 2007 17xie.com 互联网协同写书平台 京ICP备08002671号