1.(2018·4月浙江选考)有一组正整数,要求仅对其中的素数进行升序排序。排序后素数在前,非素数在后。排序示例如下。
排序前 排序后 86 5 71 37 5 41 41 71 81 79 79 37 86 81 实现上述功能的VB程序如下,但加框处代码有误,请改正。 Const n = 8
Dim a(1 To n) As Integer Private Sub Command1_Click()
Dim i As Integer, j As Integer, k As Integer, t As Integer Dim flag As Boolean
′读取一组正整数,存储在数组a中,代码略 For i = 1 To n - 1 k=1 ′(1)
If IsPrime(a(k)) Then flag = True Else flag = False For j = i + 1 To n If IsPime(a(j)) Then
If a(j)Next j If k <> i Then t = a(k): a(k) = a(i): a(i) = t End If If Not flag Then Exit For ′Exit For表示退出循环 Next i 1 ′依次输出排序后的数据。代码略 End Sub Function IsPrime(m As Integer) As Boolean ′本函数判断m是否是素数:是素数返回值为True,不是素数返回值为False ′代码略 End Function 答案 (1)k=i (2)Not flag Or a(j) 2.(2017·11月浙江选考)小李基于冒泡排序算法编写一个VB程序,功能如下:在文本框Text1中显示排序前的数据,单击“排序”按钮Command1,在文本框Text2中显示剔除重复数据后的升序排序结果。程序运行界面如下图所示。 实现上述功能的VB代码如下,但加框处代码有错,请改正。 Const n=10 Dim a(1 To n) As Integer Private Sub Command1_Click() Dim i As Integer,j As Integer,t As Integer Dim bottom As Integer ′剔除重复数据后元素的个数 ′获取排序前数据依次存储在数组a中,并在文本框Text1中显示。代码略 bottom=n i=1 Do While i<=bottom -1 For j=bottom To i+1 Step -1 If a(j)t=a(j):a(j)=a(j-1):a(j-1)=t ElseIf a(j)=a(j-1) Then ′若相邻数据相等,进行剔除处理 2 a(bottom)=a(j) ′(2) bottom=bottom-1 End If Next j i=i+1 Loop Text2.Text=\" \" For i=1 To bottom Text2.Text=Text2.Text+Str(a(i)) Next i End Sub 答案 (1)a(j)a(j) 或其他等价表达式 (2)a(j)=a(bottom) 或其他等价语句 3.(2016·10月浙江省技术选考)小吴为了研究冒泡排序过程中数据的“移动”情况,编写了一个VB程序,功能如下:在列表框List1中显示排序前数据(存储在数组a中),在文本框Text1中输入初始位置(即下标值),单击“排序”按钮Command1后,在标签Label1中显示指定初始位置的数据在排序过程中的位置变化情况,排序后的数据显示在列表框List2中。程序运行界面如图所示。 实现上述功能的VB程序如下,但加框处代码有错,请改正。 Dim a(1 To 8) As Integer Dim n As Integer Private Sub Form_Load() a(1)=30:a(2)=47:a(3)=30:a(4)=72 a(5)=70:a(6)=23:a(7)=99:a(8)=24 3 n = 8 For i = 1 To 8 List1.AddItem a(i) Next i End Sub Private Sub Command1_Click() Dim i As Integer, j As Integer, k As Integer Dim pos As Integer Dim s As String s = Text1.Text pos = Val(Text1.Text) For i = 1 To n - 1 For j = n To i + 1 Step -1 If a(j) < a(j - 1) Then k = a(j) ′(1) a(j-1)=a(j) a(j)=k ′如果pos位置的数据参与交换,则更新pos值,记录pos变化位置 If pos = j Then pos = j - 1 s = s + ”→” + Str(pos) Else ′(2) pos = j s = s + ”→” + Str(pos) End If End If Next j Next i Label1.Caption = “位置变化情况:” + s 4 For i = 1 To n List2.AddItem Str(a(i)) Next i End Sub 答案 (1)k = a(j-1) (2)ElseIf pos = j - 1 Then 【例1】 小刘在研究n个数的冒泡排序算法时,发现可以从两个方面进行优化: (1)在每遍冒泡过程中,若最后一次交换的是last与last-1位置的数,则last-1位置之前的相邻数据均已有序。进行下一遍冒泡时,无序区域设置为[last,n]。 (2)若在某一遍排序中没有数据交换,说明待排序数据都已经有序,冒泡排序过 5 程可在此遍排序后终止。 小刘按上述方法编写的冒泡优化VB程序,功能如下:程序运行时生成100个随机整数存入数组a,并显示在列表框List1中。单击“排序”按钮Command1后,对数组a中的数据进行排序,排序后的数据显示在列表框List2中,排序过程中实际的冒泡遍数显示在标签Label3上。程序运行界面如图所示。 实现上述功能的VB程序如下,但加框处代码有错,请改正。 Dim a(1 To 100) As Integer Private Sub Form_Load() ′产生100个无重复的三随机整数,存入数组a并显示在列表框list1中 ′代码略 End Sub Private Sub Command1_Click() Dim flag As Boolean, i As Integer, j As Integer Dim t As Integer, n As Integer, last As Integer n = 0: last = 1 flag = True Do While flag = False′(1) flag = False For j = 100 To last + 1′(2) If a(j) > a(j - 1) Then t = a(j): a(j) = a(j - 1): a(j - 1) = t last = j-1 flag = True ′有交换发生 6 End If Next j n = n + 1 Loop For i = 1 To 100 List2.AddItem Str(a(i)) Next i Label3.Caption = “本次排序的冒泡遍数为:” & Str(n) End Sub 其中,方框(1)处应改正为________; 方框(2)处应改正为________。 答案 (1)flag (2)j=100 to last-1 Step -1 【例2】 有如下程序段: For i = 1 To 5 For j = 10 To i + 2 Step -1 If a(j) < a(j - 2) Then t=a(j):a(j)=a(j-2):a(j-2)=t End If Next j Next i 数组元素a(1)至a(10)的值分别为“3,17,2,14,15,6,7,18,9,4”,执行该程序段后,数组元素a(8)中的值为( ) A.3 答案 D 【变式训练1】 有一组正整数,基于冒泡排序对其中的数进行升序排序。排序后奇数在前,偶数在后。排序示例如下 排序前 排序后 78 39 30 49 83 39 4 49 8 4 18 8 30 32 32 18 32 78 B.4 C.15 D.17 实现上述功能的VB程序如下,但加框处代码有误,请改正。 7 Const n = 10 Dim d(1 To n) As Integer Private Sub Command1_Click() Dim i As Integer, j As Integer, t As Integer ′读取一组正整数,存储在数组 d 中,代码略 i = 1 Do While i <= n - 1 For j = n To i + 1 Step -1 If d(j) Mod 2 = d(j - 1) Mod 2 Then If d(j) > d(i)Then ′(1) t = d(j): d(j) = d(j - 1): d(j - 1) = t End If Else ′(2) t = d(j): d(j) = d(j - 1): d(j - 1) = t End If Next j i = i + 1 Loop ′依次输出排序后的数据,代码略 End Sub 答案 (1)a(j)优化前的代码 优化后的代码 8 i= 1 Do While i<=n-1 j=1 Do While j<=n-i If a(j)实现上述功能的VB程序如下,请将划线处填写完整。 Const n = 10 Dim a(n) As Integer Private Sub Form_Load() ′产生n个随机数,并显示在文本框Text1中,代码略 End Sub Private Sub Command1_Click() Dim i As Integer, j As Integer, t As Integer Dim top As Integer, s As String 9 top = 1: i = 1 Do While i <= n - 1 ____①____ Do While j <= n - i If a(j) > a(j + 1) Then t = a(j): a(j) = a(j + 1): a(j + 1) = t ElseIf a(j) = a(j + 1) Then ____②____ top = top + 1 End If j = j + 1 Loop i = i + 1 Loop s =\" \" For i = top To n s = s + Str(a(i)) Next i Text2.Text = s End Sub 答案 ①j = top ②a(j) = a(top) 【变式训练2】 小赵对冒泡升序排列算法进行了如下改进:在一趟排序中,同时进行从最后一个元素向前的比较并交换和从第一个元素向后比较并交换,把最小的元素交接到前面,把最大的元素交换到后面,以此类推,直到所有元素的数据按升序排列。小赵编写的VB程序如下,但加框处代码有错,请改正。 Dim a(8) As Integer, i As Integer Const n = 8 Private Sub Command1_Click() Dim j As Integer, start As Integer, last As Integer 10 start = 1: last = n Do While start < last For i =last - 1 To start ′(1) If a(i) > a(i - 1) Then t = a(i): a(i) = a(i - 1): a(i - 1) = t End If Next i start = start + 1 For i = start + 1 To last - 1 If a(i) < a(i + 1) Then t = a(i): a(i) = a(i + 1): a(i + 1) = t End If Next i last = n – start + 1 ′(2) Loop For i = 1 To n List2.AddItem Str(a(i)) Next i End Sub Private Sub Form_Load() ′产生8个随机数,并显示在列表框List1中,代码略 End Sub 答案 (1)last To start + 1 Step -1 (2)last = last - 1 选择排序 选择排序标准代码(在数组a中,以升序为例进行选择排序): For i=1 To n-1 ′n个数共进行n-1趟排序 K=i ′第i趟排序时,首先用k记录i For j=i+1 To n ′k位置上的数依次与j位置上的数进行比较 If a(j)11 Next j If k<>i Then ′若i位置上的数不是最小数,则和k位置上的数进行互换 temp=a(i):a(i)=a(k):a(k)=temp End If Next i 【例4】 小赵对选择排序算法进行了如下改进:在数组的所有元素中找出最小和最大数据的元素,然后将这两个元素分别与第一个和最后一个元素交换数据,在余下的元素中找出最小和最大数据的元素,分别与第二个和倒数第二个元素交换数据,以此类推,直到所有元素的数据按升序排列。小赵编写的VB程序段如下: p=1:q=10 Do While p < q iMin = p:iMax = p For i = p + 1 To q If a(i) < a(iMin) Then iMin=i If a(i) > a(iMax) Then iMax=i Next i t = a(iMin): a(iMin) = a(p): a(p) = t t = a(iMax): a(iMax) = a(q): a(q) = t p=p+1 q=q-1 Loop 要使程序实现上述算法思想,则方框中的语句是( ) A.If iMax= p Then iMax = iMin B.If iMin= p Then iMin = iMax C.If iMax= p Then iMin = iMax D.If iMin= p Then iMax = iMin 12 答案 A 【变式训练3】 从数据库中读取各考生的编号、笔试和面试成绩,在文本框Text1中输入录取人数,按笔试与面试成绩之和从高到低录取,若成绩之和相等,面试成绩高的排前面。当录取人数达到计划录取人数时,若有面试加笔试的总分与之相等的分数,也要作为录取对象。程序运行的界面如图所示: VB程序代码如下,但加框处的代码有错,请改正。 Const n = 266 Dim ms(n) As Integer, bs(n) As Integer, bh(n) As Integer Private Sub Command1_Click() Dim i As Integer, j As Integer, k As Integer, s As String For i = 1 To n - 1 k = i For j = i + 1 To n If ms(j) + bs(j) > ms(k) + bs(k) Then k = j Else ms(j) + bs(j) < ms(k) + bs(k) Then If ms(j) > ms(k) Then k = j End If Next j If k <> i Then t = ms(k): ms(k) = ms(i): ms(i) = t t = bs(k): bs(k) = bs(i): bs(i) = t t = bh(k): bh(k) = bh(i): bh(i) = t End If Next i 13 ′(1) t = Val(Text1.Text) i = 1 Do While i <= t Or ms(i) <> ms(i + 1) ′(2) s = ”序” + Str(i) + ”:编号” + Str(bh(i)) + ” ” s = s + Str(bs(i)) + ”+” + Str(ms(i)) + ”=” + Str(bs(i) + ms(i)) List1.AddItem s i = i + 1 Loop End Sub Private Sub Form_Load() ′从数据库中读取各考生的编号(bh数组)、笔试(bs数组)和面试(ms数组)成绩,分别存储在相应的数组中 End Sub 答案 (1)ElseIf ms(j) + bs(j) = ms(k) + bs(k) (2)ms(i) + bs(i) = ms(i-1) + bs(i -1) 一、选择题 1.有一个数组,采用冒泡排序,第一遍排序后的结果为:4,10,5,32,6,7,9,17,24该数组的原始顺序不可能的是( ) A.10,5,32,6,7,9,17,24,4 B.10,5,32,6,7,9,4,17,24 C.10,5,32,4,6,7,9,17,24 D.4,10,5,32,17,9,24,6,7 答案 D 2.有如下VB程序段: For i = 1 To 2 For j = 5 To i + 1 Step -1 If a(j) > a(i) Then 14 t = a(j): a(j) = a(i): a(i) = t End If Next j Next i 数组元素a(1)到a(5)的值依次为“33,24,45,16,77”,运行程序,数组元素a(1)到a(5)的值依次为( ) A.77,45,33,16,24 C.77,24,45,16,33 答案 A 3.有如下VB程序段: For i = 1 To 2 For j = 1 To 5-i
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务