第 4章 过程与变量的作用范围
4.1 Visual Basic的代码模块
Visual Basic的应用程序是由过程组成的,
过程代码存放在模块中。 Visual Basic提供了
三类模块,它们是窗体模块、标准模块和类
模块。
4.1.1 窗体模块
窗体模块是大多数 Visual Basic应用程序
的基础,每个窗体对应一个窗体模块。窗体
模块包含窗体及其控件的属性设置、窗体变
量的说明、事件过程、窗体内的通用过程、
外部过程的窗体级声明等。
4.1.2 标准模块
在多窗体模块的应用程序中,有些变量
或过程需要在多个不同的窗体中使用,为了
避免在不同的窗体模块中重复书写相同的代
码,可以创建标准模块。标准模块一般用来
存放公共代码过程和说明公共变量。
4.1.3 类模块
在 Visual Basic中,类模块是面向对象编
程的基础。在类模块中可以编写建立新对象
的代码。这些新对象可以包含自定义的属性
和方法,可以在应用程序内的过程中使用。
4.2 Visual Basic的过程
将一个实际应用程序分解成多个具有独
立功能的逻辑程序段来实现程序的完整功能,
这些逻辑程序段被称为过程,Visual Basic应
用程序是由过程组成的。 Visual Basic中的过
程分为内部过程和外部过程。
在 Visual Basic中,根据过程是否返回值,
又将过程分为子程序过程( Sub过程)和函
数过程( Function过程)两种。
4.2.1 通用过程( Sub过程)的创建与调用
Visual Basic的 Sub过程又分为事件过程和
通用过程两大类。事件过程是当发生某个事件时,
对该事件作出响应的程序段;实际编程中,有时
可能会有多个不同的事件过程需要使用同一段程
序代码。这种共用的过程就是通用过程。
1,通用过程的创建
2,通用过程的调用
[例 4-1]编写一个能找出两个数中大数的通用过程,
然后在应用程序中调用它。
4.2.2 函数过程( Function过程)的
创建与调用
函数是过程的另一种形式,当过程的执
行仅需要返回一个值时,用函数过程就比较
简单。自定义的函数过程与 Visual Basic提供
的内部函数一样,可以在程序或函数中嵌套
使用。
1,函数过程的创建
函数过程的语法格式是:
[Private | Public ][ Static ] Function <函数名
> ( [ <形参表 > ]) [ As <类型 > ]
[例 4-2]编程定义计算三角形面积的函数过程
Tria(a,b,c),其中的形参 a,b,c表示三角形
的三条边长。
[例 4-3]编程定义计算任意整数 a阶乘的函数过
程 fac(a ),
2,函数过程的调用
[例 4-4]利用例 4-2定义的计算三角形面积的函
数过程 Tria,编程计算用户给定边长的三角形
面积。
4.2.3 过程中参数的传递
在调用过程中,要考虑调用过程和被调用
过程之间的数据是怎样传递的。
1.形参与实参
形式参数与实际参数的对应关系是:在定
义过程时,形式参数为实际参数预留位置;在
调用过程时,实际参数的值被一一插入到对应
的形式参数位置上。
2.传值与传址
按地址传递参数,就是让过程根据变量的
内存地址去访问实际变量的内容。在按地址传
递值时,实参必须是变量,常量或表达式无法
按地址传递。
按值传递参数时,系统将实参的值复制给
形参后,实参与形参就断开了联系。因此在过
程中对形参的任何操作都不会影响到实参。
[例 4-5]编写一交换两个数的过程程序代码,Swap1
和 Swap2。 Swap1按地址传递参数,Swap2按值传
递参数。运行程序,观测它们的区别。
[例 4-6]编写程序,求任意两个正整数的最大公约
数和最小公倍数。编程思路:
求最大公约数可以使用“辗转相除法”,其步
骤是:
? 以大数 m作为被除数,小数 n作为除数,相除后余
数为 r。
? 若 r不为零,则 继续相除得到新的 r。若 r仍不为零,
则重复此过程,直到 r= 0。
? 最后的 n就是最大公约数。
? 最小公倍数=
最大公约数
mn ?
4.2.4 过程的递归
递归算法是指一个过程直接或间接调用
自己本身,即自己调用自己。很多看似十分
复杂的问题,使用递归算法来描述就显得非
常简洁和清晰。
[例 4-7]编写程序,用递归调用的方法计算某
整数 n的阶乘。
根据求 n!的定义,n!=n*(n-1)!可以写成如下
的形式:
?
?
?
??
??
1)1(*
11)(
nnf a cn
nnf a c
4.3 变量的作用范围
变量的作用范围是指变量在程序中能够
被识别的范围。
4.3.1 过程级变量
在过程内部定义的变量就是“过程级变
量”。过程级变量的作用范围被限制在该过程
的内部。
[例 4-8]过程级局部变量示例。
4.3.2 模块级变量
模块级变量是比过程级变量作用范围更大的一种
变量,根据其作用范围的大小不同,还可以进一步
细分为模块级变量和应用程序级变量两种。
[例 4-9]模块级变量示例。
4.3.3 变量的生存周期
从变量的作用时间来说,变量有生存周期。根
据变量在程序运行期间的生存周期,把变量分为静
态变量( Static)和动态变量( Dynamic)。
[例 4-10]下面的程序说明了动态变量与静态变量的
区别。
4.4 用户自定义类型
Visual Basic允许将基本数据类型按需要组合起
来,创建自定义的数据类型:用户自定义类型( User
Defined Type)。
用户自定义类型由若干个基本数据类型组成,也
遵循先定义后使用的原则。可以用 Type语句来创建用
户自定义类型。要注意的是,Type语句必须置于模块
的声明部分。其语法格式是:
[Private | Public] Type <自定义类型名 >
<元素名 1> As <类型名 >
[ <元素名 2> As <类型名 >]
……
[ <元素名 n> As <类型名 >]
End Type
[例 4-11]编写程序显示某学生的基本信息。
4.1 Visual Basic的代码模块
Visual Basic的应用程序是由过程组成的,
过程代码存放在模块中。 Visual Basic提供了
三类模块,它们是窗体模块、标准模块和类
模块。
4.1.1 窗体模块
窗体模块是大多数 Visual Basic应用程序
的基础,每个窗体对应一个窗体模块。窗体
模块包含窗体及其控件的属性设置、窗体变
量的说明、事件过程、窗体内的通用过程、
外部过程的窗体级声明等。
4.1.2 标准模块
在多窗体模块的应用程序中,有些变量
或过程需要在多个不同的窗体中使用,为了
避免在不同的窗体模块中重复书写相同的代
码,可以创建标准模块。标准模块一般用来
存放公共代码过程和说明公共变量。
4.1.3 类模块
在 Visual Basic中,类模块是面向对象编
程的基础。在类模块中可以编写建立新对象
的代码。这些新对象可以包含自定义的属性
和方法,可以在应用程序内的过程中使用。
4.2 Visual Basic的过程
将一个实际应用程序分解成多个具有独
立功能的逻辑程序段来实现程序的完整功能,
这些逻辑程序段被称为过程,Visual Basic应
用程序是由过程组成的。 Visual Basic中的过
程分为内部过程和外部过程。
在 Visual Basic中,根据过程是否返回值,
又将过程分为子程序过程( Sub过程)和函
数过程( Function过程)两种。
4.2.1 通用过程( Sub过程)的创建与调用
Visual Basic的 Sub过程又分为事件过程和
通用过程两大类。事件过程是当发生某个事件时,
对该事件作出响应的程序段;实际编程中,有时
可能会有多个不同的事件过程需要使用同一段程
序代码。这种共用的过程就是通用过程。
1,通用过程的创建
2,通用过程的调用
[例 4-1]编写一个能找出两个数中大数的通用过程,
然后在应用程序中调用它。
4.2.2 函数过程( Function过程)的
创建与调用
函数是过程的另一种形式,当过程的执
行仅需要返回一个值时,用函数过程就比较
简单。自定义的函数过程与 Visual Basic提供
的内部函数一样,可以在程序或函数中嵌套
使用。
1,函数过程的创建
函数过程的语法格式是:
[Private | Public ][ Static ] Function <函数名
> ( [ <形参表 > ]) [ As <类型 > ]
[例 4-2]编程定义计算三角形面积的函数过程
Tria(a,b,c),其中的形参 a,b,c表示三角形
的三条边长。
[例 4-3]编程定义计算任意整数 a阶乘的函数过
程 fac(a ),
2,函数过程的调用
[例 4-4]利用例 4-2定义的计算三角形面积的函
数过程 Tria,编程计算用户给定边长的三角形
面积。
4.2.3 过程中参数的传递
在调用过程中,要考虑调用过程和被调用
过程之间的数据是怎样传递的。
1.形参与实参
形式参数与实际参数的对应关系是:在定
义过程时,形式参数为实际参数预留位置;在
调用过程时,实际参数的值被一一插入到对应
的形式参数位置上。
2.传值与传址
按地址传递参数,就是让过程根据变量的
内存地址去访问实际变量的内容。在按地址传
递值时,实参必须是变量,常量或表达式无法
按地址传递。
按值传递参数时,系统将实参的值复制给
形参后,实参与形参就断开了联系。因此在过
程中对形参的任何操作都不会影响到实参。
[例 4-5]编写一交换两个数的过程程序代码,Swap1
和 Swap2。 Swap1按地址传递参数,Swap2按值传
递参数。运行程序,观测它们的区别。
[例 4-6]编写程序,求任意两个正整数的最大公约
数和最小公倍数。编程思路:
求最大公约数可以使用“辗转相除法”,其步
骤是:
? 以大数 m作为被除数,小数 n作为除数,相除后余
数为 r。
? 若 r不为零,则 继续相除得到新的 r。若 r仍不为零,
则重复此过程,直到 r= 0。
? 最后的 n就是最大公约数。
? 最小公倍数=
最大公约数
mn ?
4.2.4 过程的递归
递归算法是指一个过程直接或间接调用
自己本身,即自己调用自己。很多看似十分
复杂的问题,使用递归算法来描述就显得非
常简洁和清晰。
[例 4-7]编写程序,用递归调用的方法计算某
整数 n的阶乘。
根据求 n!的定义,n!=n*(n-1)!可以写成如下
的形式:
?
?
?
??
??
1)1(*
11)(
nnf a cn
nnf a c
4.3 变量的作用范围
变量的作用范围是指变量在程序中能够
被识别的范围。
4.3.1 过程级变量
在过程内部定义的变量就是“过程级变
量”。过程级变量的作用范围被限制在该过程
的内部。
[例 4-8]过程级局部变量示例。
4.3.2 模块级变量
模块级变量是比过程级变量作用范围更大的一种
变量,根据其作用范围的大小不同,还可以进一步
细分为模块级变量和应用程序级变量两种。
[例 4-9]模块级变量示例。
4.3.3 变量的生存周期
从变量的作用时间来说,变量有生存周期。根
据变量在程序运行期间的生存周期,把变量分为静
态变量( Static)和动态变量( Dynamic)。
[例 4-10]下面的程序说明了动态变量与静态变量的
区别。
4.4 用户自定义类型
Visual Basic允许将基本数据类型按需要组合起
来,创建自定义的数据类型:用户自定义类型( User
Defined Type)。
用户自定义类型由若干个基本数据类型组成,也
遵循先定义后使用的原则。可以用 Type语句来创建用
户自定义类型。要注意的是,Type语句必须置于模块
的声明部分。其语法格式是:
[Private | Public] Type <自定义类型名 >
<元素名 1> As <类型名 >
[ <元素名 2> As <类型名 >]
……
[ <元素名 n> As <类型名 >]
End Type
[例 4-11]编写程序显示某学生的基本信息。