VB第5章 复习资料.docx

上传人:b****3 文档编号:3894946 上传时间:2022-11-26 格式:DOCX 页数:20 大小:91.74KB
下载 相关 举报
VB第5章 复习资料.docx_第1页
第1页 / 共20页
VB第5章 复习资料.docx_第2页
第2页 / 共20页
VB第5章 复习资料.docx_第3页
第3页 / 共20页
VB第5章 复习资料.docx_第4页
第4页 / 共20页
VB第5章 复习资料.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

VB第5章 复习资料.docx

《VB第5章 复习资料.docx》由会员分享,可在线阅读,更多相关《VB第5章 复习资料.docx(20页珍藏版)》请在冰豆网上搜索。

VB第5章 复习资料.docx

VB第5章复习资料

第5章补充资料

习题解答

1.在VB6.0中,数组的下界默认为0,用什么语句可以重新定义数组的默认下界?

答:

OptionBase语句

2.要分配存放12个元素的整形数组,下列数组声明(下界若无,按默认规定)那些符合要求?

(1)n=12

(2)Dima%()

Dima(1ton)asintergern=11

ReDima(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=

B=

C=

提示:

假定在通用声明段对数组的声明如下:

Dima%(1to4),b%(1to4),c%(1to4)

在Form_Load事件过程中对a、b数组根据要求随机生成数值:

根据各小题的要求,在各事件过程分别编写代码。

(1)将两个矩阵相加结果存入C矩阵中。

答:

两个矩阵能相加的条件是它们的行数,列数相同,利用两重循环将它们的对应元素逐一相加即可。

程序段如下:

Fori=1to4

Forj=1to4

C(i,j)=a(i,j)+b(i,j)

Nextj

Nexti

(2)将A矩阵转置。

答:

矩阵转置是将矩阵的行变为列、列变为行。

这也通过两重循环实现,程序段如下:

Fori=2to4

Forj=1toi-1

t=a(i,j)

a(i,j)=a(j,i)

a(j,i)=t

Nextj

Nexti

思考:

若类循环的终值由i-1改为4,将会产生什么结果?

(3)统计C矩阵中最大值及其下标

答:

因为C矩阵是两维数组,所以最大值的下标也有两个,即行下标和列下标。

DimMax%,,%Maxj%

Max=c(0,0):

Maxi=0:

Maxj=0

Fori=0to3

Forj=0to3

Ifc(i,j)>Maxthen

Max=c(i,j):

Maxi=i:

Maxj=j

Ensdif

Nextj

Nexti

(4)以下三角形式显示A矩阵、上三角形式显示B矩阵。

答:

两维数组形式输出,必须通过两重循环。

对于下三角形式较简单,每一行总是从最左边开始输出,只要控制每一个元素的宽度即可;而对于上三角形式,则要控制每一行第一个元素输出的位置,这一般通过Tab函数实现。

说明:

Space(4-Len(c(i,j)))表示每个元素占4个,其中空格数目与实际数目值位数有关。

输出下列三角元素输出上列三角元素

Fori=0To3Fori=0To3

Forj=0To3Forj=0to3

Printc(i,j);space(4-Len(c(i,j)));PrintTab(j*4);c(i,j);

NextjNextj

PrintPrint

NextiNexti

(5)将A矩阵第一行与第三行对应元素交换位置,即第一行元素放到第三行;第三行元素放到第一行。

答:

Forj=1to3

t=c(1,j):

c(1,j)=c(3,j):

c(3,j)=t

Nexti

(6)求A矩阵两条对角线元素之和。

答:

对角线有主对角线和副对角线。

Sum=0

Fori=0to3

Sum=Sum+c(i,j)+c(i,3-i)

Nexti

(7)将A矩阵按列的次序把各元素放入一维数组D中,显示结果。

答:

关键要找出两维数组各元素和一维数组各元素的关系。

Dimc(3,3),c2(15)

……

Forj=0to3

Fori=0to3

k=j*4+i

c2(k)=c(i,j)

Nextj

Nexti

6.声明一个一维字符型数组,有20个元素,每一个元素最多存放个10个字符,要求:

(1)由随机数形成小写字母够成的数组,每个元素的字符个数由随机数产生,范围1~10。

答:

本题较简单,主要是利用随机数产生长度不超过11个字符的字符串。

PrivateSubForm_click()

Dimst(1To20)AsString,cAsString*1

Dimi%,n%

Fori=1To20

n=Int(Rnd*11+1)

Forj=1Ton

c=Chr(Int(Rnd*26+97))

st(i)=st(i)&c

Nextj

Printst(i)

Nexti

EndSub

(2)要求将生成的数组分4行显示。

答:

效果如图5.1所示。

分四行显示,则每行五个元素,可利用Mod取余运算符实现,同时要考虑每个字符的长度不等,可增加空格,以便对齐。

假定字符数组已形成,则程序段如下:

图5.1习题6

(2)运行结果

Fori=1To20

Printst(i);Space(15-Len(st(i)));

IfiMod5=0ThenPrint

Nexti

(3)显示生成的字符数组中字符最多的元素。

答:

该题就是求最长的数组元素,程序段如下:

maxlen=0

maxstr=""

Fori=1To20

IfLen(st(i))Then

maxlen=Len(st(i))

maxstr=st(i)

EndIf

Nexti

Printmaxlen,maxstr

7.简述列表框和组合框的异同处。

答:

相同处都是可存放字符串;不同处在于,组合框是文本框和列表框的组合,可以输入内容,但要通过AddItem方法添加;列表框只能选择项目,不能直接输入内容。

8.列表框或组合框中选中的项目、总和数的属性分别是什么?

答:

表示选中的内容,属性有:

Text:

总项目数的属性为ListCounts。

9.简述自定义类型与自定义变量的区别。

答:

前者仅定义类型,这如同系统提供的Integer、String等基本类型;后者系统为其分配了存储单元。

10.自定义一个职工类型,包含职工号、姓名、工资。

声明一个职工类型的动态数组。

输入n各职工的数据;要求按工资递减的顺序排列,并显示排列的结果,每个职工一行显示三项信息。

答:

PrivateTypezgtype

noAsInteger

nameAsString*10

payAsSingle

EndType

Dims()Aszgtype,n%

PrivateSubForm_Load()

n=InputBox("输入人数")

ReDims(1Ton)

Fori=1Ton

Withs(i)

.no=InputBox("输入职工号")

.name=InputBox("输入职工姓名")

.pay=InputBox("输入职工工资")

EndWith

Nexti

Fori=1Ton–1

Forj=i+1Ton

Ifs(j).pay>s(j-1).payThen

t=s(j):

s(j)=s(j-1):

s(j-1)=t

EndIf

Nextj

Nexti

Fori=1Ton

Prints(i).no,s(i).name,s(i).pay

Nexti

EndSub

常见错误和难点分析

1.Dim数组声明如何解决通用性问题

有时用户为了程序的通用性,用变量来表示数组的上界,如下程序段:

n=Inputbox(“输入数组的上界”)

ReDima(1ton)AsInteger

程序运行时将在Dim语句处显示“要求常数表达式”的出错信息,即Dim语句中声明的数组上、下界必须是常数,不能是变量。

解决程序通用性的问题,一是将数组声明的很大,这样浪费了存储空间:

二是利用动态数组,将上例改变如下:

Dima()AsInteger

n=Inputbox(“输入数组的上界”)

ReDima(1ton)AsInteger

2.数组下标越界

数组下标越界引用了不存在的数组元素,即下标比数组的下标范围大或小。

例如,要形成有如下30项的猆波那契数列:

1,1,2,3,5,8,13,21,34,…,,,

正确的程序如下:

Dima(1to30)Aslong,i%

As

(1)=1:

a

(2)=1

Fori=3to30

a(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的矩阵:

Dima(3,5)Aslong

Fori=1to3

Forj=1to5

A(i)=i*j

Printa(i);””;

Nextj

Print

Nexti

程序运行到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)

DimaAsInteger

a=Array(1,2,3,4,5,6,7)

Dima

a=Array(1,2,3,4,5,6,7)

Dima

a=Array(1,2,3,4,5,6,7)

Dima

a=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维数组的上界,值为3

j=Ubound(a,2)`获得第2维数组的上界,值为5

k=Lbound(a,3)`获得第3数组的上界,值为0

6.对数组赋值

VB6.0提供了可对数组进行整体赋值的新功能,方便了数组对数组的赋值操作。

但实际使用时有不少限制。

数组赋值形式如下:

数组名2=数组名1

就此形式作讨论:

这里的数组名2,实际上在前面的数组声明时,只能声明为Variant的变量,赋值后的数组2的大小、维数,类型同数组名1;否则,若声明成动态的数组,例如:

Dim数组名1()或Dim数组名2(下标)

程序在运行到上述赋值语句时显示“不能给数组赋值”的出错信息。

所以,为了程序的安全、可靠,建议还是少用VB6.0的这一新功能,适用传统的循环结构来给数组赋值。

7.自定义类型与数组

自定义类型与数组的区别:

数组是存放一批类型相同的数据集合,通过声明时上下界的值决定数组的大小,通过下标引用数组中各元素;自定义类型是一组相关数据的集合,在定义自定义类型时必须逐一声明自定义类型中的每一个元素,各元素类型可以各不相同,通过指定元素名来引用自定义类型中的某元素。

自定义类型数组常用于存放一组相关的信息集合,例如若干个学生的基本情况。

8.列表框和组合框的Style属性的特点

列表框的Style属性值为0和1,表示列表框的项目前有无复选框形式,如图5.2所示。

组合框Style属性值为0,1和2,分别表示下拉式组合框,简单组合框和下拉式列表框,如图5.3所示。

前两种类型组合了文本框和列表框功能,可以输入内容;后一种仅是列表框的下拉形式显示,不能输入内容。

图5.2列表框图5.3组合框

9.列表框、组合框都有Text和ListIndex,二者有何区别

Text属性只能表示选中的项目内容,不能改变;而ListIndex表示选中项目的下标,通过如下语句可以用“新值”改变项目原内容:

List1.List(List1.ListIndex)=新值

Combox1.List(Combox1.ListIndex)=新值

若:

List1.Text=新值

Combox1.Text=新值

则是没有效果的。

测试题

一、选择题

1.下列数组声明语句,()正确。

A.Dima(3,4)Ainteger

B.Dima(3,4)Asinteger

C.Dima(n,n)Asinteger

D.Dima(34)Asinteger

2.要分配存放如下矩阵的数据,()数组声明语句能实现(不能浪费空间)。

A.Dima(9)AsSingle

B.Dima(3,3)AsSingle

C.Dima(-1To1,-5To-3)AsSingle

D.Dima(-13To-1,5To7)AsSingle

3.如下数组声明语句中,则数a包含的元素个数有()。

Dima(3,-2to2,5)

A.120B.75C.60D.13

4.以下程序的输出结果是()。

Dima

A=Array(1,2,3,4,5,6,7)

Fori=Lbound(a)ToUbound(a)

a(i)=a(i)*a(i)

Nexti

Printa(i)

A.49B.0C.不确定D.程序出错

5.下列语句中(假定变量n有值),能正确声明可调数组的是()。

A.Dima()AsintegerB.Dima()Asinteger

ReDima(n)ReDima(n)AsString

C.Dima()AsintegerD.Dima(10)Asinteger

ReDima(3,4)ReDima(n+10)

ReDimPreservea(4,4)

6.在窗体的通用声明中段自定义了数据类型Students,下列()定义方式是正确的。

A.PrivateTypetudentsB.Typetudents

NameAsString*10NameAsString*10

StudnoAsintegerStudnoAsinteger

EndTypeEndStudents

C.TypetudentsD.Typetudents

NameString*10NameAsString*10

StudnointegerStudnoAsinteger

EndTypeEndType

7.以下程序的输出结果是()。

Optionbase1

Privatesubcommand1-click()

Dima,b(3,3)

A=array(1,2,3,4,5,6,7,8,9)

Fori=1to3

Forj=1to3

B(I,j)=a(i*j)

If(j>i)thenprinttab(j*3);format(b(i,j)),”###“)

Nextj

Print

Nexti

Endsub

A.123B.1C.147D.123

4564524646

7897893699

二、填空题

1.数据声明时下标下界默认为0,利用

(1)语句可以使下标为1。

2.由Array函数建立的数组,其变量必须是

(2)类型。

3.要获得数组的上界通过(3)函数,要获得列表框List数组的元素总个数通过(4)属性。

4.若定义一维数组为Dima(NTOM),则该数组的元素为(5)个。

5.随机产生6位学生的分数(分数是1到100),存放在数组a中,以每2分一个“*”显示,如图5.4所示。

图5.4随机分数界面

Privatesubcommand1_click()

Dima(1to6)

Fori=1to6

A(i)=(6)

Print(7)

Nexti

Endsub

6.在一维数组中利用移动的方法显示如图5.5所示的结果。

Privatesubform_click()

Dima(1to7)

Fori=1to7

A(i)=i:

printa(i);

Nexti

Print

Fori=1to7

t=(8)‘最后1位暂存

Forj=6to1step-1

(9)‘其余六个向右移一位

Nextj

(10)‘暂存的移入最左

Forj=1to7

Printa(j);

Nextj

Print

Nexti

EndSub

图5.5习题6运行界面

7.下面程序对已知数组a,删除数组中数组元素中某个元素。

Privatesubcommand1_click()

Dima(),key%,i%,j%

A=array(1,6,8,3,5,9,10,2,7,4)

Key=val(inputbox(“输入要删除的值”))

Fori=0toubound(a)

If(11)then

Forj=i+1toubound(a)

(12

Nextj

Redim(13)

Msgbox(“删除完成“)

Exitsub

endif

Nexti

Msfbox(“找不到要删除的元素”)

Endsub

8.下列程序表示将输入的一个数插入到按递减的有序数列中,插入后使该序列还有序。

Privatesubform_click()

Dima,i%,n%,m%

a=array(19,17,15,13,11,9,7,5,3,1)

n=Ubound(a)

ReDim(14)

m=val(inputbox(“输入欲插入的数“))

Fori=ubound(a)-1to0step-1

Ifm>=a(i)then

(15)

Ifi=0thena(i)=m

Else

(16)

Exitfor

Endif

Nexti

Fori=0toubound(a)

Printa(i)

Nexti

Endsub

9.下列程序在1000到9999之间查找满足如下条件的整数:

该整数,逆向排列得到的另一个4位数是它自身的倍数(2倍以上)。

查找结果和逆向排列数分别显示在对应的列表框,如图5.6所示。

图5.6习题9运行界面

Privatesubcommand1_click()

Dimnasinteger

Dimmasinteger

Dimiasinteger

Fori=1000to9999

M=o

(17)

dowhilen>0

m=(18)+nmod10

n=n\10

Loop

If(19)andm\i>1then

List1.additemi

List2.additem(20)

endif

nexti

endsub

10.下列程序完成如下功能:

随机产生年(10到30)个大写字母,并显示。

将这n个字母按产生的顺序逆时针排列成一个圆环,按逆时针方向统计相邻的两个字母满足升序的次数(如图5.7)。

并输出符合条件的每对字符和统计结果。

图5.7习题10运行界面

Privatesubform_click()

Dima()asstring,countasinteger,iasinteger,nasinteger

Randomize

Form1.cls

N=int(rnd*20)+10

(21)

Cls

Print“产生的字符”

Fori=1ton

s=(22)

A(i)=s

Prints;””;

Nexti

Print

Print“统计结果”

Count=0

Fori=2ton

If(23)then

Count=count+1

Printa(i-1);””;a(i)

Endif

Nexti

If(24)Then

Count=count+1

PrintA

(1);””;A(n)

Endif

Print

Print“符合条件的字符有:

”;(25)

Endsub

11.本程序随机产生n(15)个A到J的大写字母,按字母降序排序后,将连续出现的字母用压缩形式显示。

例如,连续5个H显示为5*H,参见图5.8。

数组a()用于存放随机产生的字母。

图5.8习题11运行界面

Privatesubcommand1_click()

Constn=15

Dima(1toN)asstri

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1