数组及其应用学习教案.pptx
数组及其应用数组及其应用(yngyng)第一页,共46页。输入(shr)10个数,输出它们的平均值及大于平均值的那些数?引例引例(yn l):输入 A当 NAve Then Print A1 IF A2Ave Then Print A2 IF A3Ave Then Print A3 IF A4Ave Then Print A4 .实际实际(shj)程序是不能这样写程序是不能这样写 第3页/共46页第四页,共46页。引例引例(yn l):思考:思考:如果能使用如果能使用Ai (i=1,2,.10)的形的形式式(xngsh)?使用循环来写程序使用循环来写程序 VB中表示下标变量就是通过定义数组中表示下标变量就是通过定义数组来实现的。来实现的。第4页/共46页第五页,共46页。4.1 4.1 概概 述述 数组的概念:数组并不是一种数据类型,而数组的概念:数组并不是一种数据类型,而是一组相同类型数据的集合。用一个统一的名字是一组相同类型数据的集合。用一个统一的名字(数组名)代表逻辑上相关的一批数据,每个元(数组名)代表逻辑上相关的一批数据,每个元素用下标素用下标(xi bio)(xi bio)变量来区分;下标变量来区分;下标(xi bio)(xi bio)变变量代表元素在数组中的位置。量代表元素在数组中的位置。VB中数组的表示中数组的表示(biosh)形式:形式:A(1),A(10)一维数组一维数组 X(1,1),X(2,10)二维数组二维数组 Y(0,0,0),Y(1,2,5)三维数组三维数组 第第4章章 数数 组及其应用组及其应用(yngyng)第5页/共46页第六页,共46页。Visual Basic中的数组分类中的数组分类(fn li):按数组的大小(元素个数)是否可以改变来分为:按数组的大小(元素个数)是否可以改变来分为:定长数组、动态(可变长)数组。定长数组、动态(可变长)数组。按元素的数据类型可分为:按元素的数据类型可分为:数值型数组、字符串数组、逻辑数组、数值型数组、字符串数组、逻辑数组、日期型数组、变体数组等、对象数组。日期型数组、变体数组等、对象数组。按数组的维数可分为:按数组的维数可分为:一维数组、二维数组、多维数组。一维数组、二维数组、多维数组。4.1 概概 述述 第6页/共46页第七页,共46页。一维数组形式一维数组形式(xngsh):(xngsh):Dim 数组名数组名(to)As 或:或:Dim 数组名数组名(to)例:例:Dim a(1 to 10)As Integer 声明声明(shngmng)了了a数组有数组有10个元素个元素1是下标的是下标的(bio de)下界下界10是下标的上界是下标的上界数组元数的数据类型数组元数的数据类型与上面声明等价形式:与上面声明等价形式:Dim a%(1 to 10)4.2 一维数组一维数组4.2.1 一维数组的声明一维数组的声明 第7页/共46页第八页,共46页。说明:1数组名的命名规则与变量的命名相同。2数组的元素个数:上界-下界+1。3缺省为0,若希望下标从1开始,可在模块(m kui)的通用部分使用Option Base语句将设为1。其使用格式是:Option Base 0|1 后面的参数只能取 0 或 1 例如:Option Base 1 将数组声明中缺省下标设为 1 4.2.1 一维数组的声明一维数组的声明(shngmng)4和和不能使用不能使用(shyng)变量,必须是常量,常量可以是直接常量、符号常量,一般是整型常量。变量,必须是常量,常量可以是直接常量、符号常量,一般是整型常量。第8页/共46页第九页,共46页。4.如果省略(shngl)As子句,则数组的类型为变体类型。6数组中各元素在内存占一片连续的存储空间。4.2.1 一维数组的声明一维数组的声明(shngmng)Dim N As IntegerN=Val(InputBox(“Enter N=?”)Dim A(N)As Integer A(0)A(1)A(2)A(n).一维数组在内存中存放的顺序一维数组在内存中存放的顺序第9页/共46页第十页,共46页。使用形式:使用形式:数组名数组名(下标下标)其中:下标可以是整型变量、常量其中:下标可以是整型变量、常量(chngling)或表达式。或表达式。例如:例如:设有下面的数组定义:设有下面的数组定义:Dim A(10)As Integer,B(10)As Integer 则下面的语句都是正确的。则下面的语句都是正确的。A(1)=A(2)+B(1)+5 取数组元素运算取数组元素运算 A(i)=B(i)下标使用变量下标使用变量 B(i+1)=A(i+2)下标使用表达式下标使用表达式第五章第五章 数数 组组 4.2.2 一维数组元素一维数组元素(yun s)的引用的引用第10页/共46页第十一页,共46页。1.可通过可通过(tnggu)循环给数组元素的初值循环给数组元素的初值 For i=1 To 10 A数组的每个元素值为数组的每个元素值为1 A(i)=1 Next i 2.数组的输入数组的输入 输入输入10个数,并存入到数组个数,并存入到数组A中中For i=1 To 10 A(i)=Val(InputBox(“输入输入A(”&i&“)的值的值”)Next i第五章第五章 数数 组组 4.2.3 4.2.3 一维数组的基本操作一维数组的基本操作第11页/共46页第十二页,共46页。3.求数组中最大元素求数组中最大元素(yun s)及所在下标及所在下标 Dim Max As Integer,iMax As Integer Max=A(1):iMax=1 For i=2 To 10 If A(i)Max Then Max=A(i)iMax=i End If Next i Print A(&iMax&)=;A(iMax)第五章第五章 数数 组组 4.2.3 4.2.3 一维数组的基本操作一维数组的基本操作第12页/共46页第十三页,共46页。4.将数组元素将数组元素(yun s)倒置倒置For i=1 To 102 t=A(i)A(i)=A(10-i+1)A(10-i+1)=tNext I(演示(演示(ynsh))4.2.3 4.2.3 一维数组的基本操作一维数组的基本操作第13页/共46页第十四页,共46页。一、统计问题一、统计问题(wnt)例例4.1 编程求某班编程求某班60个学生某门课程考试的平均成个学生某门课程考试的平均成绩及高于平均成绩的学生人数。绩及高于平均成绩的学生人数。(课后练习课后练习)4.2.4 一维数组的应用一维数组的应用(yngyng)第14页/共46页第十五页,共46页。二、排序问题二、排序问题 数据的排序就是将一批数据由小大到(升序)或由大到数据的排序就是将一批数据由小大到(升序)或由大到小(降序)进行排列。常用小(降序)进行排列。常用(chn yn)的有选择法、冒的有选择法、冒泡法。泡法。1选择法排序选择法排序753468 91算法算法 (升序(升序)(设有设有n个数,存放在数组个数,存放在数组A(1).A(n)中)中)1)第)第1遍:从中选出最小的数,与第遍:从中选出最小的数,与第 1个数交换个数交换(jiohun)位置;位置;(演示)(演示)第五章第五章 数数 组组 4.2.4 一维数组的应用一维数组的应用(yngyng)数据排数据排序序第15页/共46页第十六页,共46页。2)第)第2遍:除第遍:除第1 个数外,其余个数外,其余n-1个数中选最小的数,个数中选最小的数,与第与第2个数交换位置个数交换位置(wi zhi);(演示)(演示)753468 91 71 3)依次)依次(yc)类推,选择了类推,选择了n-1次后,这个数列已按升次后,这个数列已按升序排列。序排列。第五章第五章 数数 组组 4.2.4 一维数组的应用一维数组的应用数据数据(shj)排序排序第16页/共46页第十七页,共46页。选择法排序选择法排序(pi x)算法的流程算法的流程图:图:第五章第五章 数数 组组 4.2.4 一维数组的应用一维数组的应用(yngyng)数据排序数据排序第17页/共46页第十八页,共46页。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 t=a(i):a(i)=a(p):a(p)=t t=a(i):a(i)=a(p):a(p)=tNext iNext i选择法排序选择法排序(pi x)(升序)的(升序)的VB程序:程序:思考:如果思考:如果(rgu)按降序排,程序如按降序排,程序如何修改?何修改?第五章第五章 数数 组组 4.2.4 一维数组的应用一维数组的应用数据数据(shj)排序排序第18页/共46页第十九页,共46页。例例4.3 用随机用随机(su j)函数产生函数产生50个个10100的随的随机机(su j)整数,并按由小到大的顺序打印出来。整数,并按由小到大的顺序打印出来。(略)(略)第五章第五章 数数 组组 4.2.4 一维数组的应用一维数组的应用数据数据(shj)排序排序第19页/共46页第二十页,共46页。2冒泡法排序(升序)冒泡法排序(升序)算法算法:(将相邻两个数比较,大数交换到后面将相邻两个数比较,大数交换到后面)1)第第 1 趟趟:将将每每相相邻邻两两个个数数比比较较,大大数数交交换换到到后后面面,经经n-1次次两两两两相相邻邻比比较较后后,最最大大的的数数已交换到最后一个已交换到最后一个(y)位置。位置。演示演示(ynsh)4.2.4 一维数组的应用一维数组的应用数据数据(shj)排排序序2)第)第 2 趟:将前趟:将前n-1个数(最大的数已在最后)按上个数(最大的数已在最后)按上法比较,经法比较,经n-2次两两相邻比较后得次大的数;次两两相邻比较后得次大的数;3)依次类推,)依次类推,n个数共进行个数共进行n-1趟比较,趟比较,在第在第j趟中要进行趟中要进行n-j次两两比较。次两两比较。第20页/共46页第二十一页,共46页。冒泡法排序冒泡法排序(pi x)算法的流程图:算法的流程图:第五章第五章 数数 组组 4.2.4 一维数组的应用一维数组的应用数据数据(shj)排排序序第21页/共46页第二十二页,共46页。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 t=a(j)t=a(j):a(j)=a(j+1)a(j)=a(j+1):a(j+1)=ta(j+1)=t End if End if Next j Next jNext iNext i冒泡法排序冒泡法排序(pi x)(升序)程序:(升序)程序:第五章第五章 数数 组组 4.2.4 一维数组的应用一维数组的应用数据数据(shj)排排序序第22页/共46页第二十三页,共46页。3、两种排序方法、两种排序方法(fngf)的比较的比较结论:选择法排序结论:选择法排序(pi x)比冒泡法排序比冒泡法排序(pi x)算法优算法优问题:两种排序方法问题:两种排序方法(fngf)那一种好?那一种好?第五章第五章 数数 组组 4.2.4 一维数组的应用一维数组的应用数据排序数据排序第23页/共46页第二十四页,共46页。4.3 二维数组及多维数组二维数组及多维数组 4.3.1 二维数组的声明二维数组的声明(shngmng)声明格式如下:声明格式如下:Dim 数组名数组名(to,to)As 其中的参数与一维数组完全相同。其中的参数与一维数组完全相同。例如:例如:Dim a(2,3)As Single 二维数组在内存的存放二维数组在内存的存放(cnfng)顺序是顺序是“先行后列先行后列”。例如数组。例如数组a的各元素在内存中的存放的各元素在内存中的存放(cnfng)顺序是:顺序是: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)第24页/共46页第二十五页,共46页。4.3.2 二维数组的引用二维数组的引用(ynyng)引用引用(ynyng)形式:形式:数组名数组名(下标下标1,下标,下标2)例如:例如:a(1,2)=10 a(i+2,j)a(2,3)*2 在程序中常常通过二重循环来操作使用二维数组元素。在程序中常常通过二重循环来操作使用二维数组元素。4.3.3 二维数组的基本操作二维数组的基本操作 1.二维数组数据的输入二维数组数据的输入 2.2.求最大元素求最大元素(yun s)及其所在的行和列及其所在的行和列 3.3.计算两矩阵相乘计算两矩阵相乘 4.4.矩阵的转置矩阵的转置 4.3 二维数组及多维数组二维数组及多维数组 第25页/共46页第二十六页,共46页。1.二维数组数据二维数组数据(shj)的输入的输入 Const N=4,M=5Dim a(1 to N,1 to M)As Integer,i%,j%1.给二维数组给二维数组a输入数据输入数据(shj)的程序段如下:的程序段如下:For i=1 to 4 For j=1 to 5 A(i,j)=Val(InputBox(a(&I&,&j&)=?)Next j Next i4.3 二维数组及多维数组二维数组及多维数组 第26页/共46页第二十七页,共46页。2.求最大元素求最大元素(yun s)及其所在的行和列及其所在的行和列 用变量用变量max存放最大值,存放最大值,row,col存放最大值所在行列号存放最大值所在行列号 Max=a(1,1):row=1:Col=1 For i=1 To N For j=1 To M If a(i,j)a(row,Col)Then Max=a(i,j)row=i Col=j End If Next jNext iPrint 最大元素最大元素(yun s)是是;MaxPrint 在第在第&row&行行,;第第&Col&列列4.3 二维数组及多维数组二维数组及多维数组 第27页/共46页第二十八页,共46页。3.计算两矩阵相乘计算两矩阵相乘(xin chn)(略)(略)4.矩阵的转置矩阵的转置 方阵方阵(fn zhn)(fn zhn)的转置的程序代码如下:的转置的程序代码如下:For i=2 For i=2 ToTo For j=1 For j=1 ToTo I-1 I-1 Temp=a(i,j)Temp=a(i,j)a(i,j)=a(j,i)a(i,j)=a(j,i)a(j,i)=Temp a(j,i)=Temp Next j Next j Next i Next i 设A是M*N的矩阵,要重新(chngxn)定义一个N*M的二级数组B,将A转置得到B的程序代码如下:For i=To For j=To N b(j,i)=a(i,j)Next jNext i 4.3 二维数组及多维数组二维数组及多维数组 第28页/共46页第二十九页,共46页。例例4.4编程计算编程计算(j sun)数列数列1、1、2、3、5、8、.第第30项的值。项的值。(P68)4.3 二维数组及多维数组二维数组及多维数组 4.3.4 二维数组应用二维数组应用(yngyng)举例举例 第29页/共46页第三十页,共46页。4.3.5 多维数组的声明多维数组的声明(shngmng)和引用和引用定义多维数组的格式如下:定义多维数组的格式如下:Dim 数组名数组名(to,to,)As 例如:例如:Dim a(5,5,5)As Integer 声明声明a是三维数组是三维数组 Dim b(2,6,10,5)As Integer 声明声明b是四维数组是四维数组 4.3 二维数组及多维数组二维数组及多维数组 第30页/共46页第三十一页,共46页。动态动态(dngti)数组:在声明时未给出数组的大小。在程序执行时分配存储空间。数组:在声明时未给出数组的大小。在程序执行时分配存储空间。4.4.1 动态动态(dngti)数组的建立及使用数组的建立及使用 建立动态建立动态(dngti)数组包括声明和大小说明两步:数组包括声明和大小说明两步:1在使用在使用Dim、Private或或Public语句声明括号内为空的数组。语句声明括号内为空的数组。格式:格式:Dim|Private|Public 数组名()数组名()As 数据类型数据类型 例:例:Dim a()As Integer 2在过程中用在过程中用ReDim语句指明该数组的大小。语句指明该数组的大小。格式:格式:ReDim Preserve 数组名(下标数组名(下标1,下标,下标2)Preserve参数:保留数组中原来(yunli)的数据 例:例:Redim A(10)Redim Preserve A(20)4.4 动态动态(dngti)数组数组 第31页/共46页第三十二页,共46页。说明:说明:(1)ReDim语句是一个可执行语句,只能语句是一个可执行语句,只能出现在过程中,并且可以多次使用,改变数组出现在过程中,并且可以多次使用,改变数组的维数和大小。的维数和大小。(2)定长数组声时中的下标只能是常量,)定长数组声时中的下标只能是常量,而动态数组而动态数组ReDim 语句中的下标是常量,也可语句中的下标是常量,也可以是有了确定值的变量以是有了确定值的变量(binling)。例:例:Private Sub Form_Click()Dim N As Integer N=Val(InputBox(“输入输入N=?”)Dim a(N)As Integer .End sub4.4 动态动态(dngti)数组数组 第32页/共46页第三十三页,共46页。(3)在过程中可以)在过程中可以(ky)多次使用多次使用ReDim来改变数组的大小,也可来改变数组的大小,也可 改变数组的维数。改变数组的维数。例:例: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语句都会使原来数组中值丢失,可以语句都会使原来数组中值丢失,可以(ky)在在ReDim后加后加Preserve 参数来保留数组中的数据。但此时参数来保留数组中的数据。但此时 只能改变最后一维的大小。只能改变最后一维的大小。4.4 动态动态(dngti)数组数组 第33页/共46页第三十四页,共46页。例例4.5编程,输入编程,输入n个整数个整数(zhngsh),求它们的最小公倍数。求它们的最小公倍数。(P73)4.4 动态动态(dngti)数组数组 第34页/共46页第三十五页,共46页。4.4.2 与数组操作有关的几个与数组操作有关的几个(j)函数函数1.Array函数函数2.Array函数可方便地对数组整体赋值,但它只函数可方便地对数组整体赋值,但它只能给声明能给声明Variant的变量或仅由括号的变量或仅由括号(kuho)括起的括起的动态数组赋值。赋值后的数组大小由赋值的个数决动态数组赋值。赋值后的数组大小由赋值的个数决定。定。例如,要将例如,要将1,2,3,4,5,6,7 这些值赋值给数组这些值赋值给数组a,可使用,可使用(shyng)下面的方法赋值。下面的方法赋值。Dim a()A=array(1,2,3,4,5,6,7)a(0)=1,a(1)=2,a(2)=3,a(3)=4 a(4)=5,a(5)=6,a(6)=74.4 动态数组动态数组 第35页/共46页第三十六页,共46页。2 求数组的上界求数组的上界Ubound()函数函数(hnsh)、下界下界 Lbound()函数函数(hnsh)Ubound()函数和函数和Lbound()函数函数分别用来确定数组某一维的上界和下界值。分别用来确定数组某一维的上界和下界值。使用形式如下:使用形式如下:UBound(,)LBound(,)其中:其中:数组变量的名称:数组变量的名称(mngchng),遵循标准变量命名约定。,遵循标准变量命名约定。:可选的;一般是整型常量或变量。指定返回哪一维的上界。:可选的;一般是整型常量或变量。指定返回哪一维的上界。1 表示第一维,表示第一维,2 表示第二维,如此等等。如果省略默认是表示第二维,如此等等。如果省略默认是 1。4.4 动态动态(dngti)数组数组 第36页/共46页第三十七页,共46页。3Split函数函数(hnsh)使用格式:使用格式:Split(,)说明:说明:使用使用Split函数可从一个字符串中,以某个函数可从一个字符串中,以某个(mu)指定符号为分隔符,分离若干个子字符串,建立一个下标从零开始的一维数组。指定符号为分隔符,分离若干个子字符串,建立一个下标从零开始的一维数组。补充例题:补充例题:通过一文本框中输入通过一文本框中输入(shr)若于个数据,数据之间用若于个数据,数据之间用“,”分隔。将这些数据按升序出到窗体上。分隔。将这些数据按升序出到窗体上。4.4 动态数组动态数组 第37页/共46页第三十八页,共46页。第五章第五章 数数 组组 本章本章(bn zhn)小结小结1数组的概念数组的概念 通常数组用来存放具有相同性质的一组数据,即数组中的数据必须是同一个类型。通常数组用来存放具有相同性质的一组数据,即数组中的数据必须是同一个类型。数组元素是数组中的某一个数据项,引用数组通常是引用数组元素,数组元素的使用同简单变量的使用类似。数组元素是数组中的某一个数据项,引用数组通常是引用数组元素,数组元素的使用同简单变量的使用类似。数组可以被看作一组带下标的变量集合数组可以被看作一组带下标的变量集合(jh),系统分配一块连续的内存空间来存放数组中的元素。当所需处理的数据个数确定时,通常使用定长数组,否则应该考虑使用动态数组。,系统分配一块连续的内存空间来存放数组中的元素。当所需处理的数据个数确定时,通常使用定长数组,否则应该考虑使用动态数组。第38页/共46页第三十九页,共46页。第五章第五章 数数 组组 本章本章(bn zhn)小结小结2数组的声明数组的声明声明一个已确定数组元素个数的数组:声明一个已确定数组元素个数的数组:Dim 数组名数组名(下界下界 To 上界上界,下界下界 To 上界上界,)As 类型关键字类型关键字它声明了数组名、数组维数、数组大小、数组类型。下界、上界必须它声明了数组名、数组维数、数组大小、数组类型。下界、上界必须(bx)为常数,不能为表达式或变量,若省略下界,则默认为为常数,不能为表达式或变量,若省略下界,则默认为 0,也可用也可用 Option Base语句将默认下界设置为语句将默认下界设置为1。声明一个长度可变的动态数组:声明一个长度可变的动态数组:Dim 数组名()数组名()As 类型关键字类型关键字ReDim Preserve 数组名数组名(下界下界 To 上界上界,下界下界 To 上界上界,)第39页/共46页第四十页,共46页。第五章第五章 数数 组组 本章本章(bn zhn)小结小结3数组的操作数组的操作 对数组的操作通常需要使用对数组的操作通常需要使用(shyng)循环控制结构来实现。循环控制结构来实现。数组的基本操作有:数组初始化、数组输入、数组输出、求数组中的最大(最小)元素及下标、求和、数据倒置等。数组的基本操作有:数组初始化、数组输入、数组输出、求数组中的最大(最小)元素及下标、求和、数据倒置等。应用数组解决的常用问题有:复杂统计、平均值、排序和查找等。应用数组解决的常用问题有:复杂统计、平均值、排序和查找等。第40页/共46页第四十一页,共46页。第五章第五章 数数 组组 作作 业:业:上机调试:上机调试:P69 例例3-20 P71 例例3-22、例、例3-23 P72 例例3-24 P76 例例3-28编程:编程:1、编程求某班、编程求某班60个学生某门课程考试的平均成绩及高于平均成绩的学生人数。个学生某门课程考试的平均成绩及高于平均成绩的学生人数。2、用随机函数产生、用随机函数产生50个个10100的随机整数,并按由小到大的顺序的随机整数,并按由小到大的顺序(shnx)打印出来。打印出来。课后作业:课后作业:P79 四、程序阅读四、程序阅读1、2、3、4、5第41页/共46页第四十二页,共46页。29746538101交换交换(jiohun)92745683110A(1)A(10)29746538101For i=1 To 102 t=A(i):A(i)=A(10-i+1):A(10-i+1)=tNext IA(i)=A(N-i+1):A(N-i+1)=tN2第42页/共46页第四十三页,共46页。753468 91 71A(1)A(8)第第 1 遍遍i=1 p=1排序排序(pi x)前前A(p)A(j)?p=6j=2j=3j=4j=5j=6交换交换(jiohun)p=2p=3j=7j=8i=1:p=iFor j=i+1 to 8 If A(p)A(j)Then p=jNext J t=A(I):A(I)=A(p):A(p)=t实现实现(shxin)这一过程的程序:这一过程的程序:成立成立成立成立成立成立按升序排序按升序排序第43页/共46页第四十四页,共46页。753468 91 71A(1)A(8)A(p)A(j)j=3j=4j=5j=6交换交换(jiohun)p=3j=7j=8i=2:p=iFor j=i+1 to 8 If A(p)A(j)Then p=jNext J t=A(i):A(i)=A(p):A(p)=t实现这一过程实现这一过程(guchng)的程序如下:的程序如下:第第 2 遍遍 i=2 p=253第第 1 遍结束遍结束(jish)后的数据后的数据第44页/共46页第四十五页,共46页。753468 91A(1)A(8)第第 1 遍遍排序排序(pi x)前前For j=1 To 7For j=1 To 7 If a(j)a(j+1)Then If a(j)a(j+1)Then t=a(j)t=a(j):a(j)=a(j+1)a(j)=a(j+1):a(j+1)=ta(j+1)=t End if End ifNext jNext j按升序排序按升序排序(pi x)75637199753468 9169 49最大数已到最后最大数已到最后(zuhu)N-1第45页/共46页第四十六页,共46页。