2023-2024学年浙教版高一下学期第二章第三节 排序

2024-07-11
| 13页
| 42人阅读
| 0人下载

内容正文:

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) &amp; " " &amp; 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 &amp; "[" &amp; b(i) &amp; "," &amp; b(i + 1) &amp; "]" &amp; "," Next i s = s &amp; "[" &amp; b(i) &amp; "," &amp; b(i + 1) &amp; "]" 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 &amp; 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页 学科网(北京)股份有限公司 $$

资源预览图

2023-2024学年浙教版高一下学期第二章第三节   排序
1
2023-2024学年浙教版高一下学期第二章第三节   排序
2
2023-2024学年浙教版高一下学期第二章第三节   排序
3
相关资源
示范课
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。