第8章 子过程

  • 格式:doc
  • 大小:222.50 KB
  • 文档页数:17

第八章,5学时

- 1 - 第八章 过程

本章关键词

1. 模块化程序设计

2. Sub过程

3. Function过程

4. 形式参数与实际参数

5. 参数传递——传值调用、引用调用

6. 变量的作用域

教学目标

1. 了解模块化程序设计的概念,“自顶向下、逐步求精”的程序设计方法;

2. 掌握Sub过程的定义和调用方法,会将某一功能用Sub过程来实现;

3. 掌握Function过程的定义和调用方法,能正确区分Sub过程和Function过程之间的区别,会将某一功能利用Function过程来实现;

4. 掌握形参和实参的意义和作用,形参与一般变量的区别;

5. 掌握形参与实参之间传值调用和传址调用的特点,在程序设计中能合理的使用形参与实参之间的传值调用和传址调用,能正确理解数组参数在过程定义中的作用;

6. 正确理解过程和变量的作用域;

7. 会举一反三,正确的定义和调用Sub过程和Function过程。

重点及难点

重点

1. Sub过程和Function过程的定义格式和调用方法,区分这两种过程的异同点;

2. 形参与实参的作用,传值调用和传址调用的特点及其区别,数组作为参数在过程定义中的作用;

3. 变量的作用域;

4. 理解Sub过程和Function过程的执行流程;

5. 在程序设计中,正确使用Sub过程和Function过程。

难点

1. 模块划分的原则,将一个复杂的问题分解为多个程序模块来实现;

2. 形参的作用,形参与实参之间的关系;

3. Sub过程与Function过程之间的异同;

4. 传值调用和传址调用的特点,在过程设计中合理的选用形参与实参之间的传值调用和引用调用;

5. 静态变量的特点。

8.1 模块化程序设计概述

在VB中,过程可分为事件过程和通用过程。

事件过程是当某个事件发生时,对该事件做出响应的程序段。 第八章,5学时

- 2 - 将这一段代码抽象出来,建立一个独立的、可供其它过程调用的过程,这样的过程称为通用过程。通用过程主要包括Sub过程和Function过程两类,前者也被称作子过程,后者称作函数过程。

过程过程通用过程事件过程过程FunctionSub

8.1.1 程序的模块化

模块化程序设计是分而治之策略在程序设计中的应用。

模块化程序设计就是将一个大型程序划分为几个、几十个甚至上百个相对对立的程序模块,由主程序规定好各个模块应实现的目标及各个模块间的参数传递关系。

每个模块具有较高的独立性。

8.1.2 模块间的层次结构

在模块化的程序中,各个模块间应该:

1. 具有严密的正确的层次结构;

2. 具有合理的隶属关系;

3. 上层模块可以调用所有隶属于它的下层模块;

4. 下属模块只能通过唯一的出口返回到调用它的上层模块;

5. 整个程序按隶属关系分成若干层次,每一层次由若干个模块组成。

VB程序设计时,将程序分隔成较小的、完成一定任务的、相对独立的程序段。这些程序段称为过程。

设计一个过程涉及两个方面的内容:

1. 如何由顺序、选择和循环三种基本结构构造过程体以实现该过程的功能;

2. 主调程序与过程间如何传递数据。

8.1.3 “自顶向下、逐步求精”的程序设计方法

“what to do”、“how to do”

8.2 Sub过程

8.2.1 Sub过程的格式

Sub过程的定义形式如下:

[Public|Private] [Static] Sub 过程名[(形式参数列表)] 第八章,5学时

- 3 -

[Exit Sub]

End Sub

说明

1. Sub过程以Sub开头,以End Sub结束,两者之间称为“过程体”;

2. 过程名的命名规则与变量名相同;

3. Exit Sub的功能是退出Sub过程,其目的是用于提前结束本次过程调用;

4. Sub过程本身不返回值,而是通过形参与实参的传递得到结果,调用时可通过参数返回多个值。

形式参数列表

[ByVal] 变量名[( )] [As 类型],…

1. 形式参数列表仅表示形式参数的类型、个数和次序;

2.

在过程定义时形式参数列表中的各个变量无具体值,也不分配存储空间;

3. 只在过程被调用时,形式参数通过与实际参数结合获得具体的值;

4. ByVal表示当该过程被调用时,参数是按值传递的;

5. 默认情况下,参数是按地址传递的;

6.

形式参数为一般变量,也可以是数组。

例8.1

编写一个过程,实现两个浮点变量的值交换。

Private Sub Swap(a As Single, b As Single)

Dim t As Single

t = a : a = b : b = t

End Sub

或者

Private Sub Swap(a!, b!)

Dim t As Single

t = a : a = b : b = t

End Sub

8.2.2 Sub过程的定义

1. 使用“添加过程”对话框定义 第八章,5学时

- 4 - 形参b 形参a 36.9

16.8 36.9 16.8 调用时值传递

实参X

实参Y 调用时地址传递

形参b 形参a 36.9

16.8 实参X

实参Y 2. 利用代码窗口直接定义

演示

8.2.3 Sub过程的调用

调用Sub过程即执行该过程的程序代码。

Sub过程的调用格式如下:

过程名 [实际参数列表]

或者

Call 子过程名(实际参数列表)

说明

调用过程时:

1. 为形式参数分配临时的存储单元;

2. 将实际参数的值传递给形式参数;

3. 执行过程体中的语句;

4. 过程结束运行后释放临时单元,转去执行调用语句的下一条语句。Sub过程不返回值,而是通过形参与实参的传递得到结果,调用时可通过参数返回多个值。

例8.2

比较如下程序:

Private Sub SwapRef(a!, b!)

Dim t As Single

t = a : a = b : b = t

End Sub

Private Sub SwapVal(ByVal a!, ByVal b!)

Dim t As Single

t = a : a = b : b = t

End Sub

Private Sub Form_Click()

Dim X As Single, Y As Single

X = Val(Text1.Text)

Y = Val(Text2.Text)

Call SwapRef(X, Y)

Text3.Text = X

Text4.Text = Y 第八章,5学时

- 5 -

X = Val(Text1.Text)

Y = Val(Text2.Text)

SwapVal X, Y

Text5.Text = X

Text6.Text = Y

End Sub

演示

8.3 Function过程

VB中,除了系统提供的内部函数,用户可以方便地定义自己的Function过程。Function过程亦用来执行一个特定任务,是一段独立的程序代码,带返回值。

8.3.1 Function过程的定义

Function过程的定义形式如下:

[Public|Private] [Static] Function函数名([形式参数列表]) [As 数据类型]

[Exit Function]

函数名 = 表达式

End Function

说明

1. Function过程以Function开头,以End Function结束,两者之间称为“函数体”;

2. 函数体中至少有一条赋值语句:

函数名 = 表达式

调用时,函数过程的返回值即该表达式的值;

3. Exit Function的功能是退出Function过程,其目的是用于提前结束本次过程调用;

4. As 类型指定Function过程返回值的数据类型。

例8.3

编写一个计算阶乘的Function过程。

第八章,5学时

- 6 - Private Function Fact(ByVal n As Integer) As Long

Dim i As Integer, result As Long

result = 1

For i = 1 To n

result = result * i

Next i

Fact = result

End Function

8.3.2 Function过程的定义与调用

Function过程的定义同Sub过程的定义类似。

Function过程的调用同系统函数,通常将其作为表达式的一个运算分量来使用。最简单的形式为赋值语句:

变量名=函数过程名([实际参数列表])

Dim x As Integer, Y As Long

x = Val(InputBox("请输入一个不大于10的自然数:"))

Y = Fact(x)

8.3.3 Sub过程与Function过程区别

1. 函数过程名有值,有类型,在函数体内至少赋值一次;

子过程名无值,无类型,在子过程体内不能对子过程名赋值;

2. 调用时,子过程调用是一句独立的语句;

函数过程不能作为单独的语句加调用,必须参与表达式运算。 …

Dim x As Integer, Y As Long

x = Val(InputBox("请输入一个不大于10的自然数:"))

Y = Fact(x)

… 主调过程 被调过程

Dim i As Integer

Dim result As Long

result = 1

For i = 1 To n

result = result * i

Next i

Fact = result 调用

返回