版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章数组5.1概述
数组的概念:数组并不是一种数据类型,而是一组相同类型数据的集合。用一个统一的名字(数组名)代表逻辑上相关的一批数据,每个元素用下标变量来区分;下标变量代表元素在数组中的位置。其表示形式:
A(1),A(10)X(1,1),X1(1,10),X(2,10)Y(0,0,0),Y(1,2,5)VisualBasic中的数组,按不同的方式可分为以下几类:按数组的大小(元素个数)是否可以改变来分为:定长数组、动态(可变长)数组。按元素的数据类型可分为:数值型数组、字符串数组、日期型数组、变体数组等。按数组的维数可分为:一维数组、二维数组、多维数组。对象数组:菜单对象数组、控件数组。5.2一维数组5.2.1一维数组的声明
形式:
Dim数组名([<下界>to]<上界>)[As<数据类型>]或:
Dim数组名[<数据类型符>]([<下界>to]<上界>)例:Dima(1to10)AsInteger‘声明了a数组有10个元素与上面声明等价形式:
Dima%(1to10)1是下标的下界10是下标的上界数组元数的数据类型说明:1.数组名的命名规则与变量的命名相同。2.数组的元素个数:上界-下界+1。3.缺省<下界>为0,若希望下标从1开始,可在模块的通用部分使用OptionBase语句将设为1。其使用格式是:
OptionBase0|1'后面的参数只能取0或1例如:
OptionBase1'将数组声明中缺省<下界>下标设为14.<下界>和<上界>不能使用变量,必须是常量,常量可以是直接常量、符号常量,一般是整型常量。5.如果省略As子句,则数组的类型为变体类型。6.数组中各元素在内存占一片连续的存储空间,一维数组在内存中存放的顺序是下标大小的顺序,如图5-1所示:5.2.2一维数组元素的引用使用形式:
数组名(下标)
其中:下标可以是整型变量、常量或表达式。例如:设有下面的数组B(10)AsInteger
则下面的语句都是正确的。
A(1)=A(2)+B(1)+5'取数组元素运算
A(i)=B(i)
'下标使用变量
B(i+1)=A(i+2)
'下标使用表达式5.2.3一维数组的基本操作
1.可通过循环给数组元素的初值
Fori=1To10 'A数组的每个元素值为1
A(i)=1Nexti
2.数组的输入Fori=1To4Forj=1To5sc(i,j)=InputBox("输入sc("&i&","&j&")的值")
NextjNextI3.数组的输出输出如下图所示的下三角数据Dimsc(5,5)AsInteger,i%,j%Fori=1To5Forj=1Toisc(i,j)=i*5+jPrintsc(i,j);"";Nextj
Print'换行
NextI4.求数组中最大元素及所在下标
DimMaxAsInteger,iMaxAsInteger Max=A(1):iMax=1Fori=2To10IfA(i)>MaxThen Max=A(i) iMax=iEndIfNextI5.将数组元素倒置Fori=1To10\2t=A(i)
A(i)=A(10-i+1)
A(10-i+1)=tNextI例5.15.2.4一维数组的应用一、分类统计
例5.2
在例5.1中如果还要统计0~9,10~19,20~20,….80~89,90~99分数段及100分的学生人。则可另用数组bn来存各分数段的人数,并用bn(0)存0~9分的人数,bn(1)存10~19分的人数,…bn(9)存90~99分的人数,bn(10)存100分的人数。二、排序问题1.选择法排序算法思想:1)对有n个数的序列(存放在数组a(n)中),从中选出最小(升序)或最大(降序)的数,与第1个数交换位置;2)除第1个数外,其余n-1个数中选最小或最大的数,与第2个数交换位置;3)依次类推,选择了n-1次后,这个数列已按升序排列。1.选择法排序算法思想:1)对有n个数的序列(存放在数组a(n)中),从中选出最小(升序)或最大(降序)的数,与第1个数交换位置;2)除第1个数外,其余n-1个数中选最小或最大的数,与第2个数交换位置;3)依次类推,选择了n-1次后,这个数列已按升序排列。Fori=1Ton-1
p=iForj=i+1TonIfa(p)>a(j)Thenp=jNextjtemp=a(i)a(i)=a(p)a(p)=tempNexti选择法排序(升序)的VB程序:2.冒泡法排序(递增)
算法思想:(将相邻两个数比较,小的调到前头)1)有n个数(存放在数组a(n)中),第一趟将每相邻两个数比较,小的调到前头,经n-1次两两相邻比较后,最大的数已“沉底”,放在最后一个位置,小数上升“浮起”;2)第二趟对余下的n-1个数(最大的数已“沉底”)按上法比较,经n-2次两两相邻比较后得次大的数;3)依次类推,n个数共进行n-1趟比较,在第j趟中要进行n-j次两两比较。Fori=1Ton-1Forj=1Ton-iIfa(j)>a(j+1)Thentemp=a(j)a(j)=a(j+1)a(j+1)=tempEndifNextjNexti冒泡法排序(升序)的VB程序:例5.3
用随机函数产生50个[10,100)的随机整数,并按照由小到大的顺序打印出来。程序界面如下:5.3二维数组及多维数组5.3.1二维数组的声明声明格式如下:Dim数组名([<下界>]to<上界>,[<下界>to]<上界>)[As<数据类型>]其中的参数与一维数组完全相同。例如:Dima(2,3)AsSingle
二维数组在内存的存放顺序是“先行后列”。例如数组a的各元素在内存中的存放顺序是:a(0,0)→a(0,1)→a(0,2)→a(0,3)→a(1,0)→a(1,1)→a(1,2)→a(1,3)→a(2,0)→(2,1)→a(2,2)→a(2,3)5.3.2二维数组的引用引用形式:
数组名(下标1,下标2)例如:
a(1,2)=10a(i+2,j)=a(2,3)*2在程序中常常通过二重循环来操作使用二维数组元素。
5.3.3二维数组的基本操作二维数组数据的输入2.求最大元素及其所在的行和列3.计算两矩阵相乘4.矩阵的转置例5.4设某一个班共有60个学生,期末考试5门课程,请编一程序评定学生的奖学金,要求打印输出一、二等奖学金学生的学号和各门课成绩。(奖学金评定标准是:总成绩超过全班总平成绩20%发给一个奖学金,超过全班总平成绩10%发给二个奖学金。)
5.3.5多维数组的声明和引用定义多维数组的格式如下:Dim数组名([<下界>]to<上界>,[<下界>to]<上界>,……)[As<数据类型>]例如:
Dima(5,5,5)AsInteger声明a是三维数组
Dimb(2,6,10,5)AsInteger
'声明b是四维数组5.4动态数组动态数组:在声明时未给出数组的大小。定长数组是在程序编译时分配存储空间,而动态数组是在程序执行时分配存储空间。5.4.1动态数组的建立及使用
建立动态数组包括声明和大小说明两步:1.在使用Dim、Private或Public语句声明括号内为空的数组。格式:Dim|Private|Public数组名()As数据类型例:Dima()AsInteger2.在过程中用ReDim语句指明该数组的大小。格式:ReDim[Preserve]数组名(下标1[,下标2…])
Preserve参数:保留数组中原来的数据例:RedimA(10)
RedimPreserve
A(20)说明:(1)ReDim语句是一个可执行语句,只能出现在过程中,并且可以多次使用,改变数组的维数和大小。
(2)定长数组声时中的下标只能是常量,而动态数组ReDim语句中的下标是常量,也可以是有了确定值的变量。例:
PrivateSubForm_Click()DimNAsIntegerN=Val(InputBox(“输入N=?”))Dima(N)AsInteger…….Endsub×(3)在过程中可以多次使用ReDim来改变数组的大小,也可改变数组的维数。例:ReDimx(10)
ReDimx(20)x(20)=30Printx(20)
ReDimx(20,5)x(20,5)=10Printx(20,5)(4)每次使用ReDim语句都会使原来数组中值丢失,可以在ReDim后加Preserve参数来保留数组中的数据。但此时只能改变最后一维的大小。例5.5
5.4.2与数组操作有关的几个函数Aarry函数Aarry函数可方便地对数组整体赋值,但它只能给声明Variant的变量或仅由括号括起的动态数组赋值。赋值后的数组大小由赋值的个数决定。例如,要将1,2,3,4,5,6,7这些值赋值给数组a,可使用下面的方法赋值。Dima()A=array(1,2,3,4,5,6,7)DimaA=array(1,2,3,4,5,6,7)2求数组的上界Ubound()函数、下界Lbound()函数
Ubound()函数和Lbound()函数分别用来确定数组某一维的上界和下界值。使用形式如下:
UBound(<数组名>[,<N>])LBound(<数组名>[,<N>])
其中:<数组名>:必需的。数组变量的名称,遵循标准变量命名约定。<N>
:可选的;一般是整型常量或变量。指定返回哪一维的上界。1表示第一维,2表示第二维,如此等等。如果省略默认是1。3.Split函数使用格式:Split(<字符串表达式>[,<分隔符>])说明:使用Split函数可从一个字符串中,以某个指定符号为分隔符,分离若干个子字符串,建立一个下标从零开始的一维数组。补充例:使用文件框,通过编程实现大量数据的输入输入一系列的数据,存放在数组中。对输入的数据允许修改和自动识别非数字数据。分析:利用文本框实现大量数字串的输入和编辑的功能;通过编程将输入的数字串以逗号为分界符分离出各项数据;对非数字输入的判断能力。5.5控件数组
5.5.1控件数组的概念
一组相同类型的控件组成。它们共用一个控件名,具有相同的属性,建立时系统给每个元素赋一个唯一的索引号(Index)。
控件数组共享同样的事件过程,通过返回的下标值区分控件数组中的各个元素。例:PrivateSubcmdName_Click(IndexAsInteger)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 全国大学生英语竞赛试题及答案
- 急性下消化道出血的诊断与管理指南要点2026
- 数据结构与抽象数据类型
- 道德与法治 依法履行义务课件-2025-2026学年统编版道德与法治八年级下册
- 雨课堂学堂在线学堂云《深度强化学习导论(复旦)》单元测试考核答案
- 记账实操-工程公司未完工项目账务处理分录
- 稀土冶炼废弃物资源化
- 乘车协议书集锦15篇
- 2026中国农业机械产业行业发展状况与需求趋势预测报告
- 航线网络资源均衡配置
- (贵州一模)贵州省2026年4月高三年级适应性考试物理试卷(含标准答案)
- 2026年西北大学学生就业创业指导服务中心招聘备考题库(3人)含答案详解(满分必刷)
- 智能电网与能源互联网协同发展研究
- 安全仪表系统管理制度
- 2026年内蒙古联通校园招聘笔试备考试题及答案解析
- 蔬菜采购市场询价制度
- 2026四川泸州产城招引商业管理有限公司人员招聘4人笔试参考题库及答案解析
- 2026青岛华通国有资本投资运营集团有限公司招聘(2人)笔试模拟试题及答案解析
- 应急物流风险预警-洞察与解读
- 山西水利职业技术学院单招职业技能考试题库及参考答案
- 2026年劳务派遣合同(合规·同工同酬版)
评论
0/150
提交评论