[人力资源管理]chap7-数组.ppt_第1页
[人力资源管理]chap7-数组.ppt_第2页
[人力资源管理]chap7-数组.ppt_第3页
[人力资源管理]chap7-数组.ppt_第4页
[人力资源管理]chap7-数组.ppt_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第七章 数组,问题:求a,b,c三个数中的最大数。 算法: M=a If bm then m=b If cm then m=c Text1.text=m 思考:若求10个数的最大数呢?,数组的基本概念,定义: 一组性质相同的有序的数 例: 输入全班40名同学的英语成绩,是否需要定义40个变量? 不需要定义40个变量,只需定义一个数组,数组中共40个元素。 B(1) B(2) B(3) B(40),7.1 一维静态数组,Dim (To)As,Dim a(5 To 15) As Integer,5是下界,15是上界,下界小于等于上界,数组元素的数据类型,当As缺省时,表示可变类型,与上面声明等价的形式: Dim a%(5 to 15) VB数组必须先定义,后使用。,7.1.1 一维静态数组的定义,例: Dim B(0 To 3) As String 字符串类型数组 下界0,上界 3 元素 B(0) B(1) B(2) B(3),与上面声明等价的形式: Dim B(3) As String,下界可省略,默认下界为0,说明:,1、下界和上界必须是整数常量或整数常量表达式,一定不能是变量。 2、若及To不写,使用默认下界0,可以通过Option Base语句更改默认下界为1,格式为:Option Base0/1 3、系统在编译时建立静态数组,且分配固定的存储空间给数组。,4、数组在定义后自动被初始化: 将数值型数组元素值置为0 将字符串型数组元素值置为空字符串 将可变类型数组元素值置为Empty 5、程序运行时期,可使用Erase语句重新初始化 格式: Erase,例: Dim A(-4 TO 10) As Integer 一维整型数值数组 下界 -4,上界 10 元素 A(-4) A(-3) . A(0) A(1) . A(10) 计算一维数组元素个数:上界-下界+1,判断下列数组声明是否正确,如果正确试说出其有几个元素。,(1)Dim mark(1 to 100) As Integer (2)Dim m(-10 to -20) As Integer (3)Dim k(-1) As String (4)Dim n As Integer Dim c(2 to n) As Interger,正确,共100个元素,错误,下界大于上界,错误,下界大于上界,错误,上界n是一个变量,引用形式:() 如:Dim a(10),则在数组a中包含11个元素 a(0) 、a(1)、a(2) a(9)、a(10) 注意:引用数组元素时下标不能越界。,7.1.2 一维数组元素的引用,Dim a(10) As Integer For i=1 to 10 step 1 a(i)= InputBox(“输入第” & i & “人的成绩“) Next i Print a (i),错误: 下标越界,1.给一维数组赋值,7.1.3 一维数组元素的基本操作,Dim a(5) As Integer , i As Integer For i=0 to 5 a(i)=InputBox(“输入a( “& i &” )的值”) Next i,For i=0 to 5 Print a(i) Next I,2.数组的输出,For i=0 to 5 Text1.Text=Text1.Text &a(i) &” ” Next i,【例1】 输入10名同学的成绩,求平均分、最高分、最低分。 分析: 求最大值、最小值方法,Option Base 1 Dim a(10) As Integer Dim Max As Integer, Min As Integer, Average As Single,Private Sub Form_Load() For i = 1 To 10 a(i)=Val(InputBox(“请输入第“ &i & “个学生的成绩“, “成绩统计“,“) Next i s = 0 Max = a(1) Min = a(1), 通过循环依次比较,求最大、最小值;求总和 For i = 1 To 10 If a(i) Max Then Max = a(i) If a(i) Min Then Min = a(i) s= s + a(i) Next i Average = s / 10 求平均值 Text1.Text = Format(Average, “0.00“) Text2.Text = Max Text3.Text = Min End Sub,【例2 】生成20个10到100之间的随机整数,存于一维整型数组A中,同时显示于第一个文本框中,单击窗体将这20个数以相反的次序显示于另一个文本框中。,Option Base 1 Private Sub Form_Click() Dim A(20) As Integer Text1.Text = “ For i = 1 To 20 A(i) = Int(Rnd * 91 + 10) Text1.Text = Text1.Text & A(i) & “ “ Next i Text2.Text = “ For i = 20 To 1 Step -1 Text2.Text = Text2.Text & A(i) & “ “ Next i End Sub,思考: 如果是要求按逆序重放到数组A中,应该怎么办呢? 分析: A(1)与A(20)交换 A(2)与A(19)交换 A(3)与A(17)交换 A(10)与A(11)交换,For i = 1 To 10 t = A(i) A(i) = A(20 - i + 1) A(20 - i + 1) = t Next i,用以下FOR循环来实现A(i)与A(20-i+1)交换,【例3】输入5名同学的成绩,显示于文本框Text1中,按成绩从高到低的次序排列,并将结果显示于另一个文本框Text2中。,冒泡法排序: 对N个数从小到大排序 (1)依次将a(1)-a(n)中每对相邻元素进行比较,使两数中的小数上冒、大数下沉,本趟结束时a的最大数沉到了最后面a(n); (2)依次将a(1)-a(n-1)中每对相邻元素进行比较,使两数中的小数上冒、大数下沉,本趟结束时当前的最大数沉到了a(n-1); (3)重复以上方法,最后一趟,将a(1)- a(2)中的两个元素进行比较,使小数上冒、大数下沉。,用冒泡法从小到大排序的基本思路是,从前到后扫描数据序列,比较相邻两个数的大小,将小的数调到前头,大的数沉底,如下图所示。,比较次数:0 6 5 4 3 2,Private Sub Command2_Click() 排序 For i = 1 To n 1 For j = i+ 1 To n If a(i) a(j) Then t = a(i) a(i) = a(j) a(j) = t End If Next j Next i Text2.Text = “ For i = 1 To n Text2.Text = Text2.Text & a(i) Next i End Sub,与上例思路一致,但先确定最小的,再次小,再第3小,以此类推,最后确定次大,排序完成,选择法排序,算法(降序): (1)先从n个数中选出最大的数,与第1个数交换位置; (2)除第1个数外,其余n-1个数中选最大的数,与n-1个数中第1个数位置交换; (3)依次类推,选择了n-1次后,这个数列已按降序排列。,看课本P138自学,用变量p记录当前最大数的位置,第i轮比较开始时,假设第i个数最大,p=i 进行比较时,将此时最大数的下标赋给p,p=j,p,第2轮比较完,找到最大数,p=4,与第2个数交换,p,第1轮比较完,找到最大数,p=2,与第1个数交换,p,第3轮比较完,找到最大数,p=4,与第3个数交换,p,p,最后排序结果,p,p,p,p,p,p,For i = 1 To 5 - 1 p = i For j = i + 1 To 5 If A(j) A(p) Then p = j Next j t = A(i) A(i) = A(p) A(p) = t Next i,代码实现:,p,p,p,p,p,p,For i=1 to n-1,p=i,For j=i+1 to n,a(j)a(p),Y,N,p=j,交换a(i)和a(p),整个算法流程:,7.2 二维和多维静态数组,7.2.1二维静态数组的声明和引用 二维数组:有两个下标且上下界固定的数组。 如:Dim B(2 to 5,3 to 8) Dim A(2,3) 格式: Dim ( To ,To ) As ,二维数组在内存中按行存放。 例如数组a的各元素在内存中的存放顺序是: 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)a(2,1)a(2,2)a(2,3),例: Dim B(8,3) As String Dim B(0 to 8,0 to 3) As String 二维字符串类型数组 元素 B(0,0) B(0,1) B(0,2) B(0,3) B(1,0) B(1,1) B(1,2) B(1,3) . B(8,0) B(8,1) B(8,2) B(8,3) 计算二维数组元素个数: (上界1-下界1+1)*(上界2-下界2+1),例: 矩阵,矩阵中各元素b11-b33可表示成: B(1,1) B(1,2) B(1,3) B(2,1) B(2,2) B(2,3) B(3,1) B(3,2) B(3,3),7.2.2 多维数组的声明和引用,有多个下标的数组称为多维数组。 格式: Dim ( To , To ) , To ) As 例如: Dim a(5,5,5) As Integer 声明a是三维数组 大小:每一维大小的乘积 共有个元素,7.4 控件数组,课本P151,7.4.1 控件数组的概念,一组相同类型的控件组成,具有相同的控件名,并共享同样的事件过程。 每个控件元素的索引(Index)不同。 控件数组通过返回的下标值区分数组中的各个元素。,7.4.2 建立控件数组 1. 将多个控件取相同的名称 2. 复制、粘贴现有的控件 3. 给控件设置一个Index属性值 7.4.3 控件数组的使用 同一个控件数组的所有控件共享同一事件过程。该过程返回参数Index表示在哪个控件上发生该事件。,例如: 命令按钮数组Command1的单击事件为: Private Sub Command1_Click(Index As Integer) 在此过程中可以根据Index的值决定当前按下哪个按钮,以便做相应的处理 End Sub,【例】设计如图所示的调色板界面,创建一选项按钮控件数组(Option1)。运行时,当按下某一选项按钮后,窗体的背景色就变成按钮指定的颜色。,Private Sub Option1_Click(Index As Integer) Select Case Index Case 0 Shape1.FillColor = vbWhite Case 1 Shape1.FillColor = vbBlue Case 6 Shape1.FillColor = vbYellow End Select End Sub,【例】创建图形控件数组S1,包含6个圆,当按下“移动“按钮时,所有圆全部向下移动100Twips,当移动到窗体底部时,返回窗体顶部。界面如下:,“移动“按钮的Click事件过程如下: Private Sub Command1_Click() For i = 0 To 5 If S1(i).Top+S1(i).Height Form1.ScaleHeight Then S1(i).Top = 0 Else S1(i).Top = S1(i).Top + 100 End If Next i End Sub,【例】输入两个数a和b,根据不同的运算符(+,-,*,/)进行运算。 注意:4个命令按钮是控件数组中的控件。,Private Sub Command1_Click(Index As Integer) Dim a As Single, b As Single, c As Single a= Val(Text1.Text) b= Val(Text2.Text) Select Case Index Case 0 c = a + b Label3.Caption = “结果:a+b=“ & c Case 1 c = a - b Label3.Caption = “结果:a-b=“ & c Case 2 c = a * b Label3.Caption = “结果:a*b=“ & c,Case 3 除 If b = 0 Then MsgBox “除数不能为0!“, 48, “提示“ Exit Sub End If c = a / b Label3.Caption = “结果:a/b=“ + Str(c) End Select End Sub,7.3 动态数组,动态数组:声明时未给出大小,而到要使用时才指出大小,且随时可以改变大小的数组。 7.3.1 动态数组的声明 格式:Dim()As 例如:Dim A() As Single 声明A为单精度型动态数组。,动态数组的声明和建立需要分两步走: 1、通过声明告诉编译系统动态数组的名字及类型; 2、运行时按实际大小建立动态数组。 动态数组的声明与静态数组的区别:,数组名、数组类型已确定,数组大小 ?,7.3.2 动态数组的建立,方法一: 用Redim语句重新声明动态数组并建立 格式:Redim (To ,To ) As Dim A() As Integer Redim a(2 To 10) For i=2 to 10 a(i)=i Print a(i) Next,P143,例:Option Base 1 Dim A() As Integer Private Sub Command1_Click() N = 100 ReDim A(N) For I = 1 To N . Next I N = N+8 ReDim A(N) For I = 1 To N . Next I End Sub,例: Dim A() As Integer Private Sub Command1_Click() N = 4 ReDim A(N) For I = 0 To N A(I) = 1: Print A(I); Next I End Sub Private Sub Command2_Click() N = 8 ReDim A(N, N) For I = 0 To N For J = 0 To N A(I, J) = 2: Print A(I, J); Next J Print Next I End Sub,保留动态数组的内容 格式: ReDim Preserve () Dim A() As Integer Private Sub Command1_Click() N = 4 ReDim A(N) For I = 0 To N A(I) = 1 Next I N = 8 ReDim Preserve A(N) For I = 0 To N Print A(I); Next I End Sub,方法二:用rray函数建立可变类型的一维动态数组并赋值。,=Array(,),Dim A() A = Array(1,2,3,4,5,6,7,8,9,10),Redim a(9) For i=0 to 9 a(i)=i+1 Next,方法三:通过数组对数组的直接赋值建立动态数组,格式:= 例:Dim a(),b() A=array(1,2,3,4,5,6) B=a 说明: 1、赋值号左右两边的数组必须具有相同类型。 2、右边的数组可以是静态数组也可以是已建立的动态数组。,1. 个别元素的赋值 例: Dim A(5),B(1 To 5,1 To 5) A(1)=B(1,1) :A(2)=B(2,2) A(3)=B(3,3) :A(4)=B(4,4) A(5)=B(5,5) 2. 整个数组的赋值: 用循环 例: Dim A(10), B(10) For I = 1 To 10 B(I) = A(I) Next I,本章小结,1. 数组的基本概念 数组名、数组元素、下标、数组的维数 2. 静态数组的定义 Dim ()As 3. 动态数组的定义 (1) Dim ()As (2) ReDim () As ,4. 数组的使用 (1) 数组在定义后被初始化 (2) Erase 固定大小数组使用该语句进行初始化 动态数组使用该语句释放存储空间 (3) 数组元素的输入: 赋值、InputBox、Array函数 (4) 数组元素的输出: Print、Label、TextBox等 (5) 保留动态数组中的内容: ReDim Preserve (),5. 控件数组 (1) 控件数组的表示: () (2) 控件数组的建立 a. 将多个控件取相同的名称 b. 复制、粘贴现有的控件 c. 给控件设置一个Index属性值 (3) 控件数组的使用 同一个控件数组的所有控件共享同一事件过程。 注意使用该过程返回的参数Index。,作 业,课后习题P153 第1,2题,动态数组的应用,数组的删除、插入操作,【例1】删除数组中指定位置的元素,显示删除结果 分析: 删除数组A中指定的位置P的元素,可将P位置元素之后的所有元素依次向前移动一位,A(P)=A(P+1) A(P+1)=A(P+2) A(N-1)=A(N),一、删除某位置上的数,P后面的数必须依次往前移一个位置: For i=p To N-1 A(i)=A(i+1) Next 此时数组元素个数减少一个,重新定义数组,释放多余的内存空间: N=n-1 ReDim Preserve A(N),Option Base 1 Dim N As Integer, A() As Integer Private Sub Form_Load() Text1.Text = “ N = 20 ReDim A(N) For i = 1 To N A(i) = Int(Rnd * 101) Text1.Text = Text1.Text & A(i) &” ” Next I End Sub,Private Sub Command1_Click() P = Val(Text2.Text) For i = P To N - 1 A(i) = A(i + 1) Next I N = N - 1 ReDim Preserve A(N) Text3.Text = “ For i= 1 To N Text3.Text = Text3.Text & A(i) &” ” Next i End Sub,二、删除某个数,位置不知,先将位置P找出来,然后将P后面的数往前移。 For i=1 to n if x=a(i) th

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论