首页 认证考试第7章 数组与自定义数据类型

认证考试第7章 数组与自定义数据类型

举报
开通vip

认证考试第7章 数组与自定义数据类型认证考试第7章 数组与自定义数据类型 习题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 Expli...

认证考试第7章 数组与自定义数据类型
认证考试第7章 数组与自定义数据类型 习 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 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 Explicit 3(下面的哪条语句可以正确地定义一个动态数组: (A) Private A(n) As Integer (B) Dim A() As Integer (C) 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(数组下标的下界可以是负值,但上界只能是正数。 4(自定义数据类型中的各个成员不但可以是Visual Basic的基本数据类型,还可以是自定义数据类型或数组。 5(Visual Basic允许定义过程级自定义数据类型。 6(数组可以作通用过程的参数,但必须是最后一个参数。 7(数组作通用过程的参数时,一定是按地址传递。 8(自定义数据类型既可以作参数,也可以作返回值。 三、填空题 1(运行下面程序,当单击窗体时,窗体上显示在内容是 (1) ;如果把A语句替换为 x = 64,B语句替换为 r = 8,则输出结果为 (2) 。分析一下这个程序的功能是什么。 1 Dim n As Integer, k As Integer, x As Integer, r As Integer ' 模块级变量 2 Dim a(8) As Integer ' 模块级数组 3 Private Sub conv(d As Integer, r, i) 4 i = 0 5 Do While d <> 0 6 i = i + 1 7 a(i) = d Mod r: d = d \ r 8 Loop 9 End Sub 10 11 Private Sub Form_click() 12 x = 12 ' A 语句 13 r = 2 ' B 语句 14 Print CStr(x); "("; CStr(r); ")="; 15 If x = 0 Then 16 Print 0 17 Else 18 Call conv(x, r, n) 19 For k = n To 1 Step -1 20 Print a(k); 21 Next k 22 Print 23 End If 24 End Sub 2(阅读下面程序,当单击窗体时,窗体上显示的内容是 (3) 。 1 Private Sub Form_Click() 2 Dim a(3, 3) As Integer : Dim i As Integer 3 a(1, 1) = 1: a(1, 2) = 2: a(1, 3) = 3: a(2, 1) = 4 4 a(2, 2) = 5: a(2, 3) = 6: a(3, 1) = 7: a(3, 2) = 8: a(3, 3) = 9 5 For i = 1 To 3 6 For k = 1 To i 7 Call chang(a, i) 8 Next 9 Next 10 For i = 1 To 3 11 For k = i To 3 12 Print a(i, k) & ","; 13 Next 14 Next 15 End Sub 16 17 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 -1 20 a(i, k + 1) = a(i, k) 21 Next 22 a(i, 1) = c 23 End Sub 3(下面的事件过程把一维数组中元素的值向右循环移位,移位次数由文本框输入。“循环”指的是最右边的元素值补到最左边。 例如,数组各元素的值依次为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 Integer 3 Dim intI As Integer, intJ As Integer, intK As Integer 4 For intI = 0 To 10 5 intArray(intI) = intI 6 Next 7 intJ = Text1.Text 8 Do 9 intK = intK + 1 10 (4) 11 Loop Until (5) 12 For intI = 0 To 10 13 Print intArray(intI) 14 Next 15 End Sub 16 17 Private Sub Moveright(intA() As Integer) 18 Dim intI As Integer, intJ As Integer, intK As Integer 19 intI = UBound(intA) : intJ = intA(intI) 20 For intK = intI To LBound(intA) + 1 Step -1 21 (6) 22 Next 23 (7) 24 End Sub 4(本程序段的功能是重新排列数组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 Integer 2 Dim i As Integer, j As Integer, k As Integer, t As Integer, m As Integer 3 Dim a() As Integer, b() As Integer 4 n = 10 5 ReDim a(n), b(n) 6 a(1) = 1: a(2) = 2: a(3) = 4: a(4) = 3: a(5) = 3 7 a(6) = 3: a(7) = 2: a(8) = 1: a(9) = 4: a(10) = 5 8 m = 1 9 (8) 10 Do While m <= t 11 k = 1 : i = m + 1 12 Do While i <= t 13 If a(i) = a(m) Then 14 k = k + 1 15 For j = (9) 16 a(j) = a(j + 1) 17 Next j 18 t = t - 1 19 Else 20 (10) 21 End If 22 Loop 23 b(m) = k : m = m + 1 24 Loop 25 t = n 26 For i = m - 1 To 1 Step -1 27 For j = 1 To (11) 28 a(t) = a(i) 29 (12) 30 Next j 31 Next i 32 For j = 1 To n 33 Print a(j) 34 Next j 5(本程序生成50个位于,100,100之间的不重复的随机整数,并找出第几个是最大 值(执行结果如图7.15所示)。填空完善程序。 1 Option Base 1 2 Private Sub Command1_Click() 3 Dim i As Integer, k As Integer, t As Integer, s As Integer 4 Dim max As Integer, pmax As Integer 5 Dim a() As Integer 6 Randomize 7 max = -100 8 pmax = 1 9 (13) 10 Do 11 If Rnd > 0.5 Then s = 1 Else s = -1 图7.15 不复重的50个随机数 12 t = s * Int(Rnd * 100) + 1 13 (14) 14 Do While k < i 15 If t <> a(k) Then 16 k = k + 1 17 Else 18 Exit Do 19 End If 20 Loop 21 If k = i Then 22 (15) 23 a(k) = t 24 Print a(k); 25 i = i + 1 26 If (i - 1) Mod 10 = 0 Then Print 27 If max < t Then max = t: (16) 28 End If 29 Loop Until i > 50 30 Print 31 Print "最大值为"; max; ",位于第"; pmax; "个" 32 End Sub 四、改错题 下面程序的功能是分别找出48、308和1155三个数的所有质因子(如图7.16所示)。 要求 对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗 : (1)新建工程,输入以下代码; (2)改正程序中的错误,改错时,不得增加或删除语句; (3)分别以tform和tprj为文件名将窗体和工程保存到C:盘新建的文件夹t中。 1 Private Sub Form_click() 2 Dim Fac() As Integer, N(3) As Integer 3 Dim I As Integer, J As Integer 4 N(1) = 48: N(2) = 308: N(3) = 1155 5 For I = 1 To 3 6 Call Factor(Fac, N(I)) 7 Print N(I); "的质因子有:"; 8 For J = 1 To UBound(Fac) 9 Print Fac(J); 10 Next 图7.16 求质因子(改错题) 11 Print 12 ReDim Fac(I) 13 Next 14 End Sub 15 16 Private Sub Factor(F() As Integer, ByVal N() As Integer) 17 Dim I As Integer, J As Integer, Idx As Integer 18 Dim K As Integer 19 K = 2 20 Do Until N = 1 21 If N Mod K = 0 Then 22 Idx = Idx + 1 23 ReDim F(Idx) 24 F(Idx) = K 25 N = N / K 26 Else 27 K = K - 1 28 End If 29 Loop 30 End Sub 五、编程题 1(编程找出三个三位数,它们分别是某三个二位数的平方,且1,9这九个数字在这三个三位数中各只允许出现一次。 2(定义一个二维动态数组a(1 To n,1 To n)代表n×n的方阵(n由文本框输入)。编程给数组元素赋值,使之成为如下所示的螺旋方阵(图中是n=5时的情况)。 116151413,,,,217242312,,,, 318252211,,419202110,,,,56789,, 3(有17个人围成一个圈(编号为0,16),从第0号的人开始从1报数,凡报到3的倍数的人离开圈子,然后再数下去,直到最后只剩下一个人为止。求此人原来的编号是多少。 *4(编写递归函数过程实现折半查找。 *5(编写一个求多个正整数最大公约数的递归函数。 参考答案 一、选择题 1(D 2(B 3(B 4(A 5(D 二、判断题 1(? 2(× 3(× 4(? 5(× 6(× 7(? 8(? 三、填空题 1((1)12(2)=1 1 0 0 (2)64(8)=1 0 0 2((3)3,1,2,6,4,9, 3((4)Call Moveright(intArray) 或 Moveright intArray (5)intK = intJ (6)intA(intK) = intA(intK-1) (7)intA(LBound(intA)) = intJ 4((9) t = n (9) i To t-1 (10) i = i+1 (11) b(i) (12)t = t-1 5((13)i = 1 (14)k = 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 Integer, int3 As Integer 4 Dim int4 As Integer 5 Dim bln1 As Boolean 6 For int1 = 10 To 31 7 intA(int1, 1) = int1 * int1 8 intA(int1, 2) = intA(int1, 1) Mod 10 9 intA(int1, 3) = intA(int1, 1) \ 10 Mod 10 10 intA(int1, 4) = intA(int1, 1) \ 100 11 Next 12 For int1 = 10 To 31 13 For int2 = int1 + 1 To 31 14 For int3 = int2 + 1 To 31 15 For int4 = 1 To 9 16 bln1 = False 17 bln1 = bln1 Or (int4 = intA(int1, 2)) 18 bln1 = bln1 Or (int4 = intA(int1, 3)) 19 bln1 = bln1 Or (int4 = intA(int1, 4)) 20 bln1 = bln1 Or (int4 = intA(int2, 2)) 21 bln1 = bln1 Or (int4 = intA(int2, 3)) 22 bln1 = bln1 Or (int4 = intA(int2, 4)) 23 bln1 = bln1 Or (int4 = intA(int3, 2)) 24 bln1 = bln1 Or (int4 = intA(int3, 3)) 25 bln1 = bln1 Or (int4 = intA(int3, 4)) 26 If Not bln1 Then Exit For 27 Next 28 29 If int4 = 10 Then 30 Print intA(int1, 1), intA(int2, 1), intA(int3, 1) 31 End If 32 Next 33 Next 34 Next 35 End Sub 2( 1 Private Sub Command1_Click() 2 Dim a() As Integer 3 Dim nc As Integer, nr As Integer, n As Integer 4 Dim i As Integer, j As Integer, k As Integer 5 n = Cint(Text1.Text) 6 ReDim a(1 To n, 1 To n) 7 nc = n: nr = 1: i = 1: j = 1 8 For k = 1 To n * n 9 a(i, j) = k 10 If i < nc And j = nr Then 11 i = i + 1 12 ElseIf i = nc And j < nc Then 13 j = j + 1 14 ElseIf i > nr And j = nc Then 15 i = i – 1 16 ElseIf i = nr And j > nr + 1 Then 17 j = j – 1 18 End If 19 If i = nr And j = nr + 1 Then 20 nc = nc – 1 21 nr = nr + 1 22 End If 23 Next 24 For i = 1 To n 25 For j = 1 To n 26 Print a(i, j), 27 Next 28 Print 29 Next 30 End Sub 3(10号。 解法一: 1 Private Sub Command1_Click() 2 Dim intA(0 To 16) As Integer 3 Dim intNum As Integer 4 Dim int1 As Integer 5 Dim int2 As Integer 6 For int1 = 0 To 16 7 intA(int1) = 1 8 Next 9 int1 = 0 10 int2 = 0 11 intNum = 17 12 Do While intNum > 1 13 int1 = int1 + intA(int2) 14 If int1 Mod 3 = 0 And intA(int2) <> 0 Then 15 intA(int2) = 0 16 intNum = intNum - 1 17 End If 18 int2 = int2 + 1 19 If int2 > 16 Then int2 = 0 20 Loop 21 For int1 = 0 To 16 22 If intA(int1) = 1 Then Print int1 23 Next 24 End Sub 解法二: 1 Private Sub Command1_Click() 2 Dim intA(0 To 16) As Boolean 3 Dim intNum As Integer 4 Dim int1 As Integer 5 Dim int2 As Integer 6 int1 = 0 7 int2 = 0 8 intNum = 17 9 Do While intNum > 1 10 Do While intA(int2) 11 int2 = int2 + 1 12 If int2 > 16 Then int2 = 0 13 Loop 14 int1 = int1 + 1 15 If int1 Mod 3 = 0 Then 16 intA(int2) = True 17 intNum = intNum - 1 18 End If 19 int2 = int2 + 1 20 If int2 > 16 Then int2 = 0 21 Loop 22 For int1 = 0 To 16 23 If Not intA(int1) Then Print int1 24 Next 25 End Sub 4( 1 Function Search3(a() As Integer, intStart As Integer, _ 2 intEnd As Integer, b As Integer) As Integer 3 Dim m As Integer, n As Integer, int1 As Integer 4 m = intStart 5 n = intEnd 6 int1 = (m + n) \ 2 7 If b < a(int1) Then 8 n = int1 - 1 9 Search3 = Search3(a, m, n, b) 10 ElseIf b > a(int1) Then 11 m = int1 + 1 12 Search3 = Search3(a, m, n, b) 13 Else 14 Search3 = int1 15 End If 16 If m = n Then 17 Search3 = m 18 End If 19 End Function 说明:对应于形参a()的实参为被搜索的数组(递增或递减),intStart和intEnd是数组 下标的下界和上界,b是要查找的数值。 5( 1 Private Function gcd(a() As Integer) As Integer 2 Dim i As Integer, j As Integer 3 Dim u As Integer, v As Integer, r As Integer 4 i = LBound(a) 5 j = UBound(a) 6 If i = j Then 7 gcd = a(i) 8 Else 9 u = a(j - 1) 10 v = a(j) 11 Do While v <> 0 12 r = u Mod v 13 u = v 14 v = r 15 Loop 16 a(j - 1) = u 17 ReDim Preserve a(i To j - 1) 18 gcd = gcd(a) 19 End If 20 End Function
本文档为【认证考试第7章 数组与自定义数据类型】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_353097
暂无简介~
格式:doc
大小:41KB
软件:Word
页数:16
分类:企业经营
上传时间:2017-12-13
浏览量:24