首页计算机计算机软件VB程序设计 07 第7章 数组.pptx

07 第7章 数组.pptx

页数:38页文件大小:334.7 KB来源: VB程序设计ppt课件

本课件讲解数组与记录,先说明数组的概念、定义格式与存储方式,区分静态数组与动态数组,介绍数组元素的输入输出、Erase语句与For Each遍历,随后讲解用户自定义类型构成的记录数组、控件数组,并给出排序与二分查找等典型应用。

第7章 数组与记录章节封面,标示本章主题与所讲授的主要内容
引入:为什么要用数组讲解页,说明Aver、kAver的定义方式与下标规则
7.1.1 数组的概念讲解页,说明student的定义方式与下标规则
查看本课件的文字版(共 38 页,供检索与复制)

第1页:第7章 数组与记录

第7章 数组与记录

  • 数组的概念
  • 数组的定义
  • 数组的基本操作
  • 数组的应用
  • 控件数组
  • 记录与记录数组

第2页:引入:为什么要用数组

引入:为什么要用数组

例如计算这100个学生成绩的平均分,如果不用数组而用简单变量,就必须用语句:s=(s1+s2+s3+s4+s5+…+s98+s99+s100)/Aver=s/100如果用数组,可以用如下循环语句:S=0For k=0 To 99S = S + E(k) ‘累加分数Next kAver=S/100 ‘求平均分这里就使用了数组E,利用数组E内所包含的数组元素(有100个下标变量),可以存放100个学生的成绩,求和后就可以算出平均分。

7.1数组的概念与定义引例:

第3页:7.1.1 数组的概念

7.1.1 数组的概念

  • (0),student
  • (1),student
  • (2),student
  • (3),student
  • (4)数组名下标数组元素
  • (1)数组要先声明后使用;
  • (2)每个数组元素的使用与变量的使用相同;
  • (3)下标可以是整型常量、已赋值的变量或表达式,需用括号括起来表示数组元素的逻辑顺序;
  • (4)下标的最大值和最小值分别称为数组的上界和下界,下标应限定在此范围内。7.1数组的概念与定义

第4页:数组的定义与存储

数组的定义与存储

数组要先定义(声明)后使用。在计算机中,数组占用一块内存区域,数组名是这个区域的名称,区域的每个单元都有自己的地址,该地址用下标表示(可以计算出)。

定义数组的目的就是通知计算机为其留出所需的内存空间。7.1.2数组的定义(声明)7.1数组的概念与定义

第5页:数组的声明格式

数组的声明格式

  • 1)Public:用于建立公用数组。
  • 2)Private与Dim:都可用于建立模块级数组或局部数组。
  • 3)Static:只能用于建立局部数组,在过程内部使用。
  • 4)As数据类型:说明数组元素是什么类型。如缺省AS子句,则该数组的类型为Variant。
  • 5)数组的上下界声明:决定了数组的维数和各维下标值的取值范围。如果定义数组时有数组的上下界声明部分,则定义了一个静态数组;而缺省了数组的上下界声明部分,则定义了一个动态数组。DimStudent(3To
  • 5)AsIntegerStudent
  • (3)Student
  • (4)Student
  • (5)下界上界7.1.2数组的定义(声明)

第6页:一维数组的声明示例

一维数组的声明示例

  • (1)Student
  • (2)Student
  • (3)Student
  • (0)若是“下界n TO”省略时,系统默认“下界n”为“0”。Dim a(2,
  • 2) As Long二维数组行标列标Dim b(1To2, 3To
  • 4) As Long

第7页:三维数组的声明示例

三维数组的声明示例

Dim c ( 1 To 2,1 To 3,1 To 4 ) As Single三维数组定义了一个两层、3行、4列的三维数组c,c含有2X3X4共24个Single类型的数组元素。

我们称含两对以上的上下界声明的数组为多维数组。随着维数的增加,数组所占的存储空间会急速扩大,存储空间为各维下标值返回相乘的积。

因此,在定义数组时,要根据实际需要确定恰当的数组维数和大小。

第8页:静态数组的特点

静态数组的特点

  • (1)需要用循环结构,循环10次
  • (2)如何存放这些随机整数7.2静态数组和动态数组7.2.1静态数组

第9页:静态数组的特点(代码)

静态数组的特点(代码)

PrivateSubForm_Load()DimiAsInteger'i变量既控制循环体执行次数又作为数组元素的下标值Dima(1To10)AsInteger'定义a为静态数组Show'显示该窗体Fori=1To10'i从1变化到10a(i)=Int(50*Rnd)‘Rnd函数产生一个随机数存放’到数组元素a(i)中Printa(i);'输出数组元素a(i)NextiEndSub

第10页:7.2.2动态数组

7.2.2动态数组

  • (1)在窗体、标准模块或过程中先声明数组(无下标值)。在VisualBasic中声明动态数组的一般格式为:Public|Private|Dim数组名()[As数据类型]
  • (2)在某过程中用ReDim再次定义已声明过的动态数组。ReDim使用的一般格式为:ReDim[Preserve]数组名([数组的上下界声明])用于保留动态数组原来的内容

第11页:动态数组的ReDim说明

动态数组的ReDim说明

  • 1)Redim:用来重新定义动态数组,按定义的上下届重新分配存储单元,可以对一个数组进行多次重定义。
  • 2)Preserve:为可选项,用于保留动态数组原来的内容。如果动态数组内已存有数据,用Redim改变数组的大小后,则数组元素中的数据会丢失。但如果在ReDim语句中使用了Preserve选项,则保留数组原来的内容,若是数组变小了,则只丢失被删除部分数组元素中的数据。例如:DimStudent()AsString……RedimStudent
  • (2)RedimPreserveStudent
  • (5)

第12页:多次使用ReDim语句

多次使用ReDim语句

  • (2)'第一次重定义含2个元素sName
  • (1)="赵阳":sName
  • (2)="张明"PrintsName
  • (1);sName
  • (2)ReDimPreservesName
  • (3)'第二次重定义含3个元素,使用Preserve选项sName
  • (3)="李好"PrintsName
  • (1);sName
  • (2);sName
  • (3)ReDimsName
  • (4)'第三次重定义含4个元素,不使用Preserve选项sName
  • (4)="王华"PrintsName
  • (1);sName
  • (2);sName
  • (3);sName
  • (4)EndSub

第13页:7.3 数组的输入输出

7.3 数组的输入输出

7.3数组的输入输出7.3.1数组元素的输入1、用InputBox函数输入OptionBase1PrivateSubForm_Load()DimsName(3)AsStringDimiAsIntegerFori=1To3sName(i)=InputBox("输入姓名:")Nexti……'输出部分EndSub

第14页:【例题】二维数组赋值

【例题】二维数组赋值

  • 1)定义数组(维数、大小)
  • 2)为数组赋值(寻找规律、利用循环)赋值:先遍历、再赋值2、用赋值语句输入7.3.1数组元素的输入

第15页:3.使用Array函数

3.使用Array函数

  • 1)数组变量名:数组类型必须是Variant类型。Dima()AsVariant
  • 2)数组元素值列表:给数组元素赋初值的数据列表,数据之间用“,”分隔。数据的个数决定了数组的大小。如果无此列表,则创建了一个0长度的数组。DimstyleTV()AsVariantstyleTV=Array("长虹","松下","TCL","东芝","索尼","海信","海尔")7.3.1数组元素的输入

第16页:二维数组应用示例

二维数组应用示例

OptionBase1PrivateSubForm_Load()ShowDima(5,5)AsIntegerDimi,jAsInteger'先置上三角元素为1Fori=1To5'i控制行标的变化Forj=i+1To5'j控制列标的变化a(i,j)=1'上三角的每个元素其列标值都比行标值大

NextjNexti'再置下三角元素为3Fori=2To5'下三角只需从第二行开始设置Forj=1Toi-1'下三角的每个元素其列标值都比行标值小a(i,j)=3NextjNexti'最后置主对角线元素为2Fori=1To5‘主对角线元素的列标值与行标值相同,用一个变量控制即可a(i,i)=2Nexti……'输出部分EndSub

第17页:数组元素的输出方式

数组元素的输出方式

1、Label控件的Caption属性显示2、TextBox控件的Text属性显示3、Print方法7.3.2数组元素的输出Fori=1To3'输出数组所有元素PrintsName(i)'每输出一个数组元素换一行NextIFori=1To5'输出二维数组所有元素,外循环I控制行号变化Forj=1To5'内循环j控制列号变化Printa(i,j);NextjPrint‘内循环执行一遍后,已输出了一行5个元素,此时应输出一个换行Nexti一维数组二维数组

第18页:数组元素引用示例

数组元素引用示例

  • 3) As Integer, b
  • (6)As Integer…b
  • (1)=3:b
  • (2)=8:b
  • (3)=b
  • (1)a(1,
  • 2)=b
  • (1):a(2,
  • 3)=b
  • (2)7.3.3数组元素的复制引用单个数组元素与引用简单变量一样,可以对其赋值,也可以把它的值赋给其他的变量或数组元素。即数组元素之间可以互相复制,无论它们是否属于同一个数组或维数是否相同,但数组类型要相容,复制整个数组要用For循环语句。

第19页:Erase语句

Erase语句

格式:Erase <数组名>功能:对静态数组使用Erase语句将对其中的所有元素进行初始化(清除数组中的元素值)。

例如,将数值型数组元素值置为0;将可变长度字符串类型数组元素值置为零长度字符串。注意,Erase语句不能释放静态数组所占的存储空间。

对动态数组使用Erase语句将释放动态数组所占的存储空间,在下次引用该动态数组之前,必须使用ReDim语句重新定义该数组。

7.4数组的删除

第20页:For Each...Next语句

For Each...Next语句

1.格式

For Each <变量>In <数组名>[<语句组1>][ Exit For][<语句组2>] Next <变量>7.5使用 For Each...Next循环处理数组只能是一个可变类型的变量2.功能:首先将数组中的第一个元素赋给<变量>,然后进入循环体中执行其中的语句。如果数组中还有其他元素,则继续将下一个元素赋值给<变量>后执行循环体,当针对数组中的所有元素都执行完了,便会退出循环,然后执行Next之后的语句。

第21页:用户自定义类型

用户自定义类型

用户定义类型的数组就是数组中的每个元素都是用户定义类型。例如,在学生成绩表中,每一个学生的信息可以包含学号、姓名、数学成绩和英语成绩,如下表所示。

7.6用户定义类型的数组英语数学姓名学号9089张三019378李四02……………………

第22页:记录数组的表示方式

记录数组的表示方式

假设用一个一维数组来表示学生成绩表,每个元素保存一个学生的信息,即表格中的一行或一条记录。则每个数组元素应包含学号、姓名、数学和英语四个值,为此,可以先定义一个数据类型StudScore如下:TypeStudScoreStudNumber As String * 2StudName As String * 10Math As IntegerEnglish As Integer

End Type接着,定义一个具有StudScore类型的数组: Dim Score(1 To 40) AsStudScore

第23页:记录数组元素的引用

记录数组元素的引用

  • (1).StudNumber = "01"Score
  • (1).StudName = "张三"Score
  • (1).Math = 89Score
  • (1).English = 90也可以使用With语句来简化书写:With Score
  • (1).StudNumber = "01".StudName = "张三".Math = 89.English = 90
End With

第24页:记录数组元素的引用(代码)

记录数组元素的引用(代码)

With语句可以对某个对象执行一系列的语句,而不用重复指出对象的名称。格式:With语句:With <对象名><语句组>

End With例: Private Sub Command1_Click()With Form1.BackColor = vbRed.FontSize = 30.ForeColor = vbGreen End With Print "改变一个对象的多个属性" End Sub

第25页:7.7数组的应用

7.7数组的应用

  • (10)A
  • (9)A
  • (8)A
  • (7)A
  • (6)A
  • (5)A
  • (4)A
  • (3)A
  • (2)A
  • (1)-31210-1096-423-4-3-10236910127.7.1排序

第26页:7.7数组的应用(代码)

7.7数组的应用(代码)

  • (1)=3:a
  • (2)=2:a
  • (3)=-4:a
  • (4)=6:a
  • (5)=9'a
  • (6)=0:a
  • (7)=-1:a
  • (8)=-10:a
  • (9)=12:a
  • (10)=-3a=array(12,9,6,3,2,0,-1,-3,-4,-
  • 10)Fori=1ToN'在Text1中输出原始数据Text1.Text=Text1.Text&a(i)&","'输出a数组所有元素Nexti

第27页:比较交换法排序代码

比较交换法排序代码

Fori=1ToN-1Forj=i+1ToNIfa(i)<=a(j)

Then'交换Temp=a(i)a(i)=a(j)a(j)=TempEndIfNextjNexti'输出排序的结果Fori=1ToN Text2.Text= Text2.Text&a(i)&","'输出a数组所有元素NextiEndSub‘比较交换法A(10)A(9)A(8)A(7)A(6)A(5)A(4)A(3)A(2)A(1)-31210-1096-423-4-3-1023691012

第28页:冒泡法排序

冒泡法排序

  • 1)Then'交换Temp=a(j)a(j)=a(j+
  • 1)a(j+
  • 1)=TempEndIfNextjNextiA
  • (10)A
  • (9)A
  • (8)A
  • (7)A
  • (6)A
  • (5)A
  • (4)A
  • (3)A
  • (2)A
  • (1)-31210-1096-423-4-3-1023691012'输出排序的结果For i = N To 1 step-1Text2.Text = Text2.Text & a(i) & ","'输出a数组所有元素Next i
End Sub

第29页:7.7.2 数组元素查找

7.7.2 数组元素查找

7.7.2.数组元素查找二分法查找数据也称对半查找法,是一种效率较高的查找方法。对于大型数组,它的查找速度比顺序查找法采用的是顺序查找法)快得多。

某学习小组10名学生的成绩情况如表所示,现要求通过学号查询学生成绩.1110110911081107110611051104110311021101学号83719298625767807899数学例7.4采用二分查找法查询学生成绩

第30页:二分法查找的原理

二分法查找的原理

  • 2)这样就将数组下标[low, high]分成三段,即[low, m-1],[m],[m+1, high]。将检索数据与中间数据m比较,若相等则寻找成功;若要找的数据小于由m指示的数据,则该数据在[low,m-1]范围内;反之,则在[m+1,high]范围内。这样每检索一次,检索范围在原来的基础上缩小一半,总的检索次数最多为数组总长的一半。
  • (1)顺序检索法
  • (2)二分法1110110911081107110611051104110311021101学号83719298625767807899数学

第31页:二分法查找示例数据

二分法查找示例数据

low=1high=10m=51110110911081107110611051104110311021101学号83719298625767807899数学high=m-1low=6high=10m=81110110911081107110611051104110311021101学号83719298625767807899数学low=m=6high=71110110911081107110611051104110311021101学号83719298625767807899数学第一次查找1107第二次查找1107:第三次查找1107:m=Int((low + high)/2)low=m+1low=m+1low=m=high=71110110911081107110611051104110311021101学号83719298625767807899数学第四次查找1107:

第32页:二分法查找示例数据(代码2)

二分法查找示例数据(代码2)

Private Sub Command1_Click() Dim No(10)As Integer, grade(10) As Integer Dim m As Integer, low As Integer, high As Integer Dim flag as booleanNum=val(inputbox("输入待查学号"))Low =1:high=10:Flag=false Do Whilelow <= highm = Int(low + high) / 2 '取中点Select Case num Case No(m)'找到debug.print"学号为:";No(mid);"成绩为";grade(mid)flag=true: Exit DO Case Is< No(m)'小于中间数据high = m-1 '上半部 Case Is > No(m)'大于中间数据low = m+ 1 '下半部 End Select Loop If flag=false thenMsgbox “查无此学生!“End sub

第33页:7.8.1 控件数组的概念

7.8.1 控件数组的概念

  • (1)在窗体上画出控件,进行属性设置,这是建立的第一个元素.
  • (2)选中该控件,进行“Copy”进行若干次和“Paste”操作建立了所需个数的控件数组元素。
  • (3)进行事件过程的编程。

第34页:控件数组的事件过程

控件数组的事件过程

例如:命令按钮数组Command1的单击事件过程为:

Private Sub Command1_Click(Index As Integer)'在此过程中可以根据Index的值决定'当前按下哪个按钮,以便做相应的处理 End Sub【例7-11】设计如图所示的界面,创建一选项按钮控件数组(Option1)。运行时,当按下某一选项按钮时,对图形设置相应的填充颜色。Option1Shape1

第35页:控件数组的事件过程(代码3)

控件数组的事件过程(代码3)

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

第36页:例:用控件数组设计计算器

例:用控件数组设计计算器

例设计一个计算器,可以完成、减、乘、除的运算。

第37页:例:用控件数组设计计算器(续)

例:用控件数组设计计算器(续)

数组中常见错误和注意事项1.静态数组声明下标出现变量n =

InputBox("输入数组的上界") Dim a(1 To n) As Integer2.数组下标越界引用的下标比数组声明时的下标范围大或小。 Dim a(1 To 30) As Long, i%a(1)=1:a(2)=1Fori=2To30a(i)=a(i-2)+a(i-1)Nexti3.数组维数错数组声明时的维数与引用数组元素时的维数不一致。Dima(3,5)AsLonga(i)=104.Array函数使用问题只能对Variant的变量或动态数组赋值。

第38页:第7章 小结

第7章 小结

  • 数组的概念
  • 数组的定义
  • 数组的基本操作
  • 数组的应用
  • 控件数组
  • 记录与记录数组
顶部目录