版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第八章 数组一、引入课题例输入 100 个同学的成果,一起正序输出显示,换行后再一起反序输出;思路:为了将输入的 100 个同学的成果,先一起正序输出显示,换行后再一起反序输出显示;就必需将这 100 个成果一个一个储存起来,显示完一次后,才能再显示一次;不储存起来,就无法再显示;问题:如何将这 100 个成果一个一个储存起来?基本方法:可以设立一个一个的变量,将这些成果按次序赋值给这些变量,就等于储存起来了;只要储存起来,就可以随便正序、反序输出显示了;量呢?问题: 要设立几个变量才够呢?100 个成果就需要100 个变量, 如何设立 100 个变简洁想到:用x1, x2, x3, , x1
2、00?但是如何对x1, x2, x3, , x100 输入、输出呢?输入 100 个变量,重复输入100 次,必需用循环!循环体如何写呢?是否可以写成:For i=1 To 100 xi=InputBox 请输入成果 X Next i 不行以!xi 只能代表一个变量,它不会随着 I 的变化,自动变成 x1, x2, x3, , x100,即 xi 不行能代表 100 个变量;即使输入 100 个成果,最终 xi 只留下一个;那么应当怎么办呢?能不能将 x 与 i 分别,而且实现 x 不动,但 i 的确会随着 For i 的变化而变化呢?可以!方法: VB 的分别方法是 x i 象 x i 这样
3、的变量称为“ 数组”(即一组数) ;当 i = 1 100 变化时, x i 也跟着一起变化为产生 100 个变量;于是,输入 100 个成果可以这样解决:For i=1 To 100 X i = InputBox 请输入成果 X Next i VB 中象 x i 这样的变量称为“ 数组”;x1、x2、x3、 、x100 ,前面学的 Integer、Long、Single、 Double、String、Date、Boolean 等都是 VB 的基 本数据类型,可以处理少量的单个数据,称为简洁变量;但无法处理大批量的数据;为了 处理大批量的数据,VB 供应了数组;1. 数组的作用 数组通常和循环
4、一起使用可以大大削减编程的复杂性,有些算法不用数组就无法实现;例 1:输入 10 名同学的成果,并将它们的成果打印到窗体上;Private Sub Form_click For i=1 To 10 X xi = InputBox 请输入成果Next i For i=1 To 10 print xi ; Next End Sub i 2. 数组的概念 数组是一批数据或控件的集合;数组:由肯定数目的同类元素按肯定次序排列而成的结构类型数据,是一组具有同一名 字、不同下标的下标变量;一般格式:sn其中: s 称为数组名, n 是下标一个数组可以含有如干个下标变量(或称数组元素)组中的位置;如 s3代
5、表 s 数组中的下标为 3 的元素;,下标用来指出某个数组元素在数例如,定义一个integer 型数组 a10,它包含 11 个同类型的变量:a0,a1, ,a10 Variant 型数组就可以存放不同类型的数据3.数组元素和数组的维数数组的成员称为数组元素,其名称与数组名相同,其下标表示该元素在数组中的位置;因此,数组元素也称下标变量;数组的维数表示数组元素需要几个下标才能正确表示其在数组中的位置,它代表数组的规律结构,最多 60 维;一维数组的规律结构是线性的,只用一个下标表示各个元素在数组中的位置例 a10:含 11 个元素的一维数组a0,a1,a2,a3,a4,a5,a6,a7,a8,
6、a9,a10 二维数组的规律结构是一个二维表,用两个下标表示各个元素在数组中的位置:第一个下标表示行,其次个下标表示列;例 b2,3:含三行四列共 12 个元素的二维数组b0,0 b0,1 b0,2 b0,3 b1,0 b1,1 b1,2 b1,3 b2,0 b2,1 b2,2 b2,3 4.数组的储备结构数组在内存中占用一片连续的储备单元;一维数组的储备结构与规律结构相同,即各个元素按下标次序依次存放;二维数组的储备结构是按行的次序储备各个元素;例如,数组 b2,3的储备形式为:b0,0 b0,1 b0,2 b0,3 b1,0 b1,1 b1,2 b1,3 b2,0 b2,1 b2,2 b2
7、,3 三维数组是由如干个二维数组组成的,其储备结构是按次序储备各个二维数组;例如,数组 c1,2,1的储备形式为:c0,0,0 c0,1,0 c0,2,0 c1,0,0 c1,1,0 c1,2,0 c0,0,1 c0,1,1 c0,2,1 c1,0, 1 c1,1,1 c1,2,1 说明:(1)数组是一些具有相同类型的数据的有序集合;所谓“ 有序” 是指数组中的每个元素依据肯定的次序排列在一起;如: x1、x2、x3、 、x100 就是数组 x 的 100 个元素,按1 100 的编号顺序排列;(2)同一数组中的每个元素有统一的名称(变量名);同一数组中的元素一般都是同一类型的数据;VB 答应
8、同一数组中的元素包含不同类型的数据;x,x 也叫如: x1、x2、x3、 、x100 都是 Single 型,它们统一的变量名是数组名;(3)数组用不同的序号来区分各个不同的元素;数组的序号称为“ 下标”;下标用 来指出某个元素在数组中的排列位置;如:x8 中的 8 就是下标,x8 代表数组 x 中的第 8 个元素;x8 不能写成 x8 或 x8 ;(4)下标的形式可以是常量、变量、运算式;如: x99 、yi 、Sum a+b;(5)数组可以拥有多个下标;具有一个下标的数组叫一维数组,具有两个下标的数组叫二维数组;如: x I 是一维数组, s x , y 是二维数组;(6)数组的操作一般与
9、循环同时使用;如上例;(7)数组必需先定义,后使用;如上例;一、引入要使用数组,应当先定义数组;定义数组的作用:通知运算机为数组留出所需的内存空间,预备存放数据;数组的定义方式; Dim :用在窗体模块或标准模块及过程中,定义窗体或标准模块级数组; ReDim :用来重新定义动态数组; Static :用来说明该数组为静态数组; GlobalPublic :用在全局模块中 标准模块 中,说明数组为全局的;在这里我们可以和前面第 4 章的变量的作用域进行比较学习;名称 作用域 声明位置 使用语句局部变量 过程 过程中 Dim 或 Static 模块变量 窗体模块或标准模块 模块的声明部分 Dim
10、 或 Pravite 全局变量 整个应用程序 标准模块的声明部分 Public 或 Global 二、新课这里先介绍最常用的 Dim 方法;有 2 种格式:1格式一一维数组 Dim 数组名 下标上界 As 类型 下标上界为常数、已有值的表达式或变量;下标下界为0;一维数组的大小为:下标上界+1;例: Dim mark99 As Integer 声明白一维定长整型数组 mark ,共有 100 个元素,下标范畴为 0 To 99 ;mark 数组的各元素是 mark0 ,mark1 , , mark99 ;marki 表示由下标 i 的值打算是哪一个元素; mark 数组内存安排如下:mark1
11、 mark2 marki mark99 mark100 每个数组元素有一个唯独的次序号,下标不能超出数组声明时的上、下界范畴,否就会产 生“ 索引超出了数组界限” 错误;数组元素的使用规章与同类型的简洁变量相同二维数组声明 Dim 数组名 下标 1,下标 2 As 类型 下标数打算了数组的维数,每一维的大小 =上界 +1 ;数组的大小为每一维大小的乘积;例 Dim x2,4 As Long 声明白一个长整型的二维数组 x;共占据 3 5 个长整型变量的空间例如:Dim Age20 As Integer 定义一维数组 Age ,最大下标 20 Dim Test2, 3 As Double 定义二
12、维数组 Test, 2 个下标最大分别为 2、3 留意:(1) 问题:数组定义后下标是从什么开头的?如Age20 的元素有几个:Age., Age., Age. ;问题:能不能使用元素Age-1 、Age21 . Test2, 3 的元素有几个?是哪几个?(2)定义数组时 As 后可以是任何的基本类型;(初值:数值 0;字符空串;布尔False )Dim Sum50 问题:能不能省略“As 类型” ;如:此时定义的数组Sum50 是什么类型?(3)演示程序Private Sub Form_click Dim s10 As Integer For i = 0 To 10 Si=2*i Print
13、 s; i ;= ; si Next i End Sub 问题:程序中的 Dim s10 ,它有哪几个元素?下标能否改成从 1 开头(以符合使用习惯)?要改怎么改?这个语句放在哪里?(用 Option base 语句设置,且只能显现在窗体层或模块层,不能显现在过程中,并且必需放在数组定义之前;)改成从 1 开头后 Dim s10 的元素有哪几个?仍有没有 s0 这个元素?不改行不行?比如 Dim s10 ,不改下标从 1 开头,仍旧从 0 开头,直接使用 s1 s10 ,会不会有问题?数组 S10 的下标能不能改成从 2 开头?用第一种定义格式不行,其次种定义格式可以:2格式二一维数组一个数组
14、如只有一个下标就能确定一个数组元素的数组中的位置,就称为一维数组;定义形式:Dim 数组名 下标下界 To 下标上界 As 类型名称如: Dim a1 to10 as integer Dim s2 To 10 下标从 2 开头到 10 Dim x-2 To 3 此时有哪几个元素?Dim P1990 To 2022 此时有哪几个元素?二维数组 由具有两个或多个下标变量所组成的数组称为二维或多维数组;定义形式:Dim 数组名 第一维下标下界 To 第一维下标上界,其次维下标下界 To 其次维下标界 As 类型名称如: Dim a1 to10 ,3 To 20 as String 其次种格式比较敏捷
15、;定义数组的争论:(1)定义数组 Dim x10 时,括号内一般是常数,能不能是变量?不行!即使变量是有数值的也不行;即: xn 、Suma To b 这样定义对不对?问题:数组定义后,使用时下标可否用变量?演示:上面的程序改为:n=10 sn As Integer Dim 运行后提示 sn “ 要求常数表达式”留意:数组定义后,程序后面可以使用,即使改为 s5+5 都可以,就是不能用变量;si=2*I ;争论:定义数组时Dim s10 非要用变量Dim sn 行不行?;可以!但 Dim 必需改成 ReDim (重定义)或将数组定义成“ 动态数组”演示:上面的程序改为:n=10 ReDim s
16、n As Integer 运行后是正常的;(2)Dim x10 后省略 As Integer ,但又要把号代替?类型符号应当放在 Dim x10 的什么位置?A Dim x10% B Dim x10% C Dim x%10 D Dim% x10 说明:x10 定义为整数,能不能用类型符格式中的数组名的命名与简洁变量名相同,可以是任意合法的变量名 类型名称可以是任何 定义类型;VB 所定义的合法类型,包括基本类型和用户自格式 中部分为可选部分,如省略,就下标下界默认为 面方式定义下标下界的默认值:Option Base n 0,或通过下其中: n 只能为 0 或 1;Option 只能显现在窗体
17、层或模块层,且该定 义必需在数组定义之前完成,如是多维数组就对每一维都有效;例如:Option Base 1 设置下标默认为1 15 Dim a5 as integer a 数组的各元素下标取值为:Dim x3,2 as single x 数组的第一维下标取值:13,其次维下标取值: 1 2 数组必需先定义后使用,未定义不能使用,下标为整型常量;当用 Dim 语句定义数组时,该语句把数组元素初始化为 0 或空字符串;同一过程中,数组名不能与其他数组名或变量名相同;数组声明中的下标不能是变量,只能是常量;确定数组的上下界值的函数:LBound 函数和 UBound 函数LBound 函数返回数组
18、某维的下界(最小下标);用法: LBound 数组名, 维值 UBound 函数返回数组某维的上界(最大下标);用法: UBound 数组名, 维值 (1)对于一维数组,在使用这两个函数时,可以省略维值;例如:Dim r10 As Integer Print LBoundr, Uboundr 运行的结果会输出 0 和 10 两个数(2)对于多维数组,在使用这两个函数时,要指定维值从而说明是要猎取哪一维的下界或上界;例如:Option Base 1 Dim a0 To 9,5 Private Sub Form_Click Print UBounda,2 打印其次维的上界,5 Print LBou
19、nda,1 打印第一维的下界,0 Print LBounda,2 打印其次维的下界,1 End Sub (3)也可以通过使用这两个函数获得数组某一维的大小;例如:Dim b9,1 To 5 10 5 m = UBoundb,1 Lboundb,1 + 1 获得第一维的大小:n = UBoundb,2 Lboundb,2 + 1 获得其次维的大小:s = m * n 运算数组的大小:50 例:随机产生20 个 10 100 之间的整数,求它们的积;Dim a1 to 20 as Integer sum=1 For i=1 to 20 ai=intRND*100-10+1+10 next i Fo
20、r i=1 to 20 sum=sum*ai next I print “ sum=” ;sumx10000 保一、引入如我们用 Dim x10000 定义数组以后, 即使程序不运行, 运算机也要为数组留 10000 个元素的内存空间;这会造成内存资源的极大铺张;争论 :能不能实现程序不运行,数组 内存空间?x10000 就不占用内存?程序运行时才为数组开创可以!但需把数组定义成“ 动态数组”!什么是“ 动态数组” ?一般数组又叫什么?这就是我们这一次所要学习的内容;二、新课1、静态数组与动态数组的区分 在 VB 中,依据数组元素的个数能否变化,数组分为静态数组和动态数组;静态数组:数组元素的
21、个数固定不变;动态数组:数组元素的个数在运行时可以转变;使用动态数组就可以在任何时候转变其大小,并且可以在不需要时清除动态数组所占 的储备空间;因此,使用动态数组更加敏捷、便利,并有助于高效治理内存;动态数组:程序在运行时才为它开创内存空间的数组就叫“ 动态数组”;静态数组:程序在编译时(未运行)就为它开创内存空间的数组就叫“ 静态数组”;前面 定义的都是“ 静态数组”;2、动态数组的定义( 1)静态数组:在声明时就确定其大小的数组;静态数组是用数值常量或符号常量作为 下标定维的;静态数组在运算机内存中运行:静态数组在编译阶段给数组安排内存空间,即静态数组没有运行时已有了相应的内存 区间,故在
22、定义静态数组时要求在编译阶段就知道该数组的元素个数;静态数组元素的值在定义该数组的运行后,该数组所拥有的内存空间不释放,变量 的值仍在内存中,再次运行时,将上次运行的结果作为该变量的初始值,只有当整个应用 程序退出后,所占内存才会被释放;静态数组定义方法:Global 语句定义;在全局模块中使用 在窗体或模块级用 Dim 定义;静态定义: 在过程中用 Static 语句定义;或用 Static 定义过程,而在过 程中使用 Dim 语句定义数组;例1 静态数组与非静态数组的对比b Static a4 As Integer 定义静态数组a Static start As Integer 定义静态变
23、量Dim b4 As Integer 定义非静态数组Dim i As Integer If start = 0 Then Print 静态数组: , , 非静态数组: End If For i = 0 To 4 ai = ai + i 赋值给静态数组a b bi = bi + i 赋值给非静态数组Next For i = 0 To 4 Print ai; Next Print , For i = 0 To 4 Print bi; Next Print start = 1 (2)动态数组 动态数组在定义时并不知道数组的大小,要在运行期确定,并依据需要在运行期可改 变数组的大小;动态数组的定义过程
24、:在窗体、标准模块和过程中用Dim 或 Public 声明一个没有下标的数组括号不能省略 ;如: dim a as integer 数组重定义;在过程中需要使用该数组前,用 Redim 语句定义数组的大小 数组元素个数 ,下标可为常量、变量或表达式,但变量或表达式此时必需有值;如: Redim a4 动态数组定义格式:Dim 数组名 As 类型名定义数组名Redim Preserve 变量名 下标 重定义数组大小在重定义时,按下标说明的上、下界重新安排内存储备单元;当重新定义动态数组时,数组的内容将被清除;如在 Redim 语句中使用了 Preserve 选项,就不清除数组中的内容,但使用“P
25、reserve ” 只能转变最终一维的大小,使用动态数组时应 留意 以下几点:前面几维的大小不能转变;使用动态数组可重新定义数组的大小和维数,但不能转变数组的类型:Dim a as integer Redim a4 此句有错误,试图转变数组的类型Redim a3,2 Redim a6 a1= “Visual Basic ”建立局部动态数组时,可省略Dim 语句,由 Redim 语句直接定义数组;使用 Dim 时,所定义数组的维数不超过8 维,直接使用Redim 定义数组,维数可达到60 维;在同一过程中,可多次使用 大小和维数;Redim 语句定义同一个数组,以转变数组的3、数组的清除和重定义
26、 要清除数组的内容或对数组重新定义,这可以用Erase ,留意,在 Erase 语句中, 只给出要刷新的数组名,Erase 语句来实现;其格式如下:不带括号和下标; 例如:Erase Test 几点说明:1 当把 Erase 语句用于静态数组时,就清空数组元素的值 2 当把 Erase 语句用于动态数组时,就删除数组 3 当把 Erase 语句用于变体数组时,就每个元素重置为空 4 Erase 释放动态数组所使用的内存;例 2:ReDim 语句应用示例Private Sub Form_Load Dim a As Integer 声明一个整型动态数组Show ReDim a800 用 ReDim
27、 语句重新定义k = 0 For x = 100 To 600 Step 7 If x Mod 8 = 0 Then k = k + 1 End If ak = x Next x Preserve 能保留数组中原有的数据ReDim Preserve ak For i = 1 To k Print ai Next i End Sub 例 3:请编程,输出杨辉三角形,其一般形式如下:1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 为了输出杨辉三角形,第一找到形成上述矩阵的规律:对角线和每行的第 1 列均为 1,其余各项是它的上一行中前一个元素和上一行的同一列
28、元素之和;从而可以得出形成矩阵数据的一般规律:ai,j=ai-1,j-1+ai-1,j;1. 控件及属性表 表 8-2 控件及属性表控件 名称 Name 属性文本框 Label1 Caption= ” 杨辉三角形 ”图片框 Picture1 按钮 Command1 Caption= ” 显示 ”2设计界面3代码 Option Base 1 Dim a% 显示按钮代码Private Sub Command1_Click Dim m% m = ValInputBox请输入要显示杨辉三角形的级数m 小于等于 14 的正整数 , 猎取显示级数 , 6 If m 14 Then MsgBox 请输入大于
29、等于 Exit Sub End If ReDim am, m Picture1.Cls For i = 1 To m ai, 1 = 1: ai, i = 1 Next i For i = 3 To m For j = 2 To i - 1 3 小于等于 14 的整数 ,64, ”杨辉三角形 ”ai, j = ai - 1, j - 1 + ai - 1, j Next j Next i Dim n%, k% n = 42 For i = 1 To m Picture1.Print Tabn; k = n For j = 1 To i Picture1.Print Tabk; Picture1
30、.Print ai, j; k = k + 6 Next j Picture1.Print n = n - 3 Next i End Sub 一、引入建立一个数组之后,可以对数组或数组元素进行操作;数组的基本操作包括输入、输出及 复制,这些操作都是对数组元素进行的;二、新课1. 数组的引用例如:数组的引用通常是指对数组元素的引用,其方法是, 在数组后面的括号中指定下标,x8 ,y2,3 ,z%3 要留意区分数组定义和数组元素!在引用数组时,应留意以下几点:(1)在引用数组元素时,数组名、类型和维数必需与定义数组时一样;(2)假如建立的是二维或多维数组,就在引用时必需给出两个或多个下标;(3)引
31、用数组元素时,其下标值应在建立数组时所指定的范畴内;2、数组元素的赋值 1 静态数组只能对数组元素逐一赋值,不能用数组名整体赋值Dim a4 As Integer For i = 0 To 4 ai=10 a 数组的每个元素值为10 Next I 是答应的;a=1,2,3,4,5 是不答应的;2 变体型动态数组可以用 Array 函数定界和整体赋值Dim a As Variant, b As variant, i% a=Array1,2,3,4,5 b=Array “ abc ” ,” derf ” ,67, True For i=Lbounda To Ubounda Picture1.Pri
32、nt ai Next i For i=Lboundb To Uboundb Picture1.Print bi Next I 其中, Lbound 和 Ubound 用来确定数组的下界和上界 3 动态数组也可以用同类型的静态数组整体赋值 Dim a4 As Integer, b As Integer a0=1:a1=3:a2=5:a3=-8:a4=7 b,b 为动态数组b=a 将数组 a 整体赋给数组其中,b=a 相当于For i=Lbounda To Ubounda bi=ai Next i 3. 数组元素的输入a 对于数组元素较少的数组,可通过单个赋值语句进行输入操作; b 对于数组元素较
33、多的数组,一般通过For 语句和 InputBox 函数输入;Option Base 1 默认下标下界为1 dim b2,3 as single for i=1 to 2 for i=1 to 3 bi,j=inputbox“ 输入 b”& i & “ ,”& j & ” 的值”next next c 对数组元素的的赋值和使用,可将数组看作简洁变量,任何简洁变量能使用和出 现的地方,数组元素均可显现;使用数组时要留意下标不能出界;使用多维数组时,下标之间用逗号隔开;Dim a10 as integer,b2,4 as long a16=100 错误,下标出界b1,4=a6*5 使用 b 数组的
34、一个元素 4、数组元素的输出 数组的输出同样是以数组元素为操作对象,可通过 Print 方法来实现;5 个元素与后 5 个 例 1:从键盘上输入 10 个整数,并放入一个一维数组中,然后将其前元素对换,即:第 1 个元素与第 10 个元素互换,第 2 个元素与第 9 个元素互换 第 5 个元素与第 6 个元素互换;分别输出数组原先各元素的值和对换后各元素的值;Option Base 1 Private Sub Form_Click arr = Array1, 2, 3, 4, 5, 6, 7, 8, 9, 10 Print 原先数组: For i = 1 To 10 Print arri; N
35、ext i Print For i = 1 To 5 For j = 6 To 10 t = arri : arri = arrj : arrj = t Next j Next i Print 对换后数组: For i = 1 To 10 Print arri; Next i End Sub 5、数组元素的复制 单个数组可以像简洁变量一样,从一个数组复制到另一个数组;Dim b4,8,a6,5 数组定义也可以复制给一个一维数b2,3=a3,2 数组复制二维数组中的元素也可以复制给另一个二维数组中的某个元素,组中的某个元素,并且反之亦然;Dim a8,b3,2 a3=b1,2: b3,2=a7
36、为了复制整个数组,仍要使用 For 循环语句;option base 1 name1 ,name2 dim redim name110,name210 for i=1 to10 name1i=inputbox给 name1 的 10 个元素赋值“ 请输入姓名: ” next 利用 For 循环将 name1 的数据复制给name2 for i=1 to 10 name2i=name1i next 例 2: 设有如下两组数据;(1) 2,8,7,6,4,28 ,70,25 (2) 79,27 ,32 ,41,57 ,66 ,78, 80 编写一个程序,把上面两组数据分别读入两个数组中,然后把两个
37、数组中对应下标的元素 相加,即 2+79 ,8+27 , , 25 80 ,并把相应的结果放入第三个数组中,最终输出第三个数组的值;程序如下:Option Base 1 Private Sub Form_Click Dim A, B, C8 As Integer A = Array2, 8, 7, 6, 4, 28, 70, 25 B = Array79, 27, 32, 41, 57, 66, 78, 80 For i = 1 To 8 Ci = Ai + Bi Next i Print 第一个数组为:For i = 1 To 8 ; Print Ai; Next i Print Print
38、 其次个数组为:; For i = 1 To 8 Print Bi; Next i Print Print 第三个数组为:For i = 1 To 8 ; Print Ci; Next i Print End Sub 例 3:随机产生 10 个 70-99 之间的整数,输出其中的最大数和最小数;提示: 1、先定义一个有 10 数组元素的整型数组;2、运用 for 循环给每一个数组元素赋上 程序代码:Dim max%,min% Max=a1 Min=a1 For i=2 to 10 If maxai then Min=aI End if Next I Print “ 最大数”;max ,” 最小
39、数”;min 70-99 之间的随机数;例 4:用随机函数产生100 个0,99范畴内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7, 8,9,0 的数的个数并打印出来;提示:用数组 a1 to 100 存放产生的确 100 个随机整数,数组 x1 to 10 来存放个位上的数字分别为 1,2,3,4,5,6,7,8,9,0 的数的个数;即个位是 1 的个数存放在 x1中,个位是 2 的个数存放在 x2 中, 个位是 0 的个数存放在 x10 ;将程序代码如下:Public Sub Form_Click Dim a1 To 100 As Integer Dim x1 To 10
40、As Integer Dim i As Integer, p As Integer 产生 100 个0,99 范畴内的随机整数,每行 10 个打印出来For i = 1 To 100 ai = IntRnd * 100 If ai aj Then imin = j Next j temp = ai ai = aimin aimin = temp Next I 例 1:随机产生十个10100 的整数,用“ 挑选排序法” 按值从小到大次序排序,最终输出结果;解题方法:1利用 Int91*Rnd+10产生值为 10 到 100 的随机整数即 10 个使用 Randomize得到不同的随机数序列2按值
41、从小到大进行排序;排序方法:将 10 个数放入数组a 中,对以下下标变量进行排序处理:a1, a2, a3, , a8 , a9 , a10 从这 10 个下标变量中,选出最小值,通过交换把该值存入a1 中 除 a1 之外 a1 已存放最小值 ,从其余 9 个下标变量中选出最小值数中的次小值 ,通过交换把该值存入a2 中 选出 a3 a10 中的最小值,通过交换,把该值存入a3 中 重复上述处理,至a8 ,可使 a1 a8 按小到大排列 第 9 次处理,选出a9 及 a10 中的最小值,通过交换把该值存入a9 中,此时 a10 存放的就是最大值程序代码如下:Private Sub Form_c
42、lick Randomize Dim a1 To 10 As Integer Print 原始数据: For i = 1 To 10 产生 10 个随机数ai = Int91 * Rnd + 10 Print ai; Next i Print: Print For i = 1 To 9 For j = i + 1 To 10 Next j If ai aj Then 交换位置t = ai: ai = aj: aj = t End If Next i Print 排序结果: For i = 1 To 10 Print ai; Next i End Sub For i=1 To 9 ” “Next
43、 i ” 共 7 个程序行 改写中间程序段“For i = 1 To 9 k = i k 用来记录每次挑选的最小值的下标For j = i + 1 To 10 If ak aj Then k = j End If Next j t = ak: ak = ai: ai = t 交换位置Next i 变量 k 记录每一次选出的最小值的下标,在本次比较终止后,使 ai 与 ak 一次换位即可2、冒泡法排序基本思想: 将相邻两个数比较,小的调到前头 1)有 n 个数(存放在数组 an 中),第一趟将每相邻两个数比较,小的调到前头,经 n-1次两两相邻比较后,最大的数已“ 沉底”,放在最终一个位置,小数
44、上升“ 浮起”;2)其次趟对余下的 n-1 个数(最大的数已“ 沉底”)按上法比较,经 n-2 次两两相邻比较后得次大的数;3)依次类推, n 个数共进行 n-1 趟比较,在第 j 趟中要进行 n-j 次两两比较;程序段如下For i = 1 To n - 1 For j = 1 To n-i If aj aj+1 Then temp=aj : aj=aj+1 : aj+1=temp End if Next j Next i 其次种方法:For i = n To 2 step -1 For j = 1 To i -1 If aj aj+1 Then temp=aj : aj=aj+1 : aj
45、+1=temp End if Next j Next i 例 2:随机产生十个10100 的整数,用“ 冒泡排序法” 按值从小到大次序排序,最终输出结果;请同学们试着写一写二、数组中元素的插入和删除操作数组元素的插入、删除操作一般是在已排序好的数组中插入或删除一个元素,使得插入或删除以后的数组仍是有序的;这涉及到查找问题,在数组中先找到插入的位置或删除的元素,然后进行相应的操作;1、插入例 3:设有一按升序排列的有n 个元素的数组a(数组元素为整型) ,现将一个数 (如:“ 11” )插入后,仍保持其有序;解题思路:查找插入位置 k1k n-1 ;从 n 1 到 k 逐一往后移动一个位置,将第
46、 将数据插入;程序代码如下:k 个元素的位置腾出;Private Sub Form_click Dim a n = ValInputBox请输入一个整数 ReDim an For i = 0 To n ai = i * 3 + 1 Print ai; Next i Print :b = ValInputBox请输入要插入的一个数:Print 插入 ; b; 后 For k = 0 To n If b Max Then Max = ai iMax = i End If Next i Print 数组中的最大数为:End Sub 例 3:交换数组中各元素A & iMax & =; aiMax 将数
47、组的第一个元素与最终一个元素交换,其次个元素与倒数其次个元素交换,依次类推;Option Base 1 Dim a As Integer, t As String Dim i a = Arraya, b, c, d, e, f, g, h, i, j Print 交换前: ; For i = 1 To 10 Print ai; ; Next For i = 1 To 10 2 t = ai ai = a10 - i + 1 a10 - i + 1 = t Next Print: Print Print 交换后: ; For i = 1 To 10 Print ai; ; Next 1、控件数组
48、的概念 控件数组:是由一组相同类型的控件组成,这些控件据有一个相同的名称,相同的属性名;特点:(1)这些控件由控件数组的下标来区分,而下标由每个控件的唯独标识索引号 Index 来标识,通过Index 属性即可区分控件数组元素,Index 从 0 开头取值,如:控件数组Text12 表示控件数组Text1 的第 3 个元素;(2)同一个控件数组的全部元素,具有相同的 属性就没有规定必需完全相同;Name 属性值,但对于其他(3)控件数组的全部元素,共享同样的大事过程,故控件数组适用于如 干个控件执行的操作相像的场合;为区分触发某个大事是由哪个控件触发的,VB 会把该控件的下标索引 值Index
49、 值传递给过程;如:设命令按钮控件数组名为 Command ,其单击大事过程为:Sub Command_ClickIndex as Integer End Sub 经过参数传递判定 Index 的值,便知道用户按下哪一个按钮,也就知道可以对该按钮 进行相应编程;Sub Command_ClickIndex as Integer if index=4 then label1.caption=“ 第五个按钮被点击”end if End Sub 2、控件数组的建立 建立控件数组有三种方法:1给控件起相同的名称 2将现有的控件复制并粘贴到窗体等上面 3将控件的 Index 属性设置为非 Null 数值
50、 第一种方法步骤如下:在窗体上画出作为数组元素的各个控件;单击要包含到数组的某个控件,将其激活;在属性窗口中通过名称属性键入控件名称;对每个要加到数组中的控件重复、步;键入相同的名称;其次种方法步骤如下:在窗体上画出一个控件;将其激活;执行“ 编辑” 菜单中的“ 复制” 命令,将该控件放入剪贴板;执行“ 编辑” 菜单中的“ 粘贴” 命令,将显示一个对话框,询问是否建立控件数组;单击对话框中的“ 是” 按钮,窗体左上角将显现一个控件,它是控件数组的其次个;执行“ 编辑” 菜单中的“ 粘贴” 命令,建立控件数组的其他元素;3、控件数组的使用例 1: 建立一个文本框控件数组Text1 和一个文本框T
51、ext2 ,在控件数组Text1 中输入一组数后,把累加值存放在Text2 ;Text2 Text10 Text11 文本框Text12 Text1 ;第一次Command1 或按 Ctrl+V ,控件数组Text13单击工具栏上的“ 粘贴” 按钮通过“ 复制” 方法控件数组此时系统弹出一个如下的对话框控件数组 Text1 的 4 个元素为: Text10 Text13 Private Sub Command1_Click s = 0 For i = 0 To 3 s = s + ValText1i.Text Next i Text2.Text = s End Sub 留意:控件数组元素的表示方法与列表框表项有所不同 列表框 List1 的表项内容为: List1.List0 、 List1.List1 、 ;下标规定为次序号0,1,2, ;一个列表框控件,其 List 属性是一个数组;控件数组 Text1 的元素内容为:指定,不肯定为次序号;Text10.Text 、Text11.Text 、 ;下标可由用户多个控件组成一个数组,相同名称;使用这些控件的 Text 属性;例 2:按下图设计一个窗体,其中一组 共 3 个单项按钮构成控件数组,要求当单击某个单项按钮时,能够转变文本框中文字的大小控件数组设计步骤:1设计控件数组 Option1 ,其中包含 3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度公益岗位用工合作协议3篇
- 2025年度电商平台会员消费返利协议3篇
- 2025年度废塑料瓶回收与环保瓶盖生产合同样板3篇
- 二零二五年度农机智能化作业合同书3篇
- 二零二五年度电子信息产品开发合作协议书2篇
- 二零二五年度消防安全风险评估与整改方案协议3篇
- 农村土地经营权抵押贷款担保合同
- 2025年度医药研发人员竞业禁止劳动合同书3篇
- 2025年度餐饮业食品安全责任书3篇
- 二零二五年度历史文化名城拆迁房产分割与文物保护合同3篇
- 2023年河北中烟工业有限责任公司笔试试题及答案
- 物质与意识的辩证关系
- 小学英语考试教师总结反思8篇
- SJ-T 11798-2022 锂离子电池和电池组生产安全要求
- 多智能体仿真支撑技术、组织与AI算法研究
- 安全管理中人因素
- 铜矿的选矿工艺与设备选择
- 餐厅年度总结计划
- 83广东省深圳市宝安区2023-2024学年六年级上学期期末数学试卷
- 陕西省渭南市2023-2024学年高一上学期1月期末数学试题
- 2024届新疆维吾尔自治区乌鲁木齐市高三上学期第一次质量监测生物试题【含答案解析】
评论
0/150
提交评论