




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章 数组和自定义类型,5.1 数组的概念5.2 数组的基本操作5.3 列表框和组合框控件5.4 自定义类型及其数组5.5 综合应用5.6 常见错误,5.1 数组的概念,5.1.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 ave!, n%, i% ave = 0 For i = 0 To 99 输入成绩,求分数和 mark(i) = InputBox(输入学生的成绩) ave = ave + mark(i) Next i ave = ave / 100 求100人的平均分 n = 0 For i = 0 To 99 统计高于平均分的人数 If mark(i) ave Then n = n + 1 Next i MsgBox (平均分: & ave & 高于平均分人数: & n),2.数组的概念 概念:在VB中,把一组相互关系密切的数据放在一起并用一个统一的名字作为标志,就是数组。 一般来说,数组就是一组相同类型的变量的集合。 数组的分类: 按数组的大小分为定长数组(静态)和变长数组(动态)。 按元素的类型分为数值型、字符型、日期型、变体数组等。 按数组的维数分为一维数组、二维数组、多维数组。 按对象不同分为菜单对象数组和控件数组。 数组必须先声明后使用。声明数组名、类型、维数和数组大小。 使用数组元素时,下标不能超出上下界范围,下标可以是整型的常数、变量、表达式,甚至是一个数组元素。,5.1.2 静态数组及声明 在声明时确定了大小的数组称为静态数组。静态数组从建立到消亡整个阶段中数组的大小是固定的。 静态数组的声明形式: Dim 数组名(下标1,下标2) As 类型 声明了数组的名、维数、大小、类型(省略时为变体类型) 维数:几个下标为几维数组,最多60维。 下标:下界 To 上界 省略下界为0,必须为常数。 每一维大小:上界下界+1 数组大小: 每一维大小的乘积 例:Dim mark(1 to 100) As Integer,Dim lArray( 0 To 3, 0 To 4) As Long 共有 45个元素等价于: Dim lArray(3, 4) As Long,注意:(1)下界缺省为0,也可重新定义数组的下界。例如: Option Base 1 (2)错误的声明:下标是变量 n =Inputbox(输入n ):Dim x(n) As Single(3)在数组声明中的下标说明了数组的整体,即每维的大小; 而在程序其他地方出现的下标表示数组中的一个元素。两者写法形式相同,但意义不同。例如:Dim x(10) As Integer 声明了x数组有11个元素x(10)=100 对x(10)这个数组元素赋值,5.1.3 动态数组及声明,动态数组指在声明数组时未给出数组的大小(省略括号中的下标),当要使用它时,随时用ReDim语句重新指出数组大小。建立动态数组要分两步:(1)用Dim 语句声明数组,但不能指定数组大小 Dim 数组名( ) As 数据类型(2)用ReDim语句动态地分配元素个数 ReDim 数组名 (下标,下标2)例:Dim s ( ) As Single Sub Form_Load( ) ReDim s(4,8) End Sub,定义动态数组大小注意:,1.Dim 是说明语句,可出现在程序的任何地方,而ReDim是执行语句,只能在过程中。 2.在过程中可多次使用ReDim语句来改变数组的大小和维数,但不能改变类型。3.可在ReDim后加Preserve参数用来保留数组中的数据,若使用Preserve参数后,只能改变最后一维的大小。4.Dim语句中的下标只能是常量,ReDim中的下标可以是常量,也可以是有了确定值的变量或表达式。5.静态数组在程序编译时分配存储单元,动态数组在运行时分配存储单元。例5.2编一个程序,显示有n个数的非波那契数序列。,1. 数组赋初值 (1)用循环 For i = 1 To 10A(i)=i+3 Next i,注意:(1)利用Array对数组各元素赋值,声明的数组是动态数组或连圆括号都可省的变量,并且其类型只能是Variant。(2)数组的下界为零,也可由Option Base决定。上界可由Array函数括号内的参数个数决定,也可通过函数Ubound获得。下界可由LBound函数获得。格式:UBound(数组名,N)其中N指定返回哪一维的上界。,(2) Array函数(只能是一维变体数组) Dim b As Variant b = Array(abc, def, 67) For i = 0 To UBound(b) Print b(i); ; Next i,5.2 数组的基本操作,2.数组的整体赋值 在VB6.0中,提供了数组直接对数组的赋值。例如:Dim a() As Variant, b() As Variant, i%a = Array(1, 2, 3, 4, 5)b = a,注意:赋值号左边的数组只能声明为Variant的动态数组或简单变量。,3.数组的输入对于数组的输入,可用文本框加些技术处理,也可用InputBox函数。例如:For i=0 to 3 for j=0 to 4 a(i,j)=InputBox(“输入” & i & “,” & j & “的值”)next j,i,4.数组的输出,例5.3 形成55的方阵,分别输出方阵中各元素、上三角和下三角元素。,方阵规律:第一行的元素为04,以后每一行是前一行对应元素增加5,即s(i,j) = i*5+j上三角规律: 每一行的起始列与行号相同,只要控制内循环的初值。 用Tab函数或Space定位控制输出的空格。,5.求数组和、最值、位置,例5.4 求一维数组中各元素之和、最小数组元素,并将最小值数组元素与数组中第一个元素交换。求元素和:通过循环将每个元素进行累加。求数组中最小元素:假设第一个元素为最小,然后将该数与其他元素逐一比较,若发现小于最小值,就用新值替换最小值,同时记录下标值。求最大值的方法与求最小值相似。,6.数组排序,排序是将一组数按递增或递减的次序排列,例如按学生的成绩、球赛积分等排序。排序的算法有许多,常用的有选择法、冒泡法、插入法、合并排序等。 (1)选择法排序基本思想:每次在若干个无序数中找最小(大)数,并放在相应的位置。,n个数的序列,用选择法按递增次序排序的步骤:1) 从n个数中找出最小数的下标,出了内循环,最小数与第1个数交换位置;通过这一轮排序,第1个数已确定好。2) 除已排序的数外,其余数再按步骤1)的方法选出最小的数,与未排序数中的第1个数交换位置。3) 重复步骤 2),最后构成递增序列。,例5.5 对已知存放在数组中的6个数,用选择法按递增顺序排序。,选择法排序过程示意,选择法演示,(2)冒泡法排序,基本思想是:从第一个元素开始,对数组中两两相邻的元素比较,将值较小的元素放在前面,值较大的元素放在后面,一轮比较比较完毕,一个最大的数沉底成为数组中的最后一个元素,一些较小的数如同气泡一样上浮一个位置。n个数,经过n-1轮比较后完成排序。,例5.6 用冒泡排序法实现例5.5的问题。,冒泡法演示,7.在有序数组中插入数据,插入数据基本思想是:1)首先查找待插入数据在数组中的位置k;2)然后从最后一个元素开始往前到下标为k的元素依次往后移动一个位置;3) 第k个元素的位置腾出,将数据插入。,Private Sub Form_Click() Dim a(), i%, k%, x%, n% a = Array(1, 4, 7, 9, 12, 23, 56) n = UBound(a) x = InputBox(输入要插入的数) For k = 0 To n 查找欲插入数x在数组中的位置 If x n Then MsgBox (找不到此数据): Exit Sub For i = k + 1 To n 将x后的元素左移 a(i - 1) = a(i) Next i n = n - 1 ReDim Preserve a(n) 数组元素减少一个 For i = 0 To n 显示删除后的各数组元素 Print a(i); Next iEnd Sub,5.3 列表框和组合框,列表框:可显示多个选项供用户选择,不能直接修改其中的内容。组合框:组合了文本框和列表框的特性而形成的一种控件。组合框有3种式样。,1. 共有的重要属性 (P:可在程序中设置或引用,D:可在设计状态设置。)(1)List :PD 字符型数组,存放列表框的项目,下标是从0开始。(2)ListIndex:P 选中的项目的序号,没有项目被选定时为-1(3)ListCount:P 项目的数量,ListCount-1是最后一项的下标。 引用最后一个数据项:List1.List(List1.ListCount-1)(4)Sorted:D True:按字母顺序排列。 False:按加入先后顺序排列。(5)Text:P 列表项中被选定的内容,默认属性。 List 1.List(List 1.ListIndex) = List1.Text。,2. 列表框的特有属性 MultiSelect: 0-None:禁止多项选择。 1-Simple:简单多项选择。 2-Extended:扩展多项选择。 SelCount: 返回在列表框中被选中项的数量。 Selected:P 逻辑数组。 Selected(i)的值为True表示第i+1项被选中。3. 组合框的特有属性Style:,4. 方法AddItem:把一个选项加入到列表框或组合框。 对象.AddItem item , index 省略index,则新增选项添加在最后;第一个选项的index为0。RemoveItem:删除指定的选项。 对象.RemoveItem indexClear:清除列表框或组合框的所有内容。 对象.Clear5. 事件列表框:Click、DblClick。组合框:Click,只有简单组合框才有DblClick事件。 一般不需要编写Click事件过程。通常在单击命令按钮或发生DblClick事件时才读取Text属性。,例5.9编写一个能对列表框进行项目添加、删除和清除的应用程序。,6.列表框和组合框的应用,例5.10编写一个使用屏幕字体、字号的程序,例5.11使用列表框实现数据的插入、查找、删除。,例5.12使用组合框对省和直辖市名称进行添加和修改的管理。,5.4 自定义类型及数组,5.4.1 自定义类型的定义数组存放性质相同的数据集合。若不同类型信息作为一个整体来描述,例如姓名、性别、出生年月等,通过Type语句来实现。Type 自定义类型名 元素名1 As 类型名 元素名n As 类型名End Type,其中:元素名:表示自定义类型中的一个成员,可以是简单变量,也可以是数组。类型名:可以是标准类型,也可以是自定义类型。,例如,定义一个有关学生信息的类型:Type StudType StudType为自定义类型名 Name As String*5 姓名 Sex As String*1 性别 Telephone As Long 电话 School As String*10 学校End Type自定义类型不能在过程内定义,一般放在标准模块文件,默认为Public;若在窗体模块的通用声明段定义,必须加Private。,5.4.2自定义类型变量的使用,1.自定义类型变量的声明定义了自定义类型,就可在变量的声明时使用。Dim 变量名 As 自定义类型名例如,如下语句: Dim S1 As StudType,S2 As StudType 声明S1、S2为两个同种类型的变量注意:(1)不要混淆StudType 和S1 ,前者如同Integer等的类型名,后者根据该类型分配所需的内存空间,存储各成员数据。(2) 类型变量和数组相同之处它们都是由若干个成员组成;不同之处,前者的成员代表不同性质、不同类型的数据,以各个不同的成员名表示;而数组一般存放的是同种性质、同种类型的数据,以下标表示不同的元素。,2.自定义类型变量成员的引用,引用自定义类型变量中的某个成员,形式如下:自定义类型变量名.成员名例如, S1.Name S1变量中的姓名 S1.Sex 性别可利用With语句简化成员引用:With 结构变量对象名 语句块 End With,With S1 .Name = 张华 .Sex = 男 .School=同济大学End With,5.4.3 自定义类型数组及应用,自定义类型数组就是数组中的每个元素是自定义类型。 例5.13用自定义类型数组,查询和显示学生信息。分析:自定义一个记录类型,由姓名、性别、电话、学校组成,声明一个存放100个记录的数组。,5.5 综合应用-分类统计,1.分类统计将一批数据按条件统计每一类中包含的个数。例如,统计学生成绩优、良、中、及格、不及格人数。这类问题要掌握分类条件表达式的书写和使用计数变量保存相应的计数。,例5.14输入一串字
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年各类产业园区笔试面试题目
- 体育教学技能训练课件
- 2025年煤气工程师岗位面试宝典专业知识题预测与解答技巧
- 商业计划书暨路演(模版)
- 农业信息技术教学课件
- 用药安全警示案例课件
- 江苏苏州2011-2020年中考满分作文90篇
- 河北省张家口市桥西区2024-2025学年度第二学期期末考试七年级语文试卷(含答案)
- 《雨林》课文教学课件
- 新解读《GB-T 35003 - 2018非易失性存储器耐久和数据保持试验方法》
- 2025秋季开学第一课完整版课件
- 2025重庆对外建设集团招聘41人笔试参考题库附答案解析
- 2025年军队专业技能岗位文职人员招聘考试(炊事员)历年参考题库含答案详解(5套)
- 高警示药品风险管理
- 2025南方航空“梦起航”航务联合培养招聘笔试历年参考题库附带答案详解
- 2025年新乡事业单位招聘考试笔试试卷(附答案)
- 科研审计管理办法
- 《电工》国家职业技能鉴定教学计划及大纲
- 2025年标准货物出口合同范本(中英文版)
- 2025年新钢铁安全员考试题库及答案
- 2025版电子购销合同模板
评论
0/150
提交评论