2019最新第06章数组数学
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Visual Basic
第六章 数组
数组的概念
数组是变量的集合。
该集合中的所有变量名称相同、类型相同,下标
不同。
例如: 数组名
w(2)
下标
x(100, 20)
行标 列标
两种数组
静态数组:
在运行时总是保持固定的大小。
动态数组:
在运行时数组的大小可以改变。
数组的维数
一维数组 —— 数组元素具有一个下标。 二维数组 —— 数组元素具有两个下标。 n 维数组 —— 数组元素具有 n 个下标。
题型:删除数组中的数据
x = InputBox("X=")
Print: Print "X="; x: Print flag = False For i = 1 To n If a(i) = x Then
flag = True
k=i Exit For End If Next i
题型:删除数组中的数据
题型:搜索
x = InputBox(“X=”) : t = False
For i = 1 To n If a(i) = x Then t = True : Exit For End If Next i If t Then Print "X="; x; "找到" Else Print "X="; x; "未找到" End If
Randomize
For i = 1 To 20 a(i) = 10 + Int(90 * Rnd) Print a(i); Next i: Print: Print
冒泡法排序
For i = 20 To 2 Step -1
For j = 1 To i - 1
If a(j) < a(j + 1) Then k = a(j): a(j) = a(j + 1): a(j + 1) = k
字符串数组中的全部元素都初始化为空字符串。
数组的声明
例如: Dim x As Single, a(4) As Single, b(4, 1) As Single
x
a(0)
a(1)
a(2)
a(3) a(4)
b(0,0) b(1,0) b(2,0) b(3,0) b(4,0)
b(0,1) b(1,1) b(2,1) b(3,1) b(4,1)
Dim j As Integer, k As Integer
Randomize For i = 1 To 20 a(i) = 10 + Int(90 * Rnd) Print a(i);
Next i: Print: Print
选择法排序
For i = 1 To 19 For j = i + 1 To 20 If a(i) < a(j) Then k = a(i): a(i) = a(j): a(j) = k
Loop
Print “1 的数目:”; a(1) Print “2 的数目:”; a(2) Print “3 的数目:”; a(3) End Sub
按分数段统计学生成绩
例题:统计各分数段(0~59、60~69、70~79、80~89、
90~100)的学生人数。学生成绩从键盘输入,以 –1 为终止标 志。 Private Sub Command开始_Click() Dim a(10) As Integer, x As Integer, i As Integer For i = 0 To 10 a(i) = 0
Next i
x = InputBox(vbCrLf + “请输入学生成绩")
按分数段统计学生成绩
Do While x <> -1
a(Int( x/10)) = a( Int(x/10) ) + 1 x = InputBox(vbCrLf + “请输入学生成绩") Loop Print “0 ~ 59 =”; a(0)+a(1)+a(2)+a(3)+a(4)+a(5)
Dim score(100) As Single, aver As Single
Dim n As Integer, i As Integer n = InputBox(vbCrLf + vbCrLf + "请输入学生人数") aver = 0 For i = 1 To n
score(i) = InputBox("请输入成绩")
Print “60 ~ 69 =”; a(6)
Print “70 ~ 79 =”; a(7) Print “80 ~ 89 =”; a(8) Print “90 ~ 100 =”; a(9) + a(10) End Sub
用筛选法求素数
例题:用筛选法求1000以内的所有素数。 算法:1)将数2~1000放入“筛”中; 2)找出其中最小的数(素数),然后筛去其所有倍数。 3)重复第二步,直至“筛”中为空。
Dim x As Integer, i As Integer Dim k As Integer, flag As Boolean n = InputBox(“N=”) Print For i = 1 To n a(i) = Int(90 * Rnd + 10)
Print a(i);
Next i: Print
题型:搜索
例题:将 n 个(n < 100)两位随机整数存入数组 a ,在数组中
搜索是否存在数 x 。
ห้องสมุดไป่ตู้
题型:搜索
Dim n As Integer, a(100) As Integer
Dim x As Integer, i As Integer, t As Boolean n = InputBox("N=") For i = 1 To n a(i) = Int(90 * Rnd + 10) If i Mod 5 = 0 Then Print a(i) Else Print a(i), End If Next i : Print
Print a(i);
Next i : Print
题型:最大值和最小值
min = a(1) :max = a(1) For i = 2 To n If a(i) > max Then max = a(i)
If a(i) < min Then min = a(i)
Next i Print “最大值为 ”; max Print “最小值为 ”; min
增删数组元素的值
删除数组元素的值 插入数组元素的值
附加数组元素的值
题型:删除数组中的数据
例题:将 n 个(n < 100)两位随机整数存入数组 a ,在数组中
搜索是否存在数 x 。如果存在,则将其删除。
1
2
3
k
n
73 58 62 …
78 … 15 95 42
题型:删除数组中的数据
Dim n As Integer, a(100) As Integer
If Not flag Then
Print “无可删除的数据" Else For i = k To n - 1 a(i) = a(i + 1)
Next I : n = n - 1
For i = 1 To n Print a(i); Next i End If
题型:统计
例题:统计用户从键盘上输入的1、2 和 3 的个数,当输入的数
…
x(10) = 100
…
逆序打印 n 个整数
逆序打印 n 个整数
Dim n As Integer, a(100) As Integer, i As Integer
n = InputBox(vbCrLf + vbCrLf + "n=") Print: Print "正序打印" For i = 1 To n a(i) = i Print a(i), Next i Print: Print: Print "逆序打印" For i = n To 1 Step -1 Print a(i), Next i
End If
Next j Print a(i); Next i: Print a(20) End Sub
冒泡法排序
例题:利用随机函数产生 20 个 2 位的随机整数,按从大到小
的顺序进行排序。 Private Sub Command开始_Click() Dim a(20) As Integer, i As Integer Dim j As Integer, k As Integer
b(-2,2) b(-1,2) b(0,2) b(1,2) b(2,2)
数组的大小
数组每一维的大小为:
上界-下界 + 1 。
整个数组的大小为:
各维大小的乘积。
数组元素的引用
引用一维数组元素的形式为:
数组名(下标表达式)
注意:数组的下标必须为整数,下标表达式应为数值型表达式, 若下标表达式的值不为整数,则 VB 会自动取整。 例如: Dim x(10) As Integer ‘ 声明 x 数组有11个元素 ‘ 对 x(10) 这个数组元素赋值
例如: a (3) b (12, 5) 一维数组 二维数组
c (2, 4, 8)
m (2, 3, …6)
三维数组
n 维数组
数组的声明
数组必须 先声明、后使用。
声明数组的四个属性
名称 维数
大小 类型
数组的声明
数组声明时的语法:
Dim 数组名(下标[,下标…]) [As 类型]
说明:1、“下标”的一般形式为: [下界 To ] 上界 如果不显式指定下标的“下界”,则缺省的下标下界为 0。 2、数组声明后,数值数组中的全部元素都初始化为 0,
数组的声明
注意: 使用 Option Base 语句指定数组的下标下界从 1 开始。
Option Base 1
Dim a(4) As Single, b(-2 To 2, 2) As Single
a(1) a(2) a(3) a(4)
b(-2,1) b(-1,1) b(0,1) b(1,1) b(2,1)
值不在此范围内时结束输入,输出统计结果。 Option Base 1 Private Sub Command开始_Click() Dim a(3) As Integer, x As Integer, i As Integer For i = 1 To 3 a(i) = 0
Next i
题型:统计
x = InputBox(vbCrLf + "请输入一个数") Do While x >= 1 And x <= 3 a(x) = a(x) + 1 x = InputBox(vbCrLf + "请输入一个数")
Private Sub Command开始_Click()
Dim a(2 To 1000) As Integer, i As Integer, j As Integer For i = 2 To 1000 a(i) = i Next i
用筛选法求素数
For i = 2 To 1000
If a(i) <> 0 Then
题型:最大值和最小值
例题:随机产生 n 个两位整数,找出其中的最大值和最小值。
Dim min%, max%, n%, i%, a(100) As Integer
n = InputBox(vbCrLf + vbCrLf + "n=")
Print "产生的随机数为" Randomize For i = 1 To n a(i) = Int(Rnd * 90)+ 10
a(0)
a(1)
a(2)
… a(n)
一维数组
习题课
题型:求和
例题:从键盘上输入 n 个同学的考试成绩,输出高于平均成绩 的分数。( n < 100 ) 该问题可分三个步骤处理:
一、输入 n 个人的成绩;
二、求平均分数; 三、把这 n 个分数逐一和平均成绩进行比较, 若高于平均成绩,则打印输出。
题型:求和
Print a(i); For j = a(i) To 1000 Step a(i) a(j) = 0 Next j
End If
Next i : Print End Sub
题型:排序
选择法排序
冒泡法排序
选择法排序
例题:利用随机函数产生 20 个 2 位的随机整数,按从大到小
的顺序进行排序。
Private Sub Command开始_Click() Dim a(20) As Integer, i As Integer
Print score(i); aver = aver + score(i) Next i : Print
题型:求和
aver = Round(aver / n , 1)
Print “平均成绩 = ”; aver Print “以下为高于平均成绩的成绩” For i = 1 To n If score(i) > aver Then Print score(i); Next i
第六章 数组
数组的概念
数组是变量的集合。
该集合中的所有变量名称相同、类型相同,下标
不同。
例如: 数组名
w(2)
下标
x(100, 20)
行标 列标
两种数组
静态数组:
在运行时总是保持固定的大小。
动态数组:
在运行时数组的大小可以改变。
数组的维数
一维数组 —— 数组元素具有一个下标。 二维数组 —— 数组元素具有两个下标。 n 维数组 —— 数组元素具有 n 个下标。
题型:删除数组中的数据
x = InputBox("X=")
Print: Print "X="; x: Print flag = False For i = 1 To n If a(i) = x Then
flag = True
k=i Exit For End If Next i
题型:删除数组中的数据
题型:搜索
x = InputBox(“X=”) : t = False
For i = 1 To n If a(i) = x Then t = True : Exit For End If Next i If t Then Print "X="; x; "找到" Else Print "X="; x; "未找到" End If
Randomize
For i = 1 To 20 a(i) = 10 + Int(90 * Rnd) Print a(i); Next i: Print: Print
冒泡法排序
For i = 20 To 2 Step -1
For j = 1 To i - 1
If a(j) < a(j + 1) Then k = a(j): a(j) = a(j + 1): a(j + 1) = k
字符串数组中的全部元素都初始化为空字符串。
数组的声明
例如: Dim x As Single, a(4) As Single, b(4, 1) As Single
x
a(0)
a(1)
a(2)
a(3) a(4)
b(0,0) b(1,0) b(2,0) b(3,0) b(4,0)
b(0,1) b(1,1) b(2,1) b(3,1) b(4,1)
Dim j As Integer, k As Integer
Randomize For i = 1 To 20 a(i) = 10 + Int(90 * Rnd) Print a(i);
Next i: Print: Print
选择法排序
For i = 1 To 19 For j = i + 1 To 20 If a(i) < a(j) Then k = a(i): a(i) = a(j): a(j) = k
Loop
Print “1 的数目:”; a(1) Print “2 的数目:”; a(2) Print “3 的数目:”; a(3) End Sub
按分数段统计学生成绩
例题:统计各分数段(0~59、60~69、70~79、80~89、
90~100)的学生人数。学生成绩从键盘输入,以 –1 为终止标 志。 Private Sub Command开始_Click() Dim a(10) As Integer, x As Integer, i As Integer For i = 0 To 10 a(i) = 0
Next i
x = InputBox(vbCrLf + “请输入学生成绩")
按分数段统计学生成绩
Do While x <> -1
a(Int( x/10)) = a( Int(x/10) ) + 1 x = InputBox(vbCrLf + “请输入学生成绩") Loop Print “0 ~ 59 =”; a(0)+a(1)+a(2)+a(3)+a(4)+a(5)
Dim score(100) As Single, aver As Single
Dim n As Integer, i As Integer n = InputBox(vbCrLf + vbCrLf + "请输入学生人数") aver = 0 For i = 1 To n
score(i) = InputBox("请输入成绩")
Print “60 ~ 69 =”; a(6)
Print “70 ~ 79 =”; a(7) Print “80 ~ 89 =”; a(8) Print “90 ~ 100 =”; a(9) + a(10) End Sub
用筛选法求素数
例题:用筛选法求1000以内的所有素数。 算法:1)将数2~1000放入“筛”中; 2)找出其中最小的数(素数),然后筛去其所有倍数。 3)重复第二步,直至“筛”中为空。
Dim x As Integer, i As Integer Dim k As Integer, flag As Boolean n = InputBox(“N=”) Print For i = 1 To n a(i) = Int(90 * Rnd + 10)
Print a(i);
Next i: Print
题型:搜索
例题:将 n 个(n < 100)两位随机整数存入数组 a ,在数组中
搜索是否存在数 x 。
ห้องสมุดไป่ตู้
题型:搜索
Dim n As Integer, a(100) As Integer
Dim x As Integer, i As Integer, t As Boolean n = InputBox("N=") For i = 1 To n a(i) = Int(90 * Rnd + 10) If i Mod 5 = 0 Then Print a(i) Else Print a(i), End If Next i : Print
Print a(i);
Next i : Print
题型:最大值和最小值
min = a(1) :max = a(1) For i = 2 To n If a(i) > max Then max = a(i)
If a(i) < min Then min = a(i)
Next i Print “最大值为 ”; max Print “最小值为 ”; min
增删数组元素的值
删除数组元素的值 插入数组元素的值
附加数组元素的值
题型:删除数组中的数据
例题:将 n 个(n < 100)两位随机整数存入数组 a ,在数组中
搜索是否存在数 x 。如果存在,则将其删除。
1
2
3
k
n
73 58 62 …
78 … 15 95 42
题型:删除数组中的数据
Dim n As Integer, a(100) As Integer
If Not flag Then
Print “无可删除的数据" Else For i = k To n - 1 a(i) = a(i + 1)
Next I : n = n - 1
For i = 1 To n Print a(i); Next i End If
题型:统计
例题:统计用户从键盘上输入的1、2 和 3 的个数,当输入的数
…
x(10) = 100
…
逆序打印 n 个整数
逆序打印 n 个整数
Dim n As Integer, a(100) As Integer, i As Integer
n = InputBox(vbCrLf + vbCrLf + "n=") Print: Print "正序打印" For i = 1 To n a(i) = i Print a(i), Next i Print: Print: Print "逆序打印" For i = n To 1 Step -1 Print a(i), Next i
End If
Next j Print a(i); Next i: Print a(20) End Sub
冒泡法排序
例题:利用随机函数产生 20 个 2 位的随机整数,按从大到小
的顺序进行排序。 Private Sub Command开始_Click() Dim a(20) As Integer, i As Integer Dim j As Integer, k As Integer
b(-2,2) b(-1,2) b(0,2) b(1,2) b(2,2)
数组的大小
数组每一维的大小为:
上界-下界 + 1 。
整个数组的大小为:
各维大小的乘积。
数组元素的引用
引用一维数组元素的形式为:
数组名(下标表达式)
注意:数组的下标必须为整数,下标表达式应为数值型表达式, 若下标表达式的值不为整数,则 VB 会自动取整。 例如: Dim x(10) As Integer ‘ 声明 x 数组有11个元素 ‘ 对 x(10) 这个数组元素赋值
例如: a (3) b (12, 5) 一维数组 二维数组
c (2, 4, 8)
m (2, 3, …6)
三维数组
n 维数组
数组的声明
数组必须 先声明、后使用。
声明数组的四个属性
名称 维数
大小 类型
数组的声明
数组声明时的语法:
Dim 数组名(下标[,下标…]) [As 类型]
说明:1、“下标”的一般形式为: [下界 To ] 上界 如果不显式指定下标的“下界”,则缺省的下标下界为 0。 2、数组声明后,数值数组中的全部元素都初始化为 0,
数组的声明
注意: 使用 Option Base 语句指定数组的下标下界从 1 开始。
Option Base 1
Dim a(4) As Single, b(-2 To 2, 2) As Single
a(1) a(2) a(3) a(4)
b(-2,1) b(-1,1) b(0,1) b(1,1) b(2,1)
值不在此范围内时结束输入,输出统计结果。 Option Base 1 Private Sub Command开始_Click() Dim a(3) As Integer, x As Integer, i As Integer For i = 1 To 3 a(i) = 0
Next i
题型:统计
x = InputBox(vbCrLf + "请输入一个数") Do While x >= 1 And x <= 3 a(x) = a(x) + 1 x = InputBox(vbCrLf + "请输入一个数")
Private Sub Command开始_Click()
Dim a(2 To 1000) As Integer, i As Integer, j As Integer For i = 2 To 1000 a(i) = i Next i
用筛选法求素数
For i = 2 To 1000
If a(i) <> 0 Then
题型:最大值和最小值
例题:随机产生 n 个两位整数,找出其中的最大值和最小值。
Dim min%, max%, n%, i%, a(100) As Integer
n = InputBox(vbCrLf + vbCrLf + "n=")
Print "产生的随机数为" Randomize For i = 1 To n a(i) = Int(Rnd * 90)+ 10
a(0)
a(1)
a(2)
… a(n)
一维数组
习题课
题型:求和
例题:从键盘上输入 n 个同学的考试成绩,输出高于平均成绩 的分数。( n < 100 ) 该问题可分三个步骤处理:
一、输入 n 个人的成绩;
二、求平均分数; 三、把这 n 个分数逐一和平均成绩进行比较, 若高于平均成绩,则打印输出。
题型:求和
Print a(i); For j = a(i) To 1000 Step a(i) a(j) = 0 Next j
End If
Next i : Print End Sub
题型:排序
选择法排序
冒泡法排序
选择法排序
例题:利用随机函数产生 20 个 2 位的随机整数,按从大到小
的顺序进行排序。
Private Sub Command开始_Click() Dim a(20) As Integer, i As Integer
Print score(i); aver = aver + score(i) Next i : Print
题型:求和
aver = Round(aver / n , 1)
Print “平均成绩 = ”; aver Print “以下为高于平均成绩的成绩” For i = 1 To n If score(i) > aver Then Print score(i); Next i