vb编程实例讲解、告诉我一些简单的vb编程代码?( 三 )


2.数组下标越界
引用了不存在的数组元素,即下标比数组声明时的下标范围大或小 。例如,要形成有如下30项的斐波那契数列:
1,1,2,3,5,8,13,21,34,…,317811,514229,832040
正确的程序段如下:
Dim a(1 To 30) As Long, i%
若将For i=3 To 30改为For i=1 To 30,程序运行时会显示"下标越界"的出错信息,因为开始循环时i=l,执行到循环体语句a(i)=a(i-2)+a(i-1),数组下标i-2、i-1均小于下界1 。
同样若将上例:a(i)=a(i-2)+a(i-1)语句改为:a(i+2)=a(i)+a(i+1) 。
程序运行时也会显示"下标越界"的出错信息,这时是数组下标大于上界30 。
3.数组维数错
数组声明时的维数与引用数组元素时的维数不一致 。例如,下程序段为形成和显示3×5的矩阵:
Dim a(3,5) As Long
For i=1 To 3
For j=1 To 5
a(i)=i*j
Print a(i);"";
Next j
Print
Next i
程序运行到a(i)=i*j语句时出现"维数错误"的信息,因为在Dim声明时是二维数组,引用时的一个下标 。
4.Array函数使用问题
Array函数可方便地对数组整体赋值,但此时只能声明Variant的变量或仅由括号括起的动态数组 。赋值后的数组大小由赋值的个数决定 。
例如,要将1,2,3,4,5,6,7这些值赋值给数组a,表2.5.1列出了三种错误及相应正确的赋值方法 。
表2.5.1Array函数表示方法
错误的Array函数赋值
改正的Aarry函数赋值
Dim a(1 To 8)
a=Array(1,2,3,4,5,6,7,8)
Dim a( ) a=Array(1,2,3,4,5,6,7)
Dim a As Integer a=Array(1,2,3,4,5,6,7)
Dim a a=Array(1,2,3,4,5,6,7)
Dim a
a()=Array(1,2,3,4,5,6,7)
Dim a a=Array(1,2,3,4,5,6,7)
5.如何获得数组的上界、下界
Array函数可方便地对数组整体赋值,但在程序中如何获得数组的-上界、下界,以保证访问的数组元素在合法的范围内,可使用UBound和LBound函数来决定数组访问 。
在上例中,若要打印a数组的各个值,可通过下面程序段实现:
For i=Lbound(A) To Ubound(A)
Print a(i)
Next i
6.给数组赋值
VB6.0提供了可对数组整体赋值的新功能,方便了数组对数组的赋值操作 。但真正使用不那么方便,有不少限制 。数组赋值形式如下:
数组名2=数组名1
我们就此形式作讨论:这里的数组名2,实际上在前面的数组声明时,只能声明为Variant的变量,赋值后的数组2的大小、维数、类型同数组名1;否则,若声明成动态或静态的数组,例如:
Dim数组名2()或Dim数组名2 (下标)
程序在运行到上述赋值语句时显示"不能给数组赋值"的出错信息 。
所以,为了程序的安全、可靠,建议读者还是忍痛割爱,少用VB6.0的这一新功能,使用传统的循环结构来给数组赋值 。基于此原因,我们也就在教程中不作展开 。
五、过程中常见错误和注意事项
1.程序设计算法问题
该章程序编写难度较大,主要是算法的构思有困难,这也是程序设计中最难学习的阶段 。经验告诉每一位程序设计的初学者,没有捷径可走,多看、多练、知难而进 。上机前一定要先编写好程序,仔细分析、检查,才能提高上机调试的效率 。每当一个程序通过艰苦的努力调试通过时,那苦尽甘来的喜悦令你一言难尽 。
2.确定自定义的过程是子过程还是函数过程
实际上过程是一个具有某种功能的独立程序单位,供多次调用 。子过程与函数过程的区别是前者子过程名无值,后者函数过程名有值 。若过程有一个返回值,则习惯使用函数过程;若过程无返回值,则使用子过程,若过程返回多个值,一般使用子过程,通过实参与形参的结合带回结果,当然也可通过函数过程名带回一个,其余结果通过实参与形参的结合带回 。
3.过程中形参的个数和传递方式的确定
对初学者,在定义过程时不能确定形参的个数和传递方式 。
过程中参数的作用是实现过程与调用者的数据通信 。一方面,调用者为子过程或函数过程提供初值,这是通过实参传递给形参实现的,另一方面,子过程或函数过程将结果传递给调用者,这是通过地址传递方式实现的,因此,决定形参的个数就是由上述两方面决定的 。对初学者,往往喜欢把过程体中用到的所有变量作为形参,这样就增加了调用者的负担和出错概率,也有的初学者全部省略了形参,则无法实现数据的传递,既不能从调用者得到初值,也无法将计算结果传递给调用者 。
VB中形参与实参的结合有传值和传地址两种方式 。区别如下:


推荐阅读