第5章数组和自定义类型5.1数组的概念1.引例例5.1求100个学生的平均成绩,并统计高于平均分的人数。用简单变量和循环,求平均成绩程序段如下:aver=0Fori=1To 100mark=InputBox("输入学生成绩")aver=aver+markNextiaver=aver/100由于循环体内变量mark只能放一个学生的成绩,无法统计高于平均分的人数。若用箱单变量保存100个学生的成绩,则需定义100个变量和使用100句输入语句。由此引入了数组。用数组解决问题的程序如下:Dimmark(99)AsInteger声明数组markDimaver!,overn%,i%aver=0,输入成绩,求分数和Fori=0 To99mark(i)=InputBox("输入学生的成绩")aver = aver + mark(i)Nexti!求100人的平均分aver=aver /100overn=0Fori=0To 99·统计高于平均分的人数Ifmark(i)>averThenovern=overn+1NextiMsgBox("平均分:"&aver&"高于平均分人数:"&overn)数组不是一种数据类型,而是一组相同类型的变量的集合。程序中使用数组的最大好处是用一个数组名代表逻辑上相关的一批数据,用下标表示该数组中的各个元素,和循环语句结合使用,使得程序书写简洁。数组必须先声明后使用数组不是一种数据类型,而是一组相同类型的变量的集合。程序中使用数组的最大好处是用一个数组名代表逻辑上相关的一批数据,用下标表示该数组中的各个元素,和循环语句结合使用,使得程序书写简洁。数组必须先声明后使用使用Dim语句声明数组名、类型、维数、数组大小声明时下标的个数确定数组的维数,数组声明后在内存可分配一块连续的区域。5.1.2数组声明及初始化一维数组Dim数组名(下标上界)[As类型]下标上界为常数、已有值的表达式或变量。下标下界为0。一维数组的大小为:下标上界+1
第 5 章 数组和自定义类型 5.1 数组的概念 1. 引例 例 5.1 求 100 个学生的平均成绩,并统计高于平均分的人数。用简单变量和循环,求平 均成绩程序段如下: aver = 0 For i = 1 To 100 mark = InputBox("输入学生成绩") aver = aver + mark Next i aver = aver / 100 由于循环体内变量 mark 只能放一个学生的成绩,无法统计高于平均分的人数。若用简 单变量保存 100 个学生的成绩,则需定义 100 个变量和使用 100 句输入语句。由此引入了数 组。 用数组解决问题的程序如下: Dim mark(99) As Integer ' 声明数组 mark Dim aver!, overn%, i% aver = 0 For i = 0 To 99 ' 输入成绩,求分数和 mark(i) = InputBox("输入学生的成绩") aver = aver + mark(i) Next i aver = aver / 100 ' 求 100 人的平均分 overn = 0 For i = 0 To 99 ' 统计高于平均分的人数 If mark(i) > aver Then overn = overn + 1 Next i MsgBox ("平均分:" & aver & "高于平均分人数:" & overn) 数组不是一种数据类型,而是一组相同类型的变量的集合。程序中使用数组的最大好处 是用一个数组名代表逻辑上相关的一批数据,用下标表示该数组中的各个元素,和循环语句 结合使用,使得程序书写简洁。 数组必须先声明后使用 数组不是一种数据类型,而是一组相同类型的变量的集合。程序中使用数组的最大好处 是用一个数组名代表逻辑上相关的一批数据,用下标表示该数组中的各个元素,和循环语句 结合使用,使得程序书写简洁。 数组必须先声明后使用 使用 Dim 语句声明数组名、类型、维数、数组大小 声明时下标的个数确定数组的维数,数组声明后在内存可分配一块连续的区域。 5.1.2 数组声明及初始化 一维数组 Dim 数组名(下标上界) [As 类型] 下标上界为常数、已有值的表达式或变量。 下标下界为 0。一维数组的大小为:下标上界+1
Dim mark(99)As Integer声明了一维定长整型数组mark,共有100个元素,下标范围为0To99:mark数组的各元素是mark(0),mark(1),..,mark(99):mark(i)表示由下标i的值决定是哪一个元素。mark数组内存分配如下:.mark(0)mark(1)mark(2)mark(98)mark(99)每个数组元素有一个唯一的顺序号,下标不能超出数组声明时的上、下界范围,否则会产生“索引超出了数组界限"错误8数组元素的使用规则与同类型的简单变量相同多维数组声明Dim数组名(下标1,下标2...)[As类型下标数决定了数组的维数,每一维的大小=上界+1:数组的大小为每一维大小的乘积。例Dimx(2,4)AsLong声明了一个长整型的二维数组x:共占据3X5个长整型变量的空间X(0,0)X(0, 1)X(0,2)X(0,3)X(0,4)X(1,0)X(1,1)X(1,2)X(1,3)X(1,4)X(2,0)X(2, 1)X(2,2)X(2,3)X(2,4)5.1.3动态数组及声明建立动态数组要分两步:用Dim语句声明数组,但不能指定数组大小Dim数组名()As数据类型用ReDim语句动态地分配元素个数ReDim数组名(下标[,下标2...J)例:Dims()AsSingleSubFormLoad()ReDim s(4,8)End Sub定义动态数组大小注意:Dim是说明语句,可出现在程序的任何地方,而ReDim是执行语句,只能在过程中心在过程中可多次使用ReDim语句来改变数组的大小,但不能改变维数和类型心可在ReDim后加Preserve参数用来保留数组中的数据,若使用Preserve参数后,只能改变最后一维的大小。例5.2编一个程序,显示有n个数的非波那契数序列5.2数组的基本操作数组的输入通过TextBox控件或InputBox函数输入Dim s(3,4) AS IntegerFori=0 To3Forj=0 To 4s(Ij)=InputBox("输入"&i&""&j&"元素")NextjNexti
Dim mark(99) As Integer 声明了一维定长整型数组 mark ,共有 100 个元素,下标范围为 0 To 99;mark 数组的 各元素是 mark(0),mark(1),.,mark(99);mark(i)表示由下标 i 的值决定是哪一个元素。 mark 数组内存分配如下: mark(0) mark(1) mark(2) . mark(98) mark(99) 每个数组元素有一个唯一的顺序号,下标不能超出数组声明时的上、下界范围,否则会 产生“索引超出了数组界限”错误 。 数组元素的使用规则与同类型的简单变量相同 多维数组声明 Dim 数组名(下标 1,下标 2.) [As 类型] 下标数决定了数组的维数,每一维的大小=上界+1;数组的大小为每一维大小的乘积。 例 Dim x(2,4) As Long 声明了一个长整型的二维数组 x;共占据 3×5 个长整型变量的空间 X(0,0) X(0,1) X(0,2) X(0,3) X(0,4) X(1,0) X(1,1) X(1,2) X(1,3) X(1,4) X(2,0) X(2,1) X(2,2) X(2,3) X(2,4) 5.1.3 动态数组及声明 建立动态数组要分两步: 用 Dim 语句声明数组,但不能指定数组大小 Dim 数组名( ) As 数据类型 用 ReDim 语句动态地分配元素个数 ReDim 数组名 (下标[,下标 2.]) 例:Dim s ( ) As Single Sub Form_Load( ) . ReDim s(4,8) . End Sub 定义动态数组大小注意: ❖ Dim 是说明语句,可出现在程序的任何地方,而 ReDim 是执行语句,只能在过程 中 ❖ 在过程中可多次使用 ReDim 语句来改变数组的大小,但不能改变维数和类型 ❖ 可在 ReDim 后加 Preserve 参数用来保留数组中的数据,若使用 Preserve 参数后, 只能改变最后一维的大小。 例 5.2 编一个程序,显示有 n 个数的非波那契数序列 5.2 数组的基本操作 数组的输入 通过 TextBox 控件或 InputBox 函数输入 Dim s(3,4) AS Integer For i = 0 To 3 For j = 0 To 4 s(I,j) = InputBox("输入" & i &“," & j & "元素") Next j Next i
数组的输出例5.3形成5×5的方阵,分别输出方阵中各元素、上三角和下三角元素Fornl口回区产生方阵数据显示上三角数组元素显示下三角数组元素0344105012701273.005869669949405131413121111211151916181816171820202122232421222324方阵规律:第一行的元素为0~4,以后每一行是前一行对应元素增加5上三角规律:每一行的起始列与行号相同,只要控制内循环的初值用Tab函数或Space定位控制输出的空格,求数组和、最值、位置例5.4求一维数组中各元素之和、最小数组元素,并将最小值数组元素与数组中第一个元素交换*求元素和通过循环将每个元素进行累加求数组中最小元素假设第一个元素为最小,然后将该数与其他元素逐一比较,若发现小于最小值,就用新值替换最小值,同时记录下标值。求最大值的方法与求最小值相似交换元素5下标0123467893319初值26436187375976692357下标014689初值19436187332637596976数组排序排序是将一组数按递增或递减的次序排列,例如按学生的成绩、球赛积分等排序。排序的算法有许多,常用的有选择法、冒泡法、插入法、合并排序等。选择法排序基本思想:每次在若干个无序数中找最小(大)数,并放在相应的位置。数组排序n个数的序列,用选择法按递增次序排序的步骤:1)从n个数中找出最小数的下标,出了内循环,最小数与第1个数交换位置;通过这一轮排序,第1个数已确定好。2)除已排序的数外,其余数再按步骤1)的方法选出最小的数,与未排序数中的第1个数交换位置。3)重复步骤2),最后构成递增序列。选择法排序例5.5对已知存放在数组中的6个数,用选择法按递增顺序排序
数组的输出 例 5.3 形成 5×5 的方阵,分别输出方阵中各元素、上三角和下三角元素 方阵规律:第一行的元素为 0~4,以后每一行是前一行对应元素增加 5 上三角规律: 每一行的起始列与行号相同,只要控制内循环的初值 用 Tab 函数或 Space 定位控制输出的空格, 求数组和、最值、位置 例 5.4 求一维数组中各元素之和、最小数组元素,并将最小值数组元素与数组中第一个 元素交换 ❖ 求元素和 通过循环将每个元素进行累加 求数组中最小元素 假设第一个元素为最小,然后将该数与其他元素逐一比较,若发现 小于最小值,就用新值替换最小值,同时记录下标值。 ❖ 求最大值的方法与求最小值相似 交换元素 下标 0 1 2 3 4 5 6 7 8 9 初值 26 43 61 87 33 19 37 59 76 69 下标 0 1 2 3 4 5 6 7 8 9 初值 19 43 61 87 33 26 37 59 76 69 数组排序 排序是将一组数按递增或递减的次序排列,例如按学生的成绩、球赛积分等排序。排序 的算法有许多,常用的有选择法、冒泡法、插入法、合并排序等。 选择法排序 基本思想:每次在若干个无序数中找最小(大)数,并放在相应的位置。 数组排序 n 个数的序列,用选择法按递增次序排序的步骤: 1) 从 n 个数中找出最小数的下标,出了内循环,最小数与第 1 个数交换位置;通过这 一轮排序,第 1 个数已确定好。 2) 除已排序的数外,其余数再按步骤 1)的方法选出最小的数,与未排序数中的第 1 个 数交换位置。 3) 重复步骤 2),最后构成递增序列。 选择法排序 例 5.5 对已知存放在数组中的 6 个数,用选择法按递增顺序排序
原始数据869327a(5)a(1)a(2)a(3)a(4)a(6)第1轮比较693872第2轮比较a(2)a(3)a(4)a(5)a(6)239687a(3)a(4)a(5)a(6)第3轮比较3698a(4)a(5)a(6)第4轮比较236789a(5)第5轮比较a(6)236789选择法排序过程示意冒泡法排序基本思想是:从第一个元素开始,对数组中两两相邻的元素比较,将值较小的元素放在前面,值较大的元素放在后面,一轮比较比较完毕,一个最大的数沉底成为数组中的最后一个元素,一些较小的数如同气泡一样上浮一个位置。n个数,经过n-1轮比较后完成排序。例5.6用冒泡排序法实现例5.5的问题。原始数据86932第1轮比较a(1)a(2)a(3)a(4)a(5)a(6)832769a(3)a(4)a(5)第2轮比较a(1)a(2)327896a(1)a(2)a(3)a(4)第3轮比较326789a(2) a(3)第4轮比较a(1)236789a(1)a(2)第5轮比较367892C插入数据插入数据基本思想是:1)首先查找待插入数据在数组中的位置k;2)然后从最后一个元素开始往前直到下标为k的元素依次往后移动一个位置;3)第k个元素的位置腾出,将数据插入。Q??147101316192225x[4
1 4 7 10 13 16 19 22 25 ④ ③ ② ① x 14 k 原始数据 8 6 9 3 2 7 a(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 6 7 8 9 选择法排序过程示意 冒泡法排序 基本思想是:从第一个元素开始,对数组中两两相邻的元素比较,将值较小的元素放在 前面,值较大的元素放在后面,一轮比较比较完毕,一个最大的数沉底成为数组中的最后一 个元素,一些较小的数如同气泡一样上浮一个位置。n 个数,经过 n-1 轮比较后完成排序。 例 5.6 用冒泡排序法实现例 5.5 的问题。 原始数据 8 6 9 3 2 7 a(1) a(2) a(3) a(4) a(5) a(6) 第 1 轮比较 6 8 3 2 7 9 a(1) a(2) a(3) a(4) a(5) 第 2 轮比较 6 3 2 7 8 9 a(1) a(2) a(3) a(4) 第 3 轮比较 3 2 6 7 8 9 a(1) a(2) a(3) 第 4 轮比较 2 3 6 7 8 9 a(1) a(2) 第 5 轮比较 2 3 6 7 8 9 插入数据 插入数据基本思想是: 1)首先查找待插入数据在数组中的位置 k; 2)然后从最后一个元素开始往前直到下标为 k 的元素依次往后移动一个位置; 3) 第 k 个元素的位置腾出,将数据插入
例5.7在有序数组a中插入数值x。删除数据删除操作首先也是要找到欲删除的元素的位置k然后从k+1到n个位置开始向前移动最后将数组元素减1。例5.8要将值为13的元素删除。5.3列表框和组合框》列表框可显示多个选项供用户选择,不能直接修改其中的内容。》组合框组合了文本框和列表框的特性而形成的一种控件。组合框有3种式样。00×组合框示例列表框示例下拉式组合框:简单组合框:下拉式列表框:本人DropDownStyle属性为DropDownDropDownStyle属性为SimpleDropDownStyle属性为DropDownList泰摩宁李宁李宁--春华车红梅精手翔辅菇鲜鞋春华华成红梅V范杰列表框和组合框重要属性李宁A(1) List伟List是一个集合春华红梅(2)ListIndex选项的序号(从0开始)华成(3)ListCount项目数量范杰Y(4)Sorted排序(5)Text被选定的文本内容列表框示例 口回区List1.ListIndex = 2大提装牌List1.ListCount =6List1.Sorted=False媒依技术术及应用数据库技List1.Text为"C/C++程序设计置eb技术及应用List1.List(List1.ListIndex)等于List1.Text常用方法*Additem方法把一个项目加入列表对象.AddItem项目字符串[,索引值]索引值:决定新增项在列表中的位置,如果省略,则新增项目添加在最后。心Removeltem方法删除列表中指定项目对象.Removeltem索引值心Clear清除列表中所有项目例如:List1.Clear全部清除季A季花春华王工梅.华盛范V
例 5.7 在有序数组 a 中插入数值 x。 删除数据 删除操作首先也是要找到欲删除的元素的位置 k;然后从 k+1 到 n 个位置开始向前移动; 最后将数组元素减 1。 例 5.8 要将值为 13 的元素删除。 5.3 列表框和组合框 ➢ 列表框 可显示多个选项供用户选择,不能直接修改其中的内容。 ➢ 组合框 组合了文本框和列表框的特性而形成的一种控件。组合框有 3 种式样。 列表框和组合框重要属性 (1) List List 是一个集合 (2) ListIndex 选项的序号(从 0 开始) (3) ListCount 项目数量 (4) Sorted 排序 (5) Text 被选定的文本内容 List1.List(List1.ListIndex)等于 List1.Text 常用方法 ❖ AddItem 方法 把一个项目加入列表 对象.AddItem 项目字符串 [,索引值] 索引值:决定新增项在列表中的位置,如果省略,则新增项目添加在最后。 ❖ RemoveItem 方法 删除列表中指定项目 对象.RemoveItem 索引值 ❖ Clear 清除列表中所有项目 例如:List1.Clear 全部清除 List1.ListIndex = 2 List1.ListCount = 6 List1.Sorted = False List1.Text 为 "C/C++程序设计