面向对象设计与C++课件第5章 数组

上传人:cn****1 文档编号:571317779 上传时间:2024-08-10 格式:PPT 页数:55 大小:1.32MB
返回 下载 相关 举报
面向对象设计与C++课件第5章 数组_第1页
第1页 / 共55页
面向对象设计与C++课件第5章 数组_第2页
第2页 / 共55页
面向对象设计与C++课件第5章 数组_第3页
第3页 / 共55页
面向对象设计与C++课件第5章 数组_第4页
第4页 / 共55页
面向对象设计与C++课件第5章 数组_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《面向对象设计与C++课件第5章 数组》由会员分享,可在线阅读,更多相关《面向对象设计与C++课件第5章 数组(55页珍藏版)》请在金锄头文库上搜索。

1、5.1 数组的概念5.2 静态数组5.3 动态数组5.4 控件数组变量量代表在程序代表在程序执行行过程中其程中其值可以改可以改变的的存存储单元元. .问题: :输入入5050个数个数, ,放在内存存放在内存存储单元中元中? ? 若需要若需要对相同相同类型的一批数据型的一批数据进行行处理理, ,则需需要在要在计算机内存中开辟一算机内存中开辟一块连续的区域的区域对之之进行行存存储. .数数组:具有:具有相同相同类型型变量的量的有序有序集合。集合。这些些变量按照一定的量按照一定的规则排列,使用一片排列,使用一片连续的存的存储单元。元。uVB中两种变量数组:静态数组和动态数组。 静态数组大小固定 动态

2、大小不确定,使用前重新定义(定义2次)uVB中的对象数组-控件数组使用数组之前必须对其进行定义(先定义后使用)定义语句格式如下:Dim|Static|Private|Public 数组名(下标1,下标2)As Dim 数组名(下标1)As 一维数组Dim 数组名(下标1, ,下标2)As 二维数组 To 1 To 上界上界1 1 , , To 2 To 上界上界2 2 其中,其中,“下界下界”和关键字和关键字“ToTo”可以省略,若程序中无可以省略,若程序中无特别声明,表示下标的取值从特别声明,表示下标的取值从0 0开始,等价于开始,等价于“0 To 0 To 上界上界”。 Dim A A(5

3、) As Integer 等价于 Dim A A(0 To 5) As IntegerA A为数组名,该数组中有6个数组元素,分别为:A(0)、 A(1) 、 A(2) 、 A(3) 、 A(4) 、 A(5) A(0)A(1) A(2)A(3)A(4)A(5)A A Dim B(2, 1 To 2) As Single等价于 Dim B B(0 To 2, 1 To 2) As Single解析:定义了一个名为B B的二维数组,其中有6个数组元素,分别为:B(0,1)、 B(0,2) 、 b(1,1) 、 B(1,2) 、 B(2,1) 、 B(2,2)二二维数数组: : 其元素构成一个其元

4、素构成一个二二维表格表格或或矩矩阵. .数数组元素的第一个元素的第一个下下标值表示表示该元素在表格中的行号元素在表格中的行号, ,第二个下第二个下标值表示列表示列号号. .数组定义(续)二维数组矩阵二维数组的元素表示表示B(2,1 to 2)=B(0,1)B(0,2)B(1,1)B(1,2)B(2,1)B(2,2)第1行第2行第3行第1列第2列1.数组的上下界数组的上上界和下下界下界:数组中表示某维最小的下标值;上界:数组中表示某维最大的下标值;注注:定义静态数组时,维的上下界必须是常数表达式,不可以是变量名。且下下界上上界5.2.2 静态数组的操作数组的上上界和下下界Dim M As Int

5、eger Const N = 5 As Integer Dim A(N) As IntegerDim B(1 To 6.6) As Integer 四舍五入后维上界7Dim C(1 To 2 * 3) As StringDim D(0 To M) As Single定定义数数组时,若未指定某,若未指定某维的下界,的下界,则下界默下界默认为0 0设置缺省置缺省维下界的数下界的数组的的维下界下界为1 1的方法:的方法: 在代在代码窗口窗口通用声明通用声明部分写一部分写一语句句option Base 1option Base 1 再在再在cmd1_click()cmd1_click()事件事件过程中

6、程中进行定行定义: Dim S(4), B(3,3) as integer Dim S(4), B(3,3) as integer 变体型体型, ,整型数整型数组 数组的数组的大小大小即数组所包含的即数组所包含的数组元素的个数数组元素的个数,也称为数组的也称为数组的长度长度。数组的大小数组的大小= =第一维大小第一维大小 第二维大小第二维大小 第第N N维维大小大小 维的大小维的大小= = 维上界维上界 维下界维下界 + 1+ 1 dim A(6) as integer dim A(6) as integer dim B(3,-1 to 4) as single dim B(3,-1 to 4

7、) as single引用形式:引用形式:数数组名名( (下下标表达式)表达式) Dim score(3) as integer Dim two(1,1 to 2) as integer score(0)=80 :score(1)=score(0)+23 score(2)=87 :score(3)=9 two(0,1)=score(0)(1 1)一一维数数组元素的初始化(元素的初始化(输入)入) 初始化是初始化是给数数组成成员赋初初值。通通过循循环逐一逐一给数数组元素元素赋值 * *使用使用InputboxInputbox接收若干数接收若干数值 * *随机随机产生数生数值(2 2)一一维数数组

8、元素元素值的的显示(示(输出)出) * *边输入(入(获得每一元素得每一元素值后)后)边输出出 * *获得全部元素得全部元素值后再后再输出出 窗体窗体/ /图片框片框/ /文本框文本框/Msgbox/Msgbox在在FORFOR循循环中用循中用循环控制控制变量作量作为数数组元素的下元素的下标。边输入入边输出出 FOR I=0 TO 5FOR I=0 TO 5 A(I)=INT A(I)=INT(99*RND99*RND)+1+1 PRINT A(I); PRINT A(I); NEXT I NEXT IDIM A(6) as integer, I as integerFOR I=0 to 6

9、A(I)=inputbox(“给数组元素赋值”,”数组A赋值”) PRINT A(I);NEXT I输入使用随机函数入使用随机函数, ,每得到一个数将之每得到一个数将之赋给数数组元素元素. .边输入入边输出每个元素出每个元素值( (正序正序) )如何如何实现逆序逆序输出?出?所所产生的整数在生的整数在0-90-9之中之中需要需要1010个个计数器数器( (计数数变量量) )来存放来存放1010个数各自出个数各自出现的次数的次数( (数数组元素元素) )a(0)-0a(0)-0的个数的个数 a(1)-1a(1)-1的个数的个数编写一个程序,随机写一个程序,随机产生生1010个两位正整个两位正整

10、数,并从中数,并从中找出一个最大数和一个最小数。找出一个最大数和一个最小数。打擂台思想打擂台思想控件数控件数组由一由一组相同相同类型的控件型的控件组成成,例如一,例如一组命命令按令按钮或一或一组文本框。它文本框。它们共用一个控件名,具有共用一个控件名,具有相同的属性,建立相同的属性,建立时系系统给每个元素每个元素赋一个唯一的一个唯一的索引号索引号(Index)。 1. 基本概念在某个控件识别了一个事件时,VB将调用公 共事件过程,并把该控件的Index属性值传递 给过程,由它指明是哪个控件识别了控件。例:Private Sub Command1_click(Index As Integer)

11、End Sub方法一:创建同名控件 TEXT1 TEXT2命名(NAME属性)为TEXT1,创建控件数组。INDEX值不同。方法二:复制现存控件 例如:例如: 为文本框控件数文本框控件数组的三个元素的三个元素设置共同字体与大小置共同字体与大小Dim I As IntegerFor I=0 TO 2 Text1(I).Font.Name=“隶书” Text1(I).Font.Size=20Next I交换: a(0)-a(7) a(1)-a(6) a(2)-a(5) . . 要求要求4 4项一行一行输出,出,请使用数使用数组完成,即数完成,即数组各元素取得各各元素取得各项值,以,以4 4个一行的

12、形式个一行的形式输出数出数组中各元素中各元素值。 动态数数组:应用中用中数数组的大小不确定的大小不确定. .首先定首先定义不指明大小的数不指明大小的数组: : Dim Dim 数数组名名()() As As 数据数据类型型其次,使用其次,使用ReDimReDim语句句动态定定义数数组的大小。的大小。 ReDimReDim Preserve Preserve数组名(下标1,下标2) As As 注意注意: :用用RedimRedim语句定句定义数数组时若指定数据若指定数据类型型, , 应与上面的与上面的Dim Dim 数数组名名() As () As 数据数据类型中的型中的数据数据类型一致型一致

13、, ,即不允即不允许更更换类型型. .例: Option Base 1Option Base 1Private Sub Command1_Click()Private Sub Command1_Click()Dim a() as integerDim a() as integerredim a(9)redim a(9) Print a(8) Print a(8) Redim a(2,3) Redim a(2,3) Print a(1,1) Print a(1,1)End SubEnd Sub思考:将将蓝色色语句改句改为redim a(9) as longredim a(9) as long是否

14、会出是否会出错? ?RedimRedim Preserve Preserve 数组名(维界定义) As As 数据数据类型型 例子:例子:动态数数组单循循环例子例子( (读程序程序见下下页) )在使用ReDim语句重新定义数组时,如果需要保留动态数组的内容可采用如下方式:重新定义数组时可以保留原数组中的内容重新定义数组时可以保留原数组中的内容Option Base 1Option Base 1Private Sub Form_Click()Private Sub Form_Click() Dim a() As Integer Dim a() As Integer Dim i As Intege

15、r, j As Integer Dim i As Integer, j As Integer For i = 1 To 3 For i = 1 To 3 ReDim a(i) ReDim a(i) 思考思考:redim preserve a(i):redim preserve a(i) a(i) = i a(i) = i Next i Next i Print a(1); a(2); a(3) Print a(1); a(2); a(3)End SubEnd Sub利用循利用循环生成数生成数组各元素各元素值。指定要指定要删除元素的位置除元素的位置删除方法:用后除方法:用后继元素覆盖之元素覆盖之

16、 由于数由于数组大小在大小在删除元素后会除元素后会发生生变化,所化,所以以应定定义为动态数数组。 从从键盘输入一个正整数,找出入一个正整数,找出该数以内的数以内的所有素数存放在数所有素数存放在数组primeprime中中 并将所有找到的素数按每行并将所有找到的素数按每行5 5个的形式个的形式输出到文本框中。出到文本框中。 输出到当前窗体中。出到当前窗体中。数组第二次课内容数组第二次课内容数组的输入(赋值)与输出(显示)Array函数:给Variant类型的变量或Variant类型的动态数组赋值例:ARRAY赋值.vbp4.用ARRAY函数给一维数组赋值一维数组的输入一维数组的输入: :直接赋值

17、直接赋值, ,随机赋值随机赋值,inputbox,inputbox赋值赋值Option Base 1Private Sub Form_Click() Dim A As Variant, I As Integer Dim B() As Variant FontSize = 30 A = Array(5, 4, 3, 2, 1) Print A(1); A(2); A(3); A(4); A(5) A = Array(1.5!, 2.3!, 3.6!, 4.1!) Print A(1); A(2); A(3); A(4); A = NO ARRAY Print A B = Array(1, 2,

18、3, 4, 5, 6) Print B(1)End Sub循环控制(下标变量print a(i)For Each Next结构不需要提供初值与终值根据数组元素的个数确定循环执行的次数 For Each v In 数组 v是变体变量 Exit for Next 成员 v必须定义为variant类型Dim i%, j%Dim i%, j%Dim b(1 To 2, 1 To 3) As IntegerDim b(1 To 2, 1 To 3) As IntegerFor i = 1 To 2For i = 1 To 2 For j = 1 To 3 For j = 1 To 3 b(i, j) =

19、 i * 10 + j b(i, j) = i * 10 + j Print b(i, j); Print b(i, j); Next j Next j Print PrintNext i Next i * *此方法按行列式的格式此方法按行列式的格式输出出二维数组的定义及赋初值二维数组的定义及赋初值 For Each v In b For Each v In b 此结构按列输出二维数组中的各元素此结构按列输出二维数组中的各元素 Print v;Print v; Next Next函数 返回指定数组某维的下界值. LBound(数组名,维编号) 函数 返回指定数组某维的上界值. UBound(数

20、组名,维编号)*缺省时返回第一维上/下界Erase语句:用于清除指定数组的内容用于静态数组时,将所有数组元素置为默认值用于动态数组时,将删除整个数组结构并释放该数组所占内存。下次引用该动态数组前必须REDIM重新定义。例3. Erase3. Erase语句语句 Dim a(3) As Integer, b() As Integer a(1) = 1: a(2) = 2: a(3) = 3 ReDim b(4) Print a(1), a(2), a(3) Erase a, b Print a(1), a(2), a(3) Print b(1) 此行出错 部分重点算法部分重点算法部分重点算法部分

21、重点算法:一数组,求其中最大和最小;对一数组排序(选择法、冒泡冒泡法)在一数组中查找指定的数(顺序顺序、二分二分查找)插入,删除删除一数组中重复的数一维数组的应用一维数组的应用基本思想基本思想: 设在数在数组S S中存放中存放n n个无序的数,要求将个无序的数,要求将这n n个个数按升序数按升序( (从小到大从小到大) )重新排列。重新排列。 第一第一轮比比较:使得:使得s(1)s(1)为所有元素中最小的所有元素中最小的. . 用用s (1)s (1)与与s (2)s (2)比比较,若,若s (1)s (2)s (1)s (2),则交交换两两个元素中的个元素中的值,然后,然后继续用用s (1)

22、s (1)与与sort(3)sort(3)比比较,若,若s s (1)s (3)(1)s (3),则交交换这两个元素的两个元素的值。依此。依此类推,直到推,直到s s (1)(1)与与s (n)s (n)进行比行比较处理后,理后,s (1)s (1)中存放了中存放了这n n个数中个数中的最小数。的最小数。 第二第二轮比比较,s (2)s (2)依次与依次与比比较总共通共通过n-1n-1轮比比较,得到一个从小到大排列的有序序列。,得到一个从小到大排列的有序序列。【例例4 4】数组元素的插入数组元素的插入(1)将任意一整数插入到数组中,)将任意一整数插入到数组中,由用户指定插入的数由用户指定插入的

23、数据作为第几个元素据作为第几个元素 (2)已知一按升序排好的包含有)已知一按升序排好的包含有10个元素的数个元素的数 组,将某一整数插入到该数组中组,将某一整数插入到该数组中基本思路基本思路:首先要找到插入位置首先要找到插入位置.以升序为例以升序为例.基本思想 对所存储的数据从第一项开始,依次与所要检索的数据进行比较,直到找到该数据,或将全部元素都找完还没有找到该数据为止。 将元素将元素显示在列表框中示在列表框中. .结果果显示在文本框中示在文本框中, ,结果格式果格式为:23:23找到了,找到了,为元素元素a(5)a(5)。【例例6 6】二分二分查找找( (要求数要求数组已排好序已排好序)

24、)算法算法说明:明: 给定一定一组数据,数据,查找是否存在指定的某个找是否存在指定的某个值,二分法二分法查找要求找要求这组数据必数据必须已已经是是排好排好序序的,每次将的,每次将查找范找范围一分一分为二,直到找到或二,直到找到或查询了所有区了所有区间也没有找到要也没有找到要查找的数找的数为止。止。具体思路具体思路为: 假假设给定的一定的一组数据存放在数数据存放在数组A A中,需要中,需要查找的数找的数为x x。 设定三个下定三个下标leftleft(初始(初始值为0 0)、)、rightright(初(初始始值为数数组A A的上界)、的上界)、MidMid分分别指向指向查找区找区间的左的左端、

25、右端和中端、右端和中间位置。位置。计算算Mid=Mid=,比,比较x x和和AMidAMid的大小,的大小, * *若若FindFind= =AMidAMid,则要要查找的数已找的数已经找到;找到; * *若若FindFind AMidAMid,说明需要明需要查找的数找的数应当在当在MidMid和和rightright区区间,则left=mid+1left=mid+1; 重复以上步重复以上步骤,每次,每次查找区找区间减少一半,直到找减少一半,直到找到或者到或者LeftRightLeftRight(表示找不到,停止(表示找不到,停止查找)。找)。【例例7 7】 :使用冒泡(起泡)法使用冒泡(起泡

26、)法对1010个整数个整数(数(数组元素)从小到大排序,并元素)从小到大排序,并输出排序前出排序前后数后数组中元素的中元素的值。起泡法的思路是:将相起泡法的思路是:将相邻两个数比两个数比较,将小的,将小的调到前到前头。排序通常分为以下排序通常分为以下3个步骤:个步骤:将需要排序的将需要排序的n个数存放到一个数组中个数存放到一个数组中(设设x数数组组)。将将x数组中的元素从小到大排序,即数组中的元素从小到大排序,即x(1)最小、最小、x(2)次之、次之、x(n)最大。最大。将排序后的将排序后的x数组输出。数组输出。 在第一在第一轮比比较中中进行两两比行两两比较_次次, ,在第二在第二轮中比中比较

27、_次次, ,第第4 4轮中比中比较_次次. . 如果有如果有n n个数个数, ,则要要进行行_轮比比较, ,用用i i表示表示轮次次, ,在在第第i i轮比比较中要中要进行行_次两两比次两两比较. .思路: 每生成一个元素与前面的元素进行比较,若相同,则重新生成该元素.第一第一轮用用A(1)A(1)依次和位于其后的所有数依次和位于其后的所有数组元素比元素比较, ,假假设元素元素A(j)A(j)与它相同与它相同, ,则将将A(j)A(j)删除除. .删除的方除的方法是将位于法是将位于A(j)A(j)元素后面的依次前移元素后面的依次前移, ,直到将之覆直到将之覆盖盖为止止; ;然后然后继续用用A(

28、1)A(1)和和A(j),A(j+1)A(j),A(j+1)等比等比较, ,若有相同数存在若有相同数存在, ,仍然将其仍然将其删除除, ,直到比直到比较完所有完所有元素元素. .第二第二轮用用A(2)A(2)和位于其后的所有元素比和位于其后的所有元素比较, ,处理方理方法同第一法同第一轮. .依次依次类推推将两个有序数且将两个有序数且A A和和B B合并成另一个有序的数合并成另一个有序的数组C C思路思路 (1)(1)先在先在A,BA,B数数组中各取第一个元素中各取第一个元素进行比行比较, ,将小将小的元素放入的元素放入C C数数组. . (2) (2)取小的元素所在数取小的元素所在数组的下一

29、个元素与的下一个元素与别一数一数组中上次比中上次比较后后较大的元素比大的元素比较, ,重复上述比重复上述比较过程程, ,直到某个数直到某个数组被先排完被先排完. . (3) (3)将另一个数将另一个数组剩余元素放入剩余元素放入C C数数组, ,合并排序完成合并排序完成【例例1 1】. .生成一个生成一个3*43*4的二的二维数数组,求出,求出该数数组中所中所有元素的和有元素的和sum1,sum1,所有靠所有靠边元素的和元素的和sum2sum2。 【例例2 2】. .求二求二维数数组a a的的转置矩置矩阵b b。【例例3 3】. .求二求二维数数组中每行的最大中每行的最大值及其所在的位置及其所在

30、的位置(列)(列). .利用随机函数生成一个由利用随机函数生成一个由11,99之之间的正整数构的正整数构成的成的4 4行行5 5列矩列矩阵,求出矩,求出矩阵行的和行的和为最大和最小的最大和最小的行,并行,并调换这两行的位置。两行的位置。生成一个生成一个4*54*5的二的二维数数组,找出二,找出二维数数组的所的所有鞍点。所有鞍点。所谓鞍点是指鞍点是指该位置的数在位置的数在该行上最大,行上最大,而在而在该列上最小。列上最小。【例例7 7】. .用用户由文本框由文本框输入一串英文字符,入一串英文字符,统计其中其中各英文字母出各英文字母出现的次数。的次数。Load 对象名(index) 向控件数组添加控件对象名 指在数组中添加的控件名称,Index是控件在数组中的索引值。加载新元素到控件数组时,要在程序中将Visible属性设置为TRUE, 通过代码安排新元素在窗体上的位置(通过top,left属性)。Unload 对象名(index) 删除用Load产生的对象数组元素。例5.2 建立一个动态添加和删除控件数组元素的程序.

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号