版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 利用数组可以有效地存储和处理成批数据利用数组可以有效地存储和处理成批数据 本章主要内容 数组的概念数组的概念 数组的声明和应用数组的声明和应用 动态数组动态数组 For Each.NextFor Each.Next循环语句循环语句 控件数组控件数组 程序举例程序举例 第第6 6章章 数数 组组 6.1.1 数组与数组元素数组与数组元素 简单变量用一个变量名标识,不同的变量使用不同的简单变量用一个变量名标识,不同的变量使用不同的 变量名表示。处理成批的数据时,必须使用数组来处理表变量名表示。处理成批的数据时,必须使用数组来处理表 示示100个学生的成绩,采用简单变量来表示:个学生的成绩,采用简
2、单变量来表示: s1,s2,s3, s99,s100 采用数组来表示:采用数组来表示:t(0), t(1), t(2), t(98), t(99) t(k) (k=0,1,2,99)为数组元素为数组元素(或称或称下标变量下标变量),它表,它表 示第示第k个学生的成绩个学生的成绩, k称为下标变量的称为下标变量的下标下标 数组的一个主要特点是通过下标数组的一个主要特点是通过下标(相当于索引相当于索引)来引用来引用 数组元素数组元素 6.1 数组的概念数组的概念 例如计算这例如计算这100个学生成绩的平均分,可用:个学生成绩的平均分,可用: S S0 0 For k=0 To 99For k=0
3、To 99 S = S + t(k) S = S + t(k) 累加分数累加分数 Next kNext k Aver=S/100 Aver=S/100 求平均分求平均分 数组是一组按一定顺序排列的数据的集合数组是一组按一定顺序排列的数据的集合 例如,学生成绩例如,学生成绩t(0), t(1), t(99) 是一个数组是一个数组 三元一次方程组的系数矩阵三元一次方程组的系数矩阵 a11 a12 a13 A a21 a22 a23 a31 a31 a33 也是一个数组也是一个数组 数组名数组名(不能与简单变量同名不能与简单变量同名);数组类型;数组类型 又称有序的变量又称有序的变量下标变量下标变量
4、 默认情况下,下标从默认情况下,下标从0开始开始 例如,由一行共例如,由一行共5个元素组成的数组个元素组成的数组x,它的,它的5个下标变个下标变 量为:量为: x(0) x(1) x(2) x(3) x(4) 由三行四列元素组成的数组由三行四列元素组成的数组y,它的,它的12个下标变量可表个下标变量可表 示为:示为: y(0,0) y(0,1) y(0,2) y(0,3) y(1,0) y(1,1) y(1,2) y(1,3) y(2,0) y(2,1) y(2,2) y(2,3) 下标变量下标变量与与简单变量简单变量具有基本相同的性质和作用具有基本相同的性质和作用 数组元素数组元素 下标用来
5、标明该下标变量在数组中的位置下标用来标明该下标变量在数组中的位置 下标可以是常数值,也可以是变量下标可以是常数值,也可以是变量(包括下标变包括下标变 量量)或数值表达式或数值表达式 例如:例如: 若若x(2)=10, k=2,则,则y(x(2)就是就是y(10), y(x(2)+k)就是就是y(12) 只要有规则地改变下标值,就可以很方便地使下标变量只要有规则地改变下标值,就可以很方便地使下标变量 (如如a(i)成为所需要的具体下标变量成为所需要的具体下标变量 数组的维数数组的维数 6.1.2 下标和数组的维数下标和数组的维数 6.2.1 数组声明语句数组声明语句 使用数组之前,一般需要定义数
6、组,以便让系统分配相应使用数组之前,一般需要定义数组,以便让系统分配相应 的存储单元。格式为:的存储单元。格式为: Dim Dim 数组名数组名(下界下界1 to1 to上界上界1,1,下界下界2 to2 to上界上界 2)As 2)As 数据类型数据类型 功能:指定数组的维数、各维的上下界和数据类型功能:指定数组的维数、各维的上下界和数据类型 举例:举例: Dim Sum(10) As Long 下标号从下标号从010,共,共11个元素个元素 Dim Ary(1 to 20) As Integer 下标号从下标号从120,共,共20个元素个元素 Dim d(1 to 5,1 to 10) A
7、s Double 定义二维数组定义二维数组 还可以使用还可以使用Public、Static、Private等语句来声明数组等语句来声明数组 6.2 6.2 数组的声明和应用数组的声明和应用 设定下界的方法设定下界的方法 Option Base 1 设定下界为设定下界为1 Dim Data(10) As Single 下标号从下标号从110 6.2.2 Array函数函数 使用使用Array函数可以为数组元素赋值函数可以为数组元素赋值 示例示例 Dim D As Variant 定义数组名定义数组名(变体类型变体类型) D = Array(1, 2, 3, 4) 执行结果:执行结果:1D(0),
8、2D(1), 3D(2), 4D(3) 例例6.1 输入某小组输入某小组5个同学的成绩,计算总分和个同学的成绩,计算总分和 平均分平均分(取小数后一位取小数后一位) 本例利用本例利用InputBox函数来输入成绩,输入完毕后函数来输入成绩,输入完毕后 经过计算,再采用经过计算,再采用Print直接在窗体上输出结果直接在窗体上输出结果 .3 数组的应用数组的应用 Private Sub Form_Load() Dim d(5) As Integer Dim i As Integer, total As Single, average As Single Show For i =
9、1 To 5 输入成绩输入成绩 d(i) = Val(InputBox(请输入第请输入第 Next i (3) 程序结构程序结构 Print: 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 j Next i Print 排序结果:排序结果: For i = 1 To 10 Print a(i); Next i End Sub 改写中间程序段改写中间程序段“For i=1 To 9”“Next i”(共共7个程序个程序
10、行行) For i = 1 To 9 k = i k用来记录每次选择的最小值的下标用来记录每次选择的最小值的下标 For j = i + 1 To 10 If a(k) a(j) Then k = j End If Next j t = a(k): a(k) = a(i): a(i) = t 交换位置交换位置 Next i 变量变量k记录每一次选出的最小值的下标,在本次比较结束后,记录每一次选出的最小值的下标,在本次比较结束后, 使使a(i)与与a(k)一次换位即可一次换位即可 两种形式的数组:两种形式的数组:静态数组静态数组和和动态数组动态数组 静态数组是指数组元素的个数固定不变;动态数组的
11、元素个静态数组是指数组元素的个数固定不变;动态数组的元素个 数,在程序运行时可以改变数,在程序运行时可以改变 动态数组可以在运行过程中改变数组的大小,提高存储区的动态数组可以在运行过程中改变数组的大小,提高存储区的 使用效率使用效率 6.3.1 建立动态数组建立动态数组 建立动态数组的步骤:建立动态数组的步骤: 第一步:声明一个没有下标第一步:声明一个没有下标(或称空维数或称空维数)的数组为动态数组的数组为动态数组 第二步:在过程中用第二步:在过程中用ReDim语句重新定义带下标的动态数组语句重新定义带下标的动态数组 ReDim语句语句格式格式: ReDim Preserve 数组名数组名(下
12、界下界1 T0 上界上界1,下界下界 T0 上界上界2) As数据类型数据类型 功能:功能:重新定义动态数组,按定义的上下界重新分配存储单元重新定义动态数组,按定义的上下界重新分配存储单元 6.36.3 动态数组动态数组 声明声明F为动态数组的示例:为动态数组的示例: Private Sub Command1_Click() Dim F() As Integer 声明一个整型动态数组声明一个整型动态数组 Size=20 ReDim F(Size) End Sub 每次执行每次执行ReDim时,系统会清除指定数组的内容时,系统会清除指定数组的内容 若采用:若采用:ReDim Preserve F
13、(Size) 则能保留数组中原有的数据则能保留数组中原有的数据 Private Sub Form_Load() Dim a() As Integer Show ReDim a(800) k = 0 For x = 200 To 600 Step 3 If x Mod 8 = 0 Then k = k + 1 a(k) = x End If Next x ReDim Preserve a(k) For i = 1 To k Print a(i) Next i End Sub 例例6.56.5 ReDim ReDim语句应用示例语句应用示例 数组刷新语句可以作用于动态数组和静态数组数组刷新语句可以
14、作用于动态数组和静态数组 格式:格式: Erase 数组名数组名,数组名,数组名 功能:功能:该语句用来清除静态数组的内容,或者释放动态数该语句用来清除静态数组的内容,或者释放动态数 组占用的内存空间组占用的内存空间 例如例如: Dim Array1(20) As IntegerDim Array1(20) As Integer Dim Array2() As SingleDim Array2() As Single ReDim Array2(9,10) ReDim Array2(9,10) Erase Array1,Array2Erase Array1,Array2 对静态数组,对静态数组,
15、Erase语句将数组重新初始化语句将数组重新初始化; 对动态数组,对动态数组, Erase语句将释放动态数组所使用的内存语句将释放动态数组所使用的内存 6.3.2 数组刷新语句数组刷新语句(Erase) 与前面的循环语句与前面的循环语句For.Next类似,都是用来执行指定重类似,都是用来执行指定重 复次数的循环。但复次数的循环。但For Each.Next语句专门作用于数组或对语句专门作用于数组或对 象集合中的每一成员。语法格式:象集合中的每一成员。语法格式: For Each 成员成员 In 数组名数组名 循环体循环体 Exit For Next 成员成员 “成员成员”是一个是一个Vari
16、ant变量,它实际上代表数组中每一变量,它实际上代表数组中每一 个元素个元素 本语句可以对数组元素进行读取、查询或显示,它所重本语句可以对数组元素进行读取、查询或显示,它所重 复执行的次数由数组中元素的个数确定复执行的次数由数组中元素的个数确定 在不知道数组中元素的数目时非常有用在不知道数组中元素的数目时非常有用 6.46.4 For Each.Next For Each.Next循环语句循环语句 Private Sub Form_Load() Dim a(1 To 10) As Long, sum As Long, t As Long Dim n As Integer Show t = 1
17、For n = 1 To 10 t = t * n a(n) = t Next n sum = 0 For Each x In a sum = sum + x Next x Print 1! + 2! + 3! + 10! =; sum End Sub 输出结果: 1! + 2! + 3! + + 10! 4037913 例例6.6 求求1! + 2! + + 10! 的值的值 两类数组:两类数组:一般数组一般数组和和控件数组控件数组 6.5.1 控件数组的概念控件数组的概念 控件数组是一组具有相同名称、类型和事件过程的控件控件数组是一组具有相同名称、类型和事件过程的控件 例如,例如,Labe
18、l1(0),Label1(1),Label1(2), 但但Label1, Label2, Label3, 不是控件数组不是控件数组 控件数组具有以下特点:控件数组具有以下特点: (1)相同的控件名称相同的控件名称(即即Name属性属性); (2)控件数组中的控件具有相同的一般属性;控件数组中的控件具有相同的一般属性; (3)所有控件共用相同的事件过程。所有控件共用相同的事件过程。 以下标索引值以下标索引值(Index)来标识各个控件,第一个下标索引号为来标识各个控件,第一个下标索引号为0 6.5 6.5 控件数组控件数组 6.5.2 控件数组的建立控件数组的建立 建立控件数组有三种方法:建立控
19、件数组有三种方法: (1)给控件起相同的名称给控件起相同的名称 (2)将现有的控件复制并粘贴到窗体等上面将现有的控件复制并粘贴到窗体等上面 (3)将控件的将控件的Index属性设置为非属性设置为非Null数值数值 6.5.3 控件数组的使用控件数组的使用 例例6.7 按图按图6.46.4设计窗体,其中一组设计窗体,其中一组( (共共5 5个个) )单选按钮单选按钮 构成控件数组,要求当单击某个单选按钮时,能够改变文构成控件数组,要求当单击某个单选按钮时,能够改变文 本框中文字的大小本框中文字的大小 控件数组控件数组 设计步骤:设计步骤: (1)设计控件数组设计控件数组Option1,其中包含,
20、其中包含5个单选按钮对象个单选按钮对象 具体操作方法:具体操作方法: 画出第一个单选按钮控件,名称采用默认的画出第一个单选按钮控件,名称采用默认的Option1。此。此 时该控件处于选定状态。时该控件处于选定状态。 单击工具栏上的单击工具栏上的“复制复制”按钮按钮(或按或按Ctrl+C)。 单击工具栏上的单击工具栏上的“粘贴粘贴”按钮按钮(或按或按Ctrl+V),此时系统弹,此时系统弹 出一个如图出一个如图6.5所示的对话框所示的对话框 单击单击“是是”,就建立一个控件数组元素,其,就建立一个控件数组元素,其Index属性为属性为1, 而已画出的第一个控件的而已画出的第一个控件的Index属性
21、值为属性值为0。 通过鼠标拖放可以调整新控件的位置通过鼠标拖放可以调整新控件的位置 继续单击继续单击“粘贴粘贴”按钮按钮(或按或按Ctrl+V)和调整控件位置,和调整控件位置, 可得到控件数组中的其他三个控件,其可得到控件数组中的其他三个控件,其Index属性值分别为属性值分别为2, 3和和4(即从上而下为即从上而下为0,1,2,3,4) 设置控件数组各元素设置控件数组各元素(从上而下从上而下)的的Caption属性分别为属性分别为 10,14,18,24和和28 (2)建立一个文本框建立一个文本框Text1,其,其Text属性设置为属性设置为 “控件数组的使用控件数组的使用”。再建立一个标签
22、再建立一个标签,其,其Caption 属性为属性为“字号控制字号控制” (3)编写程序代码编写程序代码 Private Sub Form_Load() Option1(0).Value = True 选定第一个单选按钮选定第一个单选按钮 Text1.FontSize = 10 设定文本框中的字号设定文本框中的字号 End Sub Private Sub Option1_Click(Index As Integer) Select Case Index 系统自动返回系统自动返回Index值值 Case 0 Text1.FontSize = 10 Case 1 Text1.FontSize = 1
23、4 Case 2 Text1.FontSize = 18 Case 3 Text1.FontSize = 24 Case 4 Text1.FontSize = 28 End Select End Sub 6.6 程序举例程序举例 例例6.8 查找考场教室号查找考场教室号 某课程统考凭准考证入场,考场教室安排如表某课程统考凭准考证入场,考场教室安排如表6.2。编制程。编制程 序,查找准考证号码所对应的教室号码序,查找准考证号码所对应的教室号码 (1)分析分析:为便于查找,通过二维数组:为便于查找,通过二维数组rm建立这两种号码对建立这两种号码对 照表。照表。 数组数组rm由由Form_Load事
24、件过程来建立,它的每一行存放了事件过程来建立,它的每一行存放了 一个教室资料一个教室资料(包含准考证号码范围和教室号码包含准考证号码范围和教室号码)。当判断到某。当判断到某 个给定准考证号码落在某一行的准考证号码范围内时,则该行个给定准考证号码落在某一行的准考证号码范围内时,则该行 中的教室号码为所求中的教室号码为所求 (2)创建应用程序的用户界面和设置对象属性创建应用程序的用户界面和设置对象属性 (3)编写程序代码编写程序代码 功能要求:功能要求:用户在文本框用户在文本框Text1中输入准考证号码,单击中输入准考证号码,单击 “查找查找”按钮按钮(Command1)后,则查找出对应的教室,并
25、将教后,则查找出对应的教室,并将教 室号码输出在文本框室号码输出在文本框Text2中中 Dim rm(6, 3) As Integer Private Sub Form_Load() 输入数组数据输入数组数据 rm(1, 1) = 2101: rm(1, 2) = 2147: rm(1, 3) = 102 rm(2, 1) = 1741: rm(2, 2) = 1802: rm(2, 3) = 103 rm(3, 1) = 1201: rm(3, 2) = 1287: rm(3, 3) = 114 rm(4, 1) = 3333: rm(4, 2) = 3387: rm(4, 3) = 209
26、 rm(5, 1) = 1803: rm(5, 2) = 1829: rm(5, 3) = 305 rm(6, 1) = 2511: rm(6, 2) = 2576: rm(6, 3) = 306 End Sub Private Sub Command1_Click() Dim no As Integer, flag As Integer flag = 0 查找标记,查找标记,0表示未找到表示未找到 no = Val(Text1.Text) For i = 1 To 6 If no = rm(i, 1) And no = rm(i, 2) Then Text2.Text = rm(i, 3)
27、显示教室号码显示教室号码 flag = 1 1表示找到表示找到 Exit For End If Next i If flag = 0 Then Text2.Text = 无此准考证号码无此准考证号码 End If Text1.SetFocus 设置焦点设置焦点 End Sub 某学习小组某学习小组10名学生的成绩情况如表名学生的成绩情况如表6.3所示,现要求采所示,现要求采 用折半查找法,通过学号查询学生成绩用折半查找法,通过学号查询学生成绩 (1)分析:分析:折半查找法也称对半查找法,是一种效率较高的折半查找法也称对半查找法,是一种效率较高的 查找方法。对于大型数组,它的查找速度比顺序查找法
28、查找方法。对于大型数组,它的查找速度比顺序查找法(例例6.8 采用的是顺序查找法采用的是顺序查找法)快得多快得多 在采用折半查找法之前,要求将数组按查找关键字在采用折半查找法之前,要求将数组按查找关键字(如本如本 例的学号例的学号)排好序排好序(从大到小或小到大从大到小或小到大) 例例6.9 采用折半查找法查询学生成绩采用折半查找法查询学生成绩 先从数组中间开始比较,先从数组中间开始比较, 判别中间的那个元素是不是判别中间的那个元素是不是 要找的数据:要找的数据: 是,则查找成功是,则查找成功 否,若被查找的数据是在该数组的上半部,则从上半否,若被查找的数据是在该数组的上半部,则从上半 部的中
29、间继续查找,否则从下半部的中间继续查找部的中间继续查找,否则从下半部的中间继续查找 照此进行下去,不断缩小查找范围照此进行下去,不断缩小查找范围 至最后,因找到或找不到而停止查找至最后,因找到或找不到而停止查找 对于对于n个数据,若用变量个数据,若用变量Top、Bott分别表示每次分别表示每次“折半折半” 的首位置和末位置,则中间位置的首位置和末位置,则中间位置M为为 M=Int(Top+Bott)/2) 这样就将这样就将Top, Bott分成两段分成两段,即,即Top, M-1和和M+1, Bott, 若要找的数据小于由若要找的数据小于由M指示的数据,则该数据在指示的数据,则该数据在Top,
30、M-1 范围内,反之,则在范围内,反之,则在M+1,Bott范围内范围内 折半查找法的过程折半查找法的过程 折半查找法的过程折半查找法的过程 学号学号 h() 1201 1202 1203 1205 1206 1207 1209 1210 1211 1215 先排好序先排好序 数学数学 d( x ,1) 语文语文 d( x ,2) 92 86 78 71 83 74 67 75 71 55 62 80 98 83 99 80 57 67 80 78 m=Int(Top + Bott)/2) 要找的学号要找的学号No h(m) = m为所求为所求 m Top = m + 1 Top=1 Bott
31、=10 (2) 创建应用程序的用户界面和设置对象属性创建应用程序的用户界面和设置对象属性 (3)编写程序代码编写程序代码 Dim h(10) As Integer, d(10, 2) As Integer Private Sub Form_Load() 学号存放在数组学号存放在数组h()中中 h(1) = 1201: h(2) = 1202: h(3) = 1203 h(4) = 1205: h(5) = 1206: h(6) = 1207 h(7) = 1209: h(8) = 1210: h(9) = 1211: h(10) = 1215 成绩存放在数组成绩存放在数组d(,)中中 d(1,
32、 1) = 92: d(1, 2) = 86 d(2, 1) = 78: d(2, 2) = 71 d(3, 1) = 83: d(3, 2) = 74 d(4, 1) = 67: d(4, 2) = 75 d(5, 1) = 71: d(5, 2) = 55 d(6, 1) = 62: d(6, 2) = 80 d(7, 1) = 98: d(7, 2) = 83 d(8, 1) = 99: d(8, 2) = 80 d(9, 1) = 57: d(9, 2) = 67 d(10, 1) = 80: d(10, 2) = 78 End Sub Private Sub Command1_Cli
33、ck() Dim no As Integer, flag As Integer Dim m As Integer, top As Integer, bott As Integer flag = -1 置未找到标志置未找到标志 top = 1: bott = 10 设定范围设定范围 no = Val(Text1.Text) 取学号取学号 If no h(bott) Then flag = -2 若超出学号范围若超出学号范围, 置特殊标志置特殊标志-2 End If Do While flag = -1 And top = bott m = (top + bott) / 2 取中点取中点 Sele
34、ct Case True Case no = h(m) 找到找到 flag = m 置找到标志置找到标志 Text2.Text = h(m) Text3.Text = d(m, 1) Text4.Text = d(m, 2) Text5.Text = (d(m, 1) + d(m, 2) / 2 Case no h(m) 大于中间数据大于中间数据 top = m + 1 下半部下半部 End Select Loop If flag Val(Text1(i + 1).Text) Then t = Text1(i).Text Text1(i) . Text = Text1(i + 1).Text
35、Text1(i + 1).Text = t End If Next i 沉底数用红色表示沉底数用红色表示 Text1(n - j + 1).ForeColor = RGB(255, 0, 0) Next j MsgBox 排序完毕排序完毕“ End Sub 输入一个含有数字字符和非数字字符的字符串,如输入一个含有数字字符和非数字字符的字符串,如 t345+abc12spc276www8t56? 将其中的数字串将其中的数字串(1至多个连续数字字符至多个连续数字字符)存放到列表框中,存放到列表框中, 例如将例如将345放在第一行,放在第一行,12放在第二行,放在第二行,276放在第三行,放在第三行,8 放在第四行,放在第四行,56放在第五
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 淋巴瘤调强放疗后放射性肺损伤:机制、影响与防治策略探究
- 液相芯片技术在人乳头瘤病毒基因分型检测中的应用与价值探究
- 液态熔盐堆燃耗算法精度提升与钍铀增殖性能优化研究
- 液体复苏对重症急性胰腺炎胰组织微血栓影响的深度剖析与临床洞察
- 消费者视角下品牌延伸效应评价的多维度解析
- 妊娠期肠梗阻的急诊分诊标准与流程优化
- 妊娠期结核病合并妊娠期妊娠期糖尿病的运动处方调整执行记录
- 妊娠期糖尿病酮症酸中毒的遗传易感性
- 2026合肥市中考生物知识点总结训练含答案
- 2026泰州市中考历史考前3天预测卷含答案
- 《中国展览经济发展报告2025》
- 2025年中职机械制造与自动化(机械制造基础)试题及答案
- 弱电框架协议合同
- 不合格品的处理与纠正措施
- 雨课堂学堂在线学堂云《情报检索-信息时代的元素养》单元测试考核答案
- 高考英语三轮复习提分策略课件
- 安全用电三相五线培训课件
- 2026年安阳职业技术学院单招职业技能测试必刷测试卷及答案解析(夺冠系列)
- 灯饰代加工合同范本
- 110kV电力变压器结构与电磁计算
- 血管性痴呆教学课件
评论
0/150
提交评论