分享

计算机技术基础(第九章 过程 )

 図籴帑簤屸璺 2019-07-11

计算机技术基础(VB)






学习内容
 
 
第一节 Function过程
第一节 Function过程
必修
开启
通过
点击进入
第二节 Sub过程
第二节 Sub过程
必修
开启
通过
点击进入
第三节 过程的嵌套
第三节 过程的嵌套
必修
开启
通过
点击进入
第四节 参数的传递
第四节 参数的传递
必修
开启
通过
点击进入
第五节 代码模块
第五节 代码模块
必修
开启
通过
点击进入
第六节 变量的作用域与生存期
第六节 变量的作用域与生存期
必修
开启
通过
点击进入
本章小结
本章小结
必修
开启
通过
点击进入
视频讲解1
视频讲解1
必修
开启
通过
点击进入
视频讲解2
视频讲解2
必修
开启
通过
点击进入
视频讲解3
视频讲解3
必修
开启
通过
点击进入
视频讲解4
视频讲解4
必修
开启
通过
点击进入


第一节 Function过程
一、Function过程的定义

    1.Function过程的格式

    [Public|Private][Static]Function<函数过程名>
              ([<形参表>])[As<类型>]
       [ <语句组>]
       [ <函数过程名>=<表达式>]
       [Exit Function] 
       [ <语句组>]
       [ <函数过程名>=<表达式>]
   End Function

    2.说明

    (1)Public:缺省值。使用Public时表示所有模块的所有其他过程都可以调用该Function过程。

    (2)Private:使用Private时表示只有本模块中的其他过程才可以调用该Function过程。

    (3)Static:使用Static时表示将过程中的所有局部变量说明为静态变量。

    (4)<函数过程名>:Function过程的名称,遵循变量的命名规则。

    (5)<形参表>:表示在调用时要传递给Function过程的参数变量列表。多个变量之间用逗号隔开。

       <形参表> <形参表>格式:

         [ByVal|ByRef]<变量名>[( )][As<类型>]

         ByVal:表示该参数按值传递。

         ByRef:缺省值。表示该参数按地址传递。

    <变量名>     <变量名>:遵循变量命名规则的任何变量名或数组名。

         ( ):当参数为数组时使用。

    (6)As<类型>:声明函数值的类型。

    (7)Exit Function语句:从Function过程中退出。

    (8)Function过程通过赋值语句:

       <函数过程名> <函数过程名>=<表达式>

      将函数的返回值赋给<函数过程名>。

    (9)Function过程的定义不能嵌套。

    Function过程的建立:

      直接在代码窗口中输入。

      在代码窗口:工具→添加过程。

    【例9-1】编写一个计算n!的Function过程。

    Function Fact(N As Integer) As Long
    Dim I As Integer,F As Long
    F=1     'F用于保存阶乘值 
    For I=1 To N 
      F=F*I 
    Next I 
    Fact=F    '给函数过程名赋值 
   End Function

    【例9-2】编写一个Function过程,计算下面表达式的值。

    

    Function F(X,Y,Z)

     F=Sqr(Abs(X^3+Y^3+Z^3))

    End Function

二、Function过程的调用

    直接在表达式中调用。

    格式:<函数过程名>([<实参表>])

    <实参表> <实参表>:常量、变量或表达式,各参数之间用逗号分隔。如果是数组,在数组名之后必须跟一对空括号。

    【例9-3】利用Function过程计算阶乘,求组合数。设计界面如下图。

    

    '定义求阶乘的函数Fact
   Function Fact(n As Integer) As Double
    Dim F As Double,i As Integer 
    F=1 
    For i=1 To n 
     F=F*i 
    Next i 
    Fact=F 
   End Function 
   Private Sub Command1_Click()'=按钮的事件过程 
     Dim m As Integer,n As Integer,c As Double 
     m=Val(Text1.Text) 
     n=Val(Text2.Text) 
     c=Fact(m)/(Fact(n)*(Fact(m-n)))   '调用Fact 
     Text3.Text=Trim(Str(c)) 
   End Sub

    【例9-4】编写Function过程求最大公约数,并通过命令按钮的单击事件过程调用该函数过程。

    

   Function hcf(m As Integer,n As Integer)As Integer
   Dim r As Integer
   r=m Mod n 
   Do While r <>0
    m=n 
    n=r 
    r=m Mod n 
   Loop 
   hcf=n 
  End Function 
  Private Sub Command1_Click() 
   Dim m As Integer,n As Integer 
   m=Val(Text1.Text): n=Val(Text2.Text) 
   Label3.Caption=Str(hcf(m,n)) 
  End Sub

    【例9-5】编写一个Function过程,返回指定个数的字符串,字符串以A开始,例如,当指定个数5时,函数返回字符串"ABCDE"。运行时单击按钮调用该函数过程,实现在窗体上按指定的行数输出如下图所示的图形。

    

   'CreateStr函数返回N个字符 
   Private Function CreateStr(N As Integer) 
    Dim TmpStr As String,I As Integer 
    TmpStr= ""
    'StrAsc用于保存字符的ASCII码 
    StrAsc=Asc( "A")–1
    For I=1 To N 
     StrAsc=StrAsc+1 '生成下一个字符的ASCII码 
     TmpStr=TmpStr  & Space(1) & Chr(StrAsc) 
    Next I 
    CreateStr=TmpStr 
   End Function 
   '“输出图形”按钮的Click事件过程 
   Private Sub Command1_Click() 
    Dim N As Integer,I As Integer 
    '指定图形的行数 
    N=Val(InputBox( "图形的行数","请输入","5")) 
    Cls 
    Print 
   For I=1 To N 
    Print Tab(2*I);         '输出左半部分 
    Print CreateStr(2*N-2*I+1); 
    Print Spc(4);          '左右两部分的间隔 
    Print CreateStr(2*I-1);       '输出右半部分 
   Print 
  Next I 
End Sub



第二节 Sub过程
一、Sub过程的定义

    1.Sub过程的格式

    [Private|Public][Static]Sub<过程名>[(<形参表>)]
     [<语句组>]
     [Exit Sub] 
     [ <语句组>]
   End Sub

    2.说明

    (1)Exit Sub用于退出Sub过程。

    (2)<过程名> <过程名>不具有值的意义,在Sub过程中不能给<过程名>赋值,也不能给<过程名>定义类型。

    (3)Sub过程通过<形参表>中的参数返回值。

    (4)Sub过程的建立方法与Function过程的建立方法相同。

    【例9-6】编写计算n!的Sub过程。

    分析:参数表中应有一个参数n,还应有另一个参数F用来返回阶乘值。 
    Sub Fact(N As Integer,F As Long) 
    Dim I As Integer 
      F=1 
    For I=1 To N 
      F=F*I 
    Next I 
   End Sub

    【例9-7】编写Sub过程,打印以下图形。

    分析:打印以上图形,不需要返回值,因此无需引入参数。

    Sub a() 
    For i=1 To 6
     Print Tab(7-i); 
     For j=1 To 2* i-1 
      Print "*"; 
     Next j 
     Print 
    Next i 
  End Sub

    

    【例9-8】编写Sub过程,求三个数中的最大数和最小数。

    分析:首先要设置三个参数,如x、y、z,用于接收三个原始数据,另外引入两个参数max和min,用于返回最大和最小数。

    Sub s(x,y,z,max,min) 
     max=x
     min=x 
     If y >max Then max=y
     If y <min Then min=y
     If z >max Then max=z
     If z <min Then min=z
   End Sub

二、Sub过程的调用

      格式一:Call<过程名>[(<实参表>)]

      格式二:<过程名>[<实参表>]

    说明:

    (1)<过程名>:要调用的Sub过程名;

    (2)<实参表>:可以是常量、变量或表达式,各参数之间用逗号分隔。如果是数组参数,则要在数组名之后跟一对空括号。

    (3)用Call语句调用一个Sub过程时,如果过程本身没有参数,则省略<实参表>和括号。

    (4)格式二省略了Call关键字,同时<实参表>两边也不能带括号。

    【例9-9】将求组合数一题改成用Sub过程实现

   Sub Fact(N As Integer,F As Long) 
    Dim I As Integer
    F=1 
    For I=1 To N 
     F=F*I 
    Next I 
   End Sub 
   Private Sub Command1_Click() 
    Dim M As Integer,N As Integer 
    Dim f1 As Long,f2 As Long,f3 As Long 
    M=Val(Text1.Text):N=Val(Text2.Text) 
    Call Fact(M,f1):Call Fact(N,f2):Call Fact(M-N,f3) 
    Text3.Text=Trim(Str(f1/(f2*f3))) 
   End Sub

    【例9-10】编写一个Sub过程,计算K个数的和,即1+2+…+K,并通过命令按钮的单击事件调用该过程计算S=1+(1+2)+(1+2+3)+…+(1+2+…+N)。

    分析:编写一个Sub过程计算1+2+…+K,

    设参数K、S,参数S用于返回该和值。

   Sub A1(K As Integer,S As Integer) 
   S=0
   For J=1 To K 
    S=S+J 
   Next J 
  End Sub 
   Private Sub Command1_Click() 
     Dim N As Integer,S1 As Integer,I As Integer 
     N=Val(Text1.Text) 
     For I=1 To N 
      '调用过程A1求1+2+…+I,和值返回到S1中 
     Call A1(I,S1) 
     Sum=Sum+S1 
    Next I 
    Text2.Text=Sum 
   End Sub



第三节 过程的嵌套

    在一个过程执行期间又调用另一个过程,称为过程的嵌套调用。

    




第四节 参数的传递

    调用过程与被调用过程之间的一种数据通讯方法。

    数据的传递可以是单向的,也可以是双向的。

一、形参和实参

    形参:出现在Sub或Function语句中。

    实参:出现在调用程序中。

    例如,定义如下一个过程:

      Sub SubTest(n As Integer,Sum As Single)

       …

      End Sub

    调用语句:

    

    说明:

    在传递参数时,形参表与实参表中对应参数个数、类型、位置顺序必须一一对应。

    形参表中的参数可以是:

    除固定长度字符串之外的合法变量名、数组名()

    实参表中的参数可以是:常量、变量、表达式、数组名()

    形参与实参的结合有两种方式:

    按值传递和按地址传递。

二、按值传递和按地址传递

    1.按值传递

      实参把其值传递给形参而不传递实参的地址。

      数据的传递是单向的。

    (1)当实参为常量或表达式时,数据传递总是单向的。

      例如:Call SubTest(10,1+2)
         Sub SubTest(n As Integer,Sum As Single)

    (2)实参是变量时,要实现按值传递需要在形参之前通过关键字ByVal来实现。

      例如:Sub SS(ByVal X,ByVal Y,ByVal Z) 
           X=X+1:Y=Y+1:Z=Z+1
        End Sub 
        Private Sub Command1_Click() 
          A=1:B=2:C=3 
          Call SS(A,B,C) 
          Print A,B,C 
       End Sub

    运行时,单击命令按钮在窗体上打印:

    1        2        3

    2.按地址传递

    指将实参的地址传给形参,使形参和实参具有相同的地址,即形参与实参共享同一存储单元。

    (1)当实参为变量或数组时,形参使用关键字ByRef定义(或省略)表示要按地址传递。

    (2)当参数是数组时,数组名之后必须使用一对空的圆括号。

    按地址传递可以实现调用过程与子过程之间数据的双向传递。

    例:Sub SS(ByRef X,ByRef Y,ByRef Z) 
      X=X+1: Y=Y+1: Z=Z+1
     End Sub 
     Private Sub Command1_Click() 
      A=1:B=2:C=3 
      Call SS(A,B,C) 
      PrintA,B,C 
    End Sub

    

    运行时,单击命令按钮在窗体上打印:

    2      3     4

    【例9-11】编写一个计算乘幂的Function过程,用来计算x的y次幂,其中y>0。单击窗体时调用该过程打印51、52、53、54、55的值。

    Function Power(x As Single,ByVal y As Integer) 
    Dim result As Single
    result=1 
    Do While y >0
      result=result*x 
      y=y-1 
    Loop 
    Power=result 
   End Function 
   Private Sub Form_Click() 
    Dim i As Integer 
    For i=1 To 5 
     Print Power(5,i) 
    Next i 
   End Sub

    思考:如果取消过程Power中参数y前的关键字ByVal,则会出现什么情况?



第五节 代码模块

    VB应用程序由三种模块组成:

      窗体模块(Form)(文件扩展名.frm)

      标准模块(Module)(文件扩展名.bas)

      类模块(Class)(文件扩展名.cls)

    

一、窗体模块

    包含: 事件过程

        通用过程

        通用声明

二、标准模块

    不对应于某个窗体、完全是纯代码。

    包含: 全局常量、变量、全局过程

        标准模块级常量、变量、通用过程

        注:不能包含事件过程

    添加:工程→添加模块→选“新建”标签→打开“添加模块”对话框

三、类模块

    在类模块中编写代码建立新对象。

四、过程的作用域

      过程的建立位置不同,允许被访问的范围也不同。

      作用域:模块级、全局级

    1.模块级过程:在过程前如果加Private关键字,则这种过程只能被其所在的模块中的其他过程所调用。

    2.全局过程:在过程前如果加Public关键字(或省略),则这种过程可以被其他模块中的过程所调用。

    3.过程的作用域:见P156

    例:设窗体Form1中有按钮:Command1、Command2

    

    设窗体Form2中有按钮:Command1、Command2

      Private Sub Command1_Click()

    





第六节 变量的作用域与生存期

    变量的作用域:指变量的有效范围。

    变量的生存期:指变量的作用时间。

一、变量的作用域

    将变量分为:局部变量

          模块级变量

          全局变量

    

    1.局部变量

      声明

      不声明

      Dim A As Integer  'A每次执行过程时被初始化

      Static C As Single  'C在应用程序执行期间保持不变

      作用范围

      仅在声明的过程中起作用

      其他过程中即使有同名变量,也不是指同一变量。

    例:

    

    2.模块级变量

      声明

        在模块的通用声明段中用以下方法声明的变量。

        Private   '在模块运行时被初始化

         Dim    '在模块运行时被初始化

      作用范围

        在该模块的所有过程中都起作用

        其他模块不能访问这些变量

    3.全局变量

    声明

      在模块的通用声明段中用以下方法声明的变量

       Public  '应用程序运行时被初始化

       作用范围:应用程序的所有过程

    

    

二、变量的生存期

    静态变量:在应用程序执行期间保留不变

    动态变量:在所在的模块(过程)运行时被初始化

    Static Sub SS1()  '局部变量I,S为静态变量 
    For I=1 To 10
     S=S+I 
    Next I 
    Print S 
   End Sub 
   Private Sub Command1_Click() 
    Call SS1 
    Call SS1 
   End Sub

    

    例:

    





本章小结

    1.函数过程的定义和调用

    定义:

    [Public|Private][Static]Function <函数名>[(<形参表>)][As<类型>]
     ……
     [函数=表达式] 
     …… 
   End Function

    形参表:变量、数组名()

    调用:函数名(<实参表>)

       出现在表达式可以出现的位置

    2.Sub过程的定义和调用

    定义:

    [Private|Public][Static]Sub<过程名>([<形参表>]) 
     ……
   End Sub

    调用:

    (1)Call<过程名>([<实参表>])

    (2)<过程名> <过程名>[<实参表>]

    注意:Sub过程调用与函数过程定义与调用的区别

    3.过程之间的参数传递

    按值传送:实际参数为常数、表达式、ByVal 变量

    按地址传送:实际参数变量、ByRef 变量、数组名()

    4.过程的作用域

      模块级过程;全局级过程

    5.变量的作用域

      局部变量;模块级变量;全局变量

    6.变量的生

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多