VB6

个人日记

 6部分 数组(先定义后使用

一、一维数组

1、定义格式:

       Dim 数组名([下标的下界 to] 下标的上界) [as 数据类型]

例子:dim a%1to 10  ------声明数组a,包含10个数组元素,第一个数组元素是a(1)

      dimb%(7)         ------声明数组b,包含8个数组元素,第一个数组元素是a(0)

      dim c%(-1to 3)     -----包含5个数组元素

说明:1)下标:数组下标是连续的;数组声明时,前小后大;省略下标下界默认从0开始

      2optionbase 0/1:指定省略的数组下标下界

      3)数组元素个数=上界-下界+1

例子:

Option base 1

Dim s%(-2 to 3) ------包含6个数组元素

Dim t%(4)   ------包含4个数组元素

Dim m%(-2)   ------- Dim m%(1 to-2)    错误的声明

请问:aia(i)一样吗?不一样!!

2、数组使用:

数组名(下标)   -----在使用中下标可以是常量或者变量

3、数组的赋值:

例子:dim a%(1 to 4)

      a(1)=100        -------直接赋值

      for i=1 to 4      --------for循环相结合(建立循环变量和数组下标对应关系)

              a(i) =int(rnd*90+10)

      next

4、数组的输出:

Print a(2)            ------直接输出

For i=1 to 4          -----for相结合

       Print a(i)

Next

5、例题:(定义数组----->完成数组赋值和输出----->根据要求完成操作)

1)找出20个数中的最大值。

Option Base 1

Private Sub Command1_Click()

Dim a%(20)

For i = 1 To 20      '完成数组赋值和原始数据输出

   a(i) = Int(Rnd * 90 + 10)

   Print a(i)

Next

'根据题完成操作

t = a(1)

For i = 2 To 20

   If a(i) > t Then t = a(i)

Next

Print "最大值是:"; t

End Sub

 

2)找出10个数中的奇数

Option Base 1

Private Sub Command1_Click()

Dim a%(10)

For i = 1 To 10

   a(i) = Int(Rnd * 90 + 10)

   Print a(i)

Next

Print

Print

For i = 1 To 10

   If a(i) Mod 2 <> 0 Then Print a(i)

Next

End Sub

3)将10个数组元素逆序存放(算法10:数组逆序存放

Private Sub Command1_Click()

Dim a%(1 To 10)

For i = 1 To 10

   a(i) = Int(Rnd * 90 + 10)

   Print a(i);

Next

Print

'实现交换

For i = 1 To 5

   t = a(i)

   a(i) = a(11 - i)

   a(11 - i) = t

Next

'输出交换之后的数据

For i = 1 To 10

   Print a(i);

Next

End Sub

4)求fibonacci的前20项(算法11fibonacci   11235813213455……

Private Sub Command1_Click()

Dim t%(1 To 20)

t(1) = 1

t(2) = 1

For i = 3 To 20

   t(i) = t(i - 1) + t(i - 2)

Next

For i = 1 To 20

   Print t(i)

Next

End Sub

 

二、二维数组

1、定义格式:

       Dim 数组名([下界to] 上界,[下界 to] 上界) [as 数据类型]

       Dim 数组名(行,列) [as 数据类型]

例子:dim a%33  ----- dim a%0to 30 to 3)声明了一个44列的数组,包含16个数组元素

      dim b%1to 2,1 to 3 ------b(1,1)  b(1,2)  b(1,3) b(2,1)  b(2,2)   b(2,3)

说明:二维数组元素的个数=行数*列数

2、数组使用:

数组名(行号,列号) --------行号和列号可以是常量也可以是变量

3、数组赋值

直接赋值:a(1,1)=2000

for结合:

    Option base 1

       Dim a%(3,3)

       For i=1 to 3

              For j=1 to 3

                     a(i,j) = int(rnd*90+10)

next

next

25

39

89

70

45

56

37

82

54

4、数组输出

直接输出:print a(1,1)

for结合:

       For i=1 to 3

              For j=1 to 3

                     Print a(i,j) ;

Next

Print

next

5、例题

1)求4×4矩阵主对角线、副对角线、周边元素和(算法12:矩阵

Option Base 1

Private Sub Command1_Click()

Dim a%(4, 4)

For i = 1 To 4

    For j = 1To 4

        a(i, j)= Int(Rnd * 9 + 1)

        Printa(i, j);

    Next

    Print

Next

'主对角线元素和

s = 0

For i = 1 To 4

    s = s +a(i, i)

Next

Print s

'副对角线元素和

t = 0

For i = 1 To 4

    t = t +a(i, 5 - i)

Next

Print t

'周边元素和

s = 0

For i = 1 To 4

    For j = 1To 4

        If i =1 Or i = 4 Or j = 1 Or j = 4 Then s = s + a(i, j)

    Next

Next

Print s

End Sub

2)杨辉三角(算法13:杨辉三角

Option Base 1

Private Sub Command1_Click()

Dim a%(5, 5)

For i = 1 To 5

    For j = 1To i

        If i =j Or j = 1 Then

           a(i, j) = 1

        Else

           a(i, j) = a(i - 1, j) + a(i - 1, j - 1)

        End If

        Printa(i, j);

    Next

    Print

Next

End Sub

 

周一,晚600b427

周三,晚600b427

周日,下午130b427

经典算法:

1)利用选择排序法将10个数组元素按照从小到大的顺序进行排序(算法14选择排序

分析:

1轮:a(1)a(2)~a(10)

i轮:a(i)a(i+1)~a(10)

本地图片,请重新上传2轮:a(2)a(3)~a(10)

3轮:a(3)a(4)~a(10)

4轮:a(4)a(5)~a(10)

5轮:a(5)a(6)~a(10)

6轮:a(6)a(7)~a(10)

7轮:a(7)a(8)~a(10)

8轮:a(8)a(9)~a(10)

9轮:a(9)a(10)

外层控制轮次,内层每一轮的比较

For i=1 to 9

       Forj=i+1 to 10

              Ifa(i) >a(j) then

                     t=a(i)

a(i)=a(j)

a(j)=t

              Endif

       next

next

程序代码:

Private Sub Command1_Click()

Dim a%(1 To 10)

For i = 1 To 10

    a(i) =Int(Rnd * 90 + 10)

    Print a(i);

Next

Print

'利用选择排序法完成递增排序

For i = 1 To 9

    For j = i +1 To 10

        If a(i)> a(j) Then

            t =a(i)

           a(i) = a(j)

           a(j) = t

        End If

    Next

Next

'输出排序后的数组内容

For i = 1 To 10

    Print a(i);

Next

End Sub

2)利用冒泡排序法将10个数组元素按照从小到大的顺序进行排序(算法15冒泡排序

分析:


1轮:a(1)~a(2)

              a(2)~a(3)

a(3)~a(4)

a(4)~ a(5)

              a(5)~ a(6)

a(6)~ a(7)

a(7)~ a(8)

              a(8)~ a(9)

a(9)~ a(10)

2a(1)~ a(2)

              a(2)~ a(3)

a(3)~ a(4)

a(4)~ a(5)

              a(5)~ a(6)

a(6)~ a(7)

a(7)~ a(8)

              a(8)~ a(9)

3a(1)~ a(2)

              a(2)~ a(3)

a(3)~ a(4)

a(4)~ a(5)

              a(5)~ a(6)

a(6)~ a(7)

a(7)~ a(8)

4a(1)~ a(2)

              a(2)~ a(3)

a(3)~ a(4)

a(4)~ a(5)

              a(5)~ a(6)

a(6)~ a(7)

5a(1)~ a(2)

              a(2)~ a(3)

a(3)~ a(4)

a(4)~ a(5)

              a(5)~ a(6)

6a(1)~ a(2)

              a(2)~ a(3)

a(3)~ a(4)

a(4)~ a(5)

7a(1)~ a(2)

              a(2)~ a(3)

a(3)~ a(4)

8a(1)~ a(2)

              a(2)~ a(3)

9a(1)~ a(2)

 


 

外层控制轮次,内层控制每轮的比较

For i=1 to 9

       For j=1 to 10-i

              If a(j)>a(j+1) then

                     t=a(j)

                     a(j)=a(j+1)

                     a(j+1)=t

              Endif

       next

next

程序代码:

Private Sub Command1_Click()

Dim a%(1 To 10)

For i = 1 To 10

    a(i) = Int(Rnd * 90 + 10)

    Print a(i);

Next

Print

'冒泡排序

For i = 1 To 9

    For j = 1To 10 - i

        If a(j)> a(j + 1) Then

            t =a(j)

           a(j) = a(j + 1)

            a(j+ 1) = t

        End If

    Next

Next

'完成排序后数组输出

For i = 1 To 10

    Print a(i);

Next

End Sub

 

三、动态数组(定义时大小不确定)

1、定义

       格式:

               Dim 数组名() as 数据类型               ------数组定义

               Redim 数组名(下标说明)          ------数组重定义,下标可以是变量

      例子:

              Dim a%()

              Redim a1 to 33

              ......

              Redim a-1 to 4

       说明:

1)redim可以反复使用,可以改变数组的大小和维数,不能改变数组的类型

2) 每次使用redim都会清空原有内容,回到dim状态;如果要保留原有数据,用preserve(使用presrve只能改变最后一维的上界)

例子:

        Dim a%()

        Redim a1 to 4

10

20

30

40

        For i=1 to 4

               a(i)=i*10

        next

        redim preserve a(3)

        dim b%()

        redim b(2,3)

        ……

        Redim preserve b(2,2)

记住:完成重定义后,参照一、二维数组进行操作

2array函数

格式:数组名=array(数组元素值)

说明:1)数组:变体类型的动态数组或者是变体类型的变量

         2)动态数组------->一维数组

         3)下标:下界由option base指定或者是默认为0

                        上界:由下界和元素个数共同决定


四、数组的相关函数和语句

1、下界测试函数

       Lbound(数组名[,维数]

2、上界测试函数

       ubound(数组名[,维数]

例子:

       Dima(1 to 3,4) as integer

       Printlbound(a)         -----1

       Printubound(a,2)              -----4

       Printlbound(a,2)     -----0

3、数组清除语句

       Erase数组名1,数组名2……

       功能:清空数组内容;动态数组回到dim状态,若想再次使用需要redim

五、控件数组

1、概念:相同类型控件;name属性相同;index不同

2、建立:复制---粘贴

3、控件数组编程一般和selec case结合使用

Private Sub Command1_Click(Index As Integer)

Select Case Index

   Case 0

       Form1.BackColor = vbRed

   Case 1

       Form1.BackColor = vbBlue

End Select

End Sub

4、某个控件数组对象名称:Command1(1).Caption = "蓝色"

六、列表框和组合框

北京

上海

天津

鞍山

(一)列表框:list1

1.功能:只能选择不能输入

2.属性:

       List:利用属性窗口输入内容(ctrl+回车)

       List(i)i为索引号,利用代码为列表框添加内容(覆盖添加)

              例子:List1.List(1)= "沈阳"

                       Print list1.list(3)

       Listcount:条目计算(动态)

       Listindex:程序运行时,鼠标选中项的索引号(动态)

                       请记住:没有选中项时,值为-1

       Text:程序运行时,鼠标选择项的内容(动态)

              记住:list1.text  ------ list1.list(list1.listindex)

       Selected(i):索引号为i的条目的选择状态(动态) true:选中;false:没有选中

Private Sub Command1_Click()

For i = 0 To List1.ListCount - 1

    PrintList1.Selected(i)

Next

End Sub

       Multiselect01项;1:鼠标多选;2:借助控制键(ctrlshift)进行多选(只读)

       Style0:标准;1:复选框样式(只读)

                注意:当styel1multiselect0,但是可以多选!!

       Sorted:排序   true:字母增序;false:按输入序(只读)

3.事件:clickdblclick

4.方法:

1additem:为列表框添加内容

       格式:对象名.additem 项目内容[,索引号]

     例子:list1.additem “外语学院”,1

       功能:后移添加;省略索引号为尾部添加

2removeitem:删除列表框的一个条目

       格式:对象名.removeitem 索引号

       例子:List1.RemoveItem2

       功能:删除上移

3clear:清除列表框的全部内容

       例子:lsit1.clear

5、例题

Private Sub Command1_Click()

本地图片,请重新上传If List1.ListIndex = -1 Then

   MsgBox "请选择考试科目!"

Else

   If Option1.Value = True Then

       Text1.Text = List1.Text + "笔试"

   ElseIf Option2.Value = True Then

       Text1.Text = List1.Text + "上机"

   Else

       MsgBox "请选择考试类型!"

   End If

End If

End Sub 

文章评论