版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第六章第六章 数数 组组6.1 概 述 数组的概念:数组的概念:数组并不是一种数据类型,而数组并不是一种数据类型,而是是一组相同类型数据一组相同类型数据的集合。用一个统一的名字的集合。用一个统一的名字(数组名)数组名)代表逻辑上相关的一批数据,每个元代表逻辑上相关的一批数据,每个元素用素用下标变量下标变量来区分;下标变量代表元素在数组来区分;下标变量代表元素在数组中的位置。中的位置。其表示形式: A(1),A(10) X(1,1), X1(1,10), X(2,10) Y(0,0,0), Y(1,2,5)Visual Basic中的数组,按不同的方式可分为中的数组,按不同的方式可分为以下几类:
2、以下几类:按数组的大小(元素个数)是否可以改变来分为:定长数组、动态(可变长)数组。按元素的数据类型可分为:数值型数组、字符串数组、日期型数组、变体数组等。按数组的维数可分为:一维数组、二维数组、多维数组。对象数组:菜单对象数组、控件数组。6.2 一维数组一维数组 6.2.1 一维数组的声明一维数组的声明 形式: Dim 数组名数组名(to)As 或:或: Dim 数组名数组名(to)例:Dim a(1 to 10) As Integer 声明了a数组有10个元素与上面声明等价形式: Dim a%(1 to 10) 1是下标的下界10是下标的上界数组元数的数据类型说明:1数组名的命名规则与变量
3、的命名相同。2数组的元素个数:上界-下界+1。3缺省为0,若希望下标从1开始,可在模块的通用部分使用Option Base语句将设为1。其使用格式是: Option Base 0|1 后面的参数只能取0或1例如: Option Base 1 将数组声明中缺省下标设为1 4和不能使用变量,必须是常量,常量可以是直接常量、符号常量,一般是整型常量。5如果省略As子句,则数组的类型为变体类型。6数组中各元素在内存占一片连续的存储空间,一维数组在内存中存放的顺序是下标大小的顺序,如图5-1所示:6.2.2 一维数组元素的引用一维数组元素的引用使用形式:使用形式: 数组名数组名(下标下标) 其中:下标可
4、以是整型变量、常量或表达式。例如: 设有下面的数组B(10) As Integer 则下面的语句都是正确的。 A(1)=A(2)+B(1)+5 取数组元素运算 A(i)=B(i) 下标使用变量 B(i+1)=A(i+2) 下标使用表达式6.2.3 6.2.3 一维数组的基本操作一维数组的基本操作 1. 可通过循环给数组元素的初值可通过循环给数组元素的初值 For i = 1 To 10 A数组的每个元素值为1 A(i)=1 Next i 2. 数组的输入数组的输入For i = 1 To 4 For j = 1 To 5 sc(i, j) = InputBox(输入输入sc( &i & , &
5、 j & ) 的值的值) Next j Next I例例6.16.1 求求100100个学生的平均成绩,并统计高于平均分的个学生的平均成绩,并统计高于平均分的人数。人数。用简单变量和循环,求平均成绩程序段如下:用简单变量和循环,求平均成绩程序段如下: aver = 0aver = 0 For i = 1 To 100 For i = 1 To 100 mark = InputBox mark = InputBox(输入学生成绩输入学生成绩) aver = aver + mark aver = aver + mark Next i Next i aver = aver / 100 aver =
6、aver / 100问题问题(1 1)markmark只能放一个学生的成绩,无法统计高于平均只能放一个学生的成绩,无法统计高于平均分的人数。分的人数。(2 2)若用简单变量保存)若用简单变量保存100100个学生的成绩,则需定义个学生的成绩,则需定义100100个变量和使用个变量和使用100100句输入语句。由此引入了数组。句输入语句。由此引入了数组。 本章目录本章目录mark用数组用数组解决问题的程序如下:解决问题的程序如下: Dim mark(99) As Integer Dim mark(99) As Integer 声明数组声明数组mark Dim aver!, overn Dim a
7、ver!, overn%, i%, i% aver = 0 aver = 0 For i = 0 To 99 For i = 0 To 99 输入成绩,求分数和输入成绩,求分数和 mark(i) = InputBoxmark(i) = InputBox(输入学生的成绩输入学生的成绩) aver = aver + mark(i) aver = aver + mark(i) Next i Next i aver = aver / 100 aver = aver / 100 求求100人的平均分人的平均分 overnovern = 0 = 0 For i = 0 To 99 For i = 0 To
8、 99 统计高于平均分的人数统计高于平均分的人数 If mark(i) aver Then overn = overnIf mark(i) aver Then overn = overn + 1 + 1 Next i Next i MsgBoxMsgBox ( (平均分平均分: : & aver & & aver & 高于平均分人数高于平均分人数: : & & overnovern) ) 本章目录本章目录mark(99)mark(99)mark(98)mark(98)mark(2)mark(2)mark(1)mark(1)mark(0)mark(0)3. 3. 数组的输出数组的输出 输出如下图
9、所示的下三角数据输出如下图所示的下三角数据Dim sc(5,5) As Integer,i%,j%For i = 1 To 5 For j = 1 To i sc(i, j) = i * 5 + j Print sc(i, j); ; Next j Print 换行换行 Next I4. 求数组中最大元素及所在下标求数组中最大元素及所在下标 Dim Max As Integer,iMax As Integer Max=A(1):iMax=1 For i = 2 To 10 If A(i)Max ThenMax=A(i)iMax=i End If Next I5. 将数组元素倒置将数组元素倒置F
10、or i =1 To 102 t=A(i) A(i)=A(10-i+1) A(10-i+1)=tNext I例例6.1 6.2.4 一维数组的应用一维数组的应用 一、分类统计一、分类统计 例例6.2 在例在例6.1中如果还要统计中如果还要统计09,1019,2020,.8089,9099分数段及分数段及100分的学生人。分的学生人。 则可另用数组则可另用数组bn来存各分数段的人数,并用来存各分数段的人数,并用bn(0)存存09分的人数,分的人数,bn(1)存存1019分的人数,分的人数,bn(9)存存9099分分的人数,的人数,bn(10)存存100分的人数。分的人数。 二、二、 排序问题排序
11、问题排序是将一组数按递增或递减的次序排列,排序是将一组数按递增或递减的次序排列,例如按学生的成绩、球赛积分等排序。排例如按学生的成绩、球赛积分等排序。排序的算法有许多,常用的有序的算法有许多,常用的有选择法选择法、冒泡冒泡法法、插入法插入法、合并排序合并排序等。等。 (1)选择法排序选择法排序基本思想:每次在若干个无序数中找最小基本思想:每次在若干个无序数中找最小(大大)数,并放在相应的位置。数,并放在相应的位置。本章目录本章目录 算法思想:算法思想: 1)对有)对有n个数的序列(存放在个数的序列(存放在数组数组a(n)中),从中选出最小中),从中选出最小(升序)或最大(降序)的数,(升序)或
12、最大(降序)的数,与第与第1个数交换位置;个数交换位置; 2)除第)除第1 个数外,其余个数外,其余n-1个个数中选最小或最大的数,与第数中选最小或最大的数,与第1个数交换位置;个数交换位置; 3)依次类推,选择了)依次类推,选择了n-1次后,次后,这个数列已按升序排列。这个数列已按升序排列。原 始 数 据 8 6 9 3 2 7第 1趟 交 换 后 2 6 9 3 8 7第 2趟 交 换 后 2 3 9 6 8 7第 3趟 交 换 后 2 3 6 9 8 7第 4趟 交 换 后 2 3 6 7 8 9第 5趟 无 交 换 2 3 6 7 8 9 图1-3-27 交 换 过 程1对于有对于有n
13、个数的数组,按递增个数的数组,按递增(降)(降)次序次序排序排序的步骤:的步骤:2选择法排序程序流程图选择法排序程序流程图For i = 1 To n - 1For i = 1 To n - 1 p = i p = i For j = i + 1 To n For j = i + 1 To n If a(p) a(j) Then p = j If a(p) a(j) Then p = j Next j Next j temp = a(i) temp = a(i) a(i) = a(p) a(i) = a(p) a(p) = temp a(p) = tempNext iNext i选择法排序(升
14、序)的选择法排序(升序)的VB程序程序:例例6.3 6.3 对已知存放在数组中的对已知存放在数组中的6 6个数,用选择个数,用选择法按递增顺序排序。法按递增顺序排序。 原始数据原始数据8 6 9 3 2 7a(1) a(2) a(3) a(4) a(5) a(6) 第第1轮比较轮比较2 6 9 3 8 7 a(2) a(3) a(4) a(5) a(6) 第第2轮比较轮比较2 3 9 6 8 7 a(3) a(4) a(5) a(6) 第第3轮比较轮比较2 3 6 9 8 7 a(4) a(5) a(6) 第第4轮比较轮比较2 3 6 7 8 9 a(5) a(6) 第第5轮比较轮比较2 3
15、6 7 8 9选择法排序过程示意选择法排序过程示意 本章目录本章目录2冒泡法排序(递增)冒泡法排序(递增) 算法思想:算法思想:(将相邻两个数比较,小的调到前头将相邻两个数比较,小的调到前头) 1)有)有n个数(存放在数组个数(存放在数组a(n)中),第一趟将中),第一趟将每相邻两个数比较,小的调到前头,经每相邻两个数比较,小的调到前头,经n-1次两两次两两相邻比较后,最大的数已相邻比较后,最大的数已“沉底沉底”,放在最后一,放在最后一个位置,小数上升个位置,小数上升“浮起浮起”; 2)第二趟对余下的)第二趟对余下的n-1个数(最大的数已个数(最大的数已“沉沉底底”)按上法比较,经)按上法比较
16、,经n-2次两两相邻比较后得次次两两相邻比较后得次大的数;大的数; 3)依次类推,)依次类推,n个数共进行个数共进行n-1趟比较,在第趟比较,在第j趟中要进行趟中要进行n-j次两两比较。次两两比较。For i = 1 To n - 1For i = 1 To n - 1 For j = 1 To n-i For j = 1 To n-i If a(j) a(j+1) Then If a(j) a(j+1) Then temp=a(j) temp=a(j) a(j)=a(j+1) a(j)=a(j+1) a(j+1)=temp a(j+1)=temp End if End if Next j N
17、ext jNext iNext i冒泡法排序(升序)的冒泡法排序(升序)的VB程序程序: 例例6.4 用随机函数产生50个10,100 )的随机整数,并按照由小到大的顺序打印出来。程序界面如下:三三. .插入数据插入数据 插入数据基本思想是:插入数据基本思想是:1 1)首先查找待插入数据在数组中的位置)首先查找待插入数据在数组中的位置k k;2 2)然后从最后一个元素开始往前直到下标为)然后从最后一个元素开始往前直到下标为k k的的元素依次往后移动一个位置;元素依次往后移动一个位置;3) 3) 第第k k个元素的位置腾出,将数据插入。个元素的位置腾出,将数据插入。 1 4 7 10 13 16
18、 19 22 25 14 k x 本章目录本章目录四四. .删除数据删除数据 u删除操作首先也是要找到欲删除的元素的位置删除操作首先也是要找到欲删除的元素的位置k k;u然后从然后从k+1k+1到到n n个位置开始向前移动;个位置开始向前移动;u最后将数组元素减最后将数组元素减1 1。 1 4 7 10 13 14 16 19 22 25 k 本章目录本章目录数据删除演示数据删除演示6.3 二维数组及多维数组二维数组及多维数组 6.3.1 二维数组的声明二维数组的声明声明格式如下:声明格式如下:Dim 数组名数组名( to , to ) As 其中的参数与一维数组完全相同。 例如:例如:Dim
19、 a(2,3) As Single 二维数组在内存的存放顺序是二维数组在内存的存放顺序是“先行后列先行后列”。例如数组。例如数组a的各元素在内存中的存放顺序是:的各元素在内存中的存放顺序是:a(0,0)a(0,1)a(0,2)a(0,3)a(1,0)a(1,1)a(1,2) a(1,3)a(2,0)(2,1)a(2,2)a(2,3) 6.3.2 二维数组的引用二维数组的引用 引用形式:引用形式: 数组名数组名(下标下标1,下标,下标2)例如:例如: a(1,2)=10 a(i+2,j)a(2,3)*2 在程序中常常通过二重循环来操作使用二维数组元素。在程序中常常通过二重循环来操作使用二维数组元
20、素。 6.3.3 二维数组的基本操作二维数组的基本操作 1. 二维数组数据的输入 2. 求最大元素及其所在的行和列 3. 计算两矩阵相乘 4. 矩阵的转置 6.3.3数组的基本操作数组的基本操作1 1、数组的输入、数组的输入 通过通过TextBoxTextBox控件或控件或InputBoxInputBox函数输入函数输入Dim s(3,4) AS IntegerDim s(3,4) AS IntegerFor i = 0 To 3For i = 0 To 3 For j = 0 To 4 For j = 0 To 4 s s(I,j) = = InputBox(输入输入 & i &“, & j
21、 & 元素元素) Next j Next jNext i Next i 本章目录本章目录2 2、数组的输出、数组的输出 例例6.56.5 形成形成5 55 5的方阵,分别输出方阵中各元素、的方阵,分别输出方阵中各元素、上上三角和下三角三角和下三角元素元素 本章目录本章目录方阵规律:方阵规律:第一行的元素为第一行的元素为0 0 4 4,以后每一行是前一,以后每一行是前一行对应元素增加行对应元素增加5 5上三角规律上三角规律: : 每一行的起始列与行号相同每一行的起始列与行号相同, ,只要控制只要控制内循环的初值内循环的初值 用用Tab函数或函数或SpaceSpace定位定位控制输出的空格,控制输
22、出的空格,3 3、求数组和、最值、位置、求数组和、最值、位置例例6.66.6 求一维数组中各元素之和、最小数组元素,求一维数组中各元素之和、最小数组元素,并将最小值数组元素与数组中第一个元素交换并将最小值数组元素与数组中第一个元素交换v求元素和求元素和 通过循环将每个元素进行累加通过循环将每个元素进行累加 v求数组中最小元素求数组中最小元素 假设第一个元素为最小,假设第一个元素为最小,然后将该数与其他元素逐一比较,若发现小于最然后将该数与其他元素逐一比较,若发现小于最小值,就用新值替换最小值,同时记录下标值。小值,就用新值替换最小值,同时记录下标值。v求最大值求最大值的方法与求最小值相似的方法
23、与求最小值相似本章目录本章目录 例例6.7 设某一个班共有设某一个班共有60个学生,期末考个学生,期末考试试5门课程,请编一程序评定学生的奖学金,门课程,请编一程序评定学生的奖学金,要求打印输出一、二等奖学金学生的学号和各要求打印输出一、二等奖学金学生的学号和各门课成绩。(奖学金评定标准是:总成绩超过门课成绩。(奖学金评定标准是:总成绩超过全班总平成绩全班总平成绩20%发给一个奖学金,超过全班发给一个奖学金,超过全班总平成绩总平成绩10%发给二个奖学金。)发给二个奖学金。) 6.3.5 多维数组的声明和引用多维数组的声明和引用定义多维数组的格式如下:定义多维数组的格式如下:Dim 数组名数组名
24、( to , to ,) As 例如:例如: Dim a(5,5,5) As Integer 声明声明a是三维数组是三维数组 Dim b(2,6,10,5) As Integer 声明声明b是四维数组是四维数组 6.4 动态数组动态数组 动态数组:在声明时未给出数组的大小。定长数组是在程动态数组:在声明时未给出数组的大小。定长数组是在程序编译时分配存储空间,而动态数组是在程序执行时分配存储序编译时分配存储空间,而动态数组是在程序执行时分配存储空间。空间。6.4.1 动态数组的建立及使用动态数组的建立及使用 建立动态数组包括声明和大小说明两步:建立动态数组包括声明和大小说明两步: 1在使用在使用
25、Dim、Private或或Public语句声明括号内为空的数组。语句声明括号内为空的数组。 格式:格式:Dim | Private|Public 数组名()数组名()As 数据类型数据类型 例:例:Dim a() As Integer 2在过程中用在过程中用ReDim语句指明该数组的大小。语句指明该数组的大小。 格式:格式:ReDim Preserve 数组名(下标数组名(下标1,下标,下标2) Preserve参数:保留数组中原来的数据 例:例:Redim A(10) Redim Preserve A(20)说明:说明:(1)ReDim语句是一个可执行语句,只能出现在过程中,并语句是一个可执
26、行语句,只能出现在过程中,并且可以多次使用,改变数组的维数和大小。且可以多次使用,改变数组的维数和大小。 (2)定长数组声时中的下标只能是常量,而动态数组)定长数组声时中的下标只能是常量,而动态数组ReDim 语句中的下标是常量,也可以是有了确定值的变量。语句中的下标是常量,也可以是有了确定值的变量。 例:例: Private Sub Form_Click() Dim N As Integer N=Val(InputBox(“输入输入N=?”) Dim a(N) As Integer . End sub (3)在过程中可以多次使用)在过程中可以多次使用ReDim来改变数组的大小,来改变数组的大
27、小,也可也可 改变数组的维数。改变数组的维数。 例:例:ReDim x(10) ReDim x(20) x(20) = 30 Print x(20) ReDim x(20, 5) x(20, 5) = 10 Print x(20, 5) (4)每次使用)每次使用ReDim语句都会使原来数组中值丢失,可语句都会使原来数组中值丢失,可以在以在ReDim后加后加Preserve 参数来保留数组中的数据。但此时参数来保留数组中的数据。但此时 数组的维数不能改变。数组的维数不能改变。 6.4.2 与数组操作有关的几个函数与数组操作有关的几个函数1.Aarry函数函数Aarry函数可方便地对数组整体赋值,
28、但它只能给声明函数可方便地对数组整体赋值,但它只能给声明Variant的变量或仅由括号括起的动态数组赋值。赋值后的数的变量或仅由括号括起的动态数组赋值。赋值后的数组大小由赋值的个数决定。组大小由赋值的个数决定。 例如,要将例如,要将1,2,3,4,5,6,7 这些值赋值给数组这些值赋值给数组a,可使用下面,可使用下面的方法赋值。的方法赋值。Dim a()A=array(1,2,3,4,5,6,7)Dim a A=array(1,2,3,4,5,6,7) 2 求数组的上界求数组的上界Ubound( )函数、函数、 下界下界 Lbound( )函数函数 Ubound( )函数和Lbound( )函
29、数分别用来确定数组某一维的上界和下界值。使用形式如下: UBound(, ) LBound( , ) 其中:必需的。数组变量的名称,遵循标准变量命名约定。:可选的;一般是整型常量或变量。指定返回哪一维的上界。1 表示第一维,2 表示第二维,如此等等。如果省略默认是1。3Split函数函数使用格式:使用格式:Split( ,)说明:说明: 使用使用Split函数可从一个字符串中,以某个指定符号为分隔函数可从一个字符串中,以某个指定符号为分隔符,分离若干个子字符串,建立一个下标从零开始的一维符,分离若干个子字符串,建立一个下标从零开始的一维数数组组。补充例补充例6.8: 使用文件框,通过编程实现大
30、量数据的输入使用文件框,通过编程实现大量数据的输入 输入一系列的数据,存放在数组中。对输入的数据允许输入一系列的数据,存放在数组中。对输入的数据允许修改和自动识别非数字数据。修改和自动识别非数字数据。 分析:分析: 利用文本框实现大量数字串的输入和编辑的功能;利用文本框实现大量数字串的输入和编辑的功能; 通过编程将输入的数字串以逗号为分界符分离出各项数据;通过编程将输入的数字串以逗号为分界符分离出各项数据; 对非数字输入的判断能力。对非数字输入的判断能力。6.5 6.5 控件数组控件数组 6.5.1 控件数组的概念控件数组的概念 一组相同类型的控件组成。一组相同类型的控件组成。 它们共用一个控件名,具有它们共用一个控件名,具有相同的属性,建立时系统给每个元素赋一个唯一的索引号相同的属性,建立时系统给每个元素赋一个唯一的索引号(Index)。 控件数组共享同样的事件过程,通过返回的下标值控件数组共享同样的事件过程,通过返回的下标值区分控件数组中的各个元素。区分控件数组中的各个元素。 例:例: Private Sub cmdName _Click(Index As Integer) If Index=3 then 处理第四个命令按钮的操作处理第四个命令按钮的操作 End If
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑与土木工程实习周志20篇
- 2022“返家乡”大学生寒假社会实践志愿服务活动心得体会8篇
- 雪景作文三年级300字5篇
- 大学生社会实践心得体会15篇
- 2022壮族三月三观后感作文五篇
- 安全生产承诺书15篇
- 农业区域规划
- 学校个人心理健康工作计划
- 2021初中教研个人工作总结
- 营销方案策划公司锦集九篇
- 电影音乐欣赏智慧树知到期末考试答案章节答案2024年华南农业大学
- 广东省佛山市南海区2023-2024学年九年级上学期期末考试模拟卷
- 花卉学智慧树知到期末考试答案章节答案2024年浙江农林大学暨阳学院
- 2023版学前教育专业人才需求调研报告及人培方案(普招)
- 2024年研究生考试《中医综合》备考真题库(含答案)
- 幼儿园保育实践报告
- 外国人的汉语之谜怎么破智慧树知到期末考试答案章节答案2024年鲁东大学
- 保险客服正规劳动合同范本
- 变电站运维培训
- 劳动争议仲裁申请书范本
- 学习解读2024年新制定的学位法课件
评论
0/150
提交评论