2020版算法与程序设计 专项测试七 数据存储与数组应用

文档属性

名称 2020版算法与程序设计 专项测试七 数据存储与数组应用
格式 zip
文件大小 4.2MB
资源类型 教案
版本资源 通用版
科目 通用技术
更新时间 2019-12-01 20:29:24

文档简介

专项测试七 数据存储与数组应用
一、选择题
1.有如下VB程序段:
Dim a(1 To 8) As Integer, i As Integer, c As Integer
a(1) = 1 : a(2) = 2 : a(3) = 3 : a(4)=4 : a(5) = 7 : a(6) = 8∶a(7) = 15: a(8) = 25
c=0
For i = 3 To 8
 If a(i - 2) + a(i - 1) = a(i) Then c = c + 1
Next i
Text1. Text = Str(c)
该程序段运行后,文本框Text1中显示的内容是(  )
A.1 B.2
C.3 D.4
解析 本题主要考查的是数组操作。本程序的功能是:统计满足条件“当前项等于前两项之和”的数组元素个数,数组元素a(3)、a(5)、a(7)满足条件,因此答案为C。
答案 C
2.有如下VB程序段:
a(1) = 1
a(2) = 3
 For i = 3 To 10
  a(i) = 2 * a(i - 1) - a(i - 2)
 Next i
执行该程序段后,数组元素a(8)的值为(  )
A.11 B.13
C.15 D.17
解析 本题主要考查的是数组操作。程序运行过程中数组元素a(1)~a(10)的值如下表所示:
a(1)
a(2)
a(3)
a(4)
a(5)
a(6)
a(7)
a(8)
a(9)
a(10)
1
3
5
7
9
11
13
15
17
19
因此,数组元素a(8)的值为15,答案为C。
答案 C
3.有如下VB程序段:
a(1) = 1: a(2) = 2
  b(1) = 1: b(2) = 2
  For i = 3 To 10
  a(i) = a(i - 1) + a(i - 2)
  b(i) = b(i - 1) + a(i)
 Next i
执行该程序段后,数组元素b(5)的值为(  )
A.5 B.10
C.18 D.31
解析 本题主要考查的是数组操作。程序运行过程中数组a、b各元素的值如下表所示:
a(1)
a(2)
a(3)
a(4)
a(5)
a(6)
a(7)
a(8)
a(9)
a(10)
1
2
3
5
8
13
21
34
55
89
b(1)
b(2)
b(3)
b(4)
b(5)
b(6)
b(7)
b(8)
b(9)
b(10)
1
2
5
10
18
31
52
86
141
230
从上表可知b(5)=18,因此答案为B。
答案 B
4.有如下VB程序段:
  For i = 2 To 5
  j = i
  k = a(j)
  Do While a(j - 1) < k And j > 1
   a(j) = a(j - 1)
   j = j - 1
  Loop
  a(j) = k
 Next i
数组元素a(1)~a(5)的值依次为“79,20,34,56,61”,该程序段运行后,数组元素a(1)~a(5)的值依次是(  )
A.79,56,34,20,61 B.79,61,56,34,20
C.20,34,56,61,79 D.20,34,56,79,61
解析 本题主要考查的插入排序算法。插入排序算法的关键是找到要插入的位置,本程序为降序排序,算法思想为:将当前要插入的数(目标数)与它前面的数进行比较,若比目标数小,则将该数往后移动一个位置,继续往前比较,直到找到一个比它大的数或和前面的数全部比较完毕,最后将目标数插入。排序结束后数组元素a(1)~a(5)的值依次是“79,61,56,34,20”,因此答案为B。
答案 B
5.有如下VB程序段:
 s = “ ”
 For i = 1 To 5
For j = 1 To a(i)
s = s + Str(i)
Next j
  Next i
 Label1.Caption = s
数组元素a(1)~a(5)的值依次为“2,0,3,2,0”,执行该程序段,标签Label1中显示的内容为(  )
A.1 2 1 2 3 1 2 B.1 1 3 3 3 4 4
C.2 2 3 3 3 2 2 D.1 1 0 3 3 3 4 4 0
解析 本题主要考查的是二重循环和数组。需要注意的是:循环体的语句是“s = s + Str(i)”,因此答案为B。
答案 B
6.有如下程序段:
Private Sub Command1_Click()
 Dim d(1 To 10) As Integer, f(1 To 10) As Boolean
 Dim i As Integer, ans As Integer
 ′给数组元素d(1)~d(10)赋值,代码略
 For i = 1 To 10
f(i) = False
 Next i
 For i = 2 To 10
If d(i) - d(i - 1) > 0 Then
  f(i) = True
  d(i) = d(i) - d(i - 1)
End If
 Next i
 For i = 1 To 10
If f(i) Then ans = ans + 1
 Next i
 Label1.Caption = Str(ans)
End Sub
程序运行时,数组元素d(1)~d(10)的赋值分别为:25、15、10、8、1、7、8、11、16、5,则标签Label1中显示的内容为(  )
A.3 B.4
C.5 D.6
解析 本题主要考查的是程序的综合运用能力。程序执行过程各变量的变化如下表所示:
i
i=1
i=2
i=3
i=4
i=5
i=6
i=7
i=8
i=9
i=10
d(i)
25
15
10
8
1
7
8
11
16
5
d(i)>d(i - 1)?
N
N
N
N
N
Y
Y
Y
Y
N
f(i)
F
F
F
F
F
T
T
T
T
F
d(i)
6
2
9
7
因此答案为B。
答案 B
7.实现某算法的部分VB 程序段如下:
i = 1
Do While i <= 9
If a(i) <> 0 Then
j = 10
Do While j > i
    If a(j) = a(i) Then a(j) = 0
    j = j - 1
Loop
End If
i = i + 1
Loop
For i = 1 To 10
If a(i) <> 0 Then Text1.Text= Text1.Text+Str(a(i))
Next i
数组元素 a(1)到a(10)的数据依次为“4,1,6,4,4,9,1,7,6”,则程序运行后,文本框Text1中显示的内容是(  )
A.4 9 1 7 6 B.4 1 6 9 7
C.6 7 1 9 4 D.7 9 6 1 4
解析 程序的功能是从后向前查找重复的数,并把重复的数改为0。i表示趟数,从1循环到9。如果当前这趟中的元素不为0,从最后一个元素开始查找,如果与当前的元素相等,赋值为0。如i=1时,a(1)=4,从最后一个元素开始,把5号4号数组元素的值赋值为0。
答案 B
二、非选择题
8.杨辉三角,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。小杨同学设计了以下程序用来输出杨辉三角,程序界面如下图所示。
程序运行时,在文本框Text1里输入需要输出的杨辉三角的行数n,单击“打印”按钮后,在列表框List1中输出n行的杨辉三角。
(1)要使程序运行时自动清空文本框Text1中的内容,则应在事件处理过程________(填字母:A.Form_Load/B.Text1_Click/C.Command1_Click)中编写相应代码。
(2)实现上述功能的VB程序如下,请在划线处填入适当的代码。
Private Sub Command1_Click()
 Dim n As Integer, i As Integer, j As Integer, a(0 To 30) As Long
 Dim s As String
 List1.Clear
 ____①____
 a(1) = 1
 List1.AddItem Str(a(1))
 For i = 2 To n
  a(1) = 1
  s = “ ”
  For j = i To 1 Step -1
    ____②____
    s = Str(a(j)) + “ ” + s
  Next j
  ____③____
 Next i
End Sub
解析 本题主要考查循环结构和数组的应用。本题要输出n行的杨辉三角图形,一般采用二维数组来实现,这里使用一维数组实现,需要从杨辉三角的规律来传推理计算公式。①处代码表示在文本框Text1中输入n的值,变量n的类型为整型,因此①处代码为n = Val(Text1.Text);②处代码为计算公式为a(j) = a(j - 1) + a(j);③处表示将变量s的值输出在列表框List1中,因此代码为List1.AddItem s。
答案 (1)A (2)①n = Val(Text1.Text)
②a(j)=a(j-1)+a(j) ③List1.AddItem s
9.小明编写了一个特殊的排序程序,功能如下:随机产生10个1~100之间的整数,存储在数组a并显示在列表框 List1 中,单击“排序”按钮 Command1 后,在列表框 List2 中显示降序排序后的结果,运行界面如图所示。
特殊排序算法描述:
(1)排序过程中不改变数据的位置,即保持原有数据的位置不变。
(2)引入数组 index,用数组元素index(i)记录第i大的数据在数列中的位置。
(3)在数组 a 中找出最大数据,将其所在位置存放在数组元素 index(1)中,然后在余下的数据中找出最大数据,将其所在位置存放在index(2)中,以此类推,直到完成所有数据的位置存放。排序完毕, a(index(i))成为降序序列, 即 a(index(1)) ≥ a(index(2))≥a(index(3)) ≥…… ≥a(index(n))。
如 n=5 时,数组 a 排序后各变量值如下表所示。
i
1
2
3
4
5
a(i)
17
19
9
13
6
index(i)
2
1
4
3
5
a(index(i))
19
17
13
19
6
实现上述功能的 VB 程序如下,在程序划线处填入合适的代码。
Const n = 10, maxn = 100
Dim a(1 To n) As Integer, index(1 To n) As Integer, flag(1 To n) As Boolean
Private Sub Form_Load()
 Dim i As Integer
 Randomize
 For i = 1 To n
flag(i) = False
a(i) = Int(Rnd() * maxn) + 1
List1.AddItem Str(a(i))
 Next i
End Sub
Private Sub Command1_Click()
 Dim i As Integer, j As Integer, k As Integer
 For i = 1 To n
  For j = 1 To n
   If flag(j) = False Then______①____:Exit For
 Next j
 For m = k + 1 To n
   If ____②____Then k = m
  Next m
  index(i) = k
  flag(k) = True
 Next i
 For i = 1 To n
  List2.AddItem Str(____③____)
 Next i
End Sub
解析 本题主要考查了数组的灵活应用。本题将数组元素index(i)作为数组a的下标,用数组index记录数据在数列中的位置,最大值、次大值、……依次存放在index(1)、index(2)、……,因此a(index(1))、a(index(2))、……成为降序序列。
答案 ①k = j ②flag(m)=False And a(m)>a(k) ③a(index(i))
10.小华有k个好朋友(编号为1~k),有一天,她的k个朋友向她要照片,可她手上只有n张照片(n(1)她根据和每个朋友的亲密关系依次给他们打分;(分值为1~20间的整数)
(2)将k个朋友的打分按照分数的个位数数字分成10组(0~9),再给每组的朋友生成一个随机附加分;(分值为1~10间的整数)
(3)每个朋友的总分为亲密关系分加上附加分,总分最高的前n个朋友将得到照片,若分数相同,则编号小的朋友优先。
程序运行时,在文本框Text1中输入照片数,在文本框Text2中输入朋友数,单击“读取数据”按钮Command1,将读取与每个朋友的亲密关系分和每组的附加分,并将亲密关系分和附加分分别存放在数组a和数组c中,最后在列表框List1和List2中显示;单击“分组”按钮Command2,将亲密关系分进行分组,分组情况显示在列表框List3;单击“分发”按钮Command3,将分发情况(分到照片的朋友编号和总分)显示在列表框List4中。程序运行效果如下图所示。
小利依据上述描述设计了如下VB程序。请回答下列问题:
(1)程序运行时,若在文本框Text2中输入8,读取的数据如图所示,则第8位得到照片的朋友编号为________。
(2)请在划线处填入合适的代码。
Dim n As Integer, k As Integer
Dim a(1 To 200) As Integer, b(0 To 9) As String, c(0 To 9) As Integer
Dim d(1 To 10) As Integer, id(1 To 100) As Integer ′数组d存放总分,id存放朋友的编号
Private Sub Command1_Click()
 ′读取数据并存放在相应的数组中,代码略
End Sub
Private Sub Command2_Click()
 Dim i As Integer, m As Integer, s As String
 For i = 1 To n
    m = ____①____
    d(i) = ____②____
    b(m) = b(m) + Str(a(i))
 Next i
 For i = 0 To 9
  If b(i) < > “ ” Then List3.AddItem Str(i) + “:” + b(i)
 Next i
End Sub
Private Sub Command3_Click()
 Dim i As Integer, j As Integer, temp As Integer
 For i = 1 To n - 1
For j = n To i + 1 Step -1
  If ____③____ Then
temp = d(j): d(j) = d(j - 1): d(j - 1) = temp
temp = id(j): id(j) = id(j - 1): id(j - 1) = temp
  End If
Next j
 Next i
 For i = 1 To k
List4.AddItem Str(id(i)) + “ 号朋友的总分 ” + Str(d(i))
 Next i
End Sub
解析 本题主要考查的多数组间相关操作。解决此问题的关键是分清各个数组的功能及存储的数据情况,本题共有5个数组(a、b、c、d和id数组)。(1)根据图中信息可知,已得到照片的朋友的编号为:2、3、4、5、7、8、10,还剩下编号为1、6、9三位朋友,因此将分别计算出这三位朋友的得分即可求出答案,1号朋友的得分为9分(5+4),6号朋友的得分为7分(1+6),9号朋友的得分为4分(2+2),因此第8位得到照片的朋友是1号。(2)根据亲密分的末尾数字来进行分类,即求出亲密分的个位数,亲密分存储在数组a中,因此①处填入的代码为m = a(i) Mod 10;总分存放在d数组中,分组打分存储在c数组中,总分为亲密分+分组打分,因此d(i)=a(i)+c(m);③处语句为按照总分降序排序,因此此处应填入的语句为d(j) > d(j - 1)。
答案 (1)1 (2)①m = a(i) Mod 10  ②a(i) + c(m) ③d(j) > d(j - 1)
11.小李与小王合作编写一个成绩统计的VB程序:小王编写一个过程,该过程从数据库读取某一指定科目的相关数据,存储在数组a中;小李编写一个过程,该过程依据数组a中的相关数据统计各班平均分。小李与小王约定的数组a各元素含义如表所示。
数组元素
数组元素的含义
a(1)
存储班级数n
a(2)
从a(2)到a(n+1) 依次存储第1、2、…第n个班级人数

a(n+1)
a(n+2)
从a(n+2) 依次存储第1班每个学生的单科成绩、第2班每个学生的单科成绩、…第n班每个学生的单科成绩


程序功能如下:在文本框Text1中输入科目名称,单击“读取数据库”按钮Command1,程序从数据库读取数据;单击“开始统计”按钮Command2,程序进行统计处理,结果输出在列表框List1中。程序运行界面如下图所示。
实现上述功能的VB程序如下,请回答下列问题:
(1)根据程序运行界面中的数据及数组a各元素的含义,数组元素a(5)的值为________(填写数值)。
(2)分析程序,可知数据库的文件名为________。
(3)请在划线处填入合适的代码。
Dim a(1 To 600) As Integer ′数组大小满足处理要求
Private Sub Command1_Click()
 ′本过程由小王完成,从数据库读取指定科目的各相关数据,存储在数组a中
 Dim conn As New ADODB.Conncction
 Dim rs As New ADODB.Recordset
 conn ConncctionString=“provider=Microsoft.ACE.OLEDB.12.0;data source=”+ “Score.accdb”
 conn.Open
 Set rs.ActiveConnection = conn
 ′本过程的其他语句略
End Sub
Private Sub Command2_Click()
 ′依据数组a中的相关数据统计各班级平均分
 Dim i As Integer, j As Integer, n As Integer
 Dim p As Integer, sum As Integer, aver As Single
 ________①________
 p = n + 2
 For i = 1 To n
  sum = 0
  For j = 1 To a(i + 1)
  ________②________
p = p + 1
 Next j
 aver = sum / a(i + 1)
 List1.AddItem Str(i) + “  ” + Str(a(i + 1)) + “  ” + Str(aver)
 Next i
End Sub
解析 (1)根据数组元素定义可知,数组元素a(5)存储的是4班的人数,因此为答案33。(2)从代码“conn ConncctionString=”provider=Microsoft.ACE.OLEDB.12.0;data source=“+ ”Score.accdb“”可知,数据库的文件名为Score.accdb。(3)变量n代表班级数,班级数存放在数组元素a(1)中,因此①处代码为n=a(1);i代表班级号,程序②处循环的功能是求班级i的总分,班级i的学生成绩存储在数组a(p)中,因此②处代码为sum=sum+a(p)。
答案 (1)33 (2)Score.accdb (3)①n=a(1) ②sum=sum+a(p)
12.由数组a生成数组b的方法描述如下:
(1)将数组a中的n个元素依次分割出若干个数据块,每个数据块有m×m个元素,m最大值为8,最小值为2。分割时,按尽可能大的数据块进行分割;
(2)对每个分割出的数据块用“方阵转换法”进行转换,每次转换后得到的数据块依次存储在数据b中;
(3)数组a分割后的剩余元素(个数小于4),直接依序存储到数组b中。
例如n=140时,可依次分割出3个数据块,元素的个数分别为64(8×8)、64(8×8)、9(3×3),剩余元素为3个。
“方阵转换法”过程如下:将数据块中m×m个元素按行序排列成一个数字方阵,从该数字方阵中按列序得到转换后元素的次序。以3×3数据块为例,转换过程如下图所示:
← 转换前元素次序
转换后元素次序→
小明依据上述描述设计了如下VB程序。请回答下列问题:
(1)当n=120时,分割出的第3个数据块元素个数为________。
(2)请在划线处填入合适的代码。
Const n = 120
Dim a(1 To n) As Integer
Dim b(1 To n) As Integer
Private Sub Command1_Click()
 Dim m As Integer, i As Integer
 Dim Start As Integer  ′当前未分割数据的第1个元素下标
 Dim Left As Integer ′当前未分割数据的个数
 Dim pa As Integer ′数组a的下标
 Dim pb As Integer ′数组b的下标
 ′读取n个转换前的数据,依次存储到a(1)、a(2)、……a(n)中,代码略
 m = 8
 Start = 1
 Left = n
 Do While Left > 3
If Left < m * m Then
m = ______①______
  Else
  pa = Start
  pb = Start
  For i = 1 To m * m
    b(pb) = a(pa)
    pb = pb + 1
    If i Mod m = 0 Then
    ______②______
    Else
      pa = pa + m
    End If
 Next i
  ______③______
 Start = Start + m * m
 End If
 Loop
 For i = Start To n
b(i) = a(i)
 Next i
′依次输出转换后数据b(1)、b(2)、……b(n),代码略
End Sub
解析 (1)n=120 时,可依次分割出 3 个数据块,元素的个数分别为 :64(8×8)、49(7×7)、4(2×2),剩余元素为 3 个。因此,第 3 个数据块为 4 个元素。
(2)剩余数量 Left < m * m,意味着当前剩余数量不够分割成数据块m ×m ,则下一次尝试分割数据块(m-1)×(m-1),……,因此①处应填入的语句为m=m-1。
例如 left=90 ,m=8 ,首先分割成 8 ×8 ,left=90-64=26,不够分割成8×8,则依次尝试 7 ×7、6 ×6、5 ×5,可分割成5 ×5,最后剩下一个元素,直接存储到数组b中;下面分析当 m=5 时转置处理:
当 i=1 时,执行 b(1)=a(1),然后推算出下一个存入b数组的元素a[pa],pa=pa+m=6;
当 i=2 时,执行 b(2)=a(6),然后推算出下一个存入b数组的元素a[pa],pa=pa+m=11;
当 i=3 时,执行 b(3)=a(11),然后推算出下一个存入b数组的元素a[pa],pa=pa+m=16;
……
当 i=5 时,执行 b(5)=a(21),此时,i mod m=0,则下一个该存入b数组的元素是什么呢?即pa=?,很显然是第2个数,即pa=start+1;
当i=10时,执行 b(10)=a(22),此时,i mod m=0,则下一个该存入b数组的元素是什么呢?即pa=?,很显然是第3个数,即pa=start+2;
如此继续,当i=15时,pa=start+3,i=20时,pa=start+4,因此,可得出公式pa=start+im,因此②处应填入的语句为pa=start+im。分割之后剩余元素的数量left=left-m*m,则下一个数据块的头元素的位置start为Start + m * m。
答案 (1)4 (2)①m=m-1 ②pa=start+im或pa=pa-(m-1)*m+1 ③left=left-m*m或left=n-start-m*m+1
13.小王编写了一个VB程序,该程序的功能是:有15个数形成环状,现要分别找出3个相邻的数,使其相加之和最大或最小。如15个数依次为:18 14 4 26 1 13 19 14 13 28 5 26 15 8 30,则相邻三数之和最大为62(30+18+14),相邻三数之和最小为31(4+26+1)。
程序运行时,先随机生成15个[1,30]区间内的整数,存储在数组a中,并在文本框Text1中显示;单击“计算”按钮Command2,则在标签Label4中显示连续三数最大和,在标签Label5中显示连续三数最小和,程序运行界面如图所示。
实现上述功能的VB程序如下,请回答下列问题:
(1)若15个数分别为:30 8 26 7 5 8 16 16 21 18 24 30 26 27 30,则相邻三数之和最大最小值分别为____________________。
(2)请在划线处填入合适的代码。
Dim a(0 To 14) As Integer
Private Sub Form_Load()
 ′随机生成15个数,存储在数组元素a(0)~a(14)中,并显示在文本框Text1中
End Sub
Private Sub Command1_Click()
 Dim i As Integer, j As Integer, k As Integer, max As Integer, min As Integer
 Dim sum As Integer, maxi As Integer, mini As Integer
 sum = 0
 max = 0
 min = 5000
 For i = 0 To 14
  j = (i + 1) Mod 15
  ______①______
sum = a(i) + a(j) + a(k)
If sum > max Then
   max = sum
  ______②______
End If
If sum < min Then
   min = sum
   mini = i
End If
Next i
Label4.Caption=a(maxi)&“+”&a((maxi+1) Mod 15)&“+”&a((maxi+2) Mod 15)& “=”&max
Label5.Caption=a(mini)&“+”&a((mini+1) Mod 15)&“+”&a((mini+2) Mod 15)& “=” &min
End Sub
答案 (1)87、20 (2)①k = (i + 2) Mod 15
②maxi = i
14.产生10个[20-30]之间的不重复的正整数,并显示在列表框List1中给20~30号数组元素编号。如果数组元素为0,表示未产生,并把该数组元素的标志修改为1,直到产生10个数为止。例如产生的随机数是21,由先判断S(21)的值,如果大于0,表示该元素已经产生,如果s(21)=0表示该元素未产生,把该数产生的顺序存储。
Private Sub Command1_Click()
 Dim s(20 to 30) As Integer
 For i = 20 To 30
  s(i) = 0
 Next i
 Randomize
 i = 1
 Do While i <= 10
______①________
List2.AddItem Str((x)) ′显示程序过程中产生的数
If s(x) = 0 Then
  ______②________
  i =i+1
 End If
 Loop
 For i =20 to 30
  If s(i) > 0 Then List1.AddItem Str(i) + “产生顺序:” + Str(s(i))
 Next i
End Sub
解析 变量x表示产生的[20-30]之间的随机数,因此产生该数的表达式为Int(Rnd*11+20)。数组元素s(x)表示数x产生的顺序,当他等于0时,表示该数还未产生。
答案 ①Int(Rnd*11+20) ②s(x) = i
专项测试七 数据存储与数组应用
一、选择题
1.有如下VB程序段:
Dim a(1 To 8) As Integer, i As Integer, c As Integer
a(1) = 1 : a(2) = 2 : a(3) = 3 : a(4)=4 : a(5) = 7 : a(6) = 8∶a(7) = 15: a(8) = 25
c=0
For i = 3 To 8
 If a(i - 2) + a(i - 1) = a(i) Then c = c + 1
Next i
Text1. Text = Str(c)
该程序段运行后,文本框Text1中显示的内容是(  )
A.1 B.2
C.3 D.4
2.有如下VB程序段:
a(1) = 1
a(2) = 3
 For i = 3 To 10
  a(i) = 2 * a(i - 1) - a(i - 2)
 Next i
执行该程序段后,数组元素a(8)的值为(  )
A.11 B.13
C.15 D.17
3.有如下VB程序段:
a(1) = 1: a(2) = 2
  b(1) = 1: b(2) = 2
  For i = 3 To 10
  a(i) = a(i - 1) + a(i - 2)
  b(i) = b(i - 1) + a(i)
 Next i
执行该程序段后,数组元素b(5)的值为(  )
A.5 B.10
C.18 D.31
4.有如下VB程序段:
  For i = 2 To 5
  j = i
  k = a(j)
  Do While a(j - 1) < k And j > 1
   a(j) = a(j - 1)
   j = j - 1
  Loop
  a(j) = k
 Next i
数组元素a(1)~a(5)的值依次为“79,20,34,56,61”,该程序段运行后,数组元素a(1)~a(5)的值依次是(  )
A.79,56,34,20,61 B.79,61,56,34,20
C.20,34,56,61,79 D.20,34,56,79,61
5.有如下VB程序段:
 s = “ ”
 For i = 1 To 5
For j = 1 To a(i)
s = s + Str(i)
Next j
  Next i
 Label1.Caption = s
数组元素a(1)~a(5)的值依次为“2,0,3,2,0”,执行该程序段,标签Label1中显示的内容为(  )
A.1 2 1 2 3 1 2 B.1 1 3 3 3 4 4
C.2 2 3 3 3 2 2 D.1 1 0 3 3 3 4 4 0
6.有如下程序段:
Private Sub Command1_Click()
 Dim d(1 To 10) As Integer, f(1 To 10) As Boolean
 Dim i As Integer, ans As Integer
 ′给数组元素d(1)~d(10)赋值,代码略
 For i = 1 To 10
f(i) = False
 Next i
 For i = 2 To 10
If d(i) - d(i - 1) > 0 Then
  f(i) = True
  d(i) = d(i) - d(i - 1)
End If
 Next i
 For i = 1 To 10
If f(i) Then ans = ans + 1
 Next i
 Label1.Caption = Str(ans)
End Sub
程序运行时,数组元素d(1)~d(10)的赋值分别为:25、15、10、8、1、7、8、11、16、5,则标签Label1中显示的内容为(  )
A.3 B.4
C.5 D.6
7.实现某算法的部分VB 程序段如下:
i = 1
Do While i <= 9
If a(i) <> 0 Then
j = 10
Do While j > i
    If a(j) = a(i) Then a(j) = 0
    j = j - 1
Loop
End If
i = i + 1
Loop
For i = 1 To 10
If a(i) <> 0 Then Text1.Text= Text1.Text+Str(a(i))
Next i
数组元素 a(1)到a(10)的数据依次为“4,1,6,4,4,9,1,7,6”,则程序运行后,文本框Text1中显示的内容是(  )
A.4 9 1 7 6 B.4 1 6 9 7
C.6 7 1 9 4 D.7 9 6 1 4
二、非选择题
8.杨辉三角,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。小杨同学设计了以下程序用来输出杨辉三角,程序界面如下图所示。
程序运行时,在文本框Text1里输入需要输出的杨辉三角的行数n,单击“打印”按钮后,在列表框List1中输出n行的杨辉三角。
(1)要使程序运行时自动清空文本框Text1中的内容,则应在事件处理过程________(填字母:A.Form_Load/B.Text1_Click/C.Command1_Click)中编写相应代码。
(2)实现上述功能的VB程序如下,请在划线处填入适当的代码。
Private Sub Command1_Click()
 Dim n As Integer, i As Integer, j As Integer, a(0 To 30) As Long
 Dim s As String
 List1.Clear
 ____①____
 a(1) = 1
 List1.AddItem Str(a(1))
 For i = 2 To n
  a(1) = 1
  s = “ ”
  For j = i To 1 Step -1
    ____②____
    s = Str(a(j)) + “ ” + s
  Next j
  ____③____
 Next i
End Sub
9.小明编写了一个特殊的排序程序,功能如下:随机产生10个1~100之间的整数,存储在数组a并显示在列表框 List1 中,单击“排序”按钮 Command1 后,在列表框 List2 中显示降序排序后的结果,运行界面如图所示。
特殊排序算法描述:
(1)排序过程中不改变数据的位置,即保持原有数据的位置不变。
(2)引入数组 index,用数组元素index(i)记录第i大的数据在数列中的位置。
(3)在数组 a 中找出最大数据,将其所在位置存放在数组元素 index(1)中,然后在余下的数据中找出最大数据,将其所在位置存放在index(2)中,以此类推,直到完成所有数据的位置存放。排序完毕, a(index(i))成为降序序列, 即 a(index(1)) ≥ a(index(2))≥a(index(3)) ≥…… ≥a(index(n))。
如 n=5 时,数组 a 排序后各变量值如下表所示。
i
1
2
3
4
5
a(i)
17
19
9
13
6
index(i)
2
1
4
3
5
a(index(i))
19
17
13
19
6
实现上述功能的 VB 程序如下,在程序划线处填入合适的代码。
Const n = 10, maxn = 100
Dim a(1 To n) As Integer, index(1 To n) As Integer, flag(1 To n) As Boolean
Private Sub Form_Load()
 Dim i As Integer
 Randomize
 For i = 1 To n
flag(i) = False
a(i) = Int(Rnd() * maxn) + 1
List1.AddItem Str(a(i))
 Next i
End Sub
Private Sub Command1_Click()
 Dim i As Integer, j As Integer, k As Integer
 For i = 1 To n
  For j = 1 To n
   If flag(j) = False Then______①____:Exit For
 Next j
 For m = k + 1 To n
   If ____②____Then k = m
  Next m
  index(i) = k
  flag(k) = True
 Next i
 For i = 1 To n
  List2.AddItem Str(____③____)
 Next i
End Sub
10.小华有k个好朋友(编号为1~k),有一天,她的k个朋友向她要照片,可她手上只有n张照片(n(1)她根据和每个朋友的亲密关系依次给他们打分;(分值为1~20间的整数)
(2)将k个朋友的打分按照分数的个位数数字分成10组(0~9),再给每组的朋友生成一个随机附加分;(分值为1~10间的整数)
(3)每个朋友的总分为亲密关系分加上附加分,总分最高的前n个朋友将得到照片,若分数相同,则编号小的朋友优先。
程序运行时,在文本框Text1中输入照片数,在文本框Text2中输入朋友数,单击“读取数据”按钮Command1,将读取与每个朋友的亲密关系分和每组的附加分,并将亲密关系分和附加分分别存放在数组a和数组c中,最后在列表框List1和List2中显示;单击“分组”按钮Command2,将亲密关系分进行分组,分组情况显示在列表框List3;单击“分发”按钮Command3,将分发情况(分到照片的朋友编号和总分)显示在列表框List4中。程序运行效果如下图所示。
小利依据上述描述设计了如下VB程序。请回答下列问题:
(1)程序运行时,若在文本框Text2中输入8,读取的数据如图所示,则第8位得到照片的朋友编号为________。
(2)请在划线处填入合适的代码。
Dim n As Integer, k As Integer
Dim a(1 To 200) As Integer, b(0 To 9) As String, c(0 To 9) As Integer
Dim d(1 To 10) As Integer, id(1 To 100) As Integer ′数组d存放总分,id存放朋友的编号
Private Sub Command1_Click()
 ′读取数据并存放在相应的数组中,代码略
End Sub
Private Sub Command2_Click()
 Dim i As Integer, m As Integer, s As String
 For i = 1 To n
    m = ____①____
    d(i) = ____②____
    b(m) = b(m) + Str(a(i))
 Next i
 For i = 0 To 9
  If b(i) < > “ ” Then List3.AddItem Str(i) + “:” + b(i)
 Next i
End Sub
Private Sub Command3_Click()
 Dim i As Integer, j As Integer, temp As Integer
 For i = 1 To n - 1
For j = n To i + 1 Step -1
  If ____③____ Then
temp = d(j): d(j) = d(j - 1): d(j - 1) = temp
temp = id(j): id(j) = id(j - 1): id(j - 1) = temp
  End If
Next j
 Next i
 For i = 1 To k
List4.AddItem Str(id(i)) + “ 号朋友的总分 ” + Str(d(i))
 Next i
End Sub
11.小李与小王合作编写一个成绩统计的VB程序:小王编写一个过程,该过程从数据库读取某一指定科目的相关数据,存储在数组a中;小李编写一个过程,该过程依据数组a中的相关数据统计各班平均分。小李与小王约定的数组a各元素含义如表所示。
数组元素
数组元素的含义
a(1)
存储班级数n
a(2)
从a(2)到a(n+1) 依次存储第1、2、…第n个班级人数

a(n+1)
a(n+2)
从a(n+2) 依次存储第1班每个学生的单科成绩、第2班每个学生的单科成绩、…第n班每个学生的单科成绩


程序功能如下:在文本框Text1中输入科目名称,单击“读取数据库”按钮Command1,程序从数据库读取数据;单击“开始统计”按钮Command2,程序进行统计处理,结果输出在列表框List1中。程序运行界面如下图所示。
实现上述功能的VB程序如下,请回答下列问题:
(1)根据程序运行界面中的数据及数组a各元素的含义,数组元素a(5)的值为________(填写数值)。
(2)分析程序,可知数据库的文件名为________。
(3)请在划线处填入合适的代码。
Dim a(1 To 600) As Integer ′数组大小满足处理要求
Private Sub Command1_Click()
 ′本过程由小王完成,从数据库读取指定科目的各相关数据,存储在数组a中
 Dim conn As New ADODB.Conncction
 Dim rs As New ADODB.Recordset
 conn ConncctionString=“provider=Microsoft.ACE.OLEDB.12.0;data source=”+ “Score.accdb”
 conn.Open
 Set rs.ActiveConnection = conn
 ′本过程的其他语句略
End Sub
Private Sub Command2_Click()
 ′依据数组a中的相关数据统计各班级平均分
 Dim i As Integer, j As Integer, n As Integer
 Dim p As Integer, sum As Integer, aver As Single
 ________①________
 p = n + 2
 For i = 1 To n
  sum = 0
  For j = 1 To a(i + 1)
  ________②________
p = p + 1
 Next j
 aver = sum / a(i + 1)
 List1.AddItem Str(i) + “  ” + Str(a(i + 1)) + “  ” + Str(aver)
 Next i
End Sub
12.由数组a生成数组b的方法描述如下:
(1)将数组a中的n个元素依次分割出若干个数据块,每个数据块有m×m个元素,m最大值为8,最小值为2。分割时,按尽可能大的数据块进行分割;
(2)对每个分割出的数据块用“方阵转换法”进行转换,每次转换后得到的数据块依次存储在数据b中;
(3)数组a分割后的剩余元素(个数小于4),直接依序存储到数组b中。
例如n=140时,可依次分割出3个数据块,元素的个数分别为64(8×8)、64(8×8)、9(3×3),剩余元素为3个。
“方阵转换法”过程如下:将数据块中m×m个元素按行序排列成一个数字方阵,从该数字方阵中按列序得到转换后元素的次序。以3×3数据块为例,转换过程如下图所示:
← 转换前元素次序
转换后元素次序→
小明依据上述描述设计了如下VB程序。请回答下列问题:
(1)当n=120时,分割出的第3个数据块元素个数为________。
(2)请在划线处填入合适的代码。
Const n = 120
Dim a(1 To n) As Integer
Dim b(1 To n) As Integer
Private Sub Command1_Click()
 Dim m As Integer, i As Integer
 Dim Start As Integer  ′当前未分割数据的第1个元素下标
 Dim Left As Integer ′当前未分割数据的个数
 Dim pa As Integer ′数组a的下标
 Dim pb As Integer ′数组b的下标
 ′读取n个转换前的数据,依次存储到a(1)、a(2)、……a(n)中,代码略
 m = 8
 Start = 1
 Left = n
 Do While Left > 3
If Left < m * m Then
m = ______①______
  Else
  pa = Start
  pb = Start
  For i = 1 To m * m
    b(pb) = a(pa)
    pb = pb + 1
    If i Mod m = 0 Then
    ______②______
    Else
      pa = pa + m
    End If
 Next i
  ______③______
 Start = Start + m * m
 End If
 Loop
 For i = Start To n
b(i) = a(i)
 Next i
′依次输出转换后数据b(1)、b(2)、……b(n),代码略
End Sub
13.小王编写了一个VB程序,该程序的功能是:有15个数形成环状,现要分别找出3个相邻的数,使其相加之和最大或最小。如15个数依次为:18 14 4 26 1 13 19 14 13 28 5 26 15 8 30,则相邻三数之和最大为62(30+18+14),相邻三数之和最小为31(4+26+1)。
程序运行时,先随机生成15个[1,30]区间内的整数,存储在数组a中,并在文本框Text1中显示;单击“计算”按钮Command2,则在标签Label4中显示连续三数最大和,在标签Label5中显示连续三数最小和,程序运行界面如图所示。
实现上述功能的VB程序如下,请回答下列问题:
(1)若15个数分别为:30 8 26 7 5 8 16 16 21 18 24 30 26 27 30,则相邻三数之和最大最小值分别为____________________。
(2)请在划线处填入合适的代码。
Dim a(0 To 14) As Integer
Private Sub Form_Load()
 ′随机生成15个数,存储在数组元素a(0)~a(14)中,并显示在文本框Text1中
End Sub
Private Sub Command1_Click()
 Dim i As Integer, j As Integer, k As Integer, max As Integer, min As Integer
 Dim sum As Integer, maxi As Integer, mini As Integer
 sum = 0
 max = 0
 min = 5000
 For i = 0 To 14
  j = (i + 1) Mod 15
  ______①______
sum = a(i) + a(j) + a(k)
If sum > max Then
   max = sum
  ______②______
End If
If sum < min Then
   min = sum
   mini = i
End If
Next i
Label4.Caption=a(maxi)&“+”&a((maxi+1) Mod 15)&“+”&a((maxi+2) Mod 15)& “=”&max
Label5.Caption=a(mini)&“+”&a((mini+1) Mod 15)&“+”&a((mini+2) Mod 15)& “=” &min
End Sub
14.产生10个[20-30]之间的不重复的正整数,并显示在列表框List1中给20~30号数组元素编号。如果数组元素为0,表示未产生,并把该数组元素的标志修改为1,直到产生10个数为止。例如产生的随机数是21,由先判断S(21)的值,如果大于0,表示该元素已经产生,如果s(21)=0表示该元素未产生,把该数产生的顺序存储。
Private Sub Command1_Click()
 Dim s(20 to 30) As Integer
 For i = 20 To 30
  s(i) = 0
 Next i
 Randomize
 i = 1
 Do While i <= 10
______①________
List2.AddItem Str((x)) ′显示程序过程中产生的数
If s(x) = 0 Then
  ______②________
  i =i+1
 End If
 Loop
 For i =20 to 30
  If s(i) > 0 Then List1.AddItem Str(i) + “产生顺序:” + Str(s(i))
 Next i
End Sub
同课章节目录