过 程 名:subfact 类 型:Sub过程
参数说明:参数N为值参,类型为整型,因为只能为整型数求阶乘
传出结果:通过形参f传出计算结果,调用时与之对应的实参应为同类型的变量 结果类型:双精度型,因为双精度型表示的数的范围最大 (2)完成教材中编程练习中的4、5、7题。
3.有关问题分析
本章是教学中的难点,教与学两方面均存在一定的困难,下面所分析的问题,有的是编程中遇到的,有的是上机实习中遇到的。
(1)使用Function过程还是Sub过程
过程是一个具有某种功能的独立程序段,可供程序多次调用。对于一个具体问题,既可以使用Function过程,也可以使用Sub过程。但Sub过程与Function过程还是有区别的,Sub过程的过程名仅标识过程本身;Function过程的过程名除了标识过程本身以外,还有返回值的作用,因此,若过程有一个返回值时,则习惯使用Function过程,并通过函数名返回函数值;若过程不需要返回值或返回多个值时,则使用Sub过程;返回值通过实参与形参的结合带回,当然也可通过Function过程名带回一个结果,其余通过实参与形参的结合带回。
(2)过程中形参的个数和传递方式确定 对初学者,若定义过程时在确定形参的个数和传递方式问题存在问题,可从如下方面考虑问题:
首先,理解形参和实参的作用。一方面,调用程序为Sub过程或Function过程通过实参传递实际处理对象;另一方面,Sub过程通过地址传递方式将结果传递给调用程序,Function过程通过地址传递方式或函数名将结果传递给调用程序。形参的个数和类型就是由上述两方面决定的。对初学者,往往喜欢把过程体中用到的所有变量全作为形参,这样就增加了调用者的负担和出错概率;也有的初学者全部省略了形参,则无法实现数据的传递,既不能从调用者得到初值,也无法将计算结果传递给调用者。
其次,理解参数传递的方式和特点。VB中形参与实参的结合有传值和传地址两种方式。数据传递按照地址方式传递。传值方式只能从调用程序向过程传入初值,但不能将结果传出;而地址传递即可传入又可传出。
最后,注意实现传值和传地址对形参和实参的要求。在定义过程时在形参前加ByVal关键字或过程调用时变量加圆括号,数据传递按照传值方式;如果在形参前加ByRef关键字或省略(默认)或实参是数组、自定义类型、对象变量等,参数传递只能是地址传递。
(3)实参和形参类型对应问题
第一:在地址传递方式时,调用过程实参与形参类型要一致。例如: 函数过程定义如下: Public Function f!(x!) f = x + x End Function 主调用程序如下:
Private Sub Command1_Click() Dim y% y = 3
-164-
Print f(y) End Sub
上例形参x是单精度型、实参y整型,程序运行时会显示“ByRef参数类型不符”的编译出错信息。
第二:在值传递时,若是数值型,则实参按形参的类型将值传递给形参。例如: 函数过程定义如下:
Public Function f!(ByVal x%) f = x + x End Function 主调用程序如下:
Private Sub Command1_Click() Dim y! y = 3.4 Print f(y) End Sub
程序运行后显示的结果是6。因为调用程序声明y的类型为单精度类型,对应位置上的形参x的类型为整型数据类型,实参y和形参x按照值传递方式,因此实参按形参的类型将值传递给形参,即y的值3.4传给x时,x接受的值为3。
(4)变量的生命周期
过程级动态变量,是在过程调用时分配变量的存储空间,当过程调用结束,回收分配的存储空间,也就是调用一次,初始化一次,变量不保存值;过程级静态变量,当过程调用结束后,其值还保留。
示例:一个窗体上有一个文本框和一个命令按钮,向文本框中每输入一个数据,再单击命令按钮后可将这些数累加起来。如果代码如下:
Private Sub Command1_Click() Dim s!, x! x = Text1.Text s = s + x
MsgBox \目前累加的结果是:\End Sub
则每次运行后得到的结果都只能是最后一次录入的那个数,修改程序,将“Dim s!, x!”改为“Static s!, x!”。
窗体级变量特点是:当窗体装入,分配该变量的存储空间,直到该窗体从内存卸掉,才回收该变量分配的存储空间。
-165-
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库第06章 模块化程序设计(6)在线全文阅读。
相关推荐: