编辑: 紫甘兰 | 2019-07-03 |
4 6 内存单元 传值ByVal 传值调用:形参改变,不影响实参 传值调用:形参获得实参的值 Private Sub f(n%) n =
100 End Sub Private Sub Form_Click() Dim m% m =
10 Print 调用过程前m = ;
m Call f((m)) Print 调用过程后m = ;
m End Sub 实参用括号括起来,传值调用 传值ByVal 例1 Private Sub Form_Click() Dim a as integer,b as integer,c as integer a=1:b=2:c=3 Call subtest(a,b,c) Print a,b,c End sub Private Sub subtest(ByRef x as integer,y as integer,z as integer) x=2*z: y=3*z :z=x+y End sub 例2 Private Sub Form_Click() Dim a as integer,b as integer,c as integer a=1:b=2:c=3 Call subtest(a,b,c) Print a,b,c End sub Private Sub subtest(ByVal x as integer,y as integer,z as integer) x=2*z: y=3*z :z=x+y End sub 实例3 Private Sub Command1_Click() Dim a(10) as integer,x as integer For i=1 to
10 a(i)=8+I Next X=2 Print a(f(x)+x) End sub Function f(x as integer) x=x+3 f=x End function 只能通过传址方式传递 在实参和形参中写数组名,忽略维数的定义,但圆括号不能省 数组参数的传递 Sub Command1_Click() Dim a%(1 To 5),b%(3 To 8) … t1 = tim(a()) t2 = tim(b()) Print t1, t2 End Sub Private Sub Form_Click() Call jiaohuan (a()) End Sub Private Sub jiaohuan (a() As Integer) n = UBound(a) For i =
1 To n \
2 t = a(i): a(i) = a(n - i + 1): a(n - i + 1) = t Next i For i =
1 To n p = p &
a(i) &
Next i Text2.Text = p End Sub 数组倒序存储 使用过程注意事项 1. 确定自定义的过程是子过程还是函数过程 函数过程名有值,子过程名无值. 2.过程中形参的个数和传递方式的确定 过程中参数的作用是实现过程与调用者的数据通信. (1)从主调程序获得初值,值传递. (2)将结果返回给主调程序,地址传递. 3. 实参与形参结合时对应问题 个数、类型、位置、次序一一对应. 形参是地址传递,对应实参可以是简单变量、数组、记录类型、对象. 形参是值传递, 对应实参可以是表达式、常量 . 注意:数组、记录类型、对象只能是地址传递. 实验 编写程序,计算n!的function过程和sub过程,要求两种过程都必须有,调用这两个过程,计算1!+2!+3!+…+10!之和 实验 编写程序输出200~500范围内所有素数 利用Function函数过程,判断一个数据是否为素数,若是,返回1,否则返回0. 单击窗体中的命令按钮,调用该Function过程,并将所有素数添加在列表框中. 实验 编写程序,利用随机函数生成一个6 行6列的整型数组(数据在100内),找出某个指定行内最大元素所在的列号 要求:求指定行内最大元素所在的列号用Function过程实现.然用InputBox函数输入行号,调用Function过程后输出该行最大元素的列号. 实验 编写程序,把任意十进制整数n转换成二进制数 【例】计算组合数. 【思路】利用过程嵌套调用 Private Function fact(n As Integer) Dim i As Integer, f f =
1 For i =
2 To n f = f * i Next i fact = f End Function Private Function comb(n As Integer, m As Integer) comb = fact(n) / (fact(m) * fact(n - m)) End Function Private Sub Command1_Click() Dim m As Integer, n As Integer m = Val(Text1) n = Val(Text2) Text3.Text = comb(n, m) End Sub 过程的嵌套调用 过程的嵌套调用:被调用过程又调用了其他过程 过程的递归调用 用自身的结构来描述本身就称为 递归 n! = n (n-1)! (n-1)! = (n-1) (n-1-1)! VB允许一个自定义子过程或函数过程在过程体的内部调用自己,这样的子过程或函数称为递归子过程或递归函数 递归调用:一个过程直接或间接的调用自己 求n!的函数 n!=n*(n-1)! (n-1)!=(n-1)*(n-2)! …… 2!=2*1! 1!=1 Public Function fact(n) As Long If n =