之间。例如下标变量a(2.3),系统将下标按四舍五入自动取整后,即a(2)进行使用。
(4)下标变量的类型就是数组的类型,所有下标变量都具有一样的类型。
(5)下标变量像简单变量一样,可以被赋值和引用。引用数组元素时的下标值应该在下限与上限之间,否则系统将显示“Subsript out range”(下标超出范围)的出错信息。
若要使用下标变量,必须先定义数组。一个数组,包括数组名称、数组维数、数组单元数等因素。在使用数组时,要将以上内容告诉计算机,以便开辟足够的内存单元来存储数据。在Quick BASIC中用下面的语句来完成这一工作,称为“建立”(“说明”、“定义”)一个数组。
格式:
DIM[SHARED]〈数组〉[(〈维数定义〉)][AS〈类型说明词〉][,〈数组名〉[(〈维数定义〉)][AS〈类型说明词〉]]…
功能:建立一维或多维数组。
数组中的〈维数定义〉如下:
(1)下标变量的单元数和维数由数组名后跟用括号起来的下标的下界和上界组成。其格式为:
[〈下标下界1〉TO]〈下标上界1〉[,[〈下标下界2〉TO]〈下标上界2〉[,…]]
其中下界和上界表示该维的最小和最大下标值,通过关键字TO连接起来代表下标的取值范围,且下界和关键字TO 可以省略,若省略了下界和关键字TO,下标的取值范围是0到上界(若没有OPTION BASE语句的作用),即等价于:0 TO上界。
例如:
DIM a(3TO5)AS LONG 表示定义了有3个数组元素的一维数组a
DIM a(-1TO10)AS LONG 表示定义了有12个数组元素的一维数组a
DIM a(10)AS LONG 表示定义了有11个数组元素的一维数组a
(2)多维数组的各个维下标界值之间,用逗号隔开。例如:
DIM X(-2 TO 2,-1.2 TO 2) 表示定义了有20个数组元素的二维数组x
DIM X(2,3) 表示定义了有12个数组元素的二维数组x
DIM X(2,3,4) 表示定义了有60个数组元素的三维数组x
(3)下标的下界默认为0。例如:
a(20)表示数组a的上界为20,下界为0,该数组就有a(0),a(1),…,a(20),共21个数组元素。
b(5,5)表示数组的两个维,每维的下界为0,上界为5,该数组就有:
b(0,0),b(0,1),…b(0,5)
b(1,0),b(1,1),…b(1,5)
… …
b(5,0),b(5,1), …b(5,5)
6行6列共36个元素。
(1)在DIM语句中AS〈类型说明词〉表明数据的类型,可以为基本数据类型或用户定义类型。例如:
DIM a(3 TO 5)AS LONG
DIM x(2)AS STRING,y(4)AS DOUBLE
也可以在数组名后加类型说明符实现相同的功能。例如:
DIM a&(3 TO 5)
DIM x$(2),y#(4)
(2)SHARED为全程属性选择项。若选择了该属性,模块中的所有过程都能共用该数组,即说明该数组变量是一个全程变量,它不同于SHARED语句。
(3)DIM不但能定义说明数组,分配数组存储空间,而且还能将数组进行初始化,使得数值数组元素初始化为零,字符串元素初始化为空。
(4)DIM语句是非执行语句,可放在程序的任何部分,但必须放在使用该数组之前,遵守“先说明后使用”的原则,否则会出现出错信息“Array already dimensioned”。一般认为DIM语句放在程序的头部较好。
DIM语句本身不具备再定义功能,即不有直接使用DIM语句对已经定义了的数组进行再定义,否则会出现“数组已定义”的错误。
(5)在程序中引用数组的时候,要特别注意下标的值不能超出说明语句定义的上、下界。
例如:
DIM a(3)
FOR i=2 TO 4
READ a(i)
NEXT
在DIM中定义的存储单元是a(0)、a(1)、a(2)、a(3),而下面的语句引用数组的存储单元是a(2)、a(3)、a(4),当读到a(4)时,下标超出定义的范围,系统统将给出超界错误信息“Subscript out of range”(下标出界)。
数组中每维的下标上界数不超过10的情况下,可以不用DIM语句进行说明,系统会自动给每维分配11个存储单元。
例如,一维数组a(10)有11个存储单元,二维数组b(10,10)有11×11=121个存储单元。
在DIM语句之前有下界选择语句OPTION BASE时,数组的下界就由该语句来确定。
格式:OPTION BASE n
功能:定义所有数组下标的下界。
说明:格式中的n是数字0或1,即选择0或1作数组下标下界。不能随意选用其他任何数。
通常习惯用1作下界,则程序如下
OPTION BASE 1
DIM a(20),b(5,5)
这样,数组a的下界为1,共有20个元素;数组b的下界为1,共有25个元素。
别我,如果定义的是多维数组,那么下标下界的确定对每一维都起作用。例如对三维数组x(2,3,4)用OPTION BASE 1定义下标下界,那么该数组的每一维的下标下界均为1。
OPTION BASE 1
DIM x(2,3,4)
这样定义后数组x的数组元素个数为24个。
格式:
LBOUND(〈数组名〉[,维])
UBOUND(〈数组名〉[,维])
功能:LBOUND函数返回数组指定维的下标下界;UBOUND函数返回数组指定维的下标上界。
被测试的数组必须是用DIM语句或者REDIM语句定义过的,否则系统将给出“Array not define”(数组未定义)的出错信息。
语句中的[,维]为任选项,指的果检测的维,其值为1到数组维数的一个整数。当语句中这一选项超出此范围时,系统将给出“Subscript out of range”(下标出界)的信息。此选项省略时,默认为第一维。
另外,一个LBOUND和UBOUND语句只能检测一个数组某一维的下标下界或者上界。
[例8-1] 将下列字符存放到数组中,并以倒序打印出来。字符是
a,b,q,r,s,t,w,xy,e,m,n
问题分析:把这12个字符存放在数组a$(12)中,首先依次读取,然后利用FOR循环,设步长为-1,初值为12,终值为1实现倒序输出。
程序为:
'EXAMPLE 1
REM 字符倒序输出
CLS
DIM a$(12)
PRINT "原来字符顺序为:";
FOR x=1 TO 12
READ a$(x)
PRINT a$(x);"";
NEXT x
PRINT "倒序输出结果为:";
FOR x=12 TO 1 STEP -1
PRINT a$(x);"";
NEXT x
DATA a,b,q,r,s,t,w,x,y,e,m,n
END
程序运行结果为:
原来字符顺序为:a b q r s t w x y e m n
倒序输出结果为:n m e y x w t s r q b a
[例8-2] 随机产生10个二位整数,放入数组a,从中选出一个最大的和最小的数打印出来。
问题分析:设用n和m来存放选出的最大数和最小数。由于m要存放最小的数,预存放一个较大的数,其值要大于数组中所有的数,所以赋初值为100;n要存放最大的数,预先存放一个较小的数,其值要小于数组中所有的数,所以赋初值为-100。
把随机产生的整数,依次与n和m比较:
若a(i)>n,则把a(i)的值放入n中;若a(i)<m,则把a(i)的值放入m中。
程序如下:
'EXAMPLE 2
REM 打印最大最小数
DIM a(10)
m=100:n=-100
PRINT "随机产生的10个二位整数是:"
FOR i=1 TO 10
a(i)=INT(RND*90)+10
PRINT a(i);
NEXT I
FOR I=1 TO 10
IF a(i)>n THEN n=a(i)
IF a(i)<m THEN m-a(i)
NEXT i
PRINT "最大数n=";n,"最小数m=";m
END
程序运行结果为:
随机产生的10个二位整数是:
26 39 56 90 82 91 20 18 25 48