vb

个人日记

 

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

一、一维数组

1、定义格式:

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

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

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

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

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

      2option base 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%0 to 30 to 3)声明了一个44列的数组,包含16个数组元素

      dim b%1 to 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 = 1 To 4

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

        Print a(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 = 1 To 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 = 1 To 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

        Print a(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

       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

程序代码:

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

              End if

       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 = 1 To 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

文章评论

小小桂

旧书不厌百回读,熟读精思子自知。——苏轼