第7章数组与自定义数据类型(2).docx

上传人:李医生 文档编号:6305353 上传时间:2020-10-23 格式:DOCX 页数:12 大小:49.55KB
返回 下载 相关 举报
第7章数组与自定义数据类型(2).docx_第1页
第1页 / 共12页
第7章数组与自定义数据类型(2).docx_第2页
第2页 / 共12页
第7章数组与自定义数据类型(2).docx_第3页
第3页 / 共12页
第7章数组与自定义数据类型(2).docx_第4页
第4页 / 共12页
第7章数组与自定义数据类型(2).docx_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《第7章数组与自定义数据类型(2).docx》由会员分享,可在线阅读,更多相关《第7章数组与自定义数据类型(2).docx(12页珍藏版)》请在三一文库上搜索。

1、习题 7(数组与自定义数据类型)一、选择题1下面定义数组语句中错误的是:(A) Private A(-10 To 5)(B) Dim A(10,-10 To -10) As Integer(C) Dim A() As Integer(D) Dim A(N) N 是变量2下面的哪一条语句与Visual Basic 的默认设置相同:(A) Option Base 1(B) Option Base 0(C) ByRef(D) Option Explicit3下面的哪条语句可以正确地定义一个动态数组:(A) Private A(n) As Integer(B) Dim A() As Integer(C

2、) Dim A( , ) As Integer定义一个动态的二维数组(D) Dim A(1 To n)4下面的哪一项可以在窗体模块的声明段中进行定义:(A) 全局变量(B) 全局常量(C) 全局数组(D) 全局自定义数据类型5如果在模块的声明段中有Option Base 0语句,则在该模块中使用 Dim a(6,3 To 5)定义的数组的元素个数是:(A) 30(B) 18(C) 35(D) 21二、判断题1使用 ReDim 语句不但可以改变动态数组的下标界限,而且可以改变其维数。2无论是在定义时,还是在访问其元素时,数组的下标不能是变量,只能是常量表达式。3数组下标的下界可以是负值,但上界只

3、能是正数。4自定义数据类型中的各个成员不但可以是Visual Basic 的基本数据类型,还可以是自定义数据类型或数组。5Visual Basic 允许定义过程级自定义数据类型。6数组可以作通用过程的参数,但必须是最后一个参数。7数组作通用过程的参数时,一定是按地址传递。8自定义数据类型既可以作参数,也可以作返回值。三、填空题1 运行下面程序,当单击窗体时,窗体上显示在内容是(1);如果把 A 语句替换为x = 64,B 语句替换为r = 8,则输出结果为(2)。分析一下这个程序的功能是什么。1Dim n As Integer, k As Integer, x As Integer, r As

4、 Integer模块级变量2Dim a(8) As Integer 模块级数组3Private Sub conv(d As Integer, r, i)4 i = 05 Do While d 06 i = i + 17 a(i) = d Mod r: d = d r8 Loop9 End Sub1011 Private Sub Form_click()12x = 12 A 语句13r = 2 B 语句14 Print CStr(x); (; CStr(r); )=;15 If x = 0 Then16 Print 017 Else18 Call conv(x, r, n)19 For k =

5、n To 1 Step -120 Print a(k);21 Next k22 Print23 End If24 End Sub2 阅读下面程序,当单击窗体时,窗体上显示的内容是(3)。1 Private Sub Form_Click()2 Dim a(3, 3) As Integer : Dim i As Integer3 a(1, 1) = 1: a(1, 2) = 2: a(1, 3) = 3: a(2, 1) = 44 a(2, 2) = 5: a(2, 3) = 6: a(3, 1) = 7: a(3, 2) = 8: a(3, 3)= 95 For i = 1 To 36 For

6、k = 1 To i7 Call chang(a, i)8 Next9 Next10 For i = 1 To 311 For k = i To 312 Print a(i, k) & ,;13 Next14 Next15 End Sub1617 Sub chang(a() As Integer, i As Integer)18 c = a(i, UBound(a, 2)19 For k = UBound(a, 2) - 1 To 1 Step -120 a(i, k + 1) = a(i, k)21 Next22 a(i, 1) = c23 End Sub3下面的事件过程把一维数组中元素的值

7、向右循环移位,移位次数由文本框输入。“循环”指的是最右边的元素值补到最左边。例如,数组各元素的值依次为0,1,2,3,4,5,6,7,8,9,10;移位三次后,各元素的值依次为: 8,9,10,0,1,2,3,4,5,6,7。在画线处填入适当的语句。1 Private Sub Command1_Click()2 Dim intArray(10) As Integer3 Dim intI As Integer, intJ As Integer, intK As Integer4 For intI = 0 To 105 intArray(intI) = intI6 Next7 intJ = Tex

8、t1.Text8 Do9 intK = intK + 110(4 )11Loop Until( 5 )12 For intI = 0 To 1013 Print intArray(intI)14 Next15 End Sub1617 Private Sub Moveright(intA() As Integer)18 Dim intI As Integer, intJ As Integer, intK As Integer19 intI = UBound(intA) : intJ = intA(intI)20 For intK = intI To LBound(intA) + 1 Step -

9、121( 6 )22Next23( 7 )24 End Sub4本程序段的功能是重新排列数组a 中元素的值,使相等元素值相邻存放,并且保持它们在数组中首次出现时的相对次序。在画线处填入适当内容。例如,原数组: 1,2,4,3,3,3,2,1,4,5重排后: 1,1,2,2,4,4,3,3,3,5排列的原理是:先删去重复元素,再根据各元素在数组中出现的次数展开排列。1 Dim n As Integer2 Dim i As Integer, j As Integer, k As Integer, t As Integer, m As Integer3 Dim a() As Integer, b()

10、 As Integer4 n = 105 ReDim a(n), b(n)6 a(1) = 1: a(2) = 2: a(3) = 4: a(4) = 3: a(5) = 37 a(6) = 3: a(7) = 2: a(8) = 1: a(9) = 4: a(10) = 58 m = 19 ( 8)10 Do While m = t11 k = 1 : i = m + 112 Do While i 0.5 Then s = 1 Else s = -112t = s * Int(Rnd * 100)+ 1图 7.15不复重的 50 个随机数13(14 )14 Do While k i15 If

11、 t a(k) Then16k = k + 117Else18Exit Do19 End If20 Loop21 If k = i Then22( 15 )23 a(k) = t24 Print a(k);25 i = i + 126 If (i - 1) Mod 10 = 0 Then Print27If max 5030 Print31 Print 最大值为 ; max; ,位于第 ; pmax; 个32 End Sub四、改错题下面程序的功能是分别找出 48、308 和 1155 三个数的所有质因子(如图 7.16 所示)。要求:( 1)新建工程,输入以下代码;( 2)改正程序中的错误,

12、改错时,不得增加或删除语句;( 3)分别以 tform 和 tprj 为文件名将窗体和工程保存到C:盘新建的文件夹 t 中。1 Private Sub Form_click()2 Dim Fac() As Integer, N(3) As Integer3 Dim I As Integer, J As Integer4 N(1) = 48: N(2) = 308: N(3) = 11555 For I = 1 To 36 Call Factor(Fac, N(I)7Print N(I); 的质因子有: ;图 7.16求质因子(改错题)8 For J = 1 To UBound(Fac)9 Pr

13、int Fac(J);10 Next11 Print12 ReDim Fac(I)13 Next14 End Sub1516 Private Sub Factor(F() As Integer, ByVal N() As Integer)17 Dim I As Integer, J As Integer, Idx As Integer18 Dim K As Integer19 K = 220 Do Until N = 121 If N Mod K = 0 Then22 Idx = Idx + 123 ReDim F(Idx)24 F(Idx) = K25 N = N / K26 Else27

14、K = K - 128 End If29 Loop30 End Sub五、编程题1编程找出三个三位数,它们分别是某三个二位数的平方,且19 这九个数字在这三个三位数中各只允许出现一次。2定义一个二维动态数组a(1 To n,1 To n)代表 nn 的方阵(n 由文本框输入)。编程给数组元素赋值,使之成为如下所示的螺旋方阵(图中是 n=5 时的情况)。116151413217242312318252211419202110567893有 17 个人围成一个圈(编号为016),从第 0 号的人开始从 1 报数,凡报到 3 的倍数的人离开圈子,然后再数下去,直到最后只剩下一个人为止。求此人原来的编

15、号是多少。4* 编写递归函数过程实现折半查找。5* 编写一个求多个正整数最大公约数的递归函数。参考答案一、选择题1 D2 B3 B4 A5 D二、判断题12345678三、填空题1( 1) 12(2)=1 1 0 02( 3) 3,1,2,6,4,9,3( 4) Call Moveright(intArray)(6) intA(intK) = intA(intK-1)4( 9) t = n( 9) i To t-15( 13) i = 1( 14) k = 1( 2) 64(8)=1 0 0或 Moveright intArray( 5) intK = intJ( 7) intA(LBound

16、(intA) = intJ( 10) i = i+1( 11) b(i)( 12) t = t-1( 15)ReDim Preserve a(k)( 16) pmax = k四、改错题( 1)第 16 行中形参 N 后面的空括号应删除( 2)第 23 行应为: ReDim PreServe F(Idx)( 3)第 27 行应为: K = K + 1.五、编程题1这三个三位数分别是:361、 529 和 784。1 Private Sub Command1_Click()2 Dim intA(10 To 31, 1 To 4)3 Dim int1 As Integer, int2 As Inte

17、ger, int3 As Integer4 Dim int4 As Integer5 Dim bln1 As Boolean6 For int1 = 10 To 317 intA(int1, 1) = int1 * int18 intA(int1, 2) = intA(int1, 1) Mod 109 intA(int1, 3) = intA(int1, 1) 10 Mod 1010 intA(int1, 4) = intA(int1, 1) 10011 Next12 For int1 = 10 To 3113 For int2 = int1 + 1 To 3114 For int3 = in

18、t2 + 1 To 3115 For int4 = 1 To 916bln1 = False17bln1 = bln1 Or (int4 = intA(int1, 2)18bln1 = bln1 Or (int4 = intA(int1, 3)19bln1 = bln1 Or (int4 = intA(int1, 4)20bln1 = bln1 Or (int4 = intA(int2, 2)21bln1 = bln1 Or (int4 = intA(int2, 3)22bln1 = bln1 Or (int4 = intA(int2, 4)23bln1 = bln1 Or (int4 = i

19、ntA(int3, 2)24bln1 = bln1 Or (int4 = intA(int3, 3)25bln1 = bln1 Or (int4 = intA(int3, 4)26If Not bln1 Then Exit For27 Next2829 If int4 = 10 Then30 Print intA(int1, 1), intA(int2, 1), intA(int3, 1)31 End If32 Next33 Next34 Next35 End Sub21 Private Sub Command1_Click()2 Dim a() As Integer3 Dim nc As I

20、nteger, nr As Integer, n As Integer4 Dim i As Integer, j As Integer, k As Integer5 n = Cint(Text1.Text)6 ReDim a(1 To n, 1 To n)7 nc = n: nr = 1: i = 1: j = 18 For k = 1 To n * n9 a(i, j) = k10 If i nc And j = nr Then11 i = i + 112 ElseIf i = nc And j nr And j = nc Then15i = i116ElseIf i = nr And j

21、nr + 1 Then17j = j118 End If19 If i = nr And j = nr + 1 Then20nc = nc121 nr = nr + 122 End If23 Next24 For i = 1 To n25 For j = 1 To n26 Print a(i, j),27 Next28 Print29 Next30 End Sub3 10 号。解法一:1 Private Sub Command1_Click()2 Dim intA(0 To 16) As Integer3 Dim intNum As Integer4 Dim int1 As Integer5

22、Dim int2 As Integer6 For int1 = 0 To 167 intA(int1) = 18 Next9 int1 = 010 int2 = 011 intNum = 1712 Do While intNum 113 int1 = int1 + intA(int2)14 If int1 Mod 3 = 0 And intA(int2) 0 Then15 intA(int2) = 016 intNum = intNum - 117 End If18 int2 = int2 + 119 If int2 16 Then int2 = 020 Loop21 For int1 = 0

23、 To 1622 If intA(int1) = 1 Then Print int123 Next24 End Sub解法二:1 Private Sub Command1_Click()2 Dim intA(0 To 16) As Boolean3 Dim intNum As Integer4 Dim int1 As Integer5 Dim int2 As Integer6 int1 = 07 int2 = 08 intNum = 179 Do While intNum 110 Do While intA(int2)11 int2 = int2 + 112 If int2 16 Then i

24、nt2 = 013 Loop14 int1 = int1 + 115 If int1 Mod 3 = 0 Then16 intA(int2) = True17 intNum = intNum - 118 End If19 int2 = int2 + 120 If int2 16 Then int2 = 021 Loop22 For int1 = 0 To 1623 If Not intA(int1) Then Print int124 Next25 End Sub41 Function Search3(a() As Integer, intStart As Integer,2intEnd As

25、 Integer, b As Integer) As Integer_3 Dim m As Integer, n As Integer, int1 As Integer4 m = intStart5 n = intEnd6 int1 = (m + n) 27 If b a(int1) Then11m = int1 + 112Search3 = Search3(a, m, n, b)13 Else14Search3 = int115 End If16 If m = n Then17Search3 = m18 End If19 End Function说明:对应于形参a()的实参为被搜索的数组(递

26、增或递减)下标的下界和上界,b 是要查找的数值。, intStart和intEnd是数组51 Private Function gcd(a() As Integer) As Integer2 Dim i As Integer, j As Integer3 Dim u As Integer, v As Integer, r As Integer4 i = LBound(a)5 j = UBound(a)6 If i = j Then7 gcd = a(i)8 Else9 u = a(j - 1)10 v = a(j)11 Do While v 012 r = u Mod v13 u = v14 v = r15 Loop16 a(j - 1) = u17 ReDim Preserve a(i To j - 1)18 gcd = gcd(a)19 End If20 End Function说明:对应于形参 a() 的实参必须是动态数组,本函数计算并返回此数组各元素的最大公约数。

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

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1