第六章【数组】课后复习材料
- 格式:doc
- 大小:335.00 KB
- 文档页数:56
计算机基础与程序设计自考02275课后题答案第六章数组一、改错题正确答案:1、int a[5];2、赋值越界,正确应:ss[3]=5.2;3、定义时不能用变量4、在scanf函数中,用%s格式符时,输入项直接写数组名,无需用&,正确:scanf(“%s”,str);5、赋初值时,一维数组长度可省略,二维数组第一维长度可省略,第二维长度不能省略。
6、在scanf函数中,用%c格式符时,输入项不能直接写数组名,需要加上取地址符号&,正确:scanf(“%c”,&c[k]);二、简答题(1)定义了一个数据类型为整型的二维数组t(2)2行(3)5列(4)10个(5)t[1][0]、t[1][1]、t[1][2]、t[1][3]、t[1][4](6)t[0][2]、t[1][2](7)t[0][1]=0;(8)int t[2][5]={0};(9)for(i=0;i<2;i++)for(j=0;j<5;j++)t[i][j]=0;(10)scanf(“%d”,&t[0][0]);(11)he=t[0][3]+t[1][3];ave=he/2;三、填空题1、02、23、地址4、连续、行5、越界四、补充程序1、①N-1 ②N ③a[i]=a[j] ④a[j]=t2、①D ②A ③D ④D五、编写程序1、任意输入20个整数,计算(1)正数的个数和正数的和;(2)负数的个数和负数的和;(3)零的个数;main(){int a[20],i,m=0,n=0,p=0,max=0,min=0;for(i=0;i<20;i++)scanf("%d",&a[i]);for(i=0;i<20;i++)if(a[i]>0){ m=m+1;max=max+a[i];}else if(a[i]==0)n=n+1;else{ p=p+1; min=min+a[i];}printf("zhong:%d,he:%d,fu:%d,he:%d,ling:%d\n",m,max,p,min,n);}2、对一个任意的4行4列的二维整型数组,编辑实现(1)每一列的最大值;(2)每一行的最小值;(3)所有元素的最大值、最小值及其他们的行下标和列下标main(){int i,j,max,min,a[4][4],m=0,n=0,l=0,h=0;for(i=0;i<4;i++)for(j=0;j<4;j++)scanf("%d",&a[i][j]);max=a[0][0];min=a[0][0];for(i=0;i<4;i++)for(j=0;j<4;j++){ if(a[i][j]>max){max=a[i][j];m=i;n=j;}if(a[i][j]<min){min=a[i][j];l=i;h=j;}}printf("max:%d,hang:%d,lie:%d\n",max,m,n);printf("min:%d,hang:%d,lie:%d\n",min,l,h);}3、把字符数组str2中的全部字符拷贝到字符数组str1中(不要使用strcpy函数)main(){char str1[10],str2[10]={"I am boy"};int i;for(i=0;i<10;i++)str1[i]=str2[i];printf("%s\n",str1);}。
第六章数组习题参考答案6-1 请同学上机运行代码。
6-2Option ExplicitOption Base 1Private Sub Command1_Click()Dim i As Integer, t As IntegerDim a(15) As IntegerRandomizeFor i = 1 To 15a(i) = Int(100 * Rnd)Text1 = Text1 & Str(a(i))Next iFor i = 1 To 7t = a(i)a(i) = a(16 - i)a(16 - i) = tNext iFor i = 1 To 15Text2 = Text2 & Str(a(i))Next iEnd SubPrivate Sub Command2_Click()Text1 = ""Text2 = ""End SubPrivate Sub Command3_Click()EndEnd Sub6-3Option ExplicitDim a(20) As IntegerPrivate Sub Command1_Click()Dim i As IntegerRandomizeFor i = 1 To 20a(i) = Int(90 * Rnd) + 10Text1 = Text1 & Str(a(i))Next iEnd SubPrivate Sub Command2_Click()Dim i As Integer, j As Integer, f As BooleanDim n As IntegerFor i = 1 To 20f = TrueFor j = i + 1 To 20If a(i) = a(j) Then f = FalseNext jIf f = True Then n = n + 1Next iText2 = nEnd SubPrivate Sub Command3_Click()Text1 = ""End SubPrivate Sub Command4_Click()EndEnd Sub6-4Option ExplicitDim a(20) As IntegerPrivate Sub Command1_Click()Dim i As IntegerRandomizeFor i = 1 To 20a(i) = Int(90 * Rnd) + 10Text1 = Text1 & Str(a(i))Next iEnd SubPrivate Sub Command2_Click()Dim i As Integer, j As Integer, max As IntegerDim n As Integer, w As Integer, p As IntegerFor i = 1 To 20n = 0: p = iFor j = 1 To 4If i > 20 Then p = p - 20n = n + a(p)Next jIf n > max Thenmax = nw = iEnd IfNext iText2 = maxPicture1.Print w & "--" & w + 4End SubPrivate Sub Command3_Click()Text1 = ""End SubPrivate Sub Command4_Click()EndEnd Sub6-5Dim a(5, 5) As IntegerPrivate Sub Command1_Click()For i = 1 To 4For j = 1 To 5a(i, j) = Int(9 * Rnd) + 1Picture1.Print a(i, j);Next jPicture1.PrintNext iEnd SubPrivate Sub Command2_Click()For j = 1 To 5s = 0For i = 1 To 4s = s + a(i, j)Next iText1 = Text1 & Str(s)Next jEnd SubPrivate Sub Command3_Click()For i = 1 To 4s = 0For j = 1 To 5s = s + a(i, j)Next jText2 = Text2 & Str(s) & Chr(13) & Chr(10)Next iEnd SubPrivate Sub Command4_Click()Text1 = ""Text2 = ""Picture1.ClsEnd SubPrivate Sub Command5_Click()EndEnd Sub6-6Option ExplicitPrivate Sub Command1_Click()Dim a(5, 5), i As Integer, j As IntegerDim n As Integer, m As Integer, t As IntegerRandomizeFor i = 1 To 5For j = 1 To 5 - 1a(i, j) = Int(40 * Rnd) * 2 + 10Next jNext iFor i = 1 To 5For j = 5 To 6 - i Step -1a(i, j) = Int(40 * Rnd) * 2 + 11Next jNext iFor i = 1 To 5For j = 1 To 5Text1 = Text1 & Str(a(i, j))Next jText1 = Text1 & vbCrLfNext iEnd Sub6-7 同6-46-8Dim a(5, 5) As IntegerPrivate Sub Command1_Click()RandomizeFor i = 1 To 5For j = 1 To 5a(i, j) = Int(100 * Rnd) + 1Picture1.Print Right(" " & a(i, j), 4);Next jPicture1.PrintNext iEnd SubPrivate Sub Command2_Click()For i = 1 To 5For j = 1 To 5s = s + a(i, j)Next jNext iText1 = Str(s)End SubPrivate Sub Command3_Click()For i = 1 To 5For j = 1 To 5If i = 1 Or j = 1 Or i = 5 Or j = 5 Thens = s + a(i, j)End IfNext jNext iText2 = Str(s)End SubPrivate Sub Command4_Click()For i = 1 To 5For j = 1 To 5If i = j Or j = 6 - i Thens = s + a(i, j)End IfNext jNext iText3 = Str(s)End Sub6-9Option ExplicitPrivate Sub Command1_Click()Dim a() As Integer, i As Integer, j As IntegerDim max As Integer, k As Integer, f As BooleanDim n As Integer, m As Integer, t As Integern = InputBox("输入矩阵的行数:")m = InputBox("输入矩阵的列数:")ReDim a(n, m)RandomizeFor i = 1 To nFor j = 1 To ma(i, j) = Int(90 * Rnd) + 10Text1 = Text1 & Str(a(i, j))Next jText1 = Text1 & vbCrLfNext iFor i = 1 To nmax = 0For j = 1 To mIf a(i, j) > max Thenmax = a(i, j)t = jEnd IfNext jFor k = 1 To nIf a(k, t) < max Then Exit ForNext kIf k > n ThenPicture1.Print "鞍点:"; a(i, t); "第"; i; "行"; t; "列"f = TrueEnd IfNext iIf f = False Then Picture1.Print "没有鞍点"End SubPrivate Sub Command2_Click()Text1 = ""Picture1.ClsEnd SubPrivate Sub Command3_Click()EndEnd Sub6-10Option ExplicitPrivate Sub Form_Click()Dim a() As Integer, n As IntegerDim i As Integer, j As Integern = InputBox("层数")ReDim a(n, n)For i = 1 To nPrint Tab(20 - 2 * i);For j = 1 To iIf i = 1 Or i = j Thena(i, j) = 1Elsea(i, j) = a(i - 1, j - 1) + a(i - 1, j)End IfPrint Left(a(i, j) & " ", 4);Next jPrintNext iEnd Sub6-11Option ExplicitPrivate Sub Command1_Click()Dim a(4, 5), i As Integer, j As IntegerDim b(4) As Integer, max As Integer, min As IntegerDim n As Integer, m As Integer, t As IntegerRandomizemax = 0: min = 32767For i = 1 To 4For j = 1 To 5a(i, j) = Int(90 * Rnd) + 10Text1 = Text1 & Str(a(i, j))b(i) = b(i) + a(i, j)Next jText1 = Text1 & vbCrLfIf max < b(i) Thenmax = b(i): m = iElseIf min > b(i) Thenmin = b(i): n = iEnd IfNext iLabel1.Caption = "max行和:" & max & " min行和:" & min & vbCrLf & "max 行:" & m & " min行:" & n & " 交换这两行"For j = 1 To 5t = a(m, j)a(m, j) = a(n, j)a(n, j) = tNext jFor i = 1 To 4For j = 1 To 5Text2 = Text2 & Str(a(i, j))Next jText2 = Text2 & vbCrLfNext iEnd Sub6-12Option ExplicitPrivate Sub Command1_Click()Dim a(), i As Integer, j As IntegerDim b(4) As Integer, max As Integer, min As IntegerDim n As Integer, m As Integer, t As IntegerRandomizen = InputBox("矩阵阶数n:")ReDim a(n, n)For i = 1 To nFor j = 1 To na(i, j) = Int(90 * Rnd) + 10Text1 = Text1 & Str(a(i, j))Next jText1 = Text1 & vbCrLfNext iFor i = 1 To nFor j = 1 To nText2 = Text2 & Str(a(j, i))Next jText2 = Text2 & vbCrLfNext iEnd SubPrivate Sub Command2_Click()Text1 = ""Text2 = ""End SubPrivate Sub Command3_Click()EndEnd Sub6-13Option ExplicitOption Base 1Private Sub Command1_Click()Dim a(3, 3) As Integer, i As Integer, j As Integer Dim max As Long, k As Long, f As IntegerDim n As Integer, m As IntegerRandomizeFor i = 1 To 3For j = 1 To 3a(i, j) = Int(90 * Rnd) + 10Text1 = Text1 & Str(a(i, j))Next jText1 = Text1 & vbCrLfNext iFor i = 1 To 3 '主对角线方向m = ik = 1For j = 1 To 3k = k * a(m, j)m = m + 1If m > 3 Then m = 1Next jIf k > max Thenmax = kn = if = 1End IfNext iFor i = 1 To 3 '辅对角线方向m = ik = 1For j = 1 To 3k = k * a(j, m)m = m - 1If m < 1 Then m = 3Next jIf k > max Thenmax = kn = if = 2End IfNext iPicture1.Print "最大组元素:"If f = 1 ThenFor i = 1 To 2Picture1.Print "a("; n; ","; i; ")="; a(n, i); " ";n = n + 1If n > 3 Then n = 1Next iPicture1.Print "a("; n; ","; i; ")="; a(n, i)ElseIf f = 2 ThenFor i = 1 To 2Picture1.Print "a("; i; ","; n; ")="; a(i, n); " ";n = n - 1If n < 1 Then n = 3Next iPicture1.Print "a("; i; ","; n; ")="; a(i, n)End IfPicture1.Print "乘积="; maxEnd SubPrivate Sub Command2_Click()Text1 = ""Picture1.ClsEnd SubPrivate Sub Command3_Click()EndEnd Sub6-14Option ExplicitPrivate Sub Command1_Click()Dim a(3, 3) As Integer, i As Integer, j As IntegerDim k As Integeri = 3: j = 2: a(i, j) = 1: k = 1Do Until k > 9k = k + 1If i + 1 > 3 And j + 1 <= 3 Theni = 1: j = j + 1ElseIf i + 1 <= 3 And j + 1 > 3 Theni = i + 1: j = 1ElseIf i + 1 > 3 And j + 1 > 3 Theni = i - 1ElseIf i + 1 <= 3 And j + 1 <= 3 And a(i + 1, j + 1) <> 0 Theni = i - 1Elsei = i + 1: j = j + 1End Ifa(i, j) = kLoopFor i = 1 To 3For j = 1 To 3Picture1.Print a(i, j);Next jPicture1.PrintNext iEnd SubPrivate Sub Command2_Click()Dim a() As Integer, i As Integer, j As IntegerDim k As IntegerDim n As Integern = InputBox("幻方阶数:")ReDim a(n, n)i = n: j = (n + 1) / 2: a(i, j) = 1: k = 1Do Until k > n * nk = k + 1If i + 1 > n And j + 1 <= n Theni = 1: j = j + 1ElseIf i + 1 <= n And j + 1 > n Theni = i + 1: j = 1ElseIf i + 1 > n And j + 1 > n Theni = i - 1ElseIf i + 1 <= n And j + 1 <= n And a(i + 1, j + 1) <> 0 Theni = i - 1Elsei = i + 1: j = j + 1End Ifa(i, j) = kLoopFor i = 1 To nFor j = 1 To nPicture1.Print Right(" " & a(i, j), 4);Next jPicture1.PrintNext iEnd Sub6-15Option ExplicitOption Base 1Private Sub Command1_Click()Dim a() As Integer, i As Integer, j As IntegerDim max As Long, k As Long, f As IntegerDim n As Integer, m As IntegerRandomizef = InputBox("输入方阵阶数:")ReDim a(f, f)For i = 1 To fFor j = 1 To fa(i, j) = Int(90 * Rnd) + 10Text1 = Text1 & Str(a(i, j))Next jText1 = Text1 & vbCrLfNext iFor i = 1 To f '副对角线方向m = ik = 0For j = 1 To fk = k + a(j, m)m = m - 1If m < 1 Then m = fNext jIf k > max Thenmax = kn = iEnd IfNext iPicture1.Print "max:"; maxFor i = 1 To fPicture1.Print "a("; i; ","; n; ")="; a(i, n)n = n - 1If n < 1 Then n = fNext iEnd SubPrivate Sub Command2_Click()Text1 = ""Picture1.ClsEnd SubPrivate Sub Command3_Click()EndEnd Sub。
1.以下对一维整型数组a的定义,正确的是_。
(2分)A.int a(10) ;B.int n = 10 , a[n] ;C.int n ;scanf( "%d" , &n ) ;int a[n] ;D.int a[10] ;2.若有定义:int a[10] ;,则对a数组元素的正确引用是_。
(2分)A.a[10]B.a[3.5]C.a(5)D.a[10-10]3.对定义int a[10] = {6 , 7 , 8 , 9 , 10} ; 的正确理解是_。
(2分)A.将5个初值依次赋给a[1]--a[5]B.将5个初值依次赋给a[0]--a[4]C.将5个初值依次赋给a[6]--a[10]D.因为数组长度与初值个数不相同,所以此语句不正确4..若有定义:int a[3][4]; , 则对a数组元素的正确引用是_。
(2分)A.a[3][4]B.a[1,3]C.a[1+1][0]D.a(2)(1)5.以下对二维数组a初始化正确的语句是_。
(2分)A.int a[2][ ]={{0 , 1 , 2}, {3 , 4 , 5}};B.int a[ ][3]={{0, 1, 2}, {3, 4, 5}};C.int a[2][4]={{0, 1 , 2}, {3 , 4}, {5}};D.int a[ ][3]={{0, 1, 2}, { }, {3, 4}};6.对二维数组a进行如下初始化:int a[ ][3]={0 , 1 , 2 , 3 , 4 , 5};则a[1][1]的值是_。
(2分)A.0B.3C.4D.17.下面程序段的运行结果是_。
(2分)#include<stdio.h>int main( ){int i , x[3][3] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9} ;for( i = 0 ; i < 3 ; i++ )printf( "%2d" , x[i][2-i] ) ;return 0 ;}A.1 5 9B.1 4 7C.3 5 7D.3 6 98.以下对数组s的初始化,错误的是_。
6.4 课后习题6.4.1 项目练习一.练习目的1.进一步巩固一维数组的定义与数组元素的引用方法2.进一步巩固二维数组的定义与数组元素的引用方法3.进一步巩固字符数组的定义与引用方法二.练习内容1.用起泡法对10个数由大到小进行排序。
分析:起泡法的算法思想是,n个数排序,将相邻两个数依次进行比较,将大数调在前头,逐次比较,直至将最小的数移至最后,然后再将n-1个数继续比较,重复上面操作,直至比较完毕。
可采用双重循环实现起泡法排序,外循环控制进行比较的次数,内循环实现找出最小的数,并放在最后位置上(即沉底)。
#include "stdio.h"main(){int a[10];int i,j,t;printf("请输入10个整数:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<9;i++)for(j=0;j<9-i;j++)if(a[j]<a[j+1]){ t=a[j];a[j]=a[j+1];a[j+1]=t;}printf("排序后的数为::\n");for(i=0;i<10;i++)printf("%d ",a[i]);printf("\n");getch();}2.从键盘输入10个整数,检查整数3是否包含在这些数据中,若是的话,它是第几个被输入的。
#include "stdio.h"main(){int i,a[10];printf("请输入这10个整数:");for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<10;i++){if(a[i]==3) printf("3包含于数列中,输入顺序号是:%d",i+1);elseprintf("3不包含于此数列中");}getch();}3.编程:一个3*5的数组,要求每行都进行降序排列,并求出每行的平均值。
第六章数组【学习目的和要求】1.掌握静态数组的定义和程序设计方法2.掌握动态数组的定义和程序设计方法3.熟悉控件数组的创建和使用4.掌握数组常用算法的程序设计【学习要点】一.何时需要使用数组?在程序设计过程中,如果需要对一组同类型的很多数据进行处理时,就必须使用数组进行程序设计。
比如求某班级80个学生某门课成绩的平均分,再统计所有高于平均分成绩的学生人数。
如果不用数组,通过简单变量,要么定义80个变量来保存学生的成绩,光赋值语句就得写80行,要么采用循环程序设计,定义一个变量,通过80次循环来接收每个学生的成绩,并计算平均分。
程序段如下:Dim cj As Integer, sum As Integer, ave As SingleDim i As IntegerFor i = 1 To 80cj = InputBox("请输入第" & i & "个学生的成绩")sum = sum + cj '求总分Next iave = sum / 80 '求平均分问题是:当求出平均分后,还需要统计成绩高于平均分的学生人数,而变量cj只能存放一个值,在本循环结束后,cj中存放的是最后一个学生的成绩,它无法同时保存80个学生的成绩,只能再编写程序重新输入80个学生的成绩,依次与平均分进行比较,程序段如下:For i = 1 To 80cj = InputBox("请输入第" & i & "个学生的成绩")If cj > ave Then n = n + 1 '统计成绩高于平均分的人数Next iPrint "成绩高于平均分的人数有" & n & "个"这样处理会带来2个问题:1.数据的输入量变为原来的2倍2.数据量很大,在第二次输入过程中很可能出现与第一次不一致的情况,造成数据统计的错误。
在类似的问题上,如果采用数组处理就可以有效解决上述问题。
数组在形式上可以看成为一组同类型的数据集合,每个数组元素拥有相同的名称,但根据其在数组中的位置分配一个唯一标识的序号,如本例中,可以定义一个数组cj(80)来表示成绩,数组名为cj,cj(1)表示第1个学生的成绩,cj(2) 表示第2个学生的成绩,……,这样只要一次输入,就可以有效解决上面的问题。
二.数组的形式1.一维数组在上例中,只要用一个下标就可以标识一个数组元素,这样的数组称为一维数组。
比如定义一个一维数组a(10),表示数组名为a,数组中有11个元素(注意:VB中数组的下标默认为从0开始),分别是a(0)、a(1)、a(2)、……、a(10)。
2.二维数组从形式上看,可以把一维数组看成是一个数列,适合于类型相同的一组数据的处理,但有的时候用一维数组处理就不能满足要求了。
比如处理一个班50个人4门课的成绩,将其按总分从高到低的顺序进行排序。
很显然,这是一张二维表,每个人的4门课成绩构成表中的一行,要表示其中每个人的成绩,都需要指定行和列两个下标才能唯一的确定,这时就需要定义一个二维数组。
如定义一个数组cj(50,4),用cj(1,1)表示第一个人的第一门课成绩,cj(2,3)表示第二个人的第三门课成绩。
象这样,需要两个下标才能确定一个数组元素在数组中的位置,这样的数组称为二维数组。
从形式上看,二维数组就是一张二维表格。
比如定义一个二维数组a(1 To 3,1 To 4),共有12个元素,分成3行4列,其中每个元素的分布如下表5-1所示:表5-13.多维数组如果数组中的每个元素需要2个或2个以上的下标才可以标识,这样的数组统称为多维数组。
比如三维数组a(3,4,2)中的每个元素都需要3个下标才能够唯一的确定。
以后我们进行程序设计时,定义的数组一般不会超过三维,所以应重点掌握一维和二维数组的使用。
三.数组的定义程序中用到的变量,可以不定义就使用,如果没有定义,系统会自动定义其类型为变体型。
但数组不可以直接使用,所有的数组只有先定义才可以使用。
VB提供了两类数组可以定义。
1.固定大小的数组定义如果在程序设计时可以确定其大小和维数,这样的数组称为固定大小数组。
比如:Dim a(20) As Integer,表示定义一个固定大小的数组a,有21个元素,下标从0到20。
固定大小的数组一经定义,以后在程序中就不能再改变其大小和维数。
例6-1 以下定义数组的语句错误的是______。
A.Dim a(-3 to 5) As IntegerB.Dim a(1 to 6.7) As SingleC.Dim a(n) As IntegerD.Dim a(-2 to 3,2*3) As Integer分析:选项A中定义一个整型的一维数组,分别为a(-3)、a(-2)、……、a(5) ,共9个元素;在VB中如果数组下标不是整数,系统会自动四舍五入取整,所以选项B等价于Dim a(1 To 7) As Integer;选项D表示定义一个整型的二维数组,其中第一维的下标从-2到3,第二维的下标从0到6,一共有6*7=42个元素;选项C是错误的,因为VB不允许用变量来定义数组,如果不能确定数组大小,定义时数组名后的()中也不能是变量,必须将其定义成动态数组:Dim a ( ) As Integer,数组名后的()中不写任何内容。
考虑以下定义数组的语句是否正确?1)Const n As Integer = 6Dim a(n) As Integer2)Dim a(n) As IntegerConst n As Integer = 63)Dim a(5 To -3) As Integer分析:定义1是正确的,这时n是符号常量,相当于常量6,所以Dim a(n) As Integer 等价于Dim a(6) As Integer;定义2是错误的,因为在执行Dim a(n) As Integer之前并没有定义符号常量n,VB不允许用变量定义数组;定义3是错误的,因为定义数组时不允许其下界高于上界。
2.动态数组定义如果在程序设计时不能确定数组的大小和维数,就必须定义动态数组。
动态数组的大小和维数可以在程序运行时根据需要改变。
动态数组的定义和固定大小数组不同,它一般分两个步骤进行:1)用数组名加()来定义动态数组比如需要定义一个整型的动态数组b,只能按以下格式定义:Dim b() As Integer表示b是一个数组,但数组的大小和维数都不确定,以后在程序运行时可根据需要定义。
注意:只能用数组名后加()来定义,不能写成b(n)或b(m,n)或b(,)等形式。
2)用Redim重新定义动态数组大小动态数组只有用Redim重新定义后才可以使用。
比如上面定义的数组b,如果在程序运行时需要定义其为10个元素的一维数组,则可以执行语句Redim b(1 to 10),若需要定义其为3行4列的二维数组,则可以执行语句Redim b(1 to 3,1 to 4)。
一旦用Redim重定义动态数组后,该数组就可以象固定大小数组一样地使用。
3.Option Base 1数组默认的下标下界是0,如果希望定义数组的下标从1开始,可以在模块的通用声明段中用Option Base 1说明。
注意:1)Option Base后面只可以是0或1,不能是其他数字。
比如不能通过Option Base 2让数组的下标从2开始。
2)Option Base语句只可以出现在模块的通用声明段,不可以出现在过程中。
四.数组的使用1.数组元素的引用数组定义后,可以通过下标来引用数组的每个元素。
和数组的定义不同,引用数组元素时下标可以是变量、常量或表达式。
例6-2 以下引用数组元素的语句中正确的是_______。
A.Dim a(2, 3) As Integera(1) = 10B.Dim a(3 To 6) As Singlea(1) = 1C.a(n + 3) = a(n - 1) + a(n)D.Dim a(5) As Singlea = 1分析:选项A中定义一个3行4列的二维数组(注意:每一维的下标下界默认为0),每个数组元素必须用两个下标表示,比如,第一个元素应该为a(0,0),第2行第2列的元素应该为a(1,1)。
不允许通过a(1)企图引用二维数组中的某个元素,所以选项A是错误的;选项B中定义一个单精度型一维数组,规定下标的范围从3到6,不存在下标为1的元素,所以引用a(1)会出现“下标越界”的错误;选项D中定义一个一维数组,数组名为a,拥有6个元素,分别是a(0)到a(5),对数组赋值只能分别对每个元素赋值,而不能通过给a赋值来达到给所有数组元素赋值的目的,程序中并不存在名称为a的变量,所以选项D是错误的;由于引用数组元素时允许下标是变量和表达式,所以选项C的含义是计算a(n - 1) + a(n)的值,并将其赋给数组元素a(n + 3),比如,当n为2时,该语句的功能是计算a(1)+a(2) 的值,并将其赋给数组元素a(5),很显然,选项C是正确的。
归纳一下:1)引用数组元素时要注意,下标不能越界,即数组元素的下标不允许比定义数组时的上界大,也不允许比下界小。
2)一维数组元素用1个下标引用,二维数组元素必须用2个下标引用,依次类推。
3)引用数组元素时,下标可以是变量和表达式。
4)对数组元素操作时,不可以直接引用数组名,只可以引用单个数组元素。
2.数组的相关函数数组的相关函数只需要掌握以下三个:1)LBound:获得数组某一维下标的下界格式:LBound(数组名)或LBound(数组名,维数)比如Lbound(a)表示返回数组a第一维下标的下界;Lbound(a,2) 表示返回数组a第二维下标的下界。
2)UBound:获得数组某一维下标的上界格式:UBound(数组名)或UBound(数组名,维数)例6-3 执行以下程序段,输出结果是_______。
Dim a(-3 To 5) As SingleDim b(3, 4) As IntegerPrint UBound(a), UBound(b, 1)Print LBound(a), LBound(b, 2)分析:根据UBound和LBound函数的功能可以知道,第一行的输出结果是5 3,第二行的输出结果是-3 0。
3)Array函数利用Array函数可以将一个变体型变量创建成一维数组,同时实现数组元素的赋值。
例6-4 执行以下程序段,第一行输出结果是_______,第二行输出结果是_______。
Private Sub Form_Click()Dim aDim i As Integera = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)For i = 0 To 3Print a(5 - i);NextPrinta = Array("abc", "123", "def")Print a(1)End Sub分析:根据Array函数的功能,赋值语句a = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)将变体型变量a创建成一个整型的一维数组,有9个元素,下标从0到8(注意:默认下标的下界为0),其中a(0)的值为1,a(1)的值为2,……,a(8)的值为9。