VB第5章复习资料

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1第5章补充资料习题解答1.在VB6.0中,数组的下界默认为0,用什么语句可以重新定义数组的默认下界?答:OptionBase语句2.要分配存放12个元素的整形数组,下列数组声明(下界若无,按默认规定)那些符合要求?(1)n=12(2)Dima%()Dima(1ton)asintergern=11ReDima(n)(3)Dima%[2,3](4)Dima(1,1,2)AsInterger(5)Dima%(10)(6)Dima!()ReDima(1To12)ReDima(3,2)AsInterger(7)Dima%(2,3)(8)Dima(1to31to4)AsInterger答:(2)、(4)、(7)、(8)符合要求。3.程序运行时显示“下标越界”可能产生的错误有哪几种情况?答:下标比下界小或者比上界大。4.已知下面的数组声明,写出它的数组名,数组类型、维数、各维的上下界、数组的大小、并按行的顺序列出各元素。Dima(-1to2,3)asinterger答:数组名为a、数组类型为单精度、二维、各维的下界分别为-1和0、上界分别为2和3、数组的大小4×4共16个元素,各元素排列顺序如下:a(-1,0)a(-1,1)a(-1,2)a(-1,3)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)a(2,1)a(2,2)a(2,3)5.利用随机数生成两个矩阵(数据不一定相同,前者30~70范围、后者101~135),要求:A=38556930416656473966473350526735B=130113109123118134103111135132127133101125115103C=38413950556666526956476730473335提示:假定在通用声明段对数组的声明如下:Dima%(1to4),b%(1to4),c%(1to4)在Form_Load事件过程中对a、b数组根据要求随机生成数值:根据各小题的要求,在各事件过程分别编写代码。(1)将两个矩阵相加结果存入C矩阵中。答:两个矩阵能相加的条件是它们的行数,列数相同,利用两重循环将它们的对应元素逐一相加即可。程序段如下:2Fori=1to4Forj=1to4C(i,j)=a(i,j)+b(i,j)NextjNexti(2)将A矩阵转置。答:矩阵转置是将矩阵的行变为列、列变为行。这也通过两重循环实现,程序段如下:Fori=2to4Forj=1toi-1t=a(i,j)a(i,j)=a(j,i)a(j,i)=tNextjNexti思考:若类循环的终值由i-1改为4,将会产生什么结果?(3)统计C矩阵中最大值及其下标答:因为C矩阵是两维数组,所以最大值的下标也有两个,即行下标和列下标。DimMax%,,%Maxj%Max=c(0,0):Maxi=0:Maxj=0Fori=0to3Forj=0to3Ifc(i,j)MaxthenMax=c(i,j):Maxi=i:Maxj=jEnsdifNextjNexti(4)以下三角形式显示A矩阵、上三角形式显示B矩阵。答:两维数组形式输出,必须通过两重循环。对于下三角形式较简单,每一行总是从最左边开始输出,只要控制每一个元素的宽度即可;而对于上三角形式,则要控制每一行第一个元素输出的位置,这一般通过Tab函数实现。说明:Space(4-Len(c(i,j)))表示每个元素占4个,其中空格数目与实际数目值位数有关。输出下列三角元素输出上列三角元素Fori=0To3Fori=0To3Forj=0To3Forj=0to3Printc(i,j);space(4-Len(c(i,j)));PrintTab(j*4);c(i,j);NextjNextjPrintPrintNextiNexti(5)将A矩阵第一行与第三行对应元素交换位置,即第一行元素放到第三行;第三行元素放到第一行。答:Forj=1to3t=c(1,j):c(1,j)=c(3,j):c(3,j)=tNexti3(6)求A矩阵两条对角线元素之和。答:对角线有主对角线和副对角线。Sum=0Fori=0to3Sum=Sum+c(i,j)+c(i,3-i)Nexti(7)将A矩阵按列的次序把各元素放入一维数组D中,显示结果。答:关键要找出两维数组各元素和一维数组各元素的关系。Dimc(3,3),c2(15)……Forj=0to3Fori=0to3k=j*4+ic2(k)=c(i,j)NextjNexti6.声明一个一维字符型数组,有20个元素,每一个元素最多存放个10个字符,要求:(1)由随机数形成小写字母够成的数组,每个元素的字符个数由随机数产生,范围1~10。答:本题较简单,主要是利用随机数产生长度不超过11个字符的字符串。PrivateSubForm_click()Dimst(1To20)AsString,cAsString*1Dimi%,n%Fori=1To20n=Int(Rnd*11+1)Forj=1Tonc=Chr(Int(Rnd*26+97))st(i)=st(i)&cNextjPrintst(i)NextiEndSub(2)要求将生成的数组分4行显示。答:效果如图5.1所示。分四行显示,则每行五个元素,可利用Mod取余运算符实现,同时要考虑每个字符的长度不等,可增加空格,以便对齐。假定字符数组已形成,则程序段如下:图5.1习题6(2)运行结果Fori=1To20Printst(i);Space(15-Len(st(i)));4IfiMod5=0ThenPrintNexti(3)显示生成的字符数组中字符最多的元素。答:该题就是求最长的数组元素,程序段如下:maxlen=0maxstr=Fori=1To20IfLen(st(i))Thenmaxlen=Len(st(i))maxstr=st(i)EndIfNextiPrintmaxlen,maxstr7.简述列表框和组合框的异同处。答:相同处都是可存放字符串;不同处在于,组合框是文本框和列表框的组合,可以输入内容,但要通过AddItem方法添加;列表框只能选择项目,不能直接输入内容。8.列表框或组合框中选中的项目、总和数的属性分别是什么?答:表示选中的内容,属性有:Text:总项目数的属性为ListCounts。9.简述自定义类型与自定义变量的区别。答:前者仅定义类型,这如同系统提供的Integer、String等基本类型;后者系统为其分配了存储单元。10.自定义一个职工类型,包含职工号、姓名、工资。声明一个职工类型的动态数组。输入n各职工的数据;要求按工资递减的顺序排列,并显示排列的结果,每个职工一行显示三项信息。答:PrivateTypezgtypenoAsIntegernameAsString*10payAsSingleEndTypeDims()Aszgtype,n%PrivateSubForm_Load()n=InputBox(输入人数)ReDims(1Ton)Fori=1TonWiths(i).no=InputBox(输入职工号).name=InputBox(输入职工姓名).pay=InputBox(输入职工工资)EndWithNextiFori=1Ton–1Forj=i+1TonIfs(j).pays(j-1).payThen5t=s(j):s(j)=s(j-1):s(j-1)=tEndIfNextjNextiFori=1TonPrints(i).no,s(i).name,s(i).payNextiEndSub常见错误和难点分析1.Dim数组声明如何解决通用性问题有时用户为了程序的通用性,用变量来表示数组的上界,如下程序段:n=Inputbox(“输入数组的上界”)ReDima(1ton)AsInteger程序运行时将在Dim语句处显示“要求常数表达式”的出错信息,即Dim语句中声明的数组上、下界必须是常数,不能是变量。解决程序通用性的问题,一是将数组声明的很大,这样浪费了存储空间:二是利用动态数组,将上例改变如下:Dima()AsIntegern=Inputbox(“输入数组的上界”)ReDima(1ton)AsInteger2.数组下标越界数组下标越界引用了不存在的数组元素,即下标比数组的下标范围大或小。例如,要形成有如下30项的猆波那契数列:1,1,2,3,5,8,13,21,34,…,317811,514229,832040正确的程序如下:Dima(1to30)Aslong,i%As(1)=1:a(2)=1Fori=3to30a(i)=a(i-2)+a(i-1)Nexti若将Fori=3To30改为Fori=1To30,程序运行时会显示“下标越界”的出错信息,因为开始循环时i=1,执行到循环语句:a(i)=a(i-2)+a(i-1),数组下标i-2、i-1均小于下界1。同样若将上例:a(i)=a(i-2)+a(i-1)语句改为:a(i+2)=a(i)+a(i+1)程序运行时也会显示“下标越界”的出错信息,这时是数组下标大于上界30。3.数组维数错数组声明时的维数与引用数组元素时的维数不一致。例如,下程序段为形式和显示3×5的矩阵:151413121110987654321Dima(3,5)AslongFori=1to36Forj=1to5A(i)=i*jPrinta(i);””;NextjPrintNexti程序运行到a(i)=i*j语句时出现“维数错误”的信息,因为在Dim声明时是二维数组,引用时是一个下标。4.Array函数的使用问题Array函数可方便地对数组进行整体赋值,但此时只能声明Variant的变量或仅由括号括起的动态数组。赋值后的数组大小由赋值的个数决定。例如,要将1、2、3、4、5、6、7这些值赋给数组a,表5.1列出了三种错误及对应正确的赋值方法。表5.1Array函数表示方法错误的Array函数赋值改正的Array函数赋值Dima(1to8)a=Array(1,2,3,4,5,6,7)Dima()a=Array(1,2,3,4,5,6,7)DimaAsIntegera=Array(1,2,3,4,5,6,7)Dimaa=Array(1,2,3,4,5,6,7)Dimaa=Array(1,2,3,4,5,6,7)Dimaa=Array(1,2,3,4,5,6,7)5.如何获得数组的上界、下界Array函数可方便地对数组进行整体的赋值,但在程序中如何获得数组的上界、下界,以保证访问的数组元素在合法的范围内,可通过Ubound和Llbound函数来实现:Fori=LBound(a)ToUBound(a)Printa(i)Nexti对于多维数组,要获得指定维的上下界,只要增加一个参数即可,例如:Dima(3,4,5)Asinteger`声明了三维数组i=Ubound(a)`获得第1维数组的上界,值为3,默认为第一维il=Lbound(a,1)`获得第1维数组的上界,值为3j=Ubound(a,2)`获得第2维数组的上界,值为5k=Lbound(a,3)`获得第3数组的上界,值为06.对数组赋值VB6.0提供了可对数组进行整体赋值的新功能,方便了数组对数组的赋值操作。但实际使用时有不少限制。数组赋值形式如下:数组名2=数组名1就此形式作讨论:这里的数组名2,实际上在前面的数组声明时,只能声明为Variant的变量,赋值后的数组2的大小、维数,类型同数组名1;否则,若声明成动态的数组,例如:Dim数组名1()或Dim数组名2(下标)程序在运行到上述赋值语句时显示“不能给数组赋值”的出错信息。所以,为了程序的安全、可靠,建议还是少用VB6.0的这一新功能,适用传统的循环结构来给数组赋值。7.自定义类型与数组7自定义类型与数组的区别:数组是存放一批类型相同的数据集合,通过声明时上下界的值决定数组的大小,通过下标引用数组中各元素;自

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功