分享

计算机技术基础(第八章 数组 )

 図籴帑簤屸璺 2019-07-11

计算机技术基础(VB)

第八章 数组 

学习内容

第一节 数组的基本概念

第一节 数组的基本概念

必修

开启

通过

点击进入

第二节 数组的定义

第二节 数组的定义

必修

开启

通过

点击进入

第三节 数组的基本操作

第三节 数组的基本操作

必修

开启

通过

点击进入

第四节 数组应用举例

第四节 数组应用举例

必修

开启

通过

点击进入

第五节 控件数组

第五节 控件数组

必修

开启

通过

点击进入

本章小结

本章小结

必修

开启

通过

点击进入

视频讲解1

视频讲解1

必修

开启

通过

点击进入

视频讲解2

视频讲解2

必修

开启

通过

点击进入

视频讲解3

视频讲解3

必修

开启

通过

点击进入

视频讲解4

视频讲解4

必修

开启

通过

点击进入

视频讲解5

视频讲解5

必修

开启

通过

点击进入

第一节 数组的基本概念

1.定义:一组性质相同的有序的数

例:多项式y=a0+a1x+a2x2+a3x3+…+anxn

系数A=(a0,a1,a2,…,an)可以构成一个数组

表示:A(0) A(1) A(2)...A(n)

例:全班40名同学的英语成绩

G(1) G(2) G(3)……G(40)

所有班级(如6个班,每班40人)同学的英语成绩

表示1:G(1) G(2) G(3)…G(240)

表示2:G(1,1) G(1,2)…G(1,40)

G(2,1) G(2,2)…G(2,40)

G(6,1) G(6,2)…G(6,40)

例:矩阵

矩阵中各元素b11--b33可表示成:

B(1,1) B(1,2) B(1,3)

B(2,1) B(2,2) B(2,3)

B(3,1) B(3,2) B(3,3)

数组名:一组数用一个统一的名称表示,称数组名。

数组元素(下标变量):数组中的每一个元素。

表示成:数组名(下标)

下标的取值可以是常数、变量、表达式

如:A(8) B(I) C(3+K)

下标还可以是下标变量

如:A(A(5)) 令A(5)=4,A(A(5))=A(4)

数组的维数:下标个数

一维数组:由一个下标组成。如A(2),C(6)

二维数组:由两个下标组成。如B(2,3)

三维数组:由三个下标组成。如G(3,4,23)

三维以上的数组称为多维数组,最多60维

第二节 数组的定义

一、固定大小的数组的定义

1.格式

Public|Private|Dim<数组名>[(<维数定义>)]

[As<类型>]…

2.功能:声明数组名称、维数、维大小、类型。

为数组分配存储空间。

3.说明

<数组名>   <数组名>:合法的变量名

<维数定义>   <维数定义>:

[<下界1>To]<上界1>,[<下界2>To]<上界2>,…

如果下界省略,则使用默认下界

<数据类型> <数据类型>:Integer  Long  Single  Double

Boolean  String  String[*n]

Date    Variant Object

用户定义类型……

数组在定义后自动被初始化:

将可变类型数组元素值置为Empty

将数值型数组元素值置为0

将字符串类型数组元素值置为零长度字符串

分配固定的存储空间

使用以下语句初始化数组元素:

Erase<数组名>

例:Dim A(-4 TO 10)As Integer

一维整型数值数组

下界 -4,上界 10

元素 A(-4) A(-3)...A(0) A(1)...A(10)

例:Dim B(0 to 8,0 to 3)As String

→DIM B(8,3)As String

二维字符串类型数组

第一维:下界0,上界8

第二维:下界0,上界3

元素 B(0,0) B(0,1) B(0,2) B(0,3)

B(1,0) B(1,1) B(1,2) B(1,3)

...

B(8,0) B(8,1) B(8,2) B(8,3)

例:Dim C(-99 TO -5,-3 TO 0) As Boolean

第一维下界-99,上界–5;第二维下界–3,上界0

元素:C(-99,-3) C(-99,-2) C(-99,-1) C(-99,0)

C(-98,-3) C(-98,-2) C(-98,-1) C(-98,0)

...

C(-5,-3) C(-5,-2) C(-5,-1) C(-5,0)

例:DIM S1(50)AS LONG

DIM M(-3 TO 10)

DIM ABC(20) AS STRING

DIM ST2(7,0 TO 14) AS STRING*20

例:CONST Y1=10

CONST Y2=50

DIM ABC(Y1 TO Y2) AS INTEGER

数组元素个数:(上界1-下界1+1)*(上界2-下界2+1)*…

二、动态数组的定义

1.定义格式

分以下两步进行:

(1)在模块级或过程级定义一个没有下标的数组

Public|Private|Dim <数组名>()[As<类型>],…

(2)在过程级使用ReDim语句定义数组的实际大小

ReDim <数组名>(<维数定义>)[As<类型>],…

2.说明

(1)<维数定义> <维数定义>:常包含明确值变量或表达式

(2)可以用ReDim反复改变数组元素及维数的数目

(3)若步骤(1)定义了类型,则不许用步骤(2)改变类型

(4)执行ReDim语句将重新对数组元素进行初始化

(5)Erase<数组名>:释放动态数组所占的存储空间

例:Dim A()As Integer

Private Sub Command1_Click() 

N=4 

ReDim A(N) 

For I=0 To N 

A(I)=1:Print A(I); 

Next I 

Print 

N=8 

ReDim A(N,N) 

For I=0 To N 

For J=0 To N 

A(I,J)=2:PrintA(I,J); 

Next J 

Print 

Next I 

End Sub

第三节 数组的基本操作

一、数组元素的输入与输出

数组输入:赋值

IntputBox

Array函数(仅用于一维数组)

数组输出:用Print、Label、TextBox、ListBox、Combox等

例:输入10个单词,按相反的次序输出

方法1:

Dim A(1 To 10)As String

A(1)="one"

A(2)="two"

A(3)="three"

A(4)="four"

A(5)="five"

A(6)="six"

A(7)="seven"

A(8)="eight"

A(9)="nine"

A(10)="ten"

For I=10 To 1 Step -1

Print A(I)

Next I

适合于对数组的个别元素赋初值

适合于输出少量数据

方法2:

Dim A(1 To 10) As String

For I=1 To 10

A(I)=InputBox("请输入单词","","在此输入")

Next I

Text1.Text=""

For I=10 To 1 Step -1

Text1.Text=Text1.Text & A(I) & Space(1)

Next I

使用文本框显示多个数据时,常需要给文本框设置滚动条,依据滚动条的方向,要注意每显示一个或多个数据后是否要在文本框中加上回车或换行符号。

方法3:

Dim A  'A称为数组变量,只能是可变类型

A=Array("one","two","three","four","five",_

"six","seven","eight","nine","ten")

Label1.Caption=""

For I=UBound(A) To LBound(A) Step -1

Label1.Caption=Label1.Caption & A(I)&" "

Next I

数组变量只能是一维数组,使用默认下界

常需要设置标签的以下属性:

Autosize—True

WordWrap—True

二、数组元素的复制

1.个别元素的复制:用赋值语句

Dim A(5),B(1 To 5,1 To 5) 

A(1)=B(1,1) 

A(2)=B(2,2) 

A(3)=B(3,3) 

A(4)=B(4,4) 

A(5)=B(5,5)

2.整个数组的复制:用循环

例:Dim A(10),B(10) 

For I=1 To 10 

B(I)=A(I) 

Next I 

例:Option Base 1 

… 

Dim A(15),B(3,5) 

… 

For i=1 To 3 

For j=1 To 5 

B(i,j)=A((i-1)*5+j) 

Next j 

Next i

也可以在固定大小数组与动态数组之间进行数组元素的复制。

三、使用ForEach...Next语句

1.格式

[<语句组1>]

[ExitFor]

[ <语句组2>]

Next <变量> <变量>

例:打印一维数组X中的所有元素。

Dim X(15) 

For Each A In X 

Print A; 

Next A

例:求二维数组Y的所有元素之和。

Dim Y(10,10) 

For Each A In Y 

Sum=Sum+A 

Next A 

Print Sum

使用For Each...Next循环处理数组时,适合于不关心数组元素的处理次序的问题。

四、保留动态数组的内容

格式:ReDim Preserve<数组名>(<维数定义>) 

Dim A() As Integer

Private Sub Command1_Click() 

N=4 

ReDim A(N) 

For I=0 To N 

A(I)=1 

Next I 

N=8 

ReDim Preserve A(N) 

For I=0 To N 

Print A(I); 

Next I 

End Sub

第四节 数组应用举例

【例8-1】生成20个10到100之间的随机整数,存于一维整型数组A中,同时显示于第一个文本框中,单击窗体将这20个数以相反的次序显示于另一个文本框中。

Option Base 1

Private Sub Form_Click() 

Dim A(20)As Integer 

Text1.Text= ""

For I=1 To 20 

A(I)=Int(Rnd*91+10) 

Text1.Text=Text1.Text  & Str(A(I))&" "

Next I 

Text2.Text= ""

For I=20 To 1 Step -1 

Text2.Text=Text2.Text  & Str(A(I))&" "

Next I 

End Sub

【例8-2】输入N名同学的成绩,求平均分、最高分、最低分。N可以任意指定。

分析:求最大值、最小值方法

Option Base 1

Dim Score() As Integer

Dim N As Integer,Max As Integer,Min As Integer,Average As Single 

Private Sub Form_Load() 

N=Val(InputBox( "请输入总人数", "", "")) 

ReDim Score(N) 

For I=1 To N 

Score(I)=Val(InputBox( "请输入第"&Str(I)&_

"个学生的成绩","成绩统计","")) 

Next I 

Total=0 

Max=Score(1) 

Min=Score(1) 

'通过循环依次比较,求最大、最小值;求总和 

For I=1 To N 

If Score(I) >Max Then Max=Score(I) 

If Score(I)<min then min=score(i) < p="">

Total=Total+Score(I) 

Next I 

Average=Total/N   '求平均值 

'以两位小数显示平均值 

Text1.Text=Format(Average, "0.00") 

Text2.Text=Max 

Text3.Text=Min 

End Sub

【例8-3】输入N名同学的成绩,显示于文本框Text1中,按成绩从低到高的次序排序,并将结果显示于另一个文本框Text2中。

比较交换法:对N个数进行排序

(1)将第1个数与第2个数到第N个数依次比较,如果X(1)>X(J)(J=2,3,…,N),则交换X(1)、X(J)的内容;

(2)将第2个数与第3个数到第N个数依次比较,如果X(2)>X(J)(J=3,4,…,N),则交换X(2)、X(J)的内容;

(3)重复以上方法,将第I个数与第I+1个数到第N个数依次比较,如果X(I)>X(J)(J=I+1,…,N),则交换X(I)、X(J)的内容;

共重复N-1轮。

Option Base 1

Dim N As Integer,X() As Integer

Private Sub Command1_Click()  '输入成绩 

N=Val(InputBox( "请输入总人数", "", "")) 

ReDim X(N) 

Text1.Text= ""

For I=1 To N 

X(I)=Val(InputBox( "请输入第"& Str(I)_

&"个学生的成绩","成绩排序","")) 

Text1.Text=Text1.Text  & Str(X(I)) 

Next I 

End Sub 

Private Sub Command2_Click()  '排序 

For I=1 To N–1 

For J=I+1 To N 

If X(I) >X(J)Then

T=X(I) 

X(I)=X(J) 

X(J)=T 

End If 

Next J 

Next I 

Text2.Text= ""

For I=1 To N 

Text2.Text=Text2.Text  & Str(X(I)) 

Next I 

End Sub

【例8-4】删除数组中指定位置的元素,显示删除结果

分析:删除数组A中指定的Pos位置的元素,可将Pos位置元素之后的所有元素依次向前移动一位

Option Base 1

Dim N As Integer,A(20) As Integer

Private Sub Form_Load() 

Text1.Text= ""

N=20 

For I=1 To N 

A(I)=Int(Rnd*101) 

Text1.Text=Text1.Text  & Str(A(I)) 

Next I 

End Sub 

Private Sub Command1_Click() 

Pos=Val(Text2.Text) 

If Pos <=0 Or Pos>N Then

MsgBox "位置越界,请重新输入"

Text2.SetFocus 

Text2.SelStart=0 

Text2.SelLength=Len(Text2.Text) 

Else 

For I=Pos To N -1 

A(I)=A(I+1) 

Next I 

N=N-1 

Text3.Text= ""

For I=1 To N 

Text3.Text=Text3.Text  & Str(A(I)) 

Next I 

End If 

End Sub

【例8-5】将数Num插在数组A中指定的位置Pos。

如果Pos≤0,则将Num插在第1个位置

如果Pos>0,则将Num插在最后一个位置

分析:

(1)对数组中原Pos位置的元素到最后一个元素全部向后移动一个位置:

A(N+1)=A(N)

A(N)=A(N-1)

……

A(Pos+1)=A(Pos)

(2)A(Pos)=Num

设计界面:

在“通用”位置声明: 

Option Base 1

Dim N As Integer,A() As Integer 

在窗体的Load事件过程中生成20个0到100之间的随机整数,显示于文本框Text1中: 

Private Sub Form_Load() 

Text1.Text= ""

N=20 

ReDim A(N) 

For I=1 To N 

A(I)=Int(Rnd*101) 

Text1.Text=Text1.Text  & Str(A(I)) 

Next I 

End Sub 

Private Sub Command1_Click()   '插入 

Text4.Text= ""

N=N+1 

Num=Val(Text2.Text) 

Pos=Val(Text3.Text) 

ReDim Preserve A(N) 

Select Case Pos 

Case Is <=0

For I=N To 2 Step -1 

A(I)=A(I-1) 

Next I 

A(1)=Num 

Case Is >=N

A(N)=Num 

Case Else 

For I=N To Pos+1 Step -1 

A(I)=A(I-1) 

Next I 

A(Pos)=Num 

End Select 

'显示插入后的结果 

For I=1 To N 

Text4.Text=Text4.Text  & Str(A(I)) 

Next I 

End Sub

【例8-6】在窗体上输出一个N行、N列、主对角线和次对角线元素为1,其余元素均为零的矩阵。N由用户指定。

分析:……

在窗体模块的声明段声明: 

Option Base 1

Dim A() As Integer 

窗体的Click事件过程如下: 

Private Sub Form_Click() 

Cls 

Dim N As Integer,I As Integer,J As Integer 

N=Val(InputBox( "请输入N值","生成矩阵",_

"4")) 

ReDim A(N,N) As Integer'根据N定义数组大小 

'生成矩阵 

For I=1 To N 

For J=1 To N 

A(I,J)=0 

If I=J Then 

A(I,J)=1   '主对角线元素 

End If 

If I+J=N+1 Then 

A(I,J)=1   '次对角线元素 

End If 

Next J,I 

'按N行N列的格式显示矩阵 

For I=1 To N 

CurrentY=I * 300 

For J=1 To N 

CurrentX=J*300 

Print A(I,J); 

Next J 

Next I 

End Sub

运行时单击窗体,输入N值6,在窗体上打印结果如图所示。

【例8-7】求两个矩阵的积。

分析:M行N列的矩阵A与N行M列的矩阵B相乘,结果为一个M行M列的矩阵C,C矩阵中第I行第J列的元素,等于A矩阵中第I行的元素与B矩阵中第J列的元素分别相乘后再相加。即:

Dim M As Integer,N As Integer

Dim A() As Integer,B() As Integer,C() As Integer

Private Sub Form_Load() 

M=InputBox( "请输入A矩阵行数",_

"矩阵相乘","") 

N=InputBox( "请输入A矩阵列数",_

"矩阵相乘","") 

ReDim A(1 To M,1 To N),B(1 To N,1 To M),_ 

C(1 To M,1 To M) 

Randomize 

'在List1中生成包含[0,10]之间的随机整数的矩阵A 

List1.Clear 

For I=1 To M 

S1= ""

For J=1 To N 

A(I,J)=Int(Rnd*11) 

S1=S1  & Format(A(I,J),"!@@@") 

Next J 

List1.AddItem S1 

Next I 

'在List2中生成包含[0,10]之间的随机整数的矩阵B 

List2.Clear 

For I=1 To N 

S1= ""

For J=1 To M 

B(I, J)=Int(Rnd*11) 

S1=S1  & Format(B(I,J),"!@@@") 

Next J 

List2.AddItem S1 

Next I 

End Sub 

Private Sub Command1_Click() 

'求A矩阵与B矩阵的积C矩阵,并显示在List3中 

List3.Clear 

For I=1 To M 

S1= ""

For J=1 To M 

C(I,J)=0 

For K=1 To N 

C(I,J)=C(I,J)+A(I,K)*B(K,J) 

Next K 

S1=S1  & Format(C(I,J),"!@@@@@") 

Next J 

List3.AddItem S1 

Next I 

End Sub

第五节 控件数组

控件数组的定义:

控件数组的表示:<控件数组名> <控件数组名>(<索引>)

一、控件数组的建立

1.将多个控件取相同的名称

2.复制、粘贴现有的控件

3.给控件设置一个Index属性值

二、控件数组的使用

同一个控件数组的所有控件共享同一事件过程。该过程返回参数Index表示在哪个控件上发生该事件。

例如:命令按钮数组Command1的单击事件过程为:

Private Sub Command1_Click(Index As Integer)

'在此过程中可以根据Index的值决定

'当前按下哪个按钮,以便做相应的处理

End Sub

【例8-8】设计如图所示的界面,创建一选项按钮控件数组(Option1)。运行时,当按下某一选项按钮时,对图形设置相应的填充颜色。

Private Sub Option1_Click(Index As Integer) 

Select Case Index

Case 0 

Shape1.FillColor=vbWhite 

Case 1 

Shape1.FillColor=vbBlue 

…… 

Case 6 

Shape1.FillColor=vbYellow 

End Select 

End Sub

【例8-12】创建图形控件数组S1,包含6个圆,当按下"移动"按钮时,所有圆全部向下移动100Twips,当移动到窗体底部时,返回窗体顶部。界面如下:

"移动"按钮的Click事件过程如下: 

Private Sub Command1_Click() 

For I=0 To 5 

If S1(I).Top+S1(I).Height >Form1.ScaleHeight Then

S1(I).Top=0 

Else 

S1(I).Top=S1(I).Top+100 

End If 

Next I 

End Sub

本章小结

1.数组的基本概念

数组名、数组元素、下标、数组的维数

2.固定大小的数组的定义

Public|Private|Dim<数组名>[(<维数定义>)]

[As<类型>],…

3.动态数组的定义

(1)Public|Private|Dim<数组名>()[As<类型>],…

(2)ReDim<数组名>(<维数定义>)[As<类型>],…

4.数组的使用

(1)数组在定义后被初始化

(2)固定大小数组使用语句:Erase<数组名>初始化

(3)动态数组使用:Erase<数组名>释放存储空间

(4)数组元素的输入:赋值、IntputBox、Array函数

(5)数组元素的输出:Print、Label、TextBox等

(6)保留动态数组中的内容

ReDim Preserve<数组名>(<维数定义>)

5.控件数组

(1)控件数组的表示:<控件数组名> <控件数组名>(<索引>)

(2)控件数组的建立

a.将多个控件取相同的名称

b.复制、粘贴现有的控件

c.给控件设置一个Index属性值

(3)控件数组的使用

同一个控件数组的所有控件共享同一事件过程。

注意使用该过程返回的参数Index。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多