内容正文:
2023-2024学年浙教版高一下学期第二章第三节 排序
一、选择题
1.有如下程序段:
For i = 1 To 2
For j = 1 To 6 – i
If a(j) > a(j + 1) And j Mod 3 <> 0 Then
tmp = a(j): a(j) = a(j + 1): a(j + 1) = tmp
End If
Next j
Next i
则程序运行后,数组a(1)~a(6)的值可能为( )
A.3、4、7、2、5、6 B.3、4、5、6、2、7
C.2、3、4、5、7、6 D.5、4、3、2、6、7
2.有如下程序段:
For i = 1 To 8
a(i) = Int(Rnd * 10) + 1
Next i
For i = 1 To 5 Step 2
k = i
For j = i + 2 To 7 Step 2
If a(j) < a(k) Or a(j) = a(k) And a(j + 1) < a(k + 1) Then k = j
Next j
If i <> k Then
t = a(i): a(i) = a(k): a(k) = t
t = a(i + 1): a(i + 1) = a(k + 1): a(k + 1) = t
End If
Next i
运行该程序段后,数组a各元素的值可能是( )
A.2,3,2,2,5,4,7,5 B.0,2,4,3,6,5,9,10 C.1,1,1,3,3,4,5,6 D.9,8,6,7,6,3,1,2
3.下面程序段用于求两数中的较大数(结果保存到变量maxn中),不正确的是( )
maxn=x
A.maxn=xIf y>="maxn" Then maxn=y
B.If x>y Then maxn="x" Else maxn=y
C.maxn=xIf y>="x" Then maxn=y
D.If y>="x" Then maxn=y
4.如下VB程序段实现对数组元素a(1)到a(10)从小到大排序。
i=1
Do While i<10
k=i:i=10
For j=10 To k + 1 Step -1
If a(j)<a(j-1) Then
t=a(j):a(j)=a(j-1):a(j-1)=1
①
End If
Next j
Loop
则代码中①处的语句可为( )
A.i=i+1 B.i=j+1 C.i=k-1 D.i=j
5.有如下程序段:
Dim a(1 To 5) As Integer
a(1) = 3: a(2) = 2: a(3) = 7: a(4) = 5: a(5) = 1
For i = 5 To 2 Step -1
For j = 1 To i - 1
If a(j) > a(j + 1) + Int(Rnd * 2) Then
t = a(j): a(j) = a(j + 1): a(j + 1) = t
End If
Next j
Next i
程序运行后,a(1)到a(5)的值不可能是( )
A.1 2 3 5 7 B.3 2 1 5 7 C.2 1 3 5 7 D.1 2 5 3 7
6.有如下VB程序段:
For i=1 to 3
For j=1 to 5-i
If a(j)>a(j+1) Then
t=a(j) : a(j)=a(j+1) : a(j+1)=t
End If
Next j
Text1.Text = Str(a(i))+Text1.Text
Next i
数组元素a(1)到a(5)的值依次为“2,9,7,8,5”。若该程序段执行后,文本框Text1显示的内容是( )
A.2 5 7 B.9 8 7 C.2 7 7 D.7 7 2
7.将6名选手的歌唱比赛成绩存放在数组a中,如下表所示:
若按升序排列,采用冒泡排序算法自右向左进行比较和交换,那么完成前二轮的数据处理,比较的总次数为
A.10
B.4
C.9
D.5
8.使用选择排序法对数据“8,7,5,9,5,6”从大到小排序,共需经过( )次数据对调。
A.3 B.4 C.5 D.6
9.小李同学基于选择排序算法编写了如下程序,Text1中输入一个全部为数字的字符串,现重新排列该字符串各个位置上的数字,使其可以组成的数最小(若零在开头,则省略不写)。
m = Text1.Text: n = Len(m)
For i = 1 To n - 1
k = i
For j = i + 1 To n
If _____①_____ Then k = j
Next j
If i <> k Then
m = Mid(m, 1, i - 1) + Mid(m, k, 1) + ____②____ + Mid(m, i, 1) + ____③____
End If
Next i
Text2.Text = Val(m)
上述程序中划线处应填入的语句为( )
A.①Mid(m, j, 1) > Mid(m, k, 1)
②Mid(m, i + 1, k - i - 1)
③Mid(m, k + 1)
B.①Mid(m, k, 1) > Mid(m, j, 1)
②Mid(m, i + 1, k - i + 1)
③Mid(m, k + 1)
C.①Mid(m, j, 1) < Mid(m, k, 1)
②Mid(m, i + 1, k - i - 1)
③Mid(m, k + 1)
D.①Mid(m, j, 1) < Mid(m, k, 1)
10.将序列 [1,4.2,5.3] 从小到大排序,使用选择排序法,从第一轮到最后一轮正确的顺序号。( )
① [1,2,3,4,5] ② [1,2,3,5,4] ③ [1,2,4,5,3] ④ [1,4,2,5,3]
A.④②③① B.④③②① C.③④②① D.③②④①
11.有数据序列为“2,6,8,3,5,9,7”,经过一轮冒泡排序后的结果是“2,3,6,8,5,7,9”,那么还需要( )轮冒泡排序后,数据才能完全有序。
A.2 B.3 C.4 D.5
12.使用升序排序算法对列表[130,20,98,15,67,3 ]进行排序后结果为( )
A.[130,20,98,15,67,3 ] B.[3,15,20,67,98,130 ]
C.[15,20,98,67,3, 130] D.[130,98,67,20,15,3 ]
13.用选择排序将七个数“2022,2017,2018,2014,2021,2012,2015”从小到大进行排序,则第二轮交换数据后的顺序是( )
A.2022,2021,2018,2017,2014,2012,2015 B.2012,2014,2018,2017,2021,2022,2015
C.2012,2017,2018,2014,2021,2022,2015 D.2022,2021,2018,2014,2017,2012,2015
14.某市组织了一次我心目中最喜爱的球队的评比活动,6个球队网上投票数为201、287、501、189、397、295,若采用冒泡排序算法对其进行从大到小排序,则第三遍加工后的结果是( )
原始数据
201
287
501
189
397
295
第一遍
501
201
287
397
189
295
第二遍
501
397
201
287
295
189
第三遍
A.501 397 295 287 201 189
B.501 397 201 287 295 189
C.501 397 295 201 189 287
D.501 397 295 201 287 189
15.【加试题】某排序算法的VB程序段如下:
n = 10
Text1.Text = ""
For i = 1 To 5
For j = n To i + 1 Step -1
If a(j) < a(i) Then
temp = a(j): a(j) = a(i): a(i) = temp
End If
Next j
Next i
For i = 1 To 10
Text1.Text = Text1.Text + Str(a(i))
Next i
数组元素a(1)到a(10)的值依次为“965,155,195,444,106,734,172,983,898,360”,执行该程序段,文本框Text1中显示的是
A.106 155 172 195 360 444 734 898 965 983
B.106 155 172 195 360 734 444 983 898 965
C.983 965 898 734 444 360 172 195 155 106
D.106 155 172 195 360 965 444 734 898 983
二、填空题
16.下列VB程序的功能是:程序运行时,单击命令按钮Commandl后,产生10个[1,999]范围内互不相同的随机整数,依次显示在列表框List1中,然后将它们按从小到大的顺序排序,排序结果显示在列表框List2中。数组a用于存储产生的10个随机整数,函数f(x)用于判断随机整数x与已生成的整数是否有重复,若有重复则返回True,否则返回False。
(1)虚线框内程序段所采用的排序算法名称是 。(填:冒泡排序/选择排序)
(2)在程序(1)和(2)划线处,填入适当的语句或表达式,把程序补充完整。
Dim a(1 To 10) As Integer
Function f(x As Integer) As Boolean ′代码略
End Function
Private Sub Commandl_Click()
Dim n As Integer ′n用于统计已经产生的随机整数个数
Dim i As Integer.j As Integer
Dim x As Integer.k As Integer
Randomize ′初始化Rnd函数
n=0
List1.Clear ′清除列表框中内容
List2.Clear
Do While n<10
x=Int(Rnd*999)+1 ′产生[1,999]范围内的随机整数
If Not f(x) Then
n=n+1
a(n)="x"
List1.AddItem Str( (1) )
End If
Loop
For i="1" To 9 ′进行排序
For j="10" To i+1 (2)
If a(j)<a(j-1) Then
k=a(j):a(j)=a(j-1):a(j-1)=k
End If
Next j
Next i
For i="1" To 10
List2.AddItem Str(a(i))
Next i
End Sub
17.小佳编写了一个统计每个单词出现次数的程序,单词中字母不区分大小写。程序功能如下:
程序运行时在文本框 Text1 中输入一段英文文章,单击“统计”按钮 Command1,程序统计每个单词出现的次数,结果输出在列表框 List1 中,按出现次数由多到少显示,当出现次数一样时,按字母顺序从小到大排列。程序运行界面如图所示。
(1)实现上述功能的 VB 程序如下,请在划线处填入合适的代码。
①处代码为 ,②处代码为 ,③处代码为 。
(2)程序中加框处代码有错,请改正。
应改为
Private Sub Command1_Click()
Dim dict(1 To 10000) As String ‘存储自建单词字典
Dim n(1 To 10000) As Integer ‘存储单词出现次数
Dim w As String, a As String, ch As String, x As String, y As Integer
Dim i As Integer, b As Integer, k As Integer, d As Integer, j As Integer
a = Text1.Text: k = 1
For i = 1 To 10000
n(i) = 0
Next i
b = 1
For i = 1 To Len(a)
ch = Mid(a, i, 1)
If Not (ch >= "A" And ch <= "Z" Or ch >= "a" And ch <= "z") Then
If i > b Then
w = ‘取出单词,转为小写,存入 w 中
d = 1
Do While w <> dict(d) And d < k
d = d + 1
Loop
If d = k Then
dict(k) = w: n(k) = 1: k = k + 1
Else
n(d) = ①
End If
End If
b = i + 1
End If
Next i
For i = 1 To k - 2
For j = k - 1 To i + 1 Step -1
If n(j) > n(j - 1) Or ( ② ) Then
x = dict(j): dict(j) = dict(j - 1): dict(j - 1) = x
y = n(j): n(j) = n(j - 1): n(j - 1) = y
End If
Next j
Next i
For i = 1 To k - 1
List1.AddItem dict(i) & " " & n(i)
Next i
End Sub
Function LC(s As String) As String ‘单词中字母转为小写
Dim i As Integer, c As String
For i = 1 To Len(s)
c = Mid(s, i, 1)
If c >= "A" And c <= "Z" Then c = Chr(Asc(c) + 32)
③
Next i
End Function
三、操作题
18.小奕同学基于排序算法设计了一个数字矩阵排序的程序。程序界面如下图所示,在文本框中输入矩阵大小,点击“生成”按钮 Command1,在左侧列表框 List1 中输出一个长宽均为指定大小的随机整数矩阵, 随机整数范围为[1,99]。点击“排序”按钮 Command2,结果输出在右侧列表框 List2 中,奇数行从左到右依次递增,偶数行从右至左依次递增,且保持输出矩阵的长宽不变。
(1)实现上述功能的 VB 程序如下,显示数据用的Additem 是一种 (单选,填字母:A.属性名/B.事件名/C.方法名/D.过程名)。
(2)请在划线处填入合适的代码。
(3)程序中加框处代码有错,请改正。
Dim a(1 To 100) As Integer
Dim n As Integer
Function dq(s As String, L As Integer) As String '自定义对齐函数'在输入的字符串 s 前加若干空格,输出长度为 L 的字符串,代码略
End Function
Private Sub Command1_Click() '生成数字矩阵‘随机生成 n^2 个数字,存储在数组 a 中,代码略
‘以一行 n 个,共 n 行的格式显示在 List1 中,代码略
End Sub
Private Sub Command2_Click() '数字矩阵排序
Dim i As Integer, k As Integer, j As Integer, s As String Dim f As Boolean
List2.Clear f= True
For i = 1 To n ^ 2 Step n s = ""
For j = i To
k = n ^ 2
Do While ①
If a(k) < a(k - 1) Then
t = a(k): a(k) = a(k - 1): a(k - 1) = t
End If
k = k - 1
Loop
If f = True Then
s = s + " " + dq(Str(a(j)), 2)
Else
s = " " + dq(Str(a(j)), 2) + s
End If
Next j List2.AddItem s
②
Next i End Sub
19.小明编写了一个有关整数闭区间合并操作的VB程序:从数据库读取闭区间数据(左端点和右端点),存储在数组a中,按区间数据左端点升序排序,然后进行合并操作,操作结果存储在数组b中.例如,读取的数据为2、3、15、25、10、14、1、5、30、60、15、25,过程是:
(1)设置区间信息为[2,3],[15,25],[10,14],[1,5],[30,60],[15,25];
(2)按区间左端点升序排序,得到区间信息为[1,5],[2,3],[10,14],[15,25],[15,25],[30,60],[15,25];
(3)合并区间,得到[1,5],[10,25],[30,60].
说明:区间[1,5]和[2,3]合并为[1,5],区间[10,14]和[15,25]合并为[10,25],区间[10,25]和[15,25]合并为[10,25],因此合并后的结果为[1,5],[10,25],[30,60]三个区间。
程序功能如下:单击“读数据库”按钮Command1,程序从数据库读取数据,输出在文本框Text1中;单击“开始处理”按钮Command2,程序进行区间排序,并进行区间合并操作,操作后的结果输出在文本框Text2中。程序运行结果如图所示。
实现上述功能的VB程序如下,请回答下列问题:
(1)从数据库中读入的区间为[1,10],[15,20],[6,18],[25,30],[31,200],则合并操作后的区间为 。
(2)请在划线处填入合适的代码。
Dim a(1 To 100) As Integer '数组a存储合并前的区间
Dim b(1 To 100) As Integer '数组b存储合并后的区间
Dim n As Integer 'n表示区间个数
Private Sub Command1_Click()
'读取数据库中的数据,存储到数组a中,并将区间个数存储在变量n中
'将区间信息输出在文本框Text1中,代码略
End Sub
Private Sub Command2_Click()
Dim s As String, i As Integer, j As Integer, k As Integer, t As Integer
For i = 1 To n - 1
For j = 1 To 2 * n - 2 * i Step 2
If Then
t = a(j): a(j) = a(j + 2): a(j + 2) = t
t = a(j + 1): a(j + 1) = a(j + 3): a(j + 3) = t
End If
Next j
Next i
b(1) = a(1): b(2) = a(2)
k = 2: i = 2: j = 3
Do While j <= 2 * n
If b(i) >= a(j) Then
If b(i) <= a(j + 1) Then
ElseIf b(i) + 1 = a(j) Then
b(k) = a(j + 1)
Else
k = k + 1:
k = k + 1: b(k) = a(j + 1)
i = i + 2
End If
j = j + 2
Loop
s = ""
For i = 1 To k - 2 Step 2
s = s & "[" & b(i) & "," & b(i + 1) & "]" & ","
Next i
s = s & "[" & b(i) & "," & b(i + 1) & "]"
Text2.Text = s
End Sub
试卷第1页,共3页
试卷第1页,共3页
学科网(北京)股份有限公司
参考答案:
1.A
2.C
3.D
4.D
5.D
6.D
7.C
8.B
9.C
10.B
11.A
12.B
13.B
14.D
15.B
16.(1)冒泡排序 (2)a(n) Step-1
17. n(d) + 1 n(j) = n(j - 1) And dict(j) < dict(j - 1) LC = LC & c 或 LC = LC + c LC(Mid(a, b, i - b))
18.(1)C
(2)①k>=j+ 1 ②f=Not f
(3) i+n-1
19. [1,20],[25,200] ① a(j)>a(j+2) ② b(k)=a(j+1) 或 b(i)=a(j+1) 等其它相同意义的答案 ③b(k)=a(j)
答案第1页,共2页
答案第1页,共2页
学科网(北京)股份有限公司
$$