欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    第五篇数组.docx

    • 资源ID:3850591       资源大小:96.03KB        全文页数:22页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第五篇数组.docx

    1、第五篇数组第五章 数组5.1 数组的概念数组是同类变量的有序集合数组中的变量称为数组元素不同的数组元素以不同的下标来区别,又称为下标变量描述一数组中元素所需要的下标个数,称为数组的维数如:矩阵(二维)、双层汽车(三维)、时空结合:层、行、列、时间(四维)层、行、列、时间、日期(五维)1. 引例2. 若我们要求一个班100个学生的平均成绩,然后统计高于平均分的人数。按以前简单变量的使用和循环结构相结合,求平均成绩程序段如下: aver = 0 For i = 1 To 100 mark = InputBox(输入 + i + 位学生的成绩) aver = aver + mark Next i a

    2、ver = aver / 100但若要统计高于平均分的人数,则无法实现。mark是一个简单变量,存放的是最后一个学生的成绩。已有知识解决方法:再重复输入成绩,带来两个问题: (1)输入数据的工作量成倍增加; (2)若本次输入的成绩与上次不同,则统计的结果不正确。解决此问题的根本方法,引入数组,始终保持输入的数据,一次输入,多次使用。5.2 静态数组及声明由于数组在内存中要占用大量连续的存储单元,在使用数组前,必须说明数组的名类型和容量(维数大小),以便系统分配内存单元 数组不是一种数据类型,而是一组相同类型的变量的集合,数组必须先声明后使用。 两类数组: 静态(定长)数组:数组声明时指明维数和

    3、每一维的下标范围,在使用中,维数和下标范围不得改变 动态数组:数组声明时不指明维数和每一维的下标范围,仅用一对圆括号表示,可用REDIM语句对数组的维数和下标范围重新声明1. 静态数组及声明 形式: Dim 数组名(下标1,下标2) As 类型 功能:声明了数组的名、维数、大小、类型 维数:几个下标为几维数组,最多60维。 下标: 下界 To 上界 省略下界为0 ,必须为常数。 每一维大小: 上界下界+1数组大小: 每一维大小的乘积界说明格式:下界 to 上界,省略下界,缺省为0注:数组大小(元素个数)=每维元素数的乘积每维元素数=上界-下界+1如:DIM YEAR(1900 TO 2010)

    4、 AS INTEGERDIM X(3 TO5,7 TO 8)AS STRINGDIM A(10) AS INTEGERDIM B(2,3,1 TO 10)AS INTEGER(100个元素)二维数组在内存连续存储区域中的排列采用行优先的原则如:X(3,7)、X(3,8)、X(4,7)、X(4,8)、X(5,7)、X(5,8) 例:Dim mark(1 to 100) As IntegerDim lArray( 0 To 3, 0 To 4) As Long 共有 45个元素等价于: Dim lArray(3, 4) As Long 注意:(1)下界缺省为0,也可在重新定义数组的下界。例如: O

    5、ption 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.3 动态数组及声明 动态数组指在声明数组时未给出数组的大小(省略括号中的下标),当要使用它时,随时用ReDim语句重新指出数组大小。形式: ReDim 数组名(下标,下标2) As 类型 例 Sub Fo

    6、rm_Load( )Dim x( ) As Single 求若干个学生的平均分。 n =Inputbox(“输入n”) ReDim x(n) End Sub说明: Dim、Private、Public变量声明语句是说明性语句,可出现在过程内或通用声明段;ReDim语句是执行语句,只能出现在过程内。 在过程中可多次使用ReDim来改变数组的大小和维数。 使用ReDim语句会使原来数组中的值丢失,可以在ReDim语句后加Preserve参数来保留数组中的数据。使用Preserve只能改变最后一维的大小,前面几维大小不能改变。 ReDim中的下标可以是常量,也可以是有了确定值的变量。 静态数组在程序

    7、编译时分配存储单元,动态数组在运行时分配存储单元。如: ReDim Preserve TestArr(Ubound(TestArr)+1)ReDim Preserve ThreeD(10,10,Ubound(ThreeD,3)+1)OPTION BASE语句格式:Option Base 1如果缺省说明语句数组下标的下界,则系统默论的下标下界是0,但在实际使用数组时,很多人希望数组下标的下界从1开始,使用Option Base语句,即可在窗体或标准模块中,将数组下标的缺省值下界设置为1。该语句必须写在窗体或标准模块的所有过程之前,一个模块中只能出现一次Option Base,且必须位于带维数的数

    8、组说明语句之前。该语句将使模块中所有缺省说明下标下界为1。5.4 数组的基本操作1. 数组元素的赋初值 (1)用循环 For i = 1 To 10 iA(i)=0 Next i 2) Array函数 Dim ib As Variant ib = Array(abc, def, 67) For i = 0 To UBound(ib) Picture1.Print ib(i); ; Next i注意:利用Array对数组各元素赋值,声明的数组是可调数组或连圆括号都可省,并且其类型只能是Variant。数组的下阶为零,上界由Array函数括号内的参数个数可决定,也可通过函数Ubound获得。 2数

    9、组的赋值 在VB6.0中,提供了数组直接对数组的赋值。例如:Dim a() As Variant, b() As Variant, i%a = Array(1, 2, 3, 4, 5)ReDim b(UBound(a)b = a 3. 数组的输出输出方阵sC中的下三角元素For i = 0 To 4 For j = 0 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=iA(1):iMax=1 For

    10、i = 2 To 10 If iA(i)Max Then Max=iA(i) iMax=i End If Next I5. 将数组中各元素交换 For i =1 To 102 t=iA(i) iA(i)=iA(10-i+1) iA(10-i+1)=t Next I5.5 控件数组在一个窗体内可以包含多个同种类型的控件,比如:有多个文本框,多个命令按钮等。用户可以分别为这些同一类型的控件类对象命名,并编写响应不同事件的时间过程。但用户也可以通过创建一个控件数组的方法使同一类型的控件共享同一事件过程。 一组相同类型的控件组成。 它们共用一个控件名,具有相同的属性,建立时系统给每个元素赋一个唯一的索

    11、引号(Index)。 控件数组共享同样的事件过程,通过返回的下标值区分控件数组中的各个元素。 例: Private Sub cmdName _Click(Index As Integer) If Index = 3 then 处理第四个命令按钮的操作End If End Sub1.在设计时建立控件数组 在窗体上画出控件,进行属性设置,这是建立的第一个元素 选中该控件,进行“Copy”进行若干次和“Paste”操作建立了所需 个数的控件数组元素。 进行事件过程的编程。2运行时添加控件数组建立的步骤如下: 在窗体上画出某控件,设置该控件的Index值为0,表示该控件为数组,这是建立的第一个元素。

    12、在编程时通过Load方法添加其余的若干个元素,也可以通过Unload方法删除某个添加的元素格式:LOAD 控件数组对象名(index)格式:UNLOAD 控件数组对象名(index) 每个新添加的控件数组通过Left和Top属性确定其在窗体的位置,并将Visible 属性设置为True。5.6 自定义数据类型 一组不同类型变量的集合。相当于C语言中的结构类型;Pascal中的记录类型。1.自定义类型的定义 形式如下: Type 自定义类型名 元素名(下标) As 类型名 元素名(下标) As 类型名 End Type 例如,以下定义了一个有关学生信息的自定义类型: Type StudType

    13、No As Integer 学号 Name As String * 20 姓名 Sex As String * 1 性别 Mark(1 To 4) As Single 4门课程成绩 Total As Single 总分 End Type注意: (1)自定义类型一般在标准模块(.BAS)中定义,默认是Public;在窗体必须是Private。 (2)自定义类型中的元素类型可以是字符串,但应是定长字符串。 (3)不要将自定义类型名和该类型的变量名混淆,前者表示了如同Integer、Single等的类型名,后者VB根据变量的类型分配所需的内存空间,存贮数据。 (4)自定义类型一般和数组结合使用,简化

    14、程序的编写。2自定义类型变量的声明和使用(1) 声明形式: Dim 变量名 As 自定义类型名 例 Dim Student As StudType (2) 引用 形式:变量名.元素名 例 表示Student变量中的姓名,第4门课程的成绩,则表示如下: Student.Name,Student.Mark(4)3自定义类型数组的应用 利用自定义类型数组,编写一个输入、显示、查询程序。5.7 常用算法(二) 1. 统计 输入一串字符,统计各字母出现的次数,不区分字母大小写。分析: 统计26个字母出现的个数,先声明一个具有26个元素的数组,每个元素的下标表示对应的字母,元素的值表示对应字母出现的次数。

    15、 从输入的字符串中逐一取出字符,转换成大写字符(不区分大小写),进行判断。 运行界面: For I = 1 To le c = UCase(Mid(Text1, I, 1) If c = A And c A(J) ThenTEMP = A(I)A(I) = A(J)A(J) = TEMPEnd IfNext JNext IEnd SubPrivate Sub Form_Click()Dim X(10) As IntegerDim I As IntegerRandomizePrintFor I = 1 To 10X(I) = Int(90 * Rnd + 10)Next ICall SORT(X

    16、)For I = 1 To 10Print X(I);Next IEnd Sub优化的选择排序:交换两个数据,效率低设一个指针P,先让它指向未排序的第一个元素,然后使该变量的值是未排序中的最小元素的下标值(即指针指向最小元素),若指针指向的不是当前未排序中的第一个数,则将指针指向的元素与之交换,使它加入已排序子序列的最后一元素。Public Sub SORT(A() As Integer)Dim I As Integer, J As Integer, TEMP As Integer, p As IntegerFor I = 1 To UBound(A) - 1p = IFor J = I +

    17、1 To UBound(A)If A(p) A(J) Then p = JNext JIf I p ThenTEMP = A(I)A(I) = A(p)A(p) = TEMPEnd IfNext IEnd Sub 对已知存放在数组中的n个数,用选择法按递增顺序排序。(1) 从n个数的序列中选出最小的数(递增),与第1个数交换位置;(2) 除第1个数外,其余n-1个数再按(1)的方法选出次小的数,与第2个数交换位置; (3) 重复(1)n-1遍,最后构成递增序列。 For i = 1 To n - 1 iMin= i For j = i+1 To n If iA(j) A(J + 1) Then

    18、TEMP = A(J)A(J) = A(J + 1)A(J + 1) = TEMPEnd IfNext JNext IEnd SubPrivate Sub Form_Click()Dim X(10) As IntegerDim I As IntegerRandomizePrintFor I = 1 To 10X(I) = Int(90 * Rnd + 10)Next ICall SORT(X)For I = 1 To 10Print X(I);Next IEnd Sub 选择法排序在每一轮排序时找最小(递增次序)数的下标,出了内循环(一轮排序结束),再交换最小数的位置;而冒泡法排序在每一轮排序

    19、时只要将第一个与其它几个比较,只要次序不对,就交换,出了内循环,最小数已冒出。排序进行的过程见下表。 For i = 1 To n-1 进行n-1轮比较 For j = i+1 To n 从ni个元素进行两两比较 If iA(j) iA(i) Then 若次序不对,则马上进行交换位置 t = iA(j) : iA(j) = iA(i) : iA(i) = t End If Next j 出了内循环,一轮排序结束,最小数已冒到最上面 Next i(3)插入排序(Insertion Sort)插入排序算法:将未排序的数据按一定的规则逐一插入到已排序序列中的合适位置,直到将全部均插入为止。A(1),

    20、A(2),A(n)将A(1)看成一有序列,将A(2),A(3),A(n) 看成一无序列。以后每次从无序列中取第一个数(即有序列后的一个数),将其插入到有序列的合适位置,使之仍为一有序列,每进行一次,有序列增加一个数,无序列减少一个数。重复n-1次,无序列为空列,有序列为n个数。如何将无序列的第一个数A(I)(I=2、3n)插入到有序列中?|有序列|无序列 |A(1)A(2)A(J)A(J+1)A(I-2)A(I-1)A(I)A(n) X首先将A(I)与有序列中的最后一个数A(I-1)比较(1)若A(I)A(I-1) 则A(1),A(2),A(I)构成新的有序列(2)若A(I)A(I-1) 则继

    21、续同A(I-2)比较,依此类推,直到A(I)A(J)(A(J)为有序列中的一个数),此时将A(J+1)到A(I-1)之间的数依次向后移动一个单元,将A(I)放入A(J+1)中,使A(1),A(2),A(I)构成新的有序列程序:Option Base 1Public Sub SORT(A() As Integer)Dim I As Integer, J As Integer, TEMP As Integer, p As IntegerDim X As IntegerFor I = 2 To UBound(A)X = A(I) 将插入位置和后移同时进行J = I - 1 从J = I - 1开始向

    22、前测试A(J)Do While X 0A(J + 1) = A(J) 若A(J)X 则A(J)A(J + 1),J = J - 1 再测试前一个数,直到找到J,使XA(J) 再将XA(J+1)LoopA(J + 1) = X 将X插入到合适位置Next IEnd SubPrivate Sub Form_Click()Dim X(10) As IntegerDim I As IntegerRandomizePrintFor I = 1 To 10X(I) = Int(90 * Rnd + 10)Next ICall SORT(X)For I = 1 To 10Print X(I);Next IE

    23、nd Sub4.数组元素的插入与删除(1) 插入 在有序数组a(1 to n)(原有n-1个元素)插入一个值Key元素,算法:查找要插入的位置k(1=k=n-1)腾出位置,把最后一个元素开始到第K个元素往后移动一个位置第k个元素的位置腾出,就可将数据Key插入(2) 删除 要找到欲删除的元素的位置k;然后从k+1到n个位置开始向前移动;最后将数组元素减1。5数组元素的检索数据检索:从一组数据中查找需要的数据(1)顺序检索顺序检索算法:从一组数据的第一个开始逐个比较,直到找到该数据或能确定全部数据中没有要检索的数据。程序:Private Sub Form_Click()Dim SEARCH(10) As IntegerDim I As Integer, X As IntegerRandomizeFor I = 1 To 10SEARCH(I) = Int(Rnd * 100 + 1)Next IX = Val(InputBox(INPUT A DATA:)For I = 1 To 10If SEARCH(I) = X Then Exit ForNext IIf I A(MID) 则表明X可能在A(MID+1),A(MID+2),A(HIGH)序列中


    注意事项

    本文(第五篇数组.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开