版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第八章数组数组概述动态数组及声明控件数组程序示例20148.1
数组概述问题1:利用VB程序设计语言对一个班同学的VB学习成绩进行处理(例如:求平均成绩、找出最高成绩等)问题2:按照南农大新生的入学成绩选择强化班的同学,选择条件为:总分大于***且数学和英语的成绩不得小于**这些数据的特点是:具有相同的数据类型使用过程中需要保留原始数据数组定义:是相同类型数据的一个有序集合。举例:如:Dim
score
(1
to
50)
As
Single;维界定义数组名称数据类型[下界
To
]上界98.5901008878.5……93scoreScore(1)Score(2)
Score(3)Score(50)1.一维数组的定义下标必须为常数,不可以为表达式或变量;★Dim
A(0
To
M)
As
Integer(错误)下标下界缺省时默认值为0,若希望下标从1开始,可在模块的通用部分使用Option
Base语句将设为1。★Option
Base1
‘参数取0
或1一维数组的大小:上界-下界+1。(4)如果数据类型省略,则为变体型98.5901008878.5……93scoreScore(2)Score(3)Score(50)Score(1)数组元素说明:下标:顺序号多维数组的定义如:Dim
score
(1
to
1000,1
to3)
As
Single;维界定义1,维界定义2数组名称数据类型说明:维界定义的个数决定数组的维数,最多60维。 每一维的大小=上界-下界+1;
(3)可以将二维数组的定义方法推广至多维数组的定义★
Dim page(1to
3,1
To
2,1
To
2)2.
数组的结构一维数组S(0)S(1)S(2)二维数组T(1,1)T(2,1)T(3,1)T(1,2)T(2,2)T(3,2)T(1,3)T(2,3)T(3,3)第一列第二列第三列三维数组Page(1,1,1)Page(2,1,1)Page(3,1,1)Page(1,2,1)Page(2,2,1)Page(3,2,1)Page(1,1,2)Page(2,1,2)Page(3,1,2)Page(1,2,2)Page(2,2,2)Page(3,2,2)第1页第1列第1页第2列第2页第1列第2页第2列说明:(1)数组的大小=第1维大小×第2维大小×…第n维的大小(2)获取上下界的函数下界=LBound(数组名[,维]上界UBound(数组名[,维])★
dim
L
as
IntegerL=Lbound(Page,1)Lbound和Ubound举例Dim
A(5)
As
Integer,
B(3
to
8,200
to
208)Print
LBound(A),
LBound(B,1),LBound(B,2)printPrint
UBound(A),UBound(B,1),UBound(B,2)3数组基本操作给数组元素赋值(1)利用循环结构Dim A(1
To
10)
As
IntegerFor
i=1
To
10A(i)=0Next
i(2)利用Array函数使用Array函数可将一个变体形变Dim
a
As
Variant,
b
As
Variant,
i%
量“升级”为数组。a
=
Array(1,
2,
3,
4,
5)b
=
Array("abc",
"def",
"67")For
i
=
0
To
UBound(a)Picture1.Print
a(i);
"";Next
iFor
i
=
0
To
UBound(b)Picture1.Print
b(i);
"";Next
i(3)利用Inputbox函数可供用户输入数组元素的值,适合输入少量数据。Dim
SB(2,
3)
As
SingleFor
i
=
0
To
2For
j
=
0
To
3SB(i,
j)=InputBox("输入SB("&
i
&","&
j
&")的值")Next
jNext
i(4)数组间直接赋值Dim
a(3)
as
integer,
b()
as
integerA(0)=2:
A(1)=5:
A(2)=-2:
A(3)=2b=a注意:赋值号两边的数据类型必须一致;如果赋值号左边的是一个动态数组,赋值时系统自动将动态数组ReDim成右边相同大小的数组;如果赋值号左边的是一个大小固定的数组,则数组赋值出错。数组一旦定义之后,即刻分配存储并初始化,这与定义变量相同,数值型数组的各元素都初始化为0,字符型数组的各元素都初始化为空。【例8-1】随机产生10个各不相同的两位整数,存入数组。并找出其最大的值并输出。例题问题分析:(1)如何随机产生两位整数。(2)如何确保互不相同。(3)如何查找数组中的最大元素。使用Rnd函数。每生成一个新元素都
要和所有老元素比较。设置变量max,依次和所有数组元素比较。有元素大于max,则取代Max。aa(1)a(2)a(3)a(10)98.5901008878.5……9398.52221152732……38a22max0k274325找最大元素的算法a(1)a(2)a(3)a(10)3810Private
SubForm_Click()Dima(9),
max,i
AsIntegerRandomize
TimeFor
i
=
0
To
9Dox=Int(Rnd
*90)
+10yes
=
0For
j
=
0
To
i
-
1If
x
=
a(j)
Then
yes
=
1:
Exit
ForNext
jLoop
While
yes
=1a(i)
=
xNext
imax
=
a(0)For
i
=
1
To
9If
a(i)
>
max
Then
max
=
a(i)Next
iPrint
maxEndSub共十个元素,循环界限0~9。生成一个符合要求的元素。和已生成元素进行比较。找出最大元素。【例8-2】对已知存放在数组Sort中的n个数,用选择法按递增顺序排序。选择法排序:
每一轮比较是拿固定位置的数组元素和其后的若干数组元素依次比较.例题20
17
56
19
12
92
41
15
10
78待排序的数据序列算法思想:设数组Sort中存放了n个无序数,要将这n个数按升序重新排序。第一轮比较:用Sort(1)与Sort(2)进行比较,若
Sort(1)>Sort(2),则交换这两个元素中的值,然后继续用Sort(1)与Sort(3)比较,若Sort(1)>Sort(3),则交换这两个元素的值;以此类推,直到Sort(1)与
Sort(n)进行比较处理后,Sort(1)中存放了n个数中最小的数除第一个数Sort(1)外,其余n-1个数
Sort(2),Sort(3)…Sort(n)按第一轮的方法选出重复这个过程n-1遍,最后构成递增序列。1234567891020175619292411578<11769 17>117117<92
2102
2012<412<15交2换107>交1换212>10交换10121
10<78第一轮比较完成!传统的选择法排序Option
Base
1Private
Sub
Command1_Click()Dim
sort
As
Variantsort
=
Array(20,
17,
56,
19,
12,
92,
41,
15,
10,
78)Print"排序前:"For
i=1
To
10Print
sort(i);
NextiPrintPrint"排序后:"For
i=1
To
9For
j
=
i
+
1
To
10If
sort(i)
>
sort(j)
Thent
=
sort(i):
sort(i)
=
sort(j):
sort(j)
=
tEnd
IfNext
jPrint
sort(i);Next
iPrint
sort(i);End
Sub排序并输出输出原始数据8.2
动态数组1.
动态数组定义动态数组:在说明数组时,不指明数组的维数和下标范围,仅用一对圆括号表示,在运行时才确定大小、给其分配存储空间的数组称为动态数组Public
|Private
|Static
|
Dim
数组名( )[
As <数据类型>]如:Dim
a()as
Integer以后在使用数组前,需要利用ReDim语句对数组的维数和下标范围重新定义2.
动态数组使用ReDim
x(5)...ReDim
x(3,2)用ReDim
语句来动态地定义数组的大小、分配存储空间。ReDim
[Preserve]
数组名(维界定义)[As
<数据类型>]如:Dim
x()
As
Integer,ReDim
x(3,4)End
Sub★ReDim语句是一个可执行语句,只能出现在过程中。★ReDim语句中的下标可以是常量,也可以是有了确定值的变量;★在过程中可以多次使用ReDim来改变数组的大小,也可改变数组的维数。★使用Preserve参数可保留数组中的数据,但使用Preserve只能改变最后一维的上界。PrivateSub
Command1_如Cl果ick使()用Preserve,则在对数组重新说明时,将会保留原数组中的元素的内容。【例8-3】动态数组例。例题Dim
a()
As
Integer
'定义动态数组Private
Sub
Picture1_Click()Dim
i
As
Integer,
j
As
IntegerReDim
a(3,
2)For
i
=
0
To
3'为动态数组指定义维数及大小
'为各元素赋值并显示For
j
=
0
To
2a(i,
j)
=
i
*
2
+
jPicture1.Print
"a(";
i;
",";
j;
")=";
a(i,
j);
"
";Next
jPicture1.PrintNext
iReDim
Preserve
a(3,4) '改变最后一维的大小
Picture1.Print""For
i=0
To
3
'为新增加的元素赋值
For
j=3
To
4a(i,
j)
=
a(i,
j
-
1)
+
20Next
jNext
iFor
i=0
To
3
'重新显示各元素
For
j=0
To
4Picture1.Print
"a(";
i;
",";
j;
")=";
a(i,
j);
"
";Next
jPicture1.PrintNext
iEnd
Sub8.3
控件数组控件数组:由一组相同类型的控件组成,它们共用一个控件名。控件数组通过索引号(属性中的Index)来标识各控件,第1个下标是0,第二个下标为1……
。举例:有五个文本框构成一个控件数组,控件数组名为Text,则每个控件的名字为:Text(0)、Text(1)、Text(2)、Text(3)……1.控件数组的意义★节约系统资源。★共享代码。2.控件数组的建立 在设计时建立——
复制、粘贴法。在窗体上画出某控件选中该空间进行复制粘贴操作进行事件过程的编程运行时添加在窗体上画出某控件,设置该控件的Index值为0,表示该控件为数组。在编程时通过Load方法添加其余若干个控件元素,通过
Unload删除某个添加的控件元素。添加的控件通过Left
和Top属性,确定其在窗体上的位置。Private
Sub
Command1_Click()If
TextNum
<
3
ThenTextNum
=
TextNum
+
1Load
Text1(TextNum)Text1(TextNum).Visible
=
TrueText1(TextNum).Top
=
Text1(TextNum
-
1).Top+Text1(TextNum-1).Height+100Text1(TextNum).Text="文本框"&
Str(TextNum)End
IfEnd
Sub【例8-4】控件数组——运行时添加文本框控件数组option
ExplicitDim
TextNum
Load
object(index):向控件数组添加控件Unload
object(index):删除用load
语句产生的对象数组元素运行前 运行后控件数组的index
属性设置【例8-5】建立含有四个命令按钮的控件数组,当单击某个命令按钮,分别显示不同的图形或结束操作。控件名IndexCaptioncmdshape0直线cmdshape1矩形cmdshape2圆cmdshape3结束Picture1空白——Private
Sub
cmdshape_Click(Index
As
Integer)Picture1.ClsPicture1.FillStyle
=5Select
Case
IndexCase0Picture1.Print
“画直线”Picture1.Line
(100,
100)-(200,200)Case
1Picture1.Print
“画矩形”Picture1.Line
(100,
100)-(200,
200),
,
BFCase
2Picture1.Print
“画圆”Picture1.Circle
(100,
100),
200Case
ElseEndEndSelectEndSub______程序运行后,单击命令按钮,文本框中显示的值是_A
12 B
13 C
14
D158.4
程序示例
【例8-6】在窗体中设计一个名称为Text1的文本框和一个名称为command1的命令按钮,然后编写如下事件过程:
Private
Sub
Command1_Click()Dim
array1(10,
10)
As
IntegerDim
i,
j
As
IntegerFor
i
=
1
To
3For
j
=
2
To
4array1(i,
j)
=
i
+
jNext
jNext
iText1.Text
=
array1(2,
3)
+
array1(3,
4)End
SubA【例8-7】编写程序输出杨辉三角.杨辉三角的特点:第一列元素为1第二行元素为1对角线的元素都为1其他元素:a(i,j)=a(i-1,j-1)+a(i-1,j)Private
Sub
Form_Load()Frame1.Caption="请输入一个整数:"Label1.Caption="输入一个整数n,并按回车键,即可求得杨辉三角形的前n项"Text1.Text
=
""End
SubPrivate
Sub
Text1_KeyPress(KeyAscii
As
Integer)Dim
n
As
Integer,
a()
As
IntegerIf
KeyAscii
=
13
Thenn
=
Val(Text1.Text)If
n
>
16
ThenMsgBox"输入的数不能超过16"Exit
SubEnd
IfReDim
a(n,
n)For
i
=
1
To
na(i,
1)
=
1:
a(i,
i)
=
1Nextp=Format(1,"!@@@@")&
Chr(13) '第一行p=p
&
Format(1,"!@@@@")&
Format(1,"!@@@@")&
Chr(13)'连上第二行For
i
=
3
To
n'连上第一列p
=
p
&
Format(1,
"!@@@@")For
j
=
2
To
i
-
1a(i,
j)
=
a(i
-
1,
j
-
1)
+
a(i
-
1,j)p
=
p
&
Format(a(i,
j),
"!@@@@")Nextp
=
p
&
Format(a(i,
i),
"!@@@@")
&
Chr(13)NextMsgBox
p,
0,"杨辉三角形"End
IfEnd
Sub•【例8-8】用“筛法”找到1-100之间的全部素数程序设计思路:在文本框中输出1-n的全部整数先将1挖
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 南平市建瓯市2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 莆田市城厢区2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 驻马店地区西平县2025-2026学年第二学期四年级语文第六单元测试卷(部编版含答案)
- 广元市旺苍县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 乐山市沙湾区2025-2026学年第二学期五年级语文第六单元测试卷(部编版含答案)
- 黔东南苗族侗族自治州三穗县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 莆田市秀屿区2025-2026学年第二学期四年级语文第六单元测试卷(部编版含答案)
- 红十字服务站工作制度
- 纪念馆志愿者工作制度
- 经济责任审计工作制度
- 小学语文命题能力培训
- 药物安全性监测-洞察分析
- 外墙保温板(匀质板)施工方案
- 茶馆与棋牌室消防安全审核与应急预案
- 前列腺癌治疗现状
- 24年10月自考13003数据结构与算法试题及答案
- 班组长晋升述职报告
- 3.1细胞膜的结构和功能+课件高一上学期生物人教版必修1
- 《人工智能技术基础》课件 第5章 注意力机制
- 保安公司组织架构岗位制度及保安管理制度
- YDT 5206-2023宽带光纤接入工程技术规范
评论
0/150
提交评论