VB数组与记录教学练习题.docx
- 文档编号:8517770
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:25
- 大小:32.02KB
VB数组与记录教学练习题.docx
《VB数组与记录教学练习题.docx》由会员分享,可在线阅读,更多相关《VB数组与记录教学练习题.docx(25页珍藏版)》请在冰豆网上搜索。
VB数组与记录教学练习题
第八章数组与记录
教学要求:
掌握一维、二维数组的定义、引用、初始化,掌握静态和动态数组及其差别,掌握数组的基本使用方法:
数组元素的输入、输出和赋值等,掌握使用ForEach...Next语句操作数组元素的方法;掌握控件数组的定义、建立和使用,掌握排序算法。
掌握记录类型及记录数组的概念、记录变量的初始化及引用。
知识点:
数组的定义、引用、初始化;静态和动态数组及其差别;ForEach...Next语句;控件数组。
熟练数组“遍历”算法的设计规律,冒泡排序、快速排序算法,顺序查找、有序表对分查找、字符查找算法。
内容导航:
一、数组的概念
(一)数组的定义
在VisualBasic中,可以用4个语句来定义数组,这4个语句格式相同,但适用范围不一样。
Dim用在窗体模块或标准模块中,定义窗体或标准模块数组;ReDim、Static可用于过程中;Public用在标准模块中,定义全局数组。
VisualBasic提供两种格式:
第一种格式:
一维数组Dim数组名(下标上界)As类型名称
二维数组Dim数组名(第一维下标上界,第二维下标上界)As类型名称
第二种格式:
Dim数组名([下界To]上界[,[下界To]上界]……)
Dim数组名([下界To[上界[,[下界To]上界]……)
(二)默认数组
在VisualBasic中,允许定义默认数组。
默认数组就是数据类型为Variant(默认)的数组。
在一般情况下,定义数组应指明其类型。
二、动态数组
(一)动态数组的定义
动态数组以变量作为下标值,在程序运行过程中完成定义,通常分为两步:
首先在窗体层、标准模块或过程中用Dim或Public声明一个没有下标的数组(括号不能省略),然后在过程中用ReDim语句定义带下标的数组。
ReDim语句格式:
ReDim[Preserve]变量(下标)As类型
(二)数组的清除和重定义
数组一经定义,便在内存中分配了相应的存储空间,其大小不能改变。
有时需要清除数组的内容或对数组重新定义,其格式为:
数组的清除:
Erase数组名[,数组名]……
重定义:
ReDim
三、数组的基本操作
(一)数组元素的输入、输出和复制
1.数组的引用
数组的引用通常是指对数组元素的引用,其方法是,在数组后面的括号中指定下标。
2.数组元素的输入
数组元素一般通过For循环语句及InputBox函数输入,当数组较小,或只需要对数组中的指定元素赋值时,可以用赋值语句来实现数组元素的输入,多维数组元素的输入通过多重循环来实现
3.数组元素的输出
数组元素的输出可以用Print方法来实现。
4.数组元素的复制
单个数组元素可以像简单变量一样从一个数组复制到另一个数组,二维数组中的元素可以复制到另一个二维数组中的某个元素,也可以复制到一个一维数组中的某个元素,并且反之亦然
(二)ForEach…Next语句
ForEach…Next语句类似于For…Next语句,两者都用来执行指定重复次数的一组操作,但ForEach…Next语句专门用于数组或对象“集合”(本书不涉及集合),其一般格式为:
ForEach成员In数组
循环体
[ExitFor]
……
Next[成员]
这里的“成员”是一个变体变量,它是为循环提供的,代表的是数组中的每个元素。
“数组”是一个数组名,没有括号和上下界。
四、数组的初始化
用Array函数来给数组元素赋值,其格式为:
数组变量名=Arra(数组元素值)
注意,Array函数只适用于一维数组。
即只能对一维数组进行初始化,不能对二维或多维数组进行初始化。
五、控件数组
(一)基本概念
控件数组由一组相同类型的控件组成,这些控件共用一个相同的控件名,具有同样的属性设置。
数组中的每个控件都有唯一的索引号(IndexNumber),即下标,其所有元素的Name属性必须相同。
控件数组的每个元素都有一个与之关联的下标,或称索引(Index),下标值由Index属性指定。
Index属性与控件数组中的某个元素有关
(二)建立控件数组
通过以下两种方法来建立控件数组:
第一种方法,步骤如下:
(1)在窗体上画出作为数组元素的各个控件;
(2)单击要包含到数组中的某个控件,将其激活;
(3)在属性窗口中选择“(名称)”属性,并键入控件的名称;
(4)对每个要加到数组中的控件重复
(2)、(3)步,键入与第(3)步中相同的名称。
当对第二个控件键入与第一个控件相同的名称后,VisualBasic将显示一个对话框,询问是否确实要建立控件数组。
单击“是”将建立控件数组,单击“否”则放弃建立操作。
第二种方法,步骤如下:
(1)在窗体上画出一个控件,将其激活;
(2)执行“编辑”菜单中的“复制”命令(热键为Ctrl+C),将该控件放入剪贴板;
(3)执行“编辑”菜单中的“粘贴”命令(热键为Ctrl+V),将显示一个对话框,询问是否建立控件数组;
(4)单击对话框中的“是”按钮,窗体的左上角将出现一个控件,它就是控件数组的第二个因素,执行“编辑”菜单中的“粘贴”命令,或按热键Ctrl+V,建立控件数组中的其他元素。
控件数组建立后,只要改变一个控件的“Name”属性值,并把Index属性置为空(不是0),就能把该控件从控件数组中删除。
控件数组中的控件执行相同的事件过程,通过Index属性可以决定控件数组中的相应控件所执行的操作。
六、记录
(一)记录类型和记录类型变量
1.记录类型定义格式:
[Private|Public]Type数据类型
元素名[(下标)]As类型名
元素名[(下标)]As类型名
…
EndType
2.定义记录类型变量
记录类型变量的定义和基本了类型变量的定义一样,在引用是有所不同,用“变量元素”的格式应用记录中的成员。
(二)记录类型变量的初始化及其引用
1.记录类型变量的初始化
用赋值语句或输入语句对记录各个成员分别赋值。
2.记录类型变量的引用及其操作
成员的引用:
记录变量.成员名
七、记录数组
定义的一般格式:
Dim数组名([下界]To上界)As记录名
引用记录数组元素的成员:
记录数组名(下标).成员名
训练:
一、选择题
1.如下数组声明语句中正确的是________。
A)DimA(45)AsIntegerB)DimA(n,n)AsInteger
C)DimA(4,5)AsIntegerD)DimA[4,5]AsInteger
3.语句OptionBase1:
Dima(3,4)定义的数组所包含的数组元素的个数是________。
A)7B)12C)15D)20
4.要分配存放如下方阵的数据,正确的且最节约存储空间的数组声明语句是________。
1.12.23.3
4.45.56.6
A)Dima(6)AsSingleB)Dima(2,3)AsSingle
C)Dima(2To3,-3To–1)AsSingleD)Dima(1,2)AsInteger
5.设有数组声明:
Dima(-2To4,3To6),则下面引用数组元素正确的是________。
A)a(-2,3)B)a(5)C)a[-2,4]D)a(-1,7)
6.用下面语句定义的数组元素个数是________。
DimA(-3To5)AsInteger
A)6B)7C)8D)9
7.语句Dimarr(-3To5,2To6)AsInteger定义的数组元素有________。
A)45B)40C)11D)54
8.以下程序输出的结果是________。
OptionBase1
PrivateSubForm_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(i>=j)ThenprintTab(j*3);format(B(i,j),"###");
Nextj
Nexti
EndSub
A)123
456
789
B)1
24
369
C)147
246
369
D)123
46
9
9.在窗体上面画一个命令按钮,然后编写如下事件过程:
OptionBase1
PrivateSubCommand1_Click()
Dima
a=Array(1,2,3,4)
j=1
Fori=4To1Step-1
s=s+a(i)*j
j=j*10
Nexti
Prints
EndSub
运行上面的程序,单击命令按钮,其输出结果是________。
A)4321B)12C)34D)1234
10.在窗体上画一个名称为Text1的文本框和一个名称为Command1的命令按钮,然后编写如下事件过程:
PrivateSubCommand1_Click()
Dimarray1(10,10)AsInteger
Dimi,jAsInteger
Fori=1To3
Forj=2To4
array1(i,j)=i+j
Nextj
Nexti
Text1.Text=array1(2,3)+array1(3,4)
EndSub
程序运行后,单击命令按钮,在文本框中显示的值是________。
A)12B)13C)14D)15
11.在窗体上画一个名称为Command1的命令按钮,然后编写如下事件过程:
PrivateSubCommand1_Click()
DimiAsInteger,jAsInteger
Dima(10,10)AsInteger
Fori=1To3
Forj=1To3
a(i,j)=(i-1)*3+j
Printa(i,j);
Nextj
Nexti
EndSub
程序运行后,单击命令按钮,在窗体上显示的值是________。
A)123
234
369
B)234
345
456
C)147
258
369
D)123
456
789
12.设有如下程序:
OptionBase1
PrivateSubForm_Click()
Dima
DimiAsInteger
a=Array(1,2,3,4,5,6,7,8,9)
Fori=0To3
Printa(5-i);
Nexti
EndSub
程序运行后,单击命令按钮,在窗体上显示的值是________。
A)5432B)6543C)4321D)7654
13.执行以下Command1的Click事件过程在窗体上显示________。
OptionBase1
PrivateSubCommand1_Click()
Dima
a=Array("a","b","c","d","e","f","g")
Printa
(1);a(3);a(5)
EndSub
A)abcB)bdfC)aceD)出错
14.设有如下程序:
Dima(3,3)AsInteger
Form=1To3
Forn=1To3
a(m,n)=(m-1)*3+n
Nextn
Nextm
Form=2To3
Forn=1To2
Printa(n,m);
Nextn
Nextm
运行后输出的结果是________。
A)2536B)2356C)4758D)4578
15.下列程序段的执行结果为________。
DimA(4)
n=3
A
(1)=1
Fork=0Ton-1
ForP=1Tok+1
X=k+2-P
A(X)=A(x)+A(x-1)
Ifk PrintA(x) NextP Nextk A)121B)123C)246D)131 16.有如下程序,运行后输出的结果是________。 OptionBase1 PrivateSubCommand1_Click() Dimaj(1To10) Forj=6To10 aj(j)=j*2 Nextj Printaj (1)+aj(j) EndSub A)5B)20C)22D)显示出错信息 17.当发生Command1_Click事件,以下程序的输出结果是________。 PrivateSubCommand1_Click() Dima a=Array(1,2,3,4,5) Fori=1To4 Printa(i)-a(i-1); Nexti EndSub A)11111B)1111C)111D)222 18.当发生Command1_Click事件,以下程序的输出结果是________。 PrivateSubCommand1_Click() DimiAsInteger Dima(10)AsInteger Fori=9To0Step-1 a(i)=10-i Nexti Printa (2);a(5);a(8) EndSub A)258B)741C)852D)369 19.下面关于控件数组与一般控件的叙述中正确的是________。 A)控件数组一定有1个以上同类型的控件组成,而一般控件只有一个控件。 B)控件数组的索引属性值Index值为0,而一般控件的Index值为空。 C)控件数组的Index值为1,而一般控件的Index值为0。 D)控件数组的建立通过Dim语句声明,而一般控件不需要声明。 20.下面说法正确的是________。 A)ReDim语句只能更改数组下标上界。 B)ReDim语句只能更改数组下标下界。 C)ReDim语句不能更改数组维数。 D)ReDim语句可以更改数组维数。 二、填空题 1.由Array函数建立的数组的类型必须是________。 2.VisualBasic的数组下标默认为________,可通过________________语句使数组下标从1开始。 3.在窗体上画一个命令按钮,然后编写如下事件过程: PrivateSubForm_Click() Dima(0To10) Dimp(1To3) K=0 ForI=1To4 a(i)=I Forj=1To3 P(j)=a(j*j) Nextj Forj=1To3 K=K+p(j)*2 Nextj Printk Nexti EndSub 程序运行后,单击命令按钮,输出结果是______________。 4.VisualBasic课程考试10道选择题的正确答案依次为A、C、C、D、A、A、C、C、D、D,每题2分。 下面的程序利用InputBox对话框输入学生答案,计算出得分,当输入字符E或e是可提前结束输入。 阅读程序并填空。 OptionBase1 PrivateSubCommand1_Click() 【】 a=Array("A","C","C","D","A","A","C","C","D","D") score=0 Fori=1To10 Str1$="请输入考生第"&i&"题答案,输入E结束" X$=【】 IfX=a(i)Thenscore=score+2 If【】ThenExitFor Cls Print"score=";score Next EndSub 5.下面的程序实现矩阵的转置(即行列互换)。 阅读程序并填空。 OptionBase1 PrivateSubCommand1_Click() m=InputBox("输入行数"): n=InputBox("输入列数") 【】a(m,n)AsInteger,B(n,m)AsInteger Fori=1Tom Forj=1Ton a(i,j)=Int(Rnd*90)+10 Next: Next Fori=1Ton Forj=1Tom B(i,j)=【】 Next: Next EndSub 6.下面的程序分别求方阵两对角线元素之和。 阅读程序并填空。 OptionBase1 PrivateSubCommand1_Click() m=InputBox("输入方阵的阶数") ReDima(m,n)AsInteger Fori=1Tom Forj=1Tom a(i,j)=Int(Rnd*90)+10 Next: Next p=0 Fori=1Tom 【】 Next q=0 Fori=1Tom 【】 Next Fori=1Tom Forj=1Tom Printa(i,j); Next Print: Print Next Printp;q EndSub 7.下列程序的输出结果为________。 PrivateSubCommand1_Click() Dima(1To20) Dimi Fori=1To20 a(i)=i Nexti ForEachiIna() a(i)=20 Nexti Printa (2) EndSub 8.下列程序的输出结果为________。 PrivateSubCommand1_Click() Dima ReDima(6) Forj=1To5 a(j)=j*j Nextj Printa(a (2)*a(3)-a(4)*2)+a(5) EndSub 9.下列程序是将具有10元素的数组A的元素倒序存放,即第一个变为最后一个,第二个变为倒数第二个,完成下列程序。 potionbase1 PrivateSubBackward(a()) DimiAsInteger,TmpAsInteger Fori=1To5 Tmp=a(i) 【】 【】 Nexti EndSub 10.下面的程序的功能是求一维数组的最大值及其下标,阅读程序并填空。 OptionBase1 PrivateSubForm_Click() Dima(10)AsInteger,max_i Fori=1To10 a(i)=InputBox("请输入一个元素值") Nexti max_i=【】 Fori=2To10 If【】Thenmax_i=i Nexti Printa(max_i),max_i EndSub 11.下列程序的功能是对一个具有二十个元素的一为数组a按每行5个元素输出,请在下划线处填上适当的内容。 OptionBase1 PrivateSubCommand1_Click() DimA(20)AsInteger Fori=1To20 A(i)=i*i/2 Nexti Fori=1To20 PrintA(i), If【】Then Print EndIf Nexti EndSub 12.以下程序的功能是对二维数组a(3,4)按行输出,请在下划线处填上适当的内容。 Fori=1To3 Forj=1To4 Printa(i,j), Nextj 【】 NextI 13.控件数组中的各个元素由________属性决定。 14.控件数组共用事件和方法,区分事件是由哪一个元素产生的,可用过引用控件数组事件过程的参数________来实现。 三、程序阅读题 1.写出下面程序的输出结果。 Optionbase1 PrivateSubCommand1_Click() Dima(10),p(3)AsInteger k=5 Fori=1To10 a(i)=i Nexti Fori=1To3 p(i)=a(i*i) Nexti Fori=1To3 k=k+p(i)*2 Nexti Printk EndSub 2.在窗体上画一个命令按钮(其Name属性为Command1),编写如下代码,写出程序运行后,单击命令按钮,输出的结果。 OptionBase1 PrivateSubCommand1_Click() Dima(4,4) Fori=1To4 Forj=1To4 a(i,j)=(i-1)*3+j Nextj Nexti Fori=3To4 Forj=3To4 Printa(i,j); Nextj Print Nexti EndSub 3.写出下面程序的运行结果。 OptionBase1 PrivateSubText1_KeyPress(KeyAsciiAsInteger) a=Array(237,126,87,48,498) m1=a (1) m2=1 IfKeyAscii=13Then Fori=2To5 Ifa(i)>m1Then m1=a(i) m2=i EndIf Nexti EndIf Printm1 Printm2 EndSub 4.写出当发生Command1_Click事件后,下面程序的运行结果。 PrivateSubCommand1_Click() Dima(10)AsInteger,p (2)AsInteger,iAsinteger,kAsInteger
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB 数组 记录 教学 练习题