相关试卷
-
1、采用如下选择排序算法对数组a中的5个数据“23,6,98,65,2”按从小到大的顺序进行排序。
For i =1 To 4
k=i
For j = i+1 To 5
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、10,3 B、10,4 C、15,3 D、15,10 -
2、小刘在研究n个数的冒泡排序算法,发现可以从两个方面进行优化:
1)在每遍冒泡过程中,若最后一次交换的是last与last-1位置的数,则last位置之前的相邻数据均已有序。进行下一遍冒泡,无序区域设置为[last,n],每一遍排序均可能使当前的无序区域缩小。
2)若在某一遍排序中没有数据交换,说明待排序数据都已经有序,冒泡排序过程可在此遍排序后结束。因此可以引入一个变量lag,记录在每遍排序过程中是否发生了交换。
小刘按上述方法设计了一个冒泡优化VB程序功能如下:单击“生成数据”按钮 Command1后,随机生成一组无重复的两位整数存入数组a,并显示在列表框List1中。单击“排序”按钮Command2后,将数组a中的数据进行降序排序,排序后的数据显示在列表框List2中,排序过程中实际的冒泡遍数显示在Label3中。程序运行界面如图所示。实现上述功能的VB程序如下,回答下列问题。
(1)、若按优化后的冒泡排序算法,数据28,15,10,8,12进行降序排序,冒泡的遍数是(填数字)。(2)、在划线处填入合适的代码。Dim a (1 To 20) As Integer
Private sub command1_Click ( ) ‘ 随机生成不重复的两位数
Dim i As Integer, j As Integer
List1, Clear : List2. Clear
Randomize
For i = 1 To 20
a(i) = Int (Rnd*90) + 10
For j = 1 To i-1
If ① Then i =i-1:Exit For
Next j
Next i
For i=1 To 20
List1.AddItem Str(a(i))
Next i
End Sub
Private Sub Command2_ Click ( )
Dim flag As Boolean, i As Integer, j As Integer
Dim temp As Integer, num As Integer, last As Integer
num = 0 : last = 1
flag= True
Do While flag=True
②
For j = 20 To last +1 Step -1
If a(j) > a(j-1) Then
temp =a(j):a(j) = a(j-1): a(j-1) = temp
③
flag = True ' 有交换发生
End if
Next j
num = num +1
Loop
For i =1 To 20
List2 AddItem Str(a(1)
Next i
Label13. Caption = "本次排序的冒泡遍数为:" & str(num)
End sub
① ② ③
-
3、小吴为了探究冒泡排序过程中数据的“移动”情况,编写了一个VB程序,功能如下:在列表框List1中显示排序前数据(存储在数组a中),在文本框Text1中输入初始位置(即下标值),单击“排序”按钮 Command1后,标签 Label1中显示指定初始位置的数据在排序过程中的位置变化情况,排序后的数据显示在列表框List2中程序运行界面如图所示。
实现上述功能的VB程序如下,但加框处代码有误,请改正。
Dim(1 To 8) As Integer
Dim As Integer
Private Sub Form Load ( )
‘ n=8,排序前的8个数据存储在数组a中,并在列表框List1中显示
‘ 代码略
End Sub
Private Sub Command1_Click ( )
Dim i As Integer, As Integer, k As Integer
Dim pos As Integer ‘变量pos存储指定数据的位置(即下标值)
Dims As String ‘变量s存储pos变化情况
s = Text1.Text
pos = Val (Text1. Text)
For i =1 To n-1
For j = n To i + 1 Step -1
If a(3) < a(j-1) Then
‘(1)a(1)=k
‘如果pos位置的数据参与交换,则更新pos值,记录pos变化情况
If pos = j Then
pos = j-1
s = s + “→" + Str (pos)
‘(2)pos = j
s=s+"→"+ Str (pos)
End if
End if
Next j
Next i
Label1, Caption= "位置变化情况:" +s
For i= 1 To n
List2 AddItem Str(a(i))
Next i
End Sub
加框(1)处代码应改为。
加框(2)处代码应改为。
-
4、n个数据的冒泡排序需要经过n-1遍加工,每一遍加工自下而上比较相邻两个数据,把较大者交换到上面。小刘发现:当某一遍加工程中没有数据交换时,说明数据已经有序,无需进一步加工。为此,小刘对算法进行优化,编写了一个VB程序,功能如下:运行程序时,在列表框 List1中显示排序前数据,单击“排序”按钮Command1,在列表框List2中显示这些数据按降序排序后的结果,在标签 Label3中显示排序过程的加工遍数,在标签 Label4中显示排序过程的数据交换次数。运行效果如图所示。
实现上述功能的VB代码如下,但加框处代码有错,请改正。
Dim a (1 To 8) As Integer
Dim n As integer
Private Sub Form_ Load ( )
‘ n=8,排序前数据存储在数组a中,并在列表框List1中显示
‘ 代码略
End Sub
Private Sub Command1_Click ( )
Dim i As Integer, j As Integer, t As Integer, c As Integer
Dim flag As Boolean
For i = 1 To n
List1 AddItem Str(a(i))
Next 1
i=1
flag= False
Do While
‘①flag = True
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
c=c+1
flag = False
End If
Next j
i = i+1
Loop
Label3. Caption = “排序过程的加工遍数为” +
‘②Label4. Caption= “排序过程数据交换次数为” + str(c)
For i = 1 To n
List2. AddItem Str((i))
Next i
End Sub
加框①处代码应改为。
加框②处代码应改为。
-
5、现有包含10个元素的数组d,使用冒泡排序算法对此数组元素进行升序排序,部分VB代码如下:
For i = 1 To 9
For j = ①
If ② Then
k=d(j) : d(j) = d(+1) : d(+1)=k
End If
Next j
Next i
①②处应填写的正确语句是( )
A、①i+1 To n,②d(j) > d(j+1) B、①i+1 To n,②d(j) < d(j+1) C、①1 To n -i,②d(j) < d(j+1) D、①1 To n -i,②d(j) >d (j+1) -
6、采用冒泡排序算法对数组a中的6个数据25,4,1,16,9,36进行排序,部分程序如下:
For i = 1 To 3
For j = 6 To i + 1 Step-1
If a(j) > a(j-1)Then
End If
Next j
Next i
下列说法正确的是( )
A、程序为升序排序,实线框中的语句共执行了9次 B、程序为升序排序,实线框中的语句共执行了8次 C、程序为降序排序,实线框中的语句共执行了9次 D、程序为降序排序,实线框中的语句共执行了8次 -
7、有VB程序段如下:
exchange = 0
last_change = 8
Do While last_ change > 1
current = 1
For j = 1 To last_ change-1
If a(3) < a(j+ 1) Then
exchange = exchange +1
tmp = a(0): a(3) = a(j+1): a(j+1) = tmp
current j
End If
Next j
last_change = current
LooP
数组元素a(1)到a(8)的值依次为15,13,0,14,12,9,5,1,执行该程序段,则exchange的值为( )
A、2 B、3 C、4 D、5 -
8、有一个数组,采用冒泡排序,第一遍排序后的结果为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
-
9、在某次校园合唱比赛中,6个参赛队的得分分别为95,87,93,85,91,若采用冒泡排序算法对其进行从小到大的排序,如表所示,则第二趟排序结果是( )
原始数据
95
87
93
85
91
第一趟
85
95
87
93
91
第二趟
A、85 87 95 91 93 B、85 95 87 91 93 C、85 87 93 95 91 D、85 91 87 93 95 -
10、某书店在5所学校的流动售书量(单位:本分别是88、110、48、64、35。采用冒泡排序对其进行排序,若完成第一遍冒泡的结果是35、88、110、48、64,则完成第二遍冒泡的结果是( )A、35、88、110、48、64 B、35、48、88、64、110 C、35、48、88、110、64 D、35、48、64、88、110
-
11、有如下程序段:
s = “”
For i=1 To 3
For j = 7 To i + 1 Step-1
If a(j) < a(j-1) Then
k=a(1) : a(j) = a(-1) : a(j-1)=k
End if
Next j
s= s+ Str(a(i))
Next i
Text1. Text = s
数组元素a(1)到a(7)的数据依次为3,9,1,5,8,6,,经过该程序段“加工”后,文本框Text1中显示的内容是( )
A、1,2,3 B、9,8,6 C、3,9,1 D、8,6,2 -
12、对下列数据序列进行冒泡升序排序,在排序过程中效率最低的序列是( )A、31,29,24,20,15,10 B、10,15,20,24,29,31 C、29,10,31,15,20,24 D、24,29,31,20,15,10
-
13、使用冒泡排序算法对97、89、111、70、90进行排序,已知第一趟冒泡后的序列为70、97、89、11190,则在整个排序过程中,数据97被交换的次数是( )A、1 B、2 C、3 D、4
-
14、在数组元素a(1)至a(8)中存储了8个数据,如表所示:
a(1)
a(2)
a(3)
a(4)
a(5)
a(6)
a(7)
a(8)
100
50
20
30
60
80
90
70
若采用冒泡排序算法对这些数据进行升序排列,在完成第一遍排序时需交换数据的次数为( )
A、2 B、3 C、4 D、5 -
15、数组指针的应用:小明编写了一个二进制的消消乐程序,实现功能如下:二进制数中相邻重复的数字个数大于或等于2就消除掉,例如:二进制数1110前面连续3个1消除掉后该二进制数变成0,二进制数1001消除3个重复0后变成11,消除后的结果不继续消除。
程序功能如下:在文本框Text1中输入一个二进制数据,单击“消除”按钮 Command1,将二进制数据中相邻重复的数据大于或等于2的消除掉,并将结果在标签 Label1中显示。程序运行界面如图所示。
实现上述功能的VB程序如下,但加框处代码有错,请改正。
Private Sub Command1_Click ( )
Dim a (100) As String, b (100) As String
Dim n As Integer
Dim pa As Integer
Dim pb As Integer
s = Text1, Text
n = Len (Text1. Text)
For i= 1 To n
a(i) = Mid(s, i, 1)
Next i
pa =1 : pb = 1
Do While pa < = n-1
If
Then ‘①b(pb) = a(pa)
pa= pa + 1: pb = pb + 1
Else
j = pa+1
Do While j < = n
If
Then ‘②j=j+1
Else
Exit Do
End if
Loop
pa = j
End if
Loop
If pa =n Then b (pb) = a(pa): pb = pb + 1
ans = “”
For i= 1 To pb-1
‘③Next i
Label1. Caption = "消除后的结果为:" + ans
End Sub
① ② ③
-
16、高精度乘法:两个正整数进行高精度乘法计算的一般算法如下:
⑴将第一个整数各位上的数字按照从低位到高位的顺序依次存入数组a(1)、a(2)、…a(La)中,将另一个整数各位上的数字按照从低位到高位的顺序依次存入数组b(1)、b(2)、…、b(Lb)中。其中,La表示第一个整数的位数,Lb表示第二个整数的位数;
⑵按照从低位到高位的顺序,将两个整数各位数值进行逐位乘法计算(第一轮先让b(1)依次乘以a(1)、a(2)、…、a(La),第二轮再让b(2)依次乘以a(1)、a(2)、…a(La),依次进行),每位的乘法结果也按照低位到高位的顺序依次存入数组ans(1)、ans(2)、ans(3)…中;
⑶对数组ans中的计算结果进行从低位到高位的进位处理;
⑷统计数组ans中实际计算结果的有效数值位数,并将位数值存入变量 length;
⑸按照高位到低位的顺序输出数组ans中的计算结果。
张老师设计了两个正整数进行高精度乘法计算的VB程序,功能如下:在文本框 Text1和Text2中依次输入两个整数,单击“计算”按钮 Command1,程序进行高精度乘法计算,并在标签 Label4中输出计算结果。下面信息显示了进行高精度乘法计算的主要过程(假设输入的两个整数分别为“123”和“45”):
程序运行效果如图所示。
(1)、实现上述功能的VB程序如下,请在划线处填入合适的代码。Dim a(1 To 30) As Integer, b(1 To 30)As Integer
Dim ans(1 To 60) As Integer
Dim La As Integer, Lb As Integer, length As Integer
Private Sub Command1_Click ( )
Dim i As Integer, j As Integer, t As Integer, temp As String
‘将两个乘数(正整数)各数位上的数字按照上述算法依次存入数组a和b,每个正整数位数分别保存到变量La和Lb;将保存结果的数组ans(i)值初始化为零(该部分程序代码略)
For i = 1 To Lb ‘按低位到高位的顺序进行列竖式的逐位乘法
For j=1 To La
ans(1+j-1)= ① +b(i)*a(j)
Next j
Next i
For i = 1 To La + Lb ' 对计算结果进行进位处理
ans(i +1) = ans(i+1) + ans(1)\10
ans(i)= ②
Next i
Length = La + Lb
Do While ans (length) = 0
length = length-1
Loop
For i = ③ To 1 step-1
Label4. Caption = Label4 Caption & str (ans(i))
Next i
End sub
① ② ③
(2)、根据本题算法,若输入的两个整数分别为5125和18,则在输出乘法计算结果时,变量length的值为。 -
17、高精度加法:张老师设计了一个“大数据加法运算器”,在Text1和Text2中输入两个大数据,单击 Command1按钮,可实现两个数的相加,并将运算结果输出到Text3中程序运行界面如图所示。
(1)、实现上述功能的程序代码如下,请在划线处填入合适的代码。Private sub Command1_Click ( )
Dim sl As String, s2 As String
Dim a(1 To 50)As Integer
Dim b(1 To 50) As Integer
Dim c(1 To 51) As Integer
Dim 11 As Integer, 12 As Integer
s1=Text. Text
s2= Text2 Text
l1=Len(s1)
l2=Len(s2)
For i=1 To 50 ‘数组初始化
a(i)=0: b(i)=0
Next i
For i = 1 To l1
a(i) = Val (Mid(s1, l1-i+1, 1))
For j=1 To l2
b(j)=Val(Mid(s2, l2-j+1, 1))
Next j
If l1 > l2 Then Max= l1 Else Max= l2
For k =1 To Max
①
If c(k)> =10 Then
c(k) = c(k)-10
t=1
Else
②
End If
Next k
For m= 1 To
Text3.Text= Trim(c(m))+Text3.Text
‘Trim( )的作用是去除字符串中的空格符
Next m
End Sub
① ②
(2)、试说明加框处代码的作用。 -
18、数组整段移动:将一个长度为n的有序序列a(1)、a(2)…以整数t(1≤t≤n)为界划分为两段,并将序列a的前t个数移动到n位之后,保持这两段(t个数和n-t个数)之间的相对位置不变(即t个数和n-t个数各自有序)。
例如,长度为6的有序序列:38、42、59、61、69、78,当t=2时重排结果为:59、61、69、78、38、42。
小红编写了VB程序功能如下:程序运行时产生n个整数存储在数组a中,在文本框Text1中输入t,单击“对调”按钮Command1在列表框List2中输出t个数与n-t个数对调后的数字序列。程序运行界面如图所示。
为了实现上述功能,请在划线处填入合适的代码。
Const n = 10
Dim a (1 To 10) As Integer
Private Sub Form Load ( )
‘生成n个有序数 ,显示在List1中
‘代码略
End Sub
Private Sub Command1_ Click ( )
Dim t As Integer, i As Integer, j As Integer
Dim temp As Integer
①
For i=t+1 To n
Temp = a(i)
For j = i To i+1-t step -1
②
Next j
a(j)= ③
Next i
For i=1 To n
List2 AddItem Str(a(i))
Next i
End Sub
① ② ③
-
19、小明编写了一个数据插入程序。程序输入一个数字,将该数字插入一列有序数据:-5,3,4,12,20,45,70,并使数据序列保持有序。设计的算法是从前往后找位置插入。
以下为实现程序功能的VB代码,请在划线处填入合适的代码。
Private Sub Command1_Click ( )
Dim a (1 To 8) As Integer
Dim n, i, j, x As Integer
List1. clear
List2, Clear
a(1)=-5 :a(2)=3 :a(3)=4 :a(4)=12 :a(5)=20 :a(6)=45 :a(7)=70
For j=1 To 7
List1 AddItem Str (a(3))
Next j
x= Val(Text1. Text)
i=1
Do while x > a (i) And i < 8 ‘ 找x的插入位置
①
Loop
For j = 8 To i+1 Step-1
②
Next j
a(i)=x
For j = 1 To 8
List2 AddItem Str(a(3)
Next j
Label11. Caption ="插入的位置是" & ③
End sub
① ② ③
-
20、已知数组a中存储了某次考试某一指定科目的相关数据,数组a各元素的含义如表所示:
数组元素
数组元素的含义
a(1)
存储班级数n
a(2)
从a(2)到a(n+1)依次存储1、2、…、n班学生的人数
…
a(n+1)
a(n+2)
从a(n+2)开始依次存储1班每个学生的单科成绩,2班每个学生的单科成绩、……、n班每个学生的单科成绩
…
…
张老师依据数组a中的相关数据编写了VB程序来统计各班平均分。
程序功能如下:在文本框Text1中输入科目名称,单击“读取数据库”按钮Command1程序从数据库读取数据;单击“开始统计”按钮Command2程序进行统计处理,结果输出在列表框List1中。程序运行界面如图所示。
(1)、根据程序运行界面中的数据及数组a各元素的含义,数组元素a(5)的值为(填写数值)。(2)、请在划线处填入合适的代码。Dim a (1 To 600) As Integer数组大小满足处理要求 Private Sub Command1_Click ( )
‘本过程从数据库读取指定科目的各相关数据,存储在数组a中
‘本过程语句略
End Sub
Private Sub Command2_Click ( )
‘依据数组a中的相关数据统计各班级平均分
Dim i As Integer, j As Integer, n As Integer
Dim p As Integer, sum As Integer, aver As Single
①
p=n+2
For i =1 To n
sum= 0
For j=1 To a (i+1)
②
p=p+1
Next j
aver= sum/a (i +1)
List1 AddItem Str(i)+ “” n+ str(a(i+1)) + “” + Str(aver)
Next i
End Sub
① ②