小小桂
旧书不厌百回读,熟读精思子自知。——苏轼
欢迎访问我的空间小站.
个人日记
第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开始
2)option 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) 错误的声明
请问:ai和a(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
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
'实现交换
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项(算法11:fibonacci) 1,1,2,3,5,8,13,21,34,55,……
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%(3,3) ----- dim a%(0 to 3,0 to 3)声明了一个4行4列的数组,包含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
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
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
Next
End Sub
周一,晚6:00,b427
周三,晚6:00,b427
周日,下午1:30,b427
经典算法:
1)利用选择排序法将10个数组元素按照从小到大的顺序进行排序(算法14:选择排序)
分析:
第1轮:a(1):a(2)~a(10)
第i轮:a(i):a(i+1)~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
'利用选择排序法完成递增排序
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)
第2轮: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)
第3轮: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)
第4轮:a(1)~ a(2)
a(2)~ a(3)
a(3)~ a(4)
a(4)~ a(5)
a(5)~ a(6)
a(6)~ a(7)
第5轮:a(1)~ a(2)
a(2)~ a(3)
a(3)~ a(4)
a(4)~ a(5)
a(5)~ a(6)
第6轮:a(1)~ a(2)
a(2)~ a(3)
a(3)~ a(4)
a(4)~ a(5)
第7轮:a(1)~ a(2)
a(2)~ a(3)
a(3)~ a(4)
第8轮:a(1)~ a(2)
a(2)~ a(3)
第9轮:a(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
'冒泡排序
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 a(1 to 3,3)
......
Redim a(-1 to 4)
说明:
1) redim可以反复使用,可以改变数组的大小和维数,不能改变数组的类型
2) 每次使用redim都会清空原有内容,回到dim状态;如果要保留原有数据,用preserve(使用presrve只能改变最后一维的上界)
例子:
Dim a%()
Redim a(1 to 4)
文章评论小小桂旧书不厌百回读,熟读精思子自知。——苏轼 |