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

    第7章数 组.docx

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

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

    第7章数 组.docx

    1、第7章 数 组第7章 数 组本章要求:1.掌握数组的概念2.掌握数组(一、二维)的定义及其引用,3.掌握控件数组的建立及使用。4. 掌握与数组有关的常用算法,如排序、查找、插入等。本章重点:数组定义及引用方法,与数组有关的一些常用算法本章难点L与数组有关的一些常用算法7.1 数组的概念在实际应用中,常常需要处理相同类型的一批数据。例如,为了处理100个员工的工资,可以用S(1),S(2),S(100)来分别代表每个员工的工资,其中S(1)代表第一个员工的工资,S(2)代表第二个员工的工资。在VB中,把一组相互关系密切的数据放在一起并用一个统一的名字作为标志,这就是数组。数组中的每一个数据称为数

    2、组元素,用数组名和该数据在数组中的序号来标识。序号又称为下标,数组元素又称为下标变量。例如,S(2)是一个数组元素,其中的S称为数组名,2是下标。在使用数组元素时,必须把下标放在一对紧跟在数组名之后的括号中。S(3)是一个数组元素,而S3是一个简单变量。 数组并不是一种数据类型,而是一组相同类型数据的集合。用一个统一的名字(数组名)代表逻辑上相关的一批数据,每个元素用下标变量来区分;下标变量代表元素在数组中的位置。 其表示形式: A(1),A(10) X(1,1), X1(1,10), X(2,10) Y(0,0,0), Y(1,2,5)Visual Basic中的数组分类: 按数组的大小(元

    3、素个数)是否可以改变来分为: 定长数组、动态(可变长)数组。 按元素的数据类型可分为: 数值型数组、字符串数组、逻辑数组、 日期型数组、变体数组等、对象数组。 按数组的维数可分为: 一维数组、二维数组、多维数组7.2 数组的定义721静态数组的声明静态数组的声明语法是:Dim / Private / Public 数组名( 下界To 上界,)As 数据类型例如:Dim Counter(1 To 14) As Integer 14个元素的局部数组。Private Sume (1 To 20) As Double 20个元素的模块级数组。说明:(1) 数组名的命名规则与变量的命名相同,但在同一过程

    4、中数组名不能和简单变量名同名,否则会出错。(2) 下标的最大值和最小值分别称为数组的上界和下界。数组元素在上、下界内是连续的。如:Dim A(-5 To 20) As Integer 定义一个数组名为A,下界为-5,上界为20的一维数组,数据类型为整型,共有26个元素,即A(-5),A(-4),A(-3)A(20)。 (3) 缺省为0,若希望下标从1开始,可在模块的通用部分使用Option Base语句将缺省设为1,其使用语法格式是:Option Base n Option Base n语句用于指定数组的默认下界,参数n只能取0或1Option Base语句只能用于窗体或模块的通用部分,不能出

    5、现在过程中,并且必须放在数组定义前。(放在任何过程之外)例如:Option Base 1 将数组声明中缺省下标设为1(4)如果省略As子句,则数组的类型为变体类型。(5)数组中各元素在内存占一片连续的存储空间。 (6) 一维数组的元素个数:上界-下界+1;多维数组的元素个数等于每一维元素个数的乘积。如:Dim x(1 To 10,3,1 To 15)这是一个三维数组,第一维的元素个数为10,第二维的元素个数为4,第三维的元素个数为15,故整个数组的元素个数为:10415600个元素。(7) 关键字Public、Dim、Static、Private表示数组变量的作用范围,具体内容将在过程与函数一

    6、章进行讲解。(8) 在数组定义后未赋值前,对于数值型数组各元素的初始值为0;字符型数组初始值为空字符串;逻辑型数组初始值为False。注意:1、数组必须“先声明后使用”,声明一个数组就是声明其数组名、类型、维数和数组的大小。2、数组的维数(即下标的个数)各维下标之间用逗号分开。 在VB中有一维数组、二维数组最多可以达到60维3、静态数组:数组声明时,数组的大小固定的数组称为静态数组。 它指明了数组的维数和每一维的下标范围,在使用过程中,它的维数和下标范围将不得改变4、动态数组:数组声明时,不指明数组的维数和每一维的下标范围,仅用一对圆括号表示, 这样的数组称为动态数组。 例7-1 自动产生10

    7、个100,200之间的随机整数,然后输出这些数据。Private Sub Form_Click()Dim a(1 To 10) As IntegerFor i = 1 To 10a(i) = 100 + Int(Rnd * 101)Print a(i);Next iEnd Sub722 静态数组的定义创建动态数组的步骤:(1)用Public(公用数组)、Private (模块级数组)或Dim(局部数组)在过程中声明数组。给数组赋以一个空维数表,这样就将数组声明为动态数组。(2)在过程中用ReDim语句为声明的动态数组分配空间。说明:若选择Preserve,则在对数组重新说明时,将会保留原数组中

    8、的元素的内容,并且只允许ReDim 语句改变动态数组的最后一维的上限。如:Option Base 1 Dim Namearray() AS string Redim Stuarray(40,2)Redim Preserve Namearray(40,UBound(Stuarray,2)+4)例7-2 动态数组使用举例Option Base 1Private Sub Form_Click()Dim M() As IntegerReDim M(5)Print 第一个redim; 语句执行后For i = 1 To 5M(i) = iPrint M(i);Next iPrintReDim M(10)

    9、Print 第二个redim; 语句执行后For i = 1 To 5M(i) = iPrint M(i);Next iRem 试试把此部分删除的结果For i = 6 To 10M(i) = 2 * iPrint M(i);Next iPrintReDim M(12)Print 第三个redim; 语句执行后For i = 1 To 10M(i) = iPrint M(i);Next iFor i = 11 To 12M(i) = iPrint M(i);Next iPrintEnd Sub723数组的清除经过定义的数组将为其分配相应的存储空间,其大小不能改变。为了重新初始化静态数组的元素,

    10、或者释放动态数组的存储空间,可以使用Erase 语句。格式:Erase 数组名,数组名功能:重新初始化静态数组的元素;或者释放动态数组的存储空间。说明: 当 Erase语句用于静态数组时:各数组元素清空(即:赋默认值); 当 Erase语句用于动态数组时:将删除整个数组结构并释放该数组所占用的内存。例题:试验Erase语句的功能Private Sub Form_Click() Dim test(1 to 20) As Integer For I=1 to 20 Test(i)=I Print Test(I); Next Erase Test Print Print “Erase Test()”

    11、 Print “Now the Test Array is Filled with zeroes” For I=1 to 20 print Test(I); NextEnd Sub7.3 数组的基本操作731 数组元素引用 数组的引用通常是指对数组中的元素的引用。数组元素的语法格式为:数组名(下标 , 下标)其中,下标可以是常量、变量或表达式,但表达式的值必须介于定义数组时指定的下标的下界和上界之间,否则将导致“下标越界”的错误。例如: A(1)=A(2)+B(1)+7 取数组元素运算 A(i)=B(i) 下标使用变量 B(i+1)=A(i+2) 下标使用表达式 C(3,4)=100 下标使用

    12、常量732 给数组元素赋初值 可以使用循环结构和Array函数给数组赋初值。(1)使用循环结构如给数组strName(100)的元素赋初值:For i = 1 To 100strName(i) = 0Next(2)使用Array 函数Array 函数用来为数组元素赋值,即把一个数据集读入某个数组,其语法格式为: = Array()Option Base 1Private Sub Command1_Click()Static Test_str 声明一个静态的变体变量Test_str=Array(“One”,”Two”,”Three”,”Four”,5,6,7,8) 输出数组的第4个元素,以及数组

    13、的下界和上界Print Test_str(4),Lbound(Test_str), Ubound(Test_str)End Sub数组的输入一般可以通过文本框输入和InputBox函数输入。例7-3 输入输出一个5X5矩阵。Option Base 1Private Sub Form_Click()Dim a(5, 5) As IntegerDim n As IntegerFor i = 1 To 5For j = 1 To 5n = n + 1a(i, j) = nNext j, iFor i = 1 To 5For j = 1 To 5Print Tab(j * 5); a(i, j);Ne

    14、xt jPrintNext iEnd Sub733 数组元素的输出输出数组元素与输出其它数据一样,可以使用标签的Caption或文本区域的text输出数组元素的值。输出数组中的全部或部分元素,一般使用循环结构734 数组元素的复制单个数组元素可以像简单变量一样,通过对其赋值,也可以把它的值赋给其他的变量或数组元素。即数组元素之间可以互相复制,无论它们是否属于同一个数组或维数是否相同,但数组类型必须相同。例如:Dim a(4,8) As Integer, b(6,6)As Integera(1, 2) = b(1,1); a(2, 3) = b(2,4)b(4,4) =a (1, 2)例7-4

    15、产生10个10,100之间的整数,将其存放到一维数组中,并输出到窗体。Option Base 1Private Sub Form_Click()Dim a(10) As IntegerRandomizeFor i = 1 To 10a(i) = Int(Rnd * 91) + 10Next iFor i = 1 To 10Print a(i);Next iEnd Sub735 与输入有关的几个函数1Array函数Array函数可方便地对数组整体赋值,但它只能给声明为Variant的变量或仅由括号括起的动态数组赋值。赋值后的数组大小由赋值的个数决定。例如,要将1,2,3,4,5,6,7 这些值赋

    16、值给数组a,可使用下面的方法赋值。Dim a()A=array(1,2,3,4,5,6,7)2求数组的上界Ubound( )函数、 下界 Lbound( )函数 Ubound( )函数和Lbound( )函数分别用来确定数组某一维的上界和下界值。使用形式如下: UBound(, ) LBound( , ) 其中:数组变量的名称,遵循标准变量命名约定。 :可选的;一般是整型常量或变量。指定返回哪一维的上界。1 表示第一维,2 表示第二维,如此等等。如果省略默认是1。74 For Each Next 语句与 For Next 语句类似,都是实现循环结构的语句。但 For Each Next 语句是

    17、专用于数组和对象集合的。 其语法格式是:For Each 成员 In 数组 循环体 Exit For Next 成员说明:(1) 成员:为一个Variant变量,是为循环提供的,在For Each Next 语句中代表数组中的每个元素,数组中有几个元素,此成员就重复使用几次,循环体就执行几遍。(2) 数组:在此之前经过定义的数组,用在此处时仅仅是一个数组名,没有括号和上下界。(3) For Each Next 语句可以对数组元素进行读取、查询、输出等操作,它所重复执行的次数由数组中的元素个数决定。此段For Each Next代码中因为数组Test有100个元素,循环体(Print语句)将执行

    18、100 次,即要输出 100 次,但每次 x的值都不同,x每次代表 Test 数组中的一个元素,所以这段代码的功能就是输出Test数组的所有元素。(4) 不能在For Each Next中使用用户自定义数据类型,因为Variant不能包含用户自定义类型。例7-5 产生100个100999随机数,统计出能被7整除的数打印之。Option Base 1Private Sub Form_Click()Dim nums(1 To 100) As IntegerDim i, k, s As IntegerFor i = 1 To 100nums(i) = Int(Rnd * 900 + 100)Next

    19、 iFor Each k In numsIf k Mod 7 = 0 Thens = s + 1Print k;End IfNext kPrintPrint 能被7整除的数据个数为:; sEnd Sub75 控件数组1、控件数组的概念 一个窗体上可以包含多个同种类型的控件,可以通过创建控件数组的方法使同一类型的控件共享同一个事件过程。使用控件数组的最大好处是编写的代码比较简单且易于维护。控件数组:是具有相同名称、类型以及事件过程的一组控件。每一个控件具有一个唯一的索引(index)。当数组中的一个控件识别某一事件时,它将调用此控件数组的相应事件过程,并把相应索引作为参数传递给事件过程。一个控件

    20、数组至少应有一个元素,在控件数组中可用到的最大索引值为 32767。同一控件数组中的元素有自己的属性设置值。2、控件数组的建立 控件数组中每一个元素都是控件,它的定义方式与普通数组不同。可以通过以下两种方法建立控件数组。 方法一:复制已有的控件并将其粘贴到窗体上。 方法二:将窗体上已有的类型相同的多个控件的Name属性设置为同一值。3、控件数组应用举例 建立了控件数组之后,控件数组中所有控件共享同一事件过程。例如,假定某个控件数组含有10个标签,则不管单击哪个标签,系统都会调用同一个Click过程。由于每个标签在程序中的作用不同,系统会将被单击的标签的Index属性值传递给过程,由事件过程根据

    21、不同的Index值执行不同的操作。例7-6 建立单选按钮数组,控制标签对齐方式。Private Sub Option1_Click(Index As Integer)x = IndexSelect Case xCase 0Label1.Alignment = 0Case 1Label1.Alignment = 1Case 2Label1.Alignment = 2End SelectEnd Sub 建立了控件数组之后,控件数组中所有控件共享同一事件过程。例如,假定某个控件数组含有10个标签,则不管单击哪个标签,系统都会调用同一个Click过程。由于每个标签在程序中的作用不同,系统会将被单击的标

    22、签的Index属性值传递给过程,由事件过程根据不同的Index值执行不同的操作。76 数组的应用例7-7 求数组中元素的最大最小值及其所在下标 设计思想:该类问题实际上是完成数组的顺序查找,可以假设第一个元素为最大值,用Max保存该值,用L记录其位置1;从数组第二个元素开始,逐个与Max进行比较,直到数组的最后一个元素;一旦Max的值小于元素的值则将该元素值赋值给Max,同时将该元素所对应下标值赋值给L,最后输出Max和L。Option Base 1Private Sub Form_Click()Dim a(1 To 20) As IntegerDim max, min, maxl, minl

    23、, k As IntegerFor i = 1 To 20a(i) = Int(Rnd * 91 + 10)Next imax = a(1)min = a(1)For i = 1 To 20Print a(i);If max a(i) Thenmin = a(i)minl = iEnd IfNext iPrintPrint max=; max; min=; min; maxl=; maxl; minl=; minlEnd SubOption Base 1Private Sub Form_Click()Dim a(1 To 20) As IntegerDim max, X, min, maxl,

    24、 minl, k As IntegerFor i = 1 To 20a(i) = Int(Rnd * 91 + 10)Next imax = a(1)min = a(1)For Each X In aPrint X;If max X Thenmin = Xminl = iEnd IfNext XPrintPrint max=; max; min=; min; maxl=; maxl; minl=; minlEnd Sub例7-8 数组元素倒置 设计思想:该类问题实际上将第1个元素和第n个元素交换,第I个元素和第nI1个元素交换,交换次数为n2次。Private Sub Form_Click()

    25、Dim a(1 To 10) As IntegerDim temp As Integer, i As IntegerFor i = 1 To 10a(i) = Int(Rnd * 91 + 10)Next iPrint 交换前为:For Each k In aPrint k;Next kPrintFor i = 1 To 5temp = a(i): a(i) = a(11 - i): a(11 - i) = tempNext iPrint 交换后为:For Each k In aPrint k;Next kPrintEnd Sub例7-9 排序问题数据的排序就是将一批数据由小到大(升序)或由大

    26、到小(降序)进行排列。常用的有选择法、冒泡法。(1)冒泡法排序:v 冒泡排序是常用的一种排序方法。假设n个元素按递增的顺序排序,排序思想为:v 第一轮:从数组的第一项开始,每一项(i)都与下一项(i+1)进行比较。如果下一项的值较小,就将这两项的位置交换,直到最后第n-1与第n项进行比较,将最大的数排列在最后。v 第二轮:从数组的第一项开始,每一项(i)都与下一项(i+1)进行比较。如果下一项的值较小,就将这两项的位置交换,直到最后第n-2与第n-1项进行比较,将第二大的数排列在倒数第二位。v 依此类推,直到只有第一项与第二项进行比较交换,完成递增法排序。(1)冒泡法排序(升序)程序:For

    27、i = 1 To n - 1 For j = 1 To n-i If a(j) a(j+1) Then t=a(j) a(j)=a(j+1) a(j+1)=t End if Next jNext i(2)选择法排序(升序):v 选择法排序是最为简单且易理解的算法,其基本思想是每次将最小(或最大)的数找出来放在序列的最前面。假设按递增法将有n个数的数组A(1To n)进行排列,步骤为:(1)假定最小值Temp,将Temp与A(2)进行比较,若A(2) a(j) Then p = j Next j t = a(i): a(i) = a(p): a(p) = tNext iOption Base 1Private Sub Command1_Click()Const N = 10Dim a(N) As IntegerDim i, j, p, temp As IntegerRandomize TimerFor i = 1 To Na(i) = Int(Rnd * 91 + 10)Next iFor i = 1 To N - 1k = iFor j = i + 1 To NIf a(k) a(j + 1) Thentemp = a(j)a(j) = a(j + 1)a(j + 1) = temp


    注意事项

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

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




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

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

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


    收起
    展开