资源简介 1排序查找专题练1. 【五校联考】数组 a 存储 n 个学生的性别和身高数据,其中奇数位置存储性别,偶数位置存储身高,数组的存储结构如下表所示:该 n 位学生站成一排合影:男生全部在一侧,从低到高排序:女生全部在另一侧,从高到低排(所有人的身高 h为整数,且 100≤h≤200),排序前显示于 List1,排序后显示 List2,如图所示。实现上述功能的 VB 程序如下,请回答下列问题。Const n=10Dim a( 1 to 2 * n ) As StringPrivate Sub Form_Load( )‘读取身高和性别数据,存储在数组 a中,并显示于列表框 List1中,代码略End SubPrivate Sub Comd1_Click( )Dim count As Integer, i As Integer, j As Integercount = 0For i = 1 To n - 1start = 1For j = n To i + 1 Step -1If a(2 * j - 1) = "男" ThenIf a(2 * j - 2) < a(2 * j) Thent = a(2 * j - 2): a(2 * j - 2) = a(2 * j): a(2 * j) = tt = a(2 * j - 3): a(2 * j - 3) = a(2 * j - 1): a(2 * j - 1) = tstart = jEnd IfElseIf a(2 * j - 3) = "女" ThenIf Thent = a(2 * j - 2): a(2 * j - 2) = a(2 * j): a(2 * j) = tt = a(2 * j - 3): a(2 * j - 3) = a(2 * j - 1): a(2 * j - 1) = tstart = jEnd IfEnd IfNext ji = start - 1count = count + 1Next iFor i = 1 To nList2.AddItem a(2 * i + 1) + a(2 * i)Next iEnd Sub(1)程序代码中,加框处有错误,请改正。(2)程序代码中,将下划线处语句补充完整。2(3)对于数据(男, 180, 女, 165, 男,170, 女,161, 男,176),程序运行后,变量 count 的值为 。2.【之江第二次联考】数组 a 存储降序排列的 m 个数据,数组 b 中存储的是升序排列的 n 个数据,且两个数 组中存储的数据为区间[1,20]范围内的不重复的随机整数。现将两个数组的数据合并到 c 数组中,使 c 数组的数据为左右交替上升,如下表所示:当窗体 Form1 加载时,自动产生 a、b 数组的数据,并分别显示在列表框 List1 与 List2 中,单击合并按钮 Command1 后,在 c 数组中保存按规则合并后的 a、b 数组的数 据,并显示在列表框List3 中。程序截图如 下所示:实现该功能的 VB 程序如下:Const m = 5Const n = 6Dim a(1 To m) As IntegerDim b(1 To n) As IntegerDim c(1 To m + n) As Integer‘窗体加载时,生成数组 a、b 中的数据,并按要求排序后显示在列表框中,代码略Private Sub Command1_Click()Dim pa As Integer, pb As Integer, pc As Integer, s As Integer, flag As Booleanpa = m: pb = 1: pc = 1flag = TrueDo While ① _If a(pa) < b(pb) Thens = a(pa)pa = pa - 1Elses = b(pb)pb = pb + 1End Ifc(pc) = sIf flag Thenpc = m + n - pc + 1Elsepc = m + n – pcEnd If② _Loop‘处理 a、b 数组中剩余数据,并在列表框 List3 中输出数组 c,代码略End Sub(1)窗体加载的事件处理过程名为____。(填字母:A. Form1_Click / B. Form1_Load / C. Form_load)(2)加框处代码有错,请改正。3(3)在划线处填入合适的代码。3.【金华十校】小刘设计一个排序算法,该排序算法会将数组 a 中的奇数位的元素从小到大排列,偶数位的元素从大到小排列,程序界面如图 15,算法的 VB 程序段如下:Private Sub command2_click( )Dim i As Integer, j As Integer, tmp As IntegerDim s1 As String, t As Integer, s2 As Stringt = 1For i = 1 To n - 2For j = i + 1 To n Step 2If a(i) * t > a(j) * t Thentmp = a(i): a(i) = a(j): a(j) = tmpEnd IfNext j▲ _Next iFor i = 1 To nIf ▲ Thens1 = s1 + Str(a(i))Elses2 = s2 + Str(a(i))End IfNext itext2.Text = "奇数位:" + s1text3.Text = "偶数位:" + s2End Sub(1) 程序代码中,For 语句加框处有错,应改为: ▲ _(2) 划线处的代码应填: ① ▲ ② ▲ _(3) 若将划线处“For i=1 to n-2 ”修改为“For i=1 to n-1 ”是否会出错? ▲ (填是/否)4. 【温州一模】数组 a 中存储的是两个数列交替排序的 n 个正整数,下标为奇数的数组元素都是奇数且为升 序排列,下标为偶数的数组元素都是偶数且为降序排列。排序示例如下。依据对分查找思想,设计一个在数组 a 中查找数据 key 的程序,实现该功能的 VB 程序如下,请回答下列问题:(1)观察程序代码,该事件处理过程名为 ▲ 。(2)程序加框处代码有错,请改正。(3)请在划线处填入合适的代码。Private Sub Search_Click()Const n = 10Dim a(1 To n) As IntegerDim i As Integer, j As Integer, m As Integer, f As Boolean, key As Integer’读取一组正整数,按上述规则存入数组 a 中。代码略key = Val(Text1.Text)If key Mod 2 = 1 Then i = 1 Else i = 24j = n :f = FalseDo While i <= j And Not fIf key Mod 2 = 0 Thenm = (i + j) \ 2 - (i + j) \ 2 Mod 2Elsem = ① _End IfIf key = a(m) Thenf = TrueElseIf key Mod 2 = 0 And key < a(m) Thenj = m - 2Elsei = ② _End IfLoopIf f Then Label1.Caption = Str(m) Else Label1.Caption = "不存在"End Sub5. 【浙南名校】小明学了排序和查找算法后,编写了一个处理成绩的程序。单击“获取成绩”按钮得到 n 个非 降序数保存在数组 a(1)—a(n)中,并显示在 List1 中。在文本框 Text1 中输入成绩key,单击“查 找”按钮,则在标签 label1 中显示共有多少位同学的成绩大于等于该成绩。(1)加框 1 处的程序代码有错,应改为 。(2)请在划线处填入合适代码:Dim a(1000) As Integer, n As IntegerPrivate Sub Command1_Click()'从数据库获取 n 个成绩存储在 a(1)-a(n)组中,代码略For i = 2 To n ‘排序tmp = a(i) :j = 1Do While tmp >= a(j)j = j + 1If ① Then Exit DoLoopFor k = i To j + 1 Step -1a(k) = a(k - 1)Next ka(k-1) = tmp '改错 (1)Next iFor i = 1 To nList1.AddItem Str(a(i))Next iEnd SubPrivate Sub Command2_Click()Dim key As Integer, i As Integer, j As Integer, m As Integerkey = Val(Text1.Text)i = 1: j = nDo While i <= j5m = (i + j) \ 2Do While tmp >= a(j)If ② Thenj = m - 1Elsei = m + 1End IfLoopLabel1.Caption = "共有" + ③ + "位同学大于等于该成绩。"End Sub6. 【名校协作体】数组 a 中存储了 n 个学生的学号和成绩数据,其中奇数位置存储学号信息,偶数位置存储成绩信息,数组存储结构如第 15 题图 a 所示:1 2 3 4 5 6 …… 2n-1 2n学号 成绩 学号 成绩 学号 成绩 …… 学号 成绩第 1个学生信息 第 2个学生信息 第 3 个学生信息 第 n个学生信息第 15 题图 a 排序前数组 a存储结构小迪同学使用选择排序思想对上述 n 个同学按成绩进行降序排序(成绩相同的按学号升序排列),并依据成绩插入各位同学的名次信息,处理结束的数组 a存储结构如第 15 题图 b 所示。1 2 3 4 5 6 7 8 9 …… 3n-2 3n-1 3n名次 学号 成绩 名次 学号 成绩 名次 学号 成绩 …… 名次 学号 成绩第 1个学生信息 第 2个学生信息 第 3 个学生信息 第 n 个学生信息第 15 题图 b 排序排名后数组 a 存储结构小迪同学使用 VB 编写了成绩处理程序,程序运行界面如第 15 题图 c所示:第 15 题图 c实现上述功能的 VB 程序如下,请回答下列问题。Const n = 20Dim a(1 To 3 * n) As Integer6Private Sub Command1_Click()'读取数据,存储在数组 a 中,并显示在列表框 List1 中'代码略End SubPrivate Sub Command2_Click()For i = n To 2 Step -1 '①改错k = iFor j = 1 To i - 1If a(2 * j) < a(2 * k) Or ② Thenk = jEnd IfNext ja(3 * i) = a(2 * k)a(3 * i - 1) = a(2 * k - 1)③a(2 * k - 1) = a(2 * i - 1)Next iList2.AddItem "第 1 名: 学号" + CStr(a(2)) + ",分数" + Str(a(3))a(1) = 1mc = 1For i = 2 To nIf ④ Then mc = iList2.AddItem "第" + Str(mc) + "名: 学号"+ CStr(a(3*i-1))+",分数"+ Str(a(3*i))a(3 * i - 2) = mcNext iEnd Sub(1) 已知窗体名称为 Form1,要使程序加载时,窗体标题自动显示为“第 15 题程序”,则可在_____________(单选,填字母)事件过程中添加代码:Form1.Caption= "第 15 题程序"。A.Form_Click() B.Form_Load() C.Form1_Click() D.Form1_Load()(2)程序加框处 For 循环语句有错,请改正。(3)请将程序②③④划线处代码补充完整。7.【台州一模】小王基于选择排序算法编写了一个 VB 程序,功能如下:读取若干数据一次存在数组a 中,并将数据分段排序,每段数据的元素个数及排序的次序要求依次存储在数组 b 中。如图,在文本框 Text1 中显示数组 a 的原始数据,在文本框 Text2 中显示每段数据的元素个数及排序次序要求(0 表示升序,1 表示降序);单击“排序”按钮 Command1,根据要求输出对每段数据进行排序的结果。实现上述功能的 VB 程序如下:Dim n As IntegerDim a(1 To 100) As IntegerDim b(1 To 100) As IntegerPrivate Sub form_load()’读取若干数据依次存储到数组 a中,并将数据元素的总个数存储到变量 n中;’将每段数据的元素个数及排序的次序依次存储到数组 b中;’b (1 )、b( 2 )分别存储第 1段数据的元素个数、排序的次序,’b (3 )、b( 4 )分别存储第 2段数据的元素个数、排序的次序,……End Sub7Private Sub Command1_Click()Dim i As Integer, j As Integer, k As Integer, t As IntegerDim pb As inetger, endpos As Integerpb = 1: endpos = b(1)For i = 1 To n - 1If i = endpos Thenpb = pb + 2: i = endpos + 1__________①____________End Ifk = iFor j = i + 1 To endposIf a(j) < a(k) Then k = j ’(2)Next jIf k <> i Then___________②___________End IfNext itext3.Text = "" ’(4)For i = 1 To ntext3.Text = text3.Text + Str(a(i))Next iEnd Sub(1)程序加框处代码有错,请改正。(2)为了实现上述功能,在划线处填写合适的代码。(3)若程序运行时,读取了 100 个整数存储到数组 a 中,数组 b 各元素的值依次为“30,1,20,0,40,0,10,1”,则程序运行到(4)处代码时,endpos 的值为 。8.【嘉兴一模】编写 VB 程序,对地震观测点数据分析。程序运行时,点击“强震观测点>100”按钮Command1,在左侧列表框 List1中输出强震观测点超过 100个的地区相关数据,并在标签 Label1中输出满足条件的地区数;然后单击“排序”按钮 Command2,将列表框 List1中数据按“强震观测点”个数降序排序,在右侧列表框 List2中输出排序结果,并在标签 Label2中输出强震观测点最多的地区。程序运行界面如图所示。实现上述功能代码的 VB程序如下:强震观测点数大于 100 的地区有 9 个强震观测点数目最多的地区是云南强震观测点 > 100 排序8Dim conn As NewADODB.Connect ‘定义一个 Connection对象实例Dim rs As NewADODB.Recordset ‘创建 ADO 的 Recordset对象实例 rsDim dq(1 to 100) As String ‘dq数组用来保存地区名称Dim qz(1 to 100) As Integer ‘qz数组用来保存强震观测点的数目Dim dq2(1 to 100) As String ‘dq2数组用来保存强震观测点数大于 100的地区名称Dim qz2(1 to 100) As String ‘qz2数组用来保存强震观测点大于 100地区的观测点数Dim i As Integer, c As IntegerPrivate Sub Form_Load()Conn,connectionString =” priovider=Microsoft.ACE.OLEDB.12.0:datasource=”&App.Path&” \地震.accdb”Conn.OpenSet rs.ActiveConnection = connrs.Open “select * from 源数据”i = 0Do While Not rs.EOFi = i + 1dq (i) = rs.Fields (“地区”)qz (i) = ① _ ‘读取当前记录“强震观测点”字段的值赋给 qz(i)rs.MoveNextLoopEnd SubPrivate Sub command1_click()Dim j As integerList1.Clearc = 0For j = 1 To iIf qz(j) > 100 ThenList1.additem dq(j) & ”强震观测点数目为:”& str(qz(j))& ”个”c = c + 1dq2(c) = dq(j)qz2(c) = qz(j)End IfNext jLabel1.Caption=”强震观测点大于 100的地区共有”& Str(c) & ”个”End SubPrivate Sub command2_click()Dim j As Integer,temp As Integer,mAs IntegerDim temp2 As StringDim Flag As Booleanj = 1 : Flag=TrueDo While ② _Flag = FalseFor m = c To j + 1 Step -1If dq2(m) < dq2(m+1) Then ‘加框处代码有误temp = qz2(m): qz2(m) = qz2(m - 1): qz2(m - 1) = temp9temp2 = dq2(m): dq2(m) = dq2(m - 1): dq2(m - 1) = temp2Flag = TrueEnd IfNext mj = j + 1LoopList2.ClearFor j = 1 To cList2.AddItem dq2(j) & “强震观测点数目为:” & Str(qz2(j)) & ”个”Next jLabel2.Caption = ” 强震观测点数目最多的地区是” & ③ _End Sub请回答以下问题:(1)运行程序所需数据来自数据库文件“地震.accdb”中的数据表“源数据”(其部分界面如下图所示),则 ① 处正确的代码为 。(单选:A. rs.Fileds(6) / B. rs.Fileds(7) )ID 地区 监测总台数 国家级监测台 省级监测台 市县级监测台 强震观测点 单击以添加(2)请在划线处②、③填入合适的代码。(3)加框处代码有误,请改正。9. 【9+1 联盟】有一数组 a具有 n(1≤n≤100)个元素,分别为 a(1)到 a(n),数组元素都为正整数且有可能相等。对于每一个数组元素,如果它后面存在大于或等于该元素的数,则这两个数可以组成一对。每个元素和自己也可以组成一对。例如:{3,7,2,4,8},可以组成 12 对,分别为(数字为下标):(1,1),(1,2),(1,4),(1,5),(2,2),(2,5),(3,3),(3,4),(3,5),(4,4),(4,5),(5,5).其中(1,5)是距离最远的一对,距离为 4。小明编写了一个 VB 程序,用于计算 n 个数组元素的最远距离。具体功能如下:运行程序时,在列表框 List1 中显示 n个数组元素,单击命令按钮 Command1,在文本框中显示这 n个数组元素的最远距离。运行效果如图所示:实现上述功能的 VB 代码如下:Const n = 5Dim a(1 To n) As Integer '用于记录每个数组元素的值Dim b(1 To n) As Integer '用于记录每个数组元素在原数组中的下标10Private Sub Form_Load()'读取一组正整数,存储在数组 a 中'将每个数组元素在原数组中的下标存储在数组 b 中'将数组元素显示在列表框 List1 中'代码略End SubFunction Getans() As IntegerDim left As Integer, ans As Integerleft = 10000: ans = 0For i = 1 To nIf b(i) < left Then left = b(i)If b(i) - left > ans Then ans = b(i) - leftNext iGetans = ansEnd FunctionPrivate Sub Command1_Click()Dim i As Integer, j As Integer, t As IntegerFor i = 1 To nFor j = n To i + 1 Step -1If a(j) <= a(j - 1) Thent = a(j): a(j) = a(j - 1): a(j - 1) = tt = b(j): b(j) = b(j - 1): b(j - 1) = tEnd IfNext jNext iText1.Text = ___________________End Sub(1)请在划线处填入合适代码。(2)加框处代码有误,请改正。(3)如程序运行界面所示数据,单击命令按钮 Command1 后,数组元素 b(2)的值为 。10. 【绍兴一模】数组 a 保存 n 个(n≤1000)区间的端点:数组元素 a(1)、a(2)保存第 1 个区间左、右端点,a(3)、a(4)保存在第 2 个区间左、右端点,……。区间排序方法(以升序为例):先按区间的左端点进行升序排序,当左端点相同时,再按右端点升序排序。示例:[1,2],[3,5],[5,6],[3,4]升序排序后的结果为:[1,2],[3,4],[3,5],[5,6]。小沈基于选择排序思想对 n个区间进行升序排序并进行了优化,VB 程序如下:Dim a(1 To 2 * 1000) As Integer'读取 n 个区间的左、右端点值存数组 a,代码略Private Sub Cmd1_Click()Dim i As Integer, j As Integer, p As Integer, q As IntegerDim iMax As Integer, iMin As Integerp = ① : q = nDo While p < qIf IsLarger(p, p + 1) TheniMax = p: iMin = p + 1Else11iMax = p + 1: iMin = pEnd If'先对区间两两分组处理,如果剩余 1个区间再进行处理For i = p + 3 To q Step 2If ② ThenIf IsLarger(i, iMax) Then iMax = iIf IsLarger(iMin, i - 1) Then iMin = i - 1ElseIf IsLarger(i - 1, iMax) Then iMax = i - 1If IsLarger(iMin, i) Then iMin = iEnd IfNext iIf n Mod 2 = 1 ThenIf IsLarger(q, iMax) Then iMax = qIf IsLarger(iMin, q) Then iMin = qEnd Ift = a(2 * iMin - 1): a(2 * iMin - 1) = a(2 * p - 1): a(2 * p - 1) = tt = a(2 * iMin): a(2 * iMin) = a(2 * p): a(2 * p) = tIf iMax = p Then iMin = iMaxt = a(2 * iMax - 1): a(2 * iMax - 1) = a(2 * q - 1): a(2 * q - 1) = tt = a(2 * iMax): a(2 * iMax) = a(2 * q): a(2 * q) = tp = p + 1: q = q - 1Loop'输出排序结果,代码略End Sub'本函数判断 a 数组中第 i 区间是否大于第 j 区间,如果是则返回 True,否则返回 FalseFunction IsLarger(i As Integer, j As Integer) As BooleanIf a(2 * i - 1) > a(2 * j - 1) Or a(2 * i - 1)=a(2 * j - 1) And a(2 * i) > a(2 * j) ThenIsLarger = TrueElseIsLarger = FalseEnd IfEnd Function11.【2019.9 嘉兴期末】编写 VB 程序,实现在一个升序排列的数组中查找绝对值最小的元素。已知数组元素由正整数、负整数或 0构成。例如:数组元素值为 [-9,-5,-3,-l,2,5,7,17],该数组中绝对值最小的元素为-1。程序运行时,产生 n 个元素,在列表框 Listl 中显示,单击按钮 Commandl,在标签 Label1 中输出绝对值最小的元素。运行结果如下图所示,实现上述功能的VB 代码如下:12Const n = 15Dim a(1 To n) As IntegerPrivate Sub Form_Load()'产生 n 个由正整数、负整数或 0 构成的元素,存储在数组 a 中,并升序排列,代码略End SubPrivate Sub Command1_Click()Dim i As Integer, j As Integer, m As Integer, absmin As Integerflag = False: i = 1: j = nDo While i <= jm = (i + j) \ 2If a(m) = 0 Thenflag = True: absmin = a(m): Exit DoElseIf a(m) >= 0 ThenIf ① Thenj = m - 1Elseflag = Trueabsmin = dmin(a(m - 1), a(m))End IfElseIf a(m + 1) < 0 Theni = m + 1Elseflag = True②End IfEnd IfLoopLabel1.Caption = "绝对值最小的元素是:" + Str(absmin)End SubFunction dmin(x As Integer, y As Integer) As IntegerIf Abs(x) < Abs(y) Then dmin = x Else dmin = yEnd Function12. 【自编】编写一个 VB 程序,实现功能如下:将一组升序排列的数据“1,3,3,5,5,7,10,11,12,15”Const n = 10Dim a(1 To 10) As IntegerPrivate Sub Form_Load()<依次存储在数组 a 中,在文本框 Text1 中输入 k1,在文本框 Text2 中输入成绩 k2(k1>k1 且<k2 的数据的起止位置。程序运行界面如图所示,请在划线处填入合适代码。13'将升序排列的数据存储到数组 a 中,代码略End SubPrivate Sub Command1_Click()Dim k1 As Integer, k2 As Integer, i As Integer, j As Integer, m As IntegerDim t As Integer, L As Integer, R As Integerk1 = Val(Text1.Text)k2 = Val(Text2.Text)If k1 > k2 Then t = k1: k1 = k2: k2 = t'寻找起始位置i = 0: j = ①Do While i < jm = (i + j + 1) \ 2If k1 < a(m) Thenj = m - 1Elsei = ②End IfLoopL = ③'寻找结束位置i = 0: j = n + 1Do While i + 1 < jm = (i + j) \ 2If ④ Thenj = mElsei = mEnd IfLoopR = ⑤Label3.Caption = ">" + Str(k1) + ",<" + Str(k2) + "的数据位置为:"Text3.Text = Str(L) + " -" + Str(R)End Sub13. 【2019.11 杭州期中】对 k (k<=100)个数据进行排序时,可以利用一种排序方式进行处理,算法如下: ①每次将第 i 个数据和第 2*i 以及第 2*i+1 个位置的数据进行比较,将较大值交换到第 i 置上; ②从数组的第 i(未排序数据个数一半位置)个位置重复步骤①一直比较到最前面,这样就可将最大值交换到第 1 个位置; . ③最终将 1 号位置上的值与未排序数据的最后一个进行交换, 得到最大值; ④反复执行①②③三个步骤就可以将数据按升序排序 过程如下图所示,其中a(1)=11, a(2)=25, a(3)=52, a(4)=39, a(5)=46, 开始比较的位置从 i=k\2 个位置开始;14第一次排序过程:步骤①:步骤②:步骤③:第二次排序过程:现要求在文本框 Text1 中输入一个整数 k,对 k 个随机生成的两位奇数按上述排序方法进行排序,代码和程序运行界面如下所示,请在划线处填入合适的代码,并且在加框处代码有错误,请改正:Dim a(1 To 100) As IntegerDim k As IntegerPrivate Sub Command1_Click()Dim i As Integerk = Val(Textl.Text)RandomizeFor i = 1 To ka(i) = ①List1.AddItem Str(a(i))Next iEnd SubPrivate Sub Cormand2_Click()Dim i As Integer, j As Integer, t As Integer, flag As IntegerFor i = 1 To k - 1For j = k \ 2 To 1 Step -1If Not judge(i, j) ThenIf ② Thent = a(j): a(j) = a(2 * j): a(2 * j) = tElset = a(j): a() = a(2 * j + 1): a(2 * j + 1) = t15End IfEnd IfNext jt = a(1): a(1) = a(k - i + 1): a(k - i + 1) = tNext iFor i = 1 To kList2.AddItem Str(a(i))Next iEnd SubFunction judge(t As Integer, s As Integer) As Boolean③ _If a(s) > a(2 * s) And a(s) > a(2 * s + 1) Or a(s) > a(2 * s) And 2 * s > k - t Thenjudge = TrueEnd IfEnd Function(1)如果现有数据 a(1)=27,a(2)=12,a(3)=33,a(4)=78,a(5)=61,完成一次排序之后 a(2)的值是 。14. 【2018.9 宁波十校】小明编写了一个 VB 程序对成绩数据进行排序。为保证相同分数的同学相对位置(指原数据中的前后关系)不发生改变,他试着采用一种新的排序算法来解决。为便于描述算法的实现过程,假定有如下数组 a:下标 1 2 3 4 5值 5 3 3 2 4第一步:统计数组 a 中每个值 a(i)出现的次数,存入 b(a(i)),统计完成后数组 b 的情况如下:下标 1 2 3 4 5值 0 1 2 1 1第二步:从前向后,依次使数组 b 中的每个值等于其与前一项之和,这样数组 b(a(i))就代表了数组 a 中小于或等于 a(i)的元素个数,完成第二步后数组 b 如下:下标 1 2 3 4 5值 0 1 3 4 5第三步:从后往前,依次将数组 a 中元素填入数组 c 中,将数组元素 a(i)放在数组 c 的第 b(a(i))项,如元素 a(1)=5,应该放在数组 c 的 b(5)位(即 c(5))。每放一个元素就将 b(a(i))递减;完成第三步后,数组 c 如下所示,已经完成升序排序,且相对位置不变,即原来 a(2)的值 3 仍然在 a(3)的值 3 前面。下标 1 2 3 4 5值 2 3 3 4 5程序运行界面如右图所示:实现上述功能的 VB 程序如下,回答以下问题:(1)从代码中可以得知,用于连接数据库的对象名是: 。Dim a(1 To 50) As Integer '存放学生的成绩Dim sname(1 To 50) As String '存放学生姓名Dim n As IntegerPrivate Sub Command1_Click()Dim conn As New ADODB.Connection16Dim rs As New ADODB.Recordsetconn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data"Source=" + App.Path +"\stu.accdb"conn.OpenstrSQL = "SELECT * From stucj"Set rs.ActiveConnection = connrs.Open strSQLn = 0List1.AddItem "姓 名" & " " & "成绩"Do While Not rs.EOF_________①_________a(n) = rs.Fields("cj")sname(n) = rs.Fields("xm")List1.AddItem sname(n) & " " & Str(a(n))rs.movenexLooprs.Closeconn.CloseEnd SubPrivate Sub Command2_Click()Dim i As Integer, k As IntegerDim b(0 To 100) As IntegerDim c(1 To 50) As Integer, c1(1 To 50) As String 'c 和 c1 作为临时数组For i = 1 To nb(a(i)) = b(a(i)) + 1Next iFor i = 1 To 100b(i) = ②Next iFor i = n To 1 Step -1c(b(a(i))) = a(i)c1(b(a(i))) = sname(i)_________③___________Next iFor i = 1 To n '把临时数组 c 和 c1 中的数据放入 a 和 sname 数组a(i) = c(i)sname(i) = c1(i)Next iList2.AddItem "姓 名" & " " & "成绩"For i = 1 To nList2.AddItem sname(i) & " " & Str(a(i))Next iEnd Sub17参考答案:1.(1)① start=n② a(2 * j - 3) = "女" Or a(2 * j - 2) > a(2 * j) 或a(2 * j - 3) < a(2 * j - 1) Or a(2 * j - 2) > a(2 * j)a(2 * j - 3)<>a(2*j-1) Or a(2 * j - 2) > a(2 * j) 或其他等价答案(2) a(2 * j - 2) < a(2 * j)(3) 32. (1)C (2)m + n – pc + 2 (3)① pa >= 1 And pb <= n ② flag = Not flag3. (1)i+2 (2)① t = - t ② i mod 2 = 1 (3)否4. (1)Search_Click()(2)key mod 2 = 0 and key > a(m) or key mod 2 = 1 and key < a(m)(3)① (i+j) \ 2 - ((i+j) \ 2 + 1) mod 2 ② m+25. (1)a(k) = tmp (2)① j = i ② a(m)>=key ③ str(n-j) 或者 str(n-i+1)6. (1) B(2)① For i = n to 1 step -1 (1 分)(3)② Or a(2 * j) = a(2 * k) And a(2 * j - 1) > a(2 * k - 1)③ a(2*k)=a(2*i)④ a(3 * i) < a(3 * i - 3)7. (1) b(pb + 1) = 0 and a(j)a(k) 或(-1) ^ b(bp + 1) * a(j) < (-1) ^ b(bp + 1) * a(k)(2)① endpos = endpos + b(pb)② t = a(k) : a(k) = a(i) : a(i) = t(3)1008. (1) A (2)② flag And j <= c - 1 ③ dq2(1) (3)qz2(m) > qz2(m - 1)9. (1)Str(Getans()) (2)a(j) < a( j - 1) (3)110. (1)1 (2)IsLarger(i , i - 1) (3)iMax = iMin11. (1)Not Flag 或 Not Flag and i <= j(2)a(m - 1) > 0 或 a(m) * a(m - 1) > 0 或 a(m) + a(m - 1) > 0(3)absmin = dmin(a(m),a(m + 1)) 或 absmin = dmin(a(m + 1),a(m))12. ① n ② m ③ i + 1 或 j + 1 ④ k2 <= a(m) ⑤ i 或 j - 113. (1) 27(2) (k-i+1)\2(3) ① Int(Rnd * 45) * 2 + 11 等同答案即可② 2 * j + 1> k – i + 1 Or a(2 * j) > a(2 * j + 1) 等同答案即可③ judge = False14. (1) conn (2) ① n=n+1 ② b(i)+b(i-1) ③ b(a(i))=b(a(i))-1 展开更多...... 收起↑ 资源预览