您好,欢迎来到微智科技网。
搜索
您的当前位置:首页6排序算法信息技术选考

6排序算法信息技术选考

来源:微智科技网


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

If a(j+1)a(j+1)=t

Next j Next i

数组a(1)到a(5)中数据分别为56,23,78,11,8,执行上述VB程序段后,数组元素的值分别为( ) A.8,11,23,56,78 C.11,8,23,56,78 答案 B

4.有如下程序段:

Dim flag(0 To 4) As Boolean, p As Integer For i = 1 To 4 flag(i) = False Next i

i = 1: flag(0)=True

Do While i <= 4 And flag(i-1) For j = 5 To i + 1 Step -1

B.23,11,8,56,78

D.8,11,56,23,78 B.77,33,45,16,24 D.77,45,33,24,16

15

If a(j) < a(j - 1) Then

k=a(j):a(j)=a(j-1):a(j-1)=k flag(i) = True

End If Next j i = i + 1 Loop

数组元素a(1)到a(5)值依次为“16,4,24,33,77”,程序运行后,flag数组中为True个数及i的值分别是( )

A.1,2 B.1,3 C.2,2 D.2,3 答案 D

5.有如下VB程序段: For i = 1 To 2

For j = 2 To 7 - i

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

数组元素a(1)到a(6)的值依次为“71,54,58,29,31,78”,运行程序,下列说法正确的是( )

A.数组元素a(1)到a(6)的值依次为54,29,31,58,71,78 B.此过程中数据共需比较次数为8次 C.此过程中数据共需交换次数为5次 D此过程中数据“54”共被比较5次 答案 D

6.有如下部分程序段:

a(1) = ”20”: a(2) = ”16”: a(3) = ”12”: a(4) = ”o”: a(5) = ”k”

16

For i = 1 To 4

For j = 5 To i + 1 Step -1

Ifa(j)>a(j-1)Thent=a(j):a(j)=a(j-1):a(j-1)=t Next j

List1.Additem a(i) Next i

该程序段运行后,列表框List1中显示的内容为( ) A.12,16,20,o,k C.o,k,20,16,12 答案 B

7.有如下VB程序段: s = ” ” For i = 1 To 3 For j = 1 To 10 - i If d(j) > d(j + 1) Then

tt=d(j):d(j)=d(j+1):d(j+1)=tt End If Next j

s = s + Str(d(i)) Next i text1.Text = s

数组元素d(1)到d(10)的值分别是91、28、83、62、、36、9、65、37、99,经过该程序段“加工”后,文本框Text1中显示的内容为( ) A.9 28 37 C.28 9 36 答案 D

8.有如下VB程序段: For i = 1 To 6 j = 7

Do While j > i

17

B.o,k,20,16 D.20,16,

B.99 91 83 D.28 62 36

If a(j) > a(j - 1) Then

a(j)=a(j)+a(j-1):a(j-1)=a(j)-a(j-1):a(j)=a(j)-a(j-1) End If

j = j - 1 Loop Next i For i = 3 To 6 s = s + a(i) Next i

Label1.Caption = Str(s)

已知数组元素a(1)到a(7)的值依次为“8,2,3,7,10,6,5”,则执行该程序段后,标签Label1中显示的是( ) A.21 答案 B

9.有如下VB程序段:

Dim a(5) As Integer, b(5) As Integer

a(1) = 2: a(2) = 5: a(3) = 2: a(4) = 5: a(5) = 4 b(1) = 14: b(2) = 23: b(3) = 32: b(4) = 44: b(5) = 56 For i = 1 To 4

For j = 5 To i + 1 Step -1 If a(i) > a(j) Then

t = a(i): a(i) = a(j): a(j) = t t = b(i): b(i) = b(j): b(j) = t

ElseIf a(i) = a(j) And b(i) < b(j) Then t = b(i): b(i) = b(j): b(j) = t

End If Next j Next i

则运行该程序后,数组b中各元素的值依次是( )

B.26 C.41 D.18

18

A.32 14 56 44 23 C.14 23 32 44 56 答案 A

B.14 32 56 23 44 D.56 44 32 23 14

10.实现某算法的部分VB 程序段如下: i = 1

Do While i <= 5

p = 6

For j = 6 To i + 1 Step -1 If a(j) < a(j - 1) Then

t = a(j): a(j) = a(j - 1): a(j - 1) = t p = j

End If Next j i = p n = n + 1 Loop

Text1.Text = Str(n)

数组元素 a(1)到a(6)的数据依次为“8,3,9,16,22,2”,则程序运行后,文本框Text1中显示的内容为( ) A.2 答案 B

11.某VB程序段如下: i = 1

Do While i <= 3 k = i j = i + 1 Do While j <= 5

If a(j) < a(k) Then k = j j = j + 1 Loop

19

B.3 C.4 D.5

If i <> k Then t = a(i): a(i) = a(k): a(k) = t i = i + 1 Loop

数组元素a(1)到a(5)的依次为“17,87,36,22,45”,则程序运行后,数组元素数据依次是( ) A.87,45,36,17,22 C.17,22,36,87,45 答案 C

12.有如下 VB 程序段: For i = 5 To 4 Step -1

k = i

For j = 6 - i To 1 Step -1 If a(j) < a(k) Then k = j Next j If i <> k Then

t = a(i): a(i) = a(k): a(k) = t

End If Next i

数组元素 a(1)到 a(5)的值依次为“41,66,70,83,31”,经过该程序段“加工”后,数组元素a(1)到a(5)的值依次为( ) A.31,41,66,83,70

B.83,70,66,41,31

D.31,41,66,70,83 B.17,22,36,45,87 D.87,45,17,36,22

C.83,66,70,41,31 答案 C

13.有如下VB程序段: For i = 1 To 5 For j = i + 1 To 6

If s(i) + s(j) < s(j) + s(i) Then t = s(j): s(j) = s(i): s(i) = t End If Next j

20

Next i For i = 1 To 6

Text1.Text = Text1.Text + s(i) Next i

如果程序运行,一开始当数组元素s(1)到s(6)的值依次为“4”、“343”、“312”、“12”、“246”、“121”,运行该段代码后,文本框Text1中显示的内容为( ) A.434331224612121 C.343312246121124 答案 B

14.有如下VB程序段: tail = 6: i = 1: r = 2 Do While i < r

For j = tail To i + 1 Step -1

If a(j) > a(j - 1) Then

t = a(j): a(j) = a(j - 1): a(j - 1) = t End If Next j i = i + 1

For j = i To tail - 1

If a(j) < a(j + 1) Then

t = a(j): a(j) = a(j + 1): a(j + 1) = t End If Next j

tail = tail - 1 Loop

数组元素值“73、56、28、61、44、92”,运行程序,数组元素a(1)到a(6)的值依次为( )

A.73,61,56,92,44,28 C.92,73,61,56,28,44

B.92,73,56,61,44,28 D.92,73,61,56,44,28

B.434331224612112 D.121122463123434

21

答案 D

15.完成某排序算法的VB程序段如下: For i = 1 To 7 k = 0

For j = 8 To i + 1 Step -1

If a(j)If k = 0 Then Exit For Next i

如果用上述算法对数据序列:38,11,21,62,59,65,77,79进行排序(数据分别存储在数组元素 a(1)~a(8)中),实现数据有序时所经历的排序遍数是( ) A.2

B.3

C.4

D.7

答案 B

16.有如下VB程序段: n = 8: flag = True: k = 0 First = 1: Last = n Do While flag

p = False: flag = False

For j = Last To First + 1 Step -1

k = k + 1

If a(j) < a(j - 1) Then

t = a(j): a(j) = a(j - 1): a(j - 1) = t First = j: flag = True

If p = False Then Last = j: p = True

End If Next j

If Last <> n Then Last = Last + 1 Loop

数组元素a(1)到a(8)值依次为“2,8,12,17,13,14,18,19”,程序运行后,

22

变量k的值为( ) A.3 答案 A

17.有如下程序段: For i = 1 To 3 For j = i + 1 To 7 If a(j) < a(i) Then

k = a(j): a(j) = a(i): a(i) = k c = c + 1 End If Next j

s = Str(a(i)) + s Next i

Text1.Text = Str(c) & “:” & s

数组元素a(1)至a(7)中值分别为3,9,1,5,8,6,2,该程序段运行后,文本框Text1中显示的内容是( ) A.5:6 8 9 答案 D

18.有如下VB程序段: i = 1

Do While i <= 6

t = Int(Rnd * 10) + 1

If t Mod 2 = i Mod 2 Then a(i) = t : i = i + 1 Loop

For i = 1 To 2

k = 1

For j = 1 To 6 -i * 2

If a(j) * k > a(j + 2) * k Then

t=a(j):a(j)=a(j+2):a(j+2)=t End If

23

B.8 C.9 D.28

B.3: 9 8 6 C.3:1 2 3 D.5:3 2 1

k = -k Next j Next i

执行该程序段后,数组元素a(1)到a(6)的值可能是( ) A.5,9,2,10,7,8 C.9,2,5,4,3,8 答案 D 二、非选择题

19.有一组正整数,要求仅对其中的奇数进行升序排序。排序后在列表框List2中也仅显示奇数部分数据,结果如图所示。

B.9,0,7,2,3,4

D.1,8,7,6,9,4

实现上述功能的VB代码如下,但加框处有错,请改正。 Const n = 10 Dim a(1 To n) As Integer Private Sub Command1_Click()

Dim t As Integer, i As Integer, j As Integer, m As Integer Dim tmp As Integer

′读取一组正整数,存储在数组a中,并显示在列表框List1,代码略 i = 1

Do While i <= n

For j = n To i + 1 Step -1

If a(j) Mod 2 = 1 Then

If a(j) < a(j - 1) Then′(1)

tmp = a(j) : a(j) = a(j - 1) : a(j - 1) = tmp t = t + 1

24

End If

End If Next j

If a(j) Mod 2 = 0 Then m = m + 1 ′(2) i = i + 1 Loop

For i = 1 to m

List2.AddItem Str(a(i)) Next i

List2.AddItem ”一共交换了” & t & ”次” End Sub

答案 (1)a(j) < a(j - 1) Or a(j - 1) Mod 2 = 0 (2)a(i) Mod 2 = 1

20.编写一个 VB 程序实现数据左右交替上升排序。功能如下:随机产生 n 个不重复的整数存数组 a,并在列表框 list1 中显示,单击“排序”按钮 Command1,在列表框list2 中显示排序后的数据。某遍程序运行后,数组 a 中存储的左右交替上升排序的 n 个正整数,如下表所示:

a(1) 1 a(2) 4 a(3) 7 …… …… a(n-2) 8 a(n-1) 6 a(n) 2 实现该功能的 VB 程序如下,但加框处代码有错,请改正。 Const n = 10 Dim a(1 To n) As Integer Private Sub Form_Load()

′随机产生n个不重复的整数存数组a,并在列表框List1中显示。代码略。 End Sub

Private Sub Command1_Click()

Dim i As Integer, j As Integer, t As Integer Dim imin1 As Integer, imin2 As Integer For i = 1 To n \\'2

imin1 = i

25

imin2 = i + 1

If a(imin1) > a(imin2) Then t = imin1: imin1 = imin2: imin2 = t For j = i + 2 To n - i + 1

If a(j) < a(imin1) Then

imin2 = imin1: imin1 = j Else′(1) imin2 = j

End If Next j

If i <> imin1 Then t = a(i): a(i) = a(imin1): a(imin1) = t If imin2 = i Then imin1 = imin2 ′(2) If n-i+1<>imin2 Then

t=a(n-i+1):a(n-i+1)=a(imin2):a(imin2)=t End If Next i

′在列表框List1中显示排序后的数组a。代码略。 End Sub

答案 (1)ElseIf imin2 > a(j) Then (2)imin2 = imin1

21.某会议室收到 10 场会议使用申请,会议室使用安排要求:①会议时间不冲突;②一天内安排的会议场数最多;③优先安排结束时间早的会议。小李编写了一个 VB 程序,在 List1 中显示按结束时间升序排序的 10 场会议,List2 中显示最终会议安排方案,运行界面如图所示。已知每场会议的开始、结束时间分别保存在数组 a 和数组 b 中,比如第 i 场会议,开始时间保存在 a(i)中,结束时间保存在 b(i)中。

26

实现上述功能的 VB 程序如下,但加框处代码有错,请改正。 Private Sub Command1_Click() Dim a(1 To 20) As Single Dim b(1 To 20) As Single Dim i As Integer

Const kaishi = 8 ′会议室开门时间 Const jieshu = 17 ′会议室关门时间

′此处代码实现分别录入每场会议的开始、结束时间并存入相应数组,For i = 1 To 9

k = i

For j = i + 1 To 10

If a(k) > a(j) Then k = j ′(1) Next j If k <> i Then

t = a(i): a(i) = a(k): a(k) = t t = b(i): b(i) = b(k): b(k) = t End If Next i

For i = 1 To 10

List1.AddItem a(i) & ”点” & ”-” & b(i) & ”点” Next i k = 1

Do While a(k) < kaishi

27

代码略 k = k + 1 Loop t = b(k)

List2.AddItem a(k) & ”点” & ”-” & b(k) & ”点” ′输出第一场会议的时间 For i = k + 1 To 10

If b(i) <= jieshu Then

If a(i) >= t Then

List2.AddItem a(i) & ”点” & ”-” & b(i) & ”点” a(i) = t ′(2)

End If End If Next i End Sub

答案 (1)b(k) > b(j) (2)t = b(i)

22.小李基于选择排序算法编写了一个VB程序,功能如下:在文本框Text1中显示排序前的数据,单击“排序”按钮Command1,在文本框Text2中显示剔除重复数据后的升序排序结果。程序运行界面如下图所示。

实现上述功能的VB程序如下,但加框处代码有错,请改正。 Const n = 10

Private Sub Form_Load()

′排序前数据存储在数组a中,并在文本框Text1中显示.代码略 End Sub

Private Sub Command1_Click() Dim i As Integer,bottom As Integer Dim a(1 To n) As Integer ,j As Integer

28

i = 1:bottom = n Do While i < bottom k = i j = i + 1

Do While j <= bottom If a(j) = a(k) Then a(j) = a(bottom) j = bottom ′(1) bottom = bottom - 1 ElseIf a(j) < a(k) Then k = j End If j = j + 1 Loop

If a(k) = a(j) Then ′(2) t = a(i): a(i) = a(k): a(k) = t End If i = i + 1 Loop

′排序后数据存储在数组a中,并在文本框Text2中显示 End Sub

答案 (1)j=j-1 (2)k<>i

23.小李编写“合并区间”VB 程序,功能如下:窗体加载时,获取并存储合并前的区间数据,并显示在列表框 List1 中。单击“合并”按钮后,以区间左端点数值对区间进行升序排序,然后相邻区间的相交进行合并,最后在列表框 List2 上显示合并后的区间。程序运行如图所示:

29

实现上述功能的 VB 程序如下,在划处填入合适的代码。 Dim a(1 To 20) As Integer ′存储区间的左端点数值 Dim b(1 To 20) As Integer ′存储区间的右端点数值 Private Sub Form_Load()

′将区间左端点存入 a,区间右端点存如数组 b,并在列表框 List1 显示,代码略 End Sub

Private Sub Command1_Click() Dim i As Integer, j As Integer Dim curL As Integer, curR As Integer For i = 1 To n - 1

For j = 1 To__①__

If __②____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

curL = a(1): curR = b(1) For i = 2 To n

If a(i) <= curR Then

If curR < b(i) Then __③__ Else

List2.AddItem ”[” + Str(curL) + ”,” + Str(curR) + ”]” curL = a(i): curR = b(i)

30

End If Next i

List2.AddItem ”[” + Str(curL) + ”,” + Str(curR) + ”]” End Sub

答案 ①n-i ②a(j)>a(j + 1) ③curR=b(i)

31

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务