資源簡介 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 展開更多...... 收起↑ 資源預覽 縮略圖、資源來源于二一教育資源庫