VisualBasic程序设计课件之第5章数组和记录_第1页
VisualBasic程序设计课件之第5章数组和记录_第2页
VisualBasic程序设计课件之第5章数组和记录_第3页
VisualBasic程序设计课件之第5章数组和记录_第4页
VisualBasic程序设计课件之第5章数组和记录_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

1、第5章 数组和记录 5.1 数组的概念 5.2 数组的定义 5.3 数组的基本操作 5.4 数组的应用 5.5 控件数组 5.6 记录 5.7 常用算法(二)1.5.1 数组的概念 1. 数组的作用 数组通常和循环一起使用可以大大减少编程的复杂性,有些算法不用数组就无法实现。 例5.1 计算100个学生某门课的平均分,并统计高于平均分的人数。不用数组就很难编程。 Dim mark(1 To 100) As Integer,aver!, over%, i% aver = 0: over=o For i = 1 To 100 mark(i) = InputBox(输入成绩) aver = aver

2、 + mark(i) 计算总分 Next i aver = aver / 100 over = 0 For i = 1 To 100 If (mark(i) aver) Then over = over + 1 Next I Print aver, over2.2. 数组的概念 数组是一批数据或控件的集合。 普通数组存放一批相同类型的数据 控件数组存放一批相同名称的控件例如,定义一个integer型数组a(10),它包含11个同类型的变量:a(0),a(1),a(10) Variant型数组则可以存放不同类型的数据又如,在窗体上画一个标签label1,并用复制和粘贴的方法操作5次,可以得到一个

3、名称为label1的控件数组,含6个标签,每个标签的名称均为label1,但各个控件的index属性值分别是0,1,5。3. 3.数组元素和数组的维数 数组的成员称为数组元素,其名称与数组名相同,其下标表示该元素在数组中的位置。因此,数组元素也称下标变量。 数组的维数表示数组元素需要几个下标才能正确表示其在数组中的位置,它代表数组的逻辑结构,最多60维。 一维数组的逻辑结构是线性的,只用一个下标表示各个元素在数组中的位置 例 a(10):含11个元素的一维数组 a(0),a(1),a(2),a(3),a(4),a(5),a(6),a(7),a(8),a(9),a(10) 二维数组的逻辑结构是一

4、个二维表,用两个下标表示各个元素在数组中的位置:第一个下标表示行,第二个下标表示列。 例 b(2,3):含三行四列共12个元素的二维数组 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(2,0) b(2,1) b(2,2) b(2,3) 4. 4.数组的存储结构 数组在内存中占用一片连续的存储单元。 一维数组的存储结构与逻辑结构相同,即各个元素按下标顺序依次存放; 二维数组的存储结构是按行的顺序存储各个元素。例如,数组b(2,3)的存储形式为: b(0,0) b(0,1) b(0,2) b(0,3) b(1,0) b(1,1)

5、 b(1,2) b(1,3) b(2,0) b(2,1) b(2,2) b(2,3) 三维数组是由若干个二维数组组成的,其存储结构是按顺序存储各个二维数组。例如,数组c(1,2,1)的存储形式为: c(0,0,0) c(0,1,0) c(0,2,0) c(1,0,0) c(1,1,0) c(1,2,0) c(0,0,1) c(0,1,1) c(0,2,1) c(1,0, 1) c(1,1,1) c(1,2,1)5.5.2 数组的定义 静态数组(定界数组) 动态数组(可变数组、可调数组) 静态数组:在定义时明确规定数组的大小,且在程序运行过程中,其大小不能再改变 动态数组:在定义时不指定数组的大

6、小,在运行过程中可以根据需要用ReDim重新规定其大小数组6. 1.静态数组的定义 形式:Dim 数组名(维界1,维界2) As 类型 维界1、维界2等表示各维的大小,形式为: 下界 To 上界 下界和上界为常数表达式: -2147483648 到 2147483647 下界缺省时默认0 维界用来确定数组的体积。 类型缺省时,默认变体型 除了用Dim外,还可以用static、private和public来定义数组,它们可以在不同的窗体和模块内定义,所定义的数组的作用范围也不相同。7.下界可以缺省,系统默认的下界缺省值为0。例:Dim lArray(0 To 3,0 To 4) As Long

7、等价于: Dim lArray(3,4) As Long 例:Dim mark(1 to 100) As Integer8.如果需要默认的下界缺省值不是0,则可以在通用声明段内用Option Base语句确定,例如用 Option Base 1来定义下界缺省值为1,此后,若定义 Dim a(2,3)则等价于Dim a(1 to 2,1 to 3)注意: (1)在数组定义中,数组名后面括号中数值表示数组的维界,即每一维的大小;而在程序其他地方出现的带扩号的则表示数组中的某一个元素,括号中的数值表示该元素在数组中的位置。两者写法形式相同,但意义不同。 Dim x(10) As Integer 定义

8、x数组有11个元素 x(10)=100 对x(10)这个数组元素赋值 (2)静态数组一经定义,编译系统为其安排存储空间,其维数和各维大小不能再改变9. 2.动态数组的定义 定义动态数组时,数组名后面的括号内不含维界。这时,编译系统并不为该数组安排存储空间。而在程序运行时,用ReDim语句指明该数组的大小,并安排存储空间 Dim sArray( ) As Single Sub Form_Load( ) ReDim sArray(4,8) sArray原有值丢失 ReDim Preserve sArray(4,100) sArray原有值保留 End Sub10. (1)重新定义动态数组的大小时,

9、既可以改变其大小,也可以改变其维数,下标可以用常数,也可以用有确定值的变量。例如: Dim a() As Integer a为动态数组 Private Sub Command1_click() ReDim a(4,5) 重新定义动态数组 n=InputBox(“请输入n的值”) ReDim a(n) 重新定义动态数组 End Sub 11. (2)定义Variant型动态数组时,可以省略数组名后面的圆括号 Dim a a为variant型变量或数组 a=5 a为简单变量 Print a Redim a(5) a为数组 For I=0 to 5 a(I)=I Print a(I); Next I

10、12. (3)每次使用ReDim语句都会使数组中原有的数据丢失,当希望改变数组大小而又要保留数组中原有的数据时,可以在数组名前面增加Preserve关键字,这时,只能改变多维数组中最后一维的上界,而不允许改变其它维的大小及最后一维的下界。 Dim a() As Integer ReDim a(10,10) ReDim Preserve a(10,Ubound(a)+2) 正确 ReDim Preserve a(Ubound(a)+2,10) 错误13.5.3 数组的基本操作1. 数组元素的赋值(1)静态数组只能对数组元素逐一赋值,不能用数组名整体赋值 Dim a(4) As Integer F

11、or i = 0 To 4 a(i)=10 a数组的每个元素值为10 Next I是允许的。 a=(1,2,3,4,5)是不允许的。 14. (2)变体型动态数组可以用Array函数定界和整体赋值 Dim a As Variant, b() As variant, i% a=Array(1,2,3,4,5) b=Array(“abc”,”derf”,67,True) For i=Lbound(a) To Ubound(a) Picture1.Print a(i) Next i For i=Lbound(b) To Ubound(b) Picture1.Print b(i) Next I 其中,

12、Lbound()和Ubound()用来确定数组的下界和上界15. (3)动态数组也可以用同类型的静态数组整体赋值 Dim a(4) As Integer, b() As Integer a(0)=1:a(1)=3:a(2)=5:a(3)=-8:a(4)=7 b=a 将数组a整体赋给数组b,b为动态数组 其中, b=a相当于 For i=Lbound(a) To Ubound(a) b(i)=a(i) Next i16.2.数组的输入 可以用InputBox函数或文本框实现数组的输入 Dim sB(4, 5) As Integer, i%, j% For i = 0 To 4 For j = 0

13、 To 5 sB(i, j) = InputBox(输入sB( & i &, & j &)的值) Next j Next i For i = 0 To 4 For j = 0 To 5 Print Format$(sB(i, j), 00); spc(2); Next j Print Next i17.3. 数组的输出数组的输出只能对数组的各个元素进行。例:输出方阵sc中的下三角元素 Dim sc(4,4) As Integer For i = 0 To 4 For j = 0 To i sc(i, j) = i * 5 + j Print sc(i, j); “ “; Next j Prin

14、t Next i如何输出上三角?18.4. 求数组中最大元素及所在下标及各元素之和 Option Base 1 Dim Max As Integer,iMax As Integer Dim Sum As Integer,iA(10) Max=iA(1):iMax=1: Sum=iA(1) For i = 2 To 10 If iA(i)Max Then 求最大值 Max=iA(i) iMax=i End If Sum=Sum+iA(i) 求各元素之和 Next i Picture1.Print Max,iMax,Sum19.5. 将数组iA(10)中第一个元素与最后一个元素交换,第二个元素与倒

15、数第二个元素交换,直到整个数组各元素按逆序存放。 For i =1 To 102 t=iA(i) iA(i)=iA(10-i+1) iA(10-i+1)=t Next i20.1. 控件数组的概念 一组相同的控件可以组成一个控件数组,它们共用一个控件名,具有相同的属性,建立时系统给每个元素赋一个唯一的索引号(Index=0,1,2,.),类似数组的下标。 使用控件数组的最大优点是数组中的各个控制件可以共享同样的事件过程,从而减少编程工作量。 例:Private Sub cmdName_Click(Index As Integer) If Index=3 then 处理第四个命令按钮的操作 En

16、d If End Sub5.4 控件数组21.2. 控件数组的建立(1)在设计阶段建立 第一步先建立第一个控件,即在窗体上画出该控件,设置其Name属性,作为控件数组名。 第二步选中该控件,进行“复制”和“粘贴”,当弹出的对话框中出现“已经有一个控件为.,创建控件数组吗”信息时,单击“是”按钮,就建立了一个控件数组,经过若干次“复制”和“粘贴”,可以建立该控件数组的各个元素。每个元素都是一个控件,它们具有相同的Name,各个控件的index属性值为该控件在数组中的位置(索引)号,从0开始。 第三步编制控件数组的事件过程。22.例5.3 建立含有四个命令按钮的控件数组,当单击某个命令按钮,分别显

17、示不同的图形或结束操作。Private Sub command1_Click(Index As Integer) Picture1.Cls Picture1.FillStyle = 5 填充右斜线图案 Select Case Index Case 0 Picture1.Print 画直线 Picture1.Line (2, 2)-(7, 7) Case 1 Picture1.Print 画矩形 Picture1.Line (2, 2)-(7, 7), , BF Case 2 Picture1.Print 画圆 Picture1.Circle (4.5, 4.5), 3.5, , , , 1 C

18、ase Else End End SelectEnd Sub23.(2) 在程序运行阶段建立 第一步在窗体上画出某控件(如Label1),并设置该控件的Index属性值为0,表示该控件为数组,从而建立控件数组的第一个元素 第二步在编程时通过Load方法添加其余的若干个元素,也可以通过Unload方法删除某个添加的元素。如:Load label1(i) i=1 第三步在程序中为每个新添加的控件数组元素设置Left和Top属性以确定其在窗体的位置,并将其Visible 属性设置为True(或-1)。 程序运行时会自动按程序中的设置,将各个控件显示在窗体上。24.例5.4 通过程序建立的方法在窗体上

19、用64个标签框组成一个国际象棋的棋盘。先在窗体上画label1控件,设置其Index属性值为0,表示该控件为数组,从而建立控件数组的第一个元素在Form_load()事件中用两重循环由Load方法自动生成8行8列label1(k),k=8(i-1)+j,并确定每个控件的Left和Top在label1_click()事件中获得被单击的label1控件的index值,并改变所有控件的颜色用程序建立的方法25.*VB程序设置颜色的四种方法用RGB(x,y,z)函数x、y、z在0255之间取值黑色RGB(0,0,0) 兰色RGB(0,0,255) 绿色RGB(0,255,0) 青色RGB(0,255,

20、255)红色RGB(255,0,0) 洋红色RGB(255,0,255)黄色RGB(255,255,0) 白色RGB(255,255,255)用Quick BASIC提供的颜色函数QBColor(i)0 黑色 1 兰色 2 绿色 3 青色 4 红色 5 洋红色 6 黄色 7 白色 8 灰色 9 亮兰色 10 亮绿色 11亮青色12 亮红色 13 亮洋红色 14 亮黄色 15 亮白使用“对象浏览器”中列出的内部常数 vbBlack黑 vbBlue蓝 vbCyan青 vbGreen绿 vbMagenta洋红 vbRed红 vbWhite白 vbYellow黄直接用十六进制长整数表示(数值越小颜色越

21、深) &H0&黑&HFFFFFF&白26.5.5 自定义数据类型(记录)记录的概念 记录是由一组相关的数据项(字段)组成的整体。 例如,一个学生的记录包括学号、姓名、性别、各门课的分数等,均称为数据项或字段,它们可以是不同的数据类型。 在VB中,每个控件是一个对象,一个对象的所有属性组成一个记录,属性名则是记录的一个数据项(字段)。当用户自己创建类或对象时,就要定义属性记录。27.2. 记录的定义 定义记录时,要先定义记录类型,然后再定义该记录类型的变量或数组。记录类型的定义 Type 自定义类型名 元素名(下标) As 类型名 元素名(下标) As 类型名End Type 例:Type St

22、udType No As Integer 学号 Name As String * 20 姓名 Sex As String * 1 性别 Mark(1 To 4) As Single 4门课程成绩 Total As Single 总分 End Type28.定义记录的语句如果放在标准模块中,可省略public。如果放在窗体中,则必须用private。如在窗体的通用声明处Private Type StuType End Type在模块的通用声明处Public Type StuType End Type(2) 记录变量或数组的定义可以用已定义的记录类型定义变量或数组。 Dim a As StuTyp

23、e,b(20) As StuType 3. 记录的引用(1) 引用记录的一般形式是 . a.IntNo=123 a.StrName=“李明”29.(2) 用With语句引用形式: With 语句块 End With 其中,对象名可以是记录变量、控件名或其他的对象名作用:对一个对象执行多条语句时,可省略对象名。例如:要给记录变量a赋值,可以用with语句设置。 With a .IntNo=123 .StrName=“李明” .strSex=“M” .sngMark(1)=87 .sngMark(2)=91 .sngMark(3)=79 .sngMark(4)=95 .blnTag=True En

24、d With30.例5.5 利用记录类型编程模拟数据库记录的输入、显示和查询。标签:Label1Label5 文本框:Text1Text3命令按钮:Command1(3)在窗体通用声明段定义记录类型:Private Type StudType用Command1_Click(Index As Integer)事件编程新增:添加记录前一个:显示前一条记录后一个:显示下一条记录最高分:显示最高分位置:显示总记录数和当前记录号31.5.6 常用算法(二) 1.分类统计例5.6 输入一串字符,统计各字符出现的次数,不区分字母的大小写。32.设计:用一个文本框输入字符串,图形框输出个字符的个数,命令按钮进

25、行统计。算法:为了计算各字母的个数,定义一个含26个元素的一维整型数组a,a(1)存放字母a或A的个数,a(2)存放字母b或B的个数,。为了对各个字母计数,用Mid$()函数依次取出字符串中的各个字母并进行判断和计数。为了不区分大小写,可用Ucase$()函数将所取出的字母一律转换成大写,也可用Lcase$()将所取出的字母一律转换成小写33.2.大量数据的输入和编辑例5.7 利用文本框可实现大量数字串输入和编辑的功能。 用Text1输入一批数字串,Picture1显示数字串中的各个数字,Text2输出数组各元素用a=split(text1,”,”)将text1中的文字按逗号分割成各个数组元素

26、,并显示在图形框picture1中用text2=join(a,” “)将数组a合并成用空格分隔的字符串34.设计:两个命令按钮,一个用于通知用户输入数字串;另一个用于合并数组元素。两个文本框,一个用于输入和编辑数据,另一个用于输出结果;图形框用于输出数组a各元素的值。算法: 通过Text1_keypress事件编程只允许输入09、“,”、“.”和“-”; 通过Command1_Click事件编程将连续两个逗号分隔符替换成一个逗号,并用a=Split(Text1,”,”)将Text1文本框中的字符串以逗号为分界符分离出各项数据,依次存入数组a中,并在图形框中显示; 通过Command2_clic

27、k事件编程,用Text2=join(a,” “)将数组a的各元素以空格为分隔符合并成字符串,并在Text2中显示。35.3.数组排序 (1)选择法排序 例5.8 对已存放在数组iA中的n个数,用选择法按递增顺序排序。 36.选择排序算法 n个数排序要经过n-1轮比较和交换(1) 第一轮从n个数中选出最小的数(递增),与第1个数交换位置;(2) 第二轮从除第1个数外的其余n-1个数再按(1)的方法选出次小的数,与第2个数交换位置。(3) 以后各i轮均从余下的数中找到最小数,并与第i个数交换,直到i=n-1为止。最后构成递增序列。 For i = 1 To n - 1 iMax= i For j

28、= i+1 To n If iA(iMax) iA(j) Then iMax = j end if Next j t= iA(i) iA(i) = iA(iMax) iA(iMax) = t Next I 37. (2)冒泡法排序 例5.9 对例5.8用冒泡法按递增顺序排序。 冒泡排序算法: n个数排序也要经过n-1轮比较和交换第一轮从第一个数开始,与第二个数比较,若第一个数大于第二个数,则将二者交换位置;否则,不交换。其后,再将第二个数与第三个数比较,顺序不对的,也同样进行交换,直到倒数第二个数。结果:最大的数沉底,最小数上浮一个位置;第二轮仍从第一个数开始,依次进行相邻两个数的比较,必要时

29、进行交换,直到倒数第三个数,结果:次大数将落在倒数第二个位置上,最小数继续上浮一个位置;以后各i轮均从第1个数开始,直到倒数第n-i+1个数,进行相邻两数的比较,直到i=n-1为止,此时最小数将上浮到第一个位置上,从而最后构成递增序列。38. Option Base 1 Dim i%, j%, imax%, t% For i = 1 To n-1 For j = 1 To n+1-i If iA(j) iA(j + 1) Then t = iA(j) iA(j) = iA(j + 1) iA(j + 1) = t End If Next j Next i For i = 1 To n Picture2.Print iA(i) Next i原始数据:8 6 9 3 2 7第一轮 6 8 3

温馨提示

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

评论

0/150

提交评论