资源简介 专项测试七 数据存储与数组应用一、选择题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) = 25c=0For i = 3 To 8 If a(i - 2) + a(i - 1) = a(i) Then c = c + 1 Next iText1. Text = Str(c)该程序段运行后,文本框Text1中显示的内容是( )A.1 B.2 C.3 D.4解析 本题主要考查的是数组操作。本程序的功能是:统计满足条件“当前项等于前两项之和”的数组元素个数,数组元素a(3)、a(5)、a(7)满足条件,因此答案为C。答案 C2.有如下VB程序段:a(1) = 1a(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)135791113151719因此,数组元素a(8)的值为15,答案为C。答案 C3.有如下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)123581321345589b(1)b(2)b(3)b(4)b(5)b(6)b(7)b(8)b(9)b(10)1251018315286141230从上表可知b(5)=18,因此答案为B。答案 B4.有如下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,20C.20,34,56,61,79 D.20,34,56,79,61解析 本题主要考查的插入排序算法。插入排序算法的关键是找到要插入的位置,本程序为降序排序,算法思想为:将当前要插入的数(目标数)与它前面的数进行比较,若比目标数小,则将该数往后移动一个位置,继续往前比较,直到找到一个比它大的数或和前面的数全部比较完毕,最后将目标数插入。排序结束后数组元素a(1)~a(5)的值依次是“79,61,56,34,20”,因此答案为B。答案 B5.有如下VB程序段: s = “ ” For i = 1 To 5For 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 4C.2 2 3 3 3 2 2 D.1 1 0 3 3 3 4 4 0解析 本题主要考查的是二重循环和数组。需要注意的是:循环体的语句是“s = s + Str(i)”,因此答案为B。答案 B6.有如下程序段: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 10f(i) = False Next i For i = 2 To 10If 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 10If 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解析 本题主要考查的是程序的综合运用能力。程序执行过程各变量的变化如下表所示:ii=1i=2i=3i=4i=5i=6i=7i=8i=9i=10d(i)251510817811165d(i)>d(i - 1)?NNNNNYYYYNf(i)FFFFFTTTTFd(i)6297因此答案为B。答案 B7.实现某算法的部分VB 程序段如下:i = 1Do While i <= 9If a(i) <> 0 Thenj = 10Do While j > i If a(j) = a(i) Then a(j) = 0 j = j - 1LoopEnd Ifi = i + 1LoopFor i = 1 To 10If 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 7C.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 iEnd 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 s9.小明编写了一个特殊的排序程序,功能如下:随机产生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 排序后各变量值如下表所示。i12345a(i)17199136index(i)21435a(index(i))191713196实现上述功能的 VB 程序如下,在程序划线处填入合适的代码。Const n = 10, maxn = 100Dim a(1 To n) As Integer, index(1 To n) As Integer, flag(1 To n) As BooleanPrivate Sub Form_Load() Dim i As Integer Randomize For i = 1 To nflag(i) = Falsea(i) = Int(Rnd() * maxn) + 1List1.AddItem Str(a(i)) Next iEnd SubPrivate 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 iEnd 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 IntegerDim a(1 To 200) As Integer, b(0 To 9) As String, c(0 To 9) As IntegerDim d(1 To 10) As Integer, id(1 To 100) As Integer ′数组d存放总分,id存放朋友的编号Private Sub Command1_Click() ′读取数据并存放在相应的数组中,代码略End SubPrivate 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 iEnd SubPrivate Sub Command3_Click() Dim i As Integer, j As Integer, temp As Integer For i = 1 To n - 1For j = n To i + 1 Step -1 If ____③____ Thentemp = d(j): d(j) = d(j - 1): d(j - 1) = temptemp = id(j): id(j) = id(j - 1): id(j - 1) = temp End IfNext j Next i For i = 1 To k List4.AddItem Str(id(i)) + “ 号朋友的总分 ” + Str(d(i)) Next iEnd 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)存储班级数na(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 SubPrivate 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 iEnd 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 = 120Dim a(1 To n) As IntegerDim b(1 To n) As IntegerPrivate 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 Thenm = ______①______ 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 nb(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+113.小王编写了一个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 IntegerPrivate Sub Form_Load() ′随机生成15个数,存储在数组元素a(0)~a(14)中,并显示在文本框Text1中End SubPrivate 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 IfNext iLabel4.Caption=a(maxi)&“+”&a((maxi+1) Mod 15)&“+”&a((maxi+2) Mod 15)& “=”&maxLabel5.Caption=a(mini)&“+”&a((mini+1) Mod 15)&“+”&a((mini+2) Mod 15)& “=” &minEnd Sub答案 (1)87、20 (2)①k = (i + 2) Mod 15②maxi = i14.产生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 iEnd 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) = 25c=0For i = 3 To 8 If a(i - 2) + a(i - 1) = a(i) Then c = c + 1 Next iText1. Text = Str(c)该程序段运行后,文本框Text1中显示的内容是( )A.1 B.2 C.3 D.42.有如下VB程序段:a(1) = 1a(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.173.有如下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.314.有如下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,20C.20,34,56,61,79 D.20,34,56,79,615.有如下VB程序段: s = “ ” For i = 1 To 5For 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 4C.2 2 3 3 3 2 2 D.1 1 0 3 3 3 4 4 06.有如下程序段: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 10f(i) = False Next i For i = 2 To 10If 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 10If 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.67.实现某算法的部分VB 程序段如下:i = 1Do While i <= 9If a(i) <> 0 Thenj = 10Do While j > i If a(j) = a(i) Then a(j) = 0 j = j - 1LoopEnd Ifi = i + 1LoopFor i = 1 To 10If 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 7C.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 iEnd Sub9.小明编写了一个特殊的排序程序,功能如下:随机产生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 排序后各变量值如下表所示。i12345a(i)17199136index(i)21435a(index(i))191713196实现上述功能的 VB 程序如下,在程序划线处填入合适的代码。Const n = 10, maxn = 100Dim a(1 To n) As Integer, index(1 To n) As Integer, flag(1 To n) As BooleanPrivate Sub Form_Load() Dim i As Integer Randomize For i = 1 To nflag(i) = Falsea(i) = Int(Rnd() * maxn) + 1List1.AddItem Str(a(i)) Next iEnd SubPrivate 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 iEnd Sub10.小华有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 IntegerDim a(1 To 200) As Integer, b(0 To 9) As String, c(0 To 9) As IntegerDim d(1 To 10) As Integer, id(1 To 100) As Integer ′数组d存放总分,id存放朋友的编号Private Sub Command1_Click() ′读取数据并存放在相应的数组中,代码略End SubPrivate 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 iEnd SubPrivate Sub Command3_Click() Dim i As Integer, j As Integer, temp As Integer For i = 1 To n - 1For j = n To i + 1 Step -1 If ____③____ Thentemp = d(j): d(j) = d(j - 1): d(j - 1) = temptemp = id(j): id(j) = id(j - 1): id(j - 1) = temp End IfNext j Next i For i = 1 To k List4.AddItem Str(id(i)) + “ 号朋友的总分 ” + Str(d(i)) Next iEnd Sub11.小李与小王合作编写一个成绩统计的VB程序:小王编写一个过程,该过程从数据库读取某一指定科目的相关数据,存储在数组a中;小李编写一个过程,该过程依据数组a中的相关数据统计各班平均分。小李与小王约定的数组a各元素含义如表所示。数组元素数组元素的含义a(1)存储班级数na(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 SubPrivate 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 iEnd Sub12.由数组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 = 120Dim a(1 To n) As IntegerDim b(1 To n) As IntegerPrivate 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 Thenm = ______①______ 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 nb(i) = a(i) Next i′依次输出转换后数据b(1)、b(2)、……b(n),代码略End Sub13.小王编写了一个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 IntegerPrivate Sub Form_Load() ′随机生成15个数,存储在数组元素a(0)~a(14)中,并显示在文本框Text1中End SubPrivate 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 IfNext iLabel4.Caption=a(maxi)&“+”&a((maxi+1) Mod 15)&“+”&a((maxi+2) Mod 15)& “=”&maxLabel5.Caption=a(mini)&“+”&a((mini+1) Mod 15)&“+”&a((mini+2) Mod 15)& “=” &minEnd Sub14.产生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 iEnd Sub 展开更多...... 收起↑ 资源列表 专项测试七 数据存储与数组应用.doc 专项测试七 数据存储与数组应用原卷版.doc