中文字幕精品无码一区二区,成全视频在线播放观看方法,大伊人青草狠狠久久,亚洲一区影音先锋色资源

2020屆浙江選考信息技術 排序查找專題練(pdf版,有答案)

資源下載
  1. 二一教育資源

2020屆浙江選考信息技術 排序查找專題練(pdf版,有答案)

資源簡介

1
排序查找專題練
1. 【五校聯考】數組 a 存儲 n 個學生的性別和身高數據,其中奇數位置存儲性別,偶數位置存儲身
高,數組的存儲結構如下表所示:
該 n 位學生站成一排合影:男生全部在一側,從低到高
排序:女生全部在另一側,從高到低排(所有人的身高 h
為整數,且 100≤h≤200),排序前顯示于 List1,排序后
顯示 List2,如圖所示。實現上述功能的 VB 程序如下,請
回答下列問題。
Const n=10
Dim a( 1 to 2 * n ) As String
Private Sub Form_Load( )
‘讀取身高和性別數據,存儲在數組 a中,并顯示于列表框 List1中,代碼略
End Sub
Private Sub Comd1_Click( )
Dim count As Integer, i As Integer, j As Integer
count = 0
For i = 1 To n - 1
start = 1
For j = n To i + 1 Step -1
If a(2 * j - 1) = "男" Then
If a(2 * j - 2) < a(2 * j) Then
t = a(2 * j - 2): a(2 * j - 2) = a(2 * j): a(2 * j) = t
t = a(2 * j - 3): a(2 * j - 3) = a(2 * j - 1): a(2 * j - 1) = t
start = j
End If
ElseIf a(2 * j - 3) = "女" Then
If Then
t = a(2 * j - 2): a(2 * j - 2) = a(2 * j): a(2 * j) = t
t = a(2 * j - 3): a(2 * j - 3) = a(2 * j - 1): a(2 * j - 1) = t
start = j
End If
End If
Next j
i = start - 1
count = count + 1
Next i
For i = 1 To n
List2.AddItem a(2 * i + 1) + a(2 * i)
Next i
End 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 = 5
Const n = 6
Dim a(1 To m) As Integer
Dim b(1 To n) As Integer
Dim 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 Boolean
pa = m: pb = 1: pc = 1
flag = True
Do While ① _
If a(pa) < b(pb) Then
s = a(pa)
pa = pa - 1
Else
s = b(pb)
pb = pb + 1
End If
c(pc) = s
If flag Then
pc = m + n - pc + 1
Else
pc = m + n – pc
End 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 Integer
Dim s1 As String, t As Integer, s2 As String
t = 1
For i = 1 To n - 2
For j = i + 1 To n Step 2
If a(i) * t > a(j) * t Then
tmp = a(i): a(i) = a(j): a(j) = tmp
End If
Next j
▲ _
Next i
For i = 1 To n
If ▲ Then
s1 = s1 + Str(a(i))
Else
s2 = s2 + Str(a(i))
End If
Next i
text2.Text = "奇數位:" + s1
text3.Text = "偶數位:" + s2
End 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 = 10
Dim a(1 To n) As Integer
Dim 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 = 2
4
j = n :f = False
Do While i <= j And Not f
If key Mod 2 = 0 Then
m = (i + j) \ 2 - (i + j) \ 2 Mod 2
Else
m = ① _
End If
If key = a(m) Then
f = True
ElseIf key Mod 2 = 0 And key < a(m) Then
j = m - 2
Else
i = ② _
End If
Loop
If f Then Label1.Caption = Str(m) Else Label1.Caption = "不存在"
End Sub
5. 【浙南名校】小明學了排序和查找算法后,編寫了一個處理成績的程序。單擊“獲取成績”按鈕
得到 n 個非 降序數保存在數組 a(1)—a(n)中,并顯示在 List1 中。在文本框 Text1 中輸入成績
key,單擊“查 找”按鈕,則在標簽 label1 中顯示共有多少位同學的成績大于等于該成績。
(1)加框 1 處的程序代碼有錯,應改為 。
(2)請在劃線處填入合適代碼:
Dim a(1000) As Integer, n As Integer
Private Sub Command1_Click()
'從數據庫獲取 n 個成績存儲在 a(1)-a(n)組中,代碼略
For i = 2 To n ‘排序
tmp = a(i) :j = 1
Do While tmp >= a(j)
j = j + 1
If ① Then Exit Do
Loop
For k = i To j + 1 Step -1
a(k) = a(k - 1)
Next k
a(k-1) = tmp '改錯 (1)
Next i
For i = 1 To n
List1.AddItem Str(a(i))
Next i
End Sub
Private Sub Command2_Click()
Dim key As Integer, i As Integer, j As Integer, m As Integer
key = Val(Text1.Text)
i = 1: j = n
Do While i <= j
5
m = (i + j) \ 2
Do While tmp >= a(j)
If ② Then
j = m - 1
Else
i = m + 1
End If
Loop
Label1.Caption = "共有" + ③ + "位同學大于等于該成績。"
End Sub
6. 【名校協作體】數組 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 = 20
Dim a(1 To 3 * n) As Integer
6
Private Sub Command1_Click()
'讀取數據,存儲在數組 a 中,并顯示在列表框 List1 中
'代碼略
End Sub
Private Sub Command2_Click()
For i = n To 2 Step -1 '①改錯
k = i
For j = 1 To i - 1
If a(2 * j) < a(2 * k) Or ② Then
k = j
End If
Next j
a(3 * i) = a(2 * k)
a(3 * i - 1) = a(2 * k - 1)

a(2 * k - 1) = a(2 * i - 1)
Next i
List2.AddItem "第 1 名: 學號" + CStr(a(2)) + ",分數" + Str(a(3))
a(1) = 1
mc = 1
For i = 2 To n
If ④ Then mc = i
List2.AddItem "第" + Str(mc) + "名: 學號"+ CStr(a(3*i-1))+",分數"+ Str(a(3*i))
a(3 * i - 2) = mc
Next i
End 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 Integer
Dim a(1 To 100) As Integer
Dim b(1 To 100) As Integer
Private Sub form_load()
’讀取若干數據依次存儲到數組 a中,并將數據元素的總個數存儲到變量 n中;
’將每段數據的元素個數及排序的次序依次存儲到數組 b中;
’b (1 )、b( 2 )分別存儲第 1段數據的元素個數、排序的次序,
’b (3 )、b( 4 )分別存儲第 2段數據的元素個數、排序的次序,……
End Sub
7
Private Sub Command1_Click()
Dim i As Integer, j As Integer, k As Integer, t As Integer
Dim pb As inetger, endpos As Integer
pb = 1: endpos = b(1)
For i = 1 To n - 1
If i = endpos Then
pb = pb + 2: i = endpos + 1
__________①____________
End If
k = i
For j = i + 1 To endpos
If a(j) < a(k) Then k = j ’(2)
Next j
If k <> i Then
___________②___________
End If
Next i
text3.Text = "" ’(4)
For i = 1 To n
text3.Text = text3.Text + Str(a(i))
Next i
End 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 排序
8
Dim conn As NewADODB.Connect ‘定義一個 Connection對象實例
Dim rs As NewADODB.Recordset ‘創建 ADO 的 Recordset對象實例 rs
Dim 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 Integer
Private Sub Form_Load()
Conn,connectionString =” priovider=Microsoft.ACE.OLEDB.12.0:datasource=”&App.Path&” \地
震.accdb”
Conn.Open
Set rs.ActiveConnection = conn
rs.Open “select * from 源數據”
i = 0
Do While Not rs.EOF
i = i + 1
dq (i) = rs.Fields (“地區”)
qz (i) = ① _ ‘讀取當前記錄“強震觀測點”字段的值賦給 qz(i)
rs.MoveNext
Loop
End Sub
Private Sub command1_click()
Dim j As integer
List1.Clear
c = 0
For j = 1 To i
If qz(j) > 100 Then
List1.additem dq(j) & ”強震觀測點數目為:”& str(qz(j))& ”個”
c = c + 1
dq2(c) = dq(j)
qz2(c) = qz(j)
End If
Next j
Label1.Caption=”強震觀測點大于 100的地區共有”& Str(c) & ”個”
End Sub
Private Sub command2_click()
Dim j As Integer,temp As Integer,mAs Integer
Dim temp2 As String
Dim Flag As Boolean
j = 1 : Flag=True
Do While ② _
Flag = False
For m = c To j + 1 Step -1
If dq2(m) < dq2(m+1) Then ‘加框處代碼有誤
temp = qz2(m): qz2(m) = qz2(m - 1): qz2(m - 1) = temp
9
temp2 = dq2(m): dq2(m) = dq2(m - 1): dq2(m - 1) = temp2
Flag = True
End If
Next m
j = j + 1
Loop
List2.Clear
For j = 1 To c
List2.AddItem dq2(j) & “強震觀測點數目為:” & Str(qz2(j)) & ”個”
Next j
Label2.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 = 5
Dim a(1 To n) As Integer '用于記錄每個數組元素的值
Dim b(1 To n) As Integer '用于記錄每個數組元素在原數組中的下標
10
Private Sub Form_Load()
'讀取一組正整數,存儲在數組 a 中
'將每個數組元素在原數組中的下標存儲在數組 b 中
'將數組元素顯示在列表框 List1 中
'代碼略
End Sub
Function Getans() As Integer
Dim left As Integer, ans As Integer
left = 10000: ans = 0
For i = 1 To n
If b(i) < left Then left = b(i)
If b(i) - left > ans Then ans = b(i) - left
Next i
Getans = ans
End Function
Private Sub Command1_Click()
Dim i As Integer, j As Integer, t As Integer
For i = 1 To n
For j = n To i + 1 Step -1
If a(j) <= a(j - 1) Then
t = a(j): a(j) = a(j - 1): a(j - 1) = t
t = b(j): b(j) = b(j - 1): b(j - 1) = t
End If
Next j
Next i
Text1.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 Integer
Dim iMax As Integer, iMin As Integer
p = ① : q = n
Do While p < q
If IsLarger(p, p + 1) Then
iMax = p: iMin = p + 1
Else
11
iMax = p + 1: iMin = p
End If
'先對區間兩兩分組處理,如果剩余 1個區間再進行處理
For i = p + 3 To q Step 2
If ② Then
If IsLarger(i, iMax) Then iMax = i
If IsLarger(iMin, i - 1) Then iMin = i - 1
Else
If IsLarger(i - 1, iMax) Then iMax = i - 1
If IsLarger(iMin, i) Then iMin = i
End If
Next i
If n Mod 2 = 1 Then
If IsLarger(q, iMax) Then iMax = q
If IsLarger(iMin, q) Then iMin = q
End If
t = a(2 * iMin - 1): a(2 * iMin - 1) = a(2 * p - 1): a(2 * p - 1) = t
t = a(2 * iMin): a(2 * iMin) = a(2 * p): a(2 * p) = t
If iMax = p Then iMin = iMax
t = a(2 * iMax - 1): a(2 * iMax - 1) = a(2 * q - 1): a(2 * q - 1) = t
t = a(2 * iMax): a(2 * iMax) = a(2 * q): a(2 * q) = t
p = p + 1: q = q - 1
Loop
'輸出排序結果,代碼略
End Sub
'本函數判斷 a 數組中第 i 區間是否大于第 j 區間,如果是則返回 True,否則返回 False
Function IsLarger(i As Integer, j As Integer) As Boolean
If a(2 * i - 1) > a(2 * j - 1) Or a(2 * i - 1)=a(2 * j - 1) And a(2 * i) > a(2 * j) Then
IsLarger = True
Else
IsLarger = False
End If
End Function
11.【2019.9 嘉興期末】編寫 VB 程序,實現在一個升序排列的數組中查找絕對值最小的元素。已
知數組元素由正整數、負整數或 0構成。例如:數組元素值為 [-9,-5,-3,-l,2,5,7,17],
該數組中絕對值最小的元素為-1。程序運行時,產生 n 個元素,在列表框 Listl 中顯示,單擊按
鈕 Commandl,在標簽 Label1 中輸出絕對值最小的元素。運行結果如下圖所示,實現上述功能的
VB 代碼如下:
12
Const n = 15
Dim a(1 To n) As Integer
Private Sub Form_Load()
'產生 n 個由正整數、負整數或 0 構成的元素,存儲在數組 a 中,并升序排列,代碼略
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer, m As Integer, absmin As Integer
flag = False: i = 1: j = n
Do While i <= j
m = (i + j) \ 2
If a(m) = 0 Then
flag = True: absmin = a(m): Exit Do
ElseIf a(m) >= 0 Then
If ① Then
j = m - 1
Else
flag = True
absmin = dmin(a(m - 1), a(m))
End If
Else
If a(m + 1) < 0 Then
i = m + 1
Else
flag = True

End If
End If
Loop
Label1.Caption = "絕對值最小的元素是:" + Str(absmin)
End Sub
Function dmin(x As Integer, y As Integer) As Integer
If Abs(x) < Abs(y) Then dmin = x Else dmin = y
End Function
12. 【自編】編寫一個 VB 程序,實現功能如下:將一組升序排列的數據“1,3,3,5,5,7,10,11,12,15”
Const n = 10
Dim a(1 To 10) As Integer
Private Sub Form_Load()

依次存儲在數組 a 中,在文本框 Text1 中輸入 k1,在文本框 Text2 中輸入成績 k2(k1>k1 且<k2 的數據的起止位置。程序運行界面如圖所示,請在劃線處填入合適代碼。
13
'將升序排列的數據存儲到數組 a 中,代碼略
End Sub
Private Sub Command1_Click()
Dim k1 As Integer, k2 As Integer, i As Integer, j As Integer, m As Integer
Dim t As Integer, L As Integer, R As Integer
k1 = Val(Text1.Text)
k2 = Val(Text2.Text)
If k1 > k2 Then t = k1: k1 = k2: k2 = t
'尋找起始位置
i = 0: j = ①
Do While i < j
m = (i + j + 1) \ 2
If k1 < a(m) Then
j = m - 1
Else
i = ②
End If
Loop
L = ③
'尋找結束位置
i = 0: j = n + 1
Do While i + 1 < j
m = (i + j) \ 2
If ④ Then
j = m
Else
i = m
End If
Loop
R = ⑤
Label3.Caption = ">" + Str(k1) + ",<" + Str(k2) + "的數據位置為:"
Text3.Text = Str(L) + " -" + Str(R)
End Sub
13. 【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 Integer
Dim k As Integer
Private Sub Command1_Click()
Dim i As Integer
k = Val(Textl.Text)
Randomize
For i = 1 To k
a(i) = ①
List1.AddItem Str(a(i))
Next i
End Sub
Private Sub Cormand2_Click()
Dim i As Integer, j As Integer, t As Integer, flag As Integer
For i = 1 To k - 1
For j = k \ 2 To 1 Step -1
If Not judge(i, j) Then
If ② Then
t = a(j): a(j) = a(2 * j): a(2 * j) = t
Else
t = a(j): a() = a(2 * j + 1): a(2 * j + 1) = t
15
End If
End If
Next j
t = a(1): a(1) = a(k - i + 1): a(k - i + 1) = t
Next i
For i = 1 To k
List2.AddItem Str(a(i))
Next i
End Sub
Function 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 Then
judge = True
End If
End 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 Integer
Private Sub Command1_Click()
Dim conn As New ADODB.Connection
16
Dim rs As New ADODB.Recordset
conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data"Source=" + App.Path +
"\stu.accdb"
conn.Open
strSQL = "SELECT * From stucj"
Set rs.ActiveConnection = conn
rs.Open strSQL
n = 0
List1.AddItem "姓 名" & " " & "成績"
Do While Not rs.EOF
_________①_________
a(n) = rs.Fields("cj")
sname(n) = rs.Fields("xm")
List1.AddItem sname(n) & " " & Str(a(n))
rs.movenex
Loop
rs.Close
conn.Close
End Sub
Private Sub Command2_Click()
Dim i As Integer, k As Integer
Dim b(0 To 100) As Integer
Dim c(1 To 50) As Integer, c1(1 To 50) As String 'c 和 c1 作為臨時數組
For i = 1 To n
b(a(i)) = b(a(i)) + 1
Next i
For i = 1 To 100
b(i) = ②
Next i
For i = n To 1 Step -1
c(b(a(i))) = a(i)
c1(b(a(i))) = sname(i)
_________③___________
Next i
For i = 1 To n '把臨時數組 c 和 c1 中的數據放入 a 和 sname 數組
a(i) = c(i)
sname(i) = c1(i)
Next i
List2.AddItem "姓 名" & " " & "成績"
For i = 1 To n
List2.AddItem sname(i) & " " & Str(a(i))
Next i
End Sub
17
參考答案:
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) 3
2. (1)C (2)m + n – pc + 2 (3)① pa >= 1 And pb <= n ② flag = Not flag
3. (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+2
5. (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)100
8. (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)1
10. (1)1 (2)IsLarger(i , i - 1) (3)iMax = iMin
11. (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 - 1
13. (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 = False
14. (1) conn (2) ① n=n+1 ② b(i)+b(i-1) ③ b(a(i))=b(a(i))-1

展開更多......

收起↑

資源預覽

<pre id="tfb94"><li id="tfb94"></li></pre>

<bdo id="tfb94"><rt id="tfb94"></rt></bdo>
  • <menu id="tfb94"><dl id="tfb94"></dl></menu><i id="tfb94"><acronym id="tfb94"><sub id="tfb94"></sub></acronym></i>

    1. 主站蜘蛛池模板: 洛南县| 周口市| 格尔木市| 游戏| 泰和县| 嘉祥县| 隆回县| 滕州市| 宁化县| 滦平县| 乐至县| 临江市| 建水县| 阿巴嘎旗| 柞水县| 周宁县| 武定县| 双鸭山市| 洪湖市| 裕民县| 西贡区| 收藏| 姜堰市| 宜州市| 延津县| 舒兰市| 红桥区| 若羌县| 巴青县| 临颍县| 津南区| 察雅县| 峡江县| 江达县| 正镶白旗| 铅山县| 崇义县| 泸州市| 石阡县| 白水县| 五家渠市|