一道VB题目

编写窗体的单击事件过程,随机生成一个含有10个元素的一维数组,输出打印到窗体上,调用通用过程avg1求该数组中元素的平均值;再引用函数过程avg2求该数组中元素的平均值。
Option Base 1
Private Sub Form_Click()
Dim a(10) As Integer, p As Single
Randomize
For i = 1 To 10
a(i) = Int(90 * Rnd + 10)
Print a(i)
Next i
Print
Call avg1(a, p)
Print "sub过程平均:"; p
p = avg2(a)
Print "fuction 过程平均:"; p
End Sub

编写通用过程avg1和函数过程avg2,求一组数的平均值

楼上的两位都犯了个错误!
VB中数组的传递只能是Byref方式的,就是传地址方式;byval是编译不通过的;
传地址会同时影响到原变量的值,赋值则反之!
Public Sub avg1(ByRef arr() As Integer, ByRef p As Single)
Dim i As Integer
Dim sum As Long
sum = 0
For i = 1 To 10
sum = sum + arr(i)
Next
p = sum / 10
End Sub

Public Function avg2(ByRef arr() As Integer) As Single
Dim i As Integer
Dim sum As Long
sum = 0
For i = 1 To 10
sum = sum + arr(i)
Next
avg2 = sum / 10
End Function
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-04-15
如果在SUB和FUNCTION中都要求得到返回值的话,AVG2可以那样调用,但AVG1就不能了,因为参数P传递进去,回来后P是刚才传入的值,即使在AVG1中作了变化,但结果没有变化,这是因为SUB是默认通过ByVal(值)方式传递的,要想P的值变化,必须得用ByRef(地址)方式传递。如下:
Sub AVG1(byval A() as integer,byref p as integer)
............
End Sub

Function AVG2(byval A() as integer) as integer
............
End Function
'写完才发现与楼上的差不多
第2个回答  2011-04-15
sub avg1(byval numarray() as integer,byref res as single)

这个过程运行到最后,把得到的值赋值给res就可以了。参数传地址的方式,就能把值直接带出来。

function avg2(byval numarray() as integer) as single

函数里面的东西就不用我写了吧!
相似回答