页数:38页文件大小:334.7 KB来源: VB程序设计ppt课件
本课件讲解数组与记录,先说明数组的概念、定义格式与存储方式,区分静态数组与动态数组,介绍数组元素的输入输出、Erase语句与For Each遍历,随后讲解用户自定义类型构成的记录数组、控件数组,并给出排序与二分查找等典型应用。
第7章 数组与记录
引入:为什么要用数组
例如计算这100个学生成绩的平均分,如果不用数组而用简单变量,就必须用语句:s=(s1+s2+s3+s4+s5+…+s98+s99+s100)/Aver=s/100如果用数组,可以用如下循环语句:S=0For k=0 To 99S = S + E(k) ‘累加分数Next kAver=S/100 ‘求平均分这里就使用了数组E,利用数组E内所包含的数组元素(有100个下标变量),可以存放100个学生的成绩,求和后就可以算出平均分。
7.1数组的概念与定义引例:
7.1.1 数组的概念
数组的定义与存储
数组要先定义(声明)后使用。在计算机中,数组占用一块内存区域,数组名是这个区域的名称,区域的每个单元都有自己的地址,该地址用下标表示(可以计算出)。
定义数组的目的就是通知计算机为其留出所需的内存空间。7.1.2数组的定义(声明)7.1数组的概念与定义
数组的声明格式
一维数组的声明示例
三维数组的声明示例
Dim c ( 1 To 2,1 To 3,1 To 4 ) As Single三维数组定义了一个两层、3行、4列的三维数组c,c含有2X3X4共24个Single类型的数组元素。
我们称含两对以上的上下界声明的数组为多维数组。随着维数的增加,数组所占的存储空间会急速扩大,存储空间为各维下标值返回相乘的积。
因此,在定义数组时,要根据实际需要确定恰当的数组维数和大小。
静态数组的特点
静态数组的特点(代码)
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
7.2.2动态数组
动态数组的ReDim说明
多次使用ReDim语句
7.3 数组的输入输出
7.3数组的输入输出7.3.1数组元素的输入1、用InputBox函数输入OptionBase1PrivateSubForm_Load()DimsName(3)AsStringDimiAsIntegerFori=1To3sName(i)=InputBox("输入姓名:")Nexti……'输出部分EndSub
【例题】二维数组赋值
3.使用Array函数
二维数组应用示例
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数组元素的输出方式
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一维数组二维数组
数组元素引用示例
Erase语句
格式:Erase <数组名>功能:对静态数组使用Erase语句将对其中的所有元素进行初始化(清除数组中的元素值)。
例如,将数值型数组元素值置为0;将可变长度字符串类型数组元素值置为零长度字符串。注意,Erase语句不能释放静态数组所占的存储空间。
对动态数组使用Erase语句将释放动态数组所占的存储空间,在下次引用该动态数组之前,必须使用ReDim语句重新定义该数组。
7.4数组的删除
For Each...Next语句
1.格式
For Each <变量>In <数组名>[<语句组1>][ Exit For][<语句组2>] Next <变量>7.5使用 For Each...Next循环处理数组只能是一个可变类型的变量2.功能:首先将数组中的第一个元素赋给<变量>,然后进入循环体中执行其中的语句。如果数组中还有其他元素,则继续将下一个元素赋值给<变量>后执行循环体,当针对数组中的所有元素都执行完了,便会退出循环,然后执行Next之后的语句。用户自定义类型
用户定义类型的数组就是数组中的每个元素都是用户定义类型。例如,在学生成绩表中,每一个学生的信息可以包含学号、姓名、数学成绩和英语成绩,如下表所示。
7.6用户定义类型的数组英语数学姓名学号9089张三019378李四02……………………
记录数组的表示方式
假设用一个一维数组来表示学生成绩表,每个元素保存一个学生的信息,即表格中的一行或一条记录。则每个数组元素应包含学号、姓名、数学和英语四个值,为此,可以先定义一个数据类型StudScore如下:TypeStudScoreStudNumber As String * 2StudName As String * 10Math As IntegerEnglish As Integer
End Type接着,定义一个具有StudScore类型的数组: Dim Score(1 To 40) AsStudScore记录数组元素的引用
End With记录数组元素的引用(代码)
With语句可以对某个对象执行一系列的语句,而不用重复指出对象的名称。格式:With语句:With <对象名><语句组>
End With例: Private Sub Command1_Click()With Form1.BackColor = vbRed.FontSize = 30.ForeColor = vbGreen End With Print "改变一个对象的多个属性" End Sub7.7数组的应用
7.7数组的应用(代码)
比较交换法排序代码
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冒泡法排序
End Sub7.7.2 数组元素查找
7.7.2.数组元素查找二分法查找数据也称对半查找法,是一种效率较高的查找方法。对于大型数组,它的查找速度比顺序查找法采用的是顺序查找法)快得多。
某学习小组10名学生的成绩情况如表所示,现要求通过学号查询学生成绩.1110110911081107110611051104110311021101学号83719298625767807899数学例7.4采用二分查找法查询学生成绩
二分法查找的原理
二分法查找示例数据
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:
二分法查找示例数据(代码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 sub7.8.1 控件数组的概念
控件数组的事件过程
例如:命令按钮数组Command1的单击事件过程为:
Private Sub Command1_Click(Index As Integer)'在此过程中可以根据Index的值决定'当前按下哪个按钮,以便做相应的处理 End Sub【例7-11】设计如图所示的界面,创建一选项按钮控件数组(Option1)。运行时,当按下某一选项按钮时,对图形设置相应的填充颜色。Option1Shape1控件数组的事件过程(代码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例:用控件数组设计计算器
例设计一个计算器,可以完成、减、乘、除的运算。
例:用控件数组设计计算器(续)
数组中常见错误和注意事项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的变量或动态数组赋值。第7章 小结
下载地址:{{downurl}}
{{{a}}}
{{#b}}{{{b}}}
{{/b}} {{/title}} {{#nolog}}登陆注册
{{/nolog}} {{#djsx}}点我刷新
{{/djsx}} {{#gocz}} {{/gocz}} {{#ffqr}} {{/ffqr}}