首页
高中语文
高中数学
高中英语
高中物理
高中化学
高中历史
高中道德与法治(政治)
高中地理
高中生物
高中音乐
高中美术
高中体育
高中信息技术
高中通用技术
资源详情
高中信息技术
学考(选考)专区
一轮复习
查找算法的程序实现专项训练 浙江2022届选考专用
文档属性
名称
查找算法的程序实现专项训练 浙江2022届选考专用
格式
zip
文件大小
158.4KB
资源类型
试卷
版本资源
科目
信息技术(信息科技)
更新时间
2022-03-18 16:30:20
点击下载
文档简介
登录二一教育在线组卷平台 助您教考全无忧
查找算法的程序实现专项训练 浙江2022届选考专用
一、查找算法的程序实现专项训练 浙江2022届选考专用【gb】
1.(2022高三下·浙江)在数组元素a(1)到a(8)中查找键值为key的数,其顺序查找的VB程序段如下,请在划线处填写正确的语句。
for i=1 to 8
if then
Text1.text=str(i)
exit
for
end if
next i
if then
text1.text=″在数组中没有找到″+str(key)
end if
【答案】a(i)=key;i>8
【考点】查找算法及程序实现
【解析】【解答】程序实现时,变量i用来表示第几次查找,而a(i)则是第i次查找时被访问到的数组元素。如果某个数组元素a(i)的值等于key则将该数组元素的下标值i显示在text1文本框中,并通过exit for来结束查找。若没有找到key,则i的值必定大于8,故第一空答案为:a(i)=key,第一空答案为:i>8。
【分析】本题考查的是查找算法分析。根据顺序查找的基本思想,依次将数组元素a(1)到a(8)跟查找键值key比较,若相等,显示找到结果并退出循环,否则继续查找。
2.某数组的6个元素依次为“27,32,57,78,80,90”。若对该数组进行顺序查找,其平均查找次数为(1+2+3+4+5+6)/6=7/2;若对该数组进行对分查找,其平均查找次数为( )
A.7/2 B.7/3 C.5/2 D.2
【答案】B
【考点】查找算法及程序实现
【解析】【解答】对该数组进行对分查找,查找关键字“27”需要查找次数是2,查找关键字“32”需要查找次数是3,查找关键字“57”需要查找次数是1,查找关键字“78”需要查找次数是3,查找关键字“80”需要查找次数是2,查找关键字“90”需要查找次数是3,因此平均查找次数为(2+3+1+3+2+3)/6=7/3。故答案选B。
【分析】本题考查对分查找算法。对分查找基本思想:将所要查找的关键数与有序数组内处于中间位置的元素进行比较,如果中间位置上的元素数值与查找关键数相同,表示找到,否则根据数组元素的有序性,就可以确定应该在数组的前半部分还是后半部分继续进行查找。在新确定的范围内,继续按上述方法进行查找,直到获得最终结果。
3.(2022高三下·浙江)某对分查找算法的VB程序段如下:
i=1:j=8:c=0
Do While i<=j
c=c+1
m=Fix((i+j)/2)
If key=b(m) Then Exit Do
If key
Loop
数组元素b(1)到b(8)的值依次为“22,32,39,48,71,82,96,106”。若该程序段运行结束后,c的值为2,则key的值是( )
A.48或32 B.48或96 C.32或82 D.82或96
【答案】C
【考点】查找算法及程序实现
【解析】【解答】程序采用对分查找算法,变量c表示查找次数,第一次查找的值为48,第二次查找的值为32或82。故答案选C。
【分析】本题考查的是查找算法。可以用二叉树的方法考虑这个问题,如下图所示:
节点中的数字表示元素编号,节点在第n层,表示找到该数要n次。对于8个升序的数列a,第1次查找的是a(4),第2次找的是a(2)、a(6),第3次找的是a(1)、a(3)、a(5)、a(7),第4次找的是a(8)。
4.(2022高三下·浙江)数组a为一组正整数,奇数在前,偶数在后。奇数与偶数已分别按升序排序。依据对分查找思想:设计一个在数组a中查找数据Key的程序。实现该功能的VB程序段如下:
i=1:j=10
Key=Val(Text1.Text)
Do While i<=j
m=(i+j)\2
If a(m)=Key Then Exit Do 'Exit Do 表示退出循环
If Key Mod 2=1 And a(m) Mod 2=0 Then
ElseIf Key Mod 2=0 And a(m) Mod 2=1 Then
Else
End If
Loop
If i>j Then s=″没有找到!″ Else s=″位置:″+Str(m)
Text2.Text=s
上述程序中划线处可选语句为:
①i=m+1
②j=m-1
③If Key
则横线处语句依次是( )
A.①、②、③ B.①、③、② C.②、①、③ D.③、②、①
【答案】C
【考点】查找算法及程序实现
【解析】【解答】如果key是奇数并且查找区间的中间是偶数,则在前半段查找(因为后半段肯定都是偶数),即j=m-1;否则如果key是偶数并且查找区间的中间是奇数,则在后半段查找(因为前半段肯定都是奇数),即i=m+1;否则就是纯偶数升序列中找偶数或纯奇数的升序列中找奇数,按正常对分查找即If Key
【分析】本题考查的是查找算法。对分查找的基本思路:在有序的数据序列中(一般放在数组中),首先把查找的数据与数组中间位置的元素进行比较,若相等,则查找成功并退出查找;否则,根据数组元素的有序性,确定数据应在数组的前半部分还是在后半部分查找;在确定了新的查找范围后,重复进行以上比较,直到找到或未找到为止。
5.(2022高三下·浙江)数组a中存放着已排序的n-1个实验数据(a(1)≥a(2)≥……≥a(n-1),a(n)暂未存储数据)。现将文本框Text1中输入的新数据插入到数组a中相应位置,从而使n个数据仍保持有序。完成该功能的VB程序段如下,请在划线处填入正确的语句。
x=Val(Text1.Text)
i=1:j=n-1
Do While i<=j
m=(i+j)\2
If
x
Loop
For k=n To Step-1
a(k)=a(k-1)
Next k
a(i)=x
【答案】i+1或j+2
【考点】查找算法及程序实现
【解析】【解答】 程序中通过对分查找法找到插入位置,该位置是i,那么就需要把a(n-1)、a(n-2)……a(i)依次往后移一个位置,相当于各位置加1,然后把x存入a(i)中。该位置也可以是j+2。故答案为: i+1或j+2。
【分析】本题考查的是查找算法。对分查找的基本思路:在有序的数据序列中(一般放在数组中),首先把查找的数据与数组中间位置的元素进行比较,若相等,则查找成功并退出查找;否则,根据数组元素的有序性,确定数据应在数组的前半部分还是在后半部分查找;在确定了新的查找范围后,重复进行以上比较,直到找到或未找到为止。
6.(2022高三下·浙江)某对分查找算法的VB程序段如下:
n=0:i=1:j=6
Key=Val(Text1.Text)
Do While i<=j
m=(i+j)\2
n=n+1
If Key=d(m) Then Exit Do
If Key>d(m) Then j=m-1 Else i=m+1
Loop
If i<=j Then s=m-n Else s=n
d(1)到d(6)的值依次为“88,77,53,47,39,28”,输入某个Key值后,运行该程序段后,变量s结果为1,则输入key的值是( )
A.89 B.77 C.47 D.39
【答案】C
【考点】查找算法及程序实现
【解析】【解答】本题可以用二叉树的方法解决,如下图所示:
节点中的数字表示元素编号,节点在第n层,表示找到该数要n次。要满足m-n=1,即中点值比查找次数要大1,由图可知,a(4)满足这个条件。
【分析】本题考查的是对分查找算法。程序采用对分查找算法,由代码得如果s=n为1,需满足i>j,即需要查找的key不在数组中,但是仅查找1次不满足该条件,故s=m-n=1,查找3次满足。故答案选C。
7.(2022高三下·浙江)某对分查找算法的VB程序段如下:
i = 1:j = 7:s = ″ ″
key =Int(Rnd * 100)
Do While i <= j
m = (i + j) \ 2
If key = a(m) Then
s = s + ″M″:Exit Do 'Exit Do表示退出循环
ElseIf key < a(m) Then
j = m-1:s = s + ″L″
Else
i = m + 1:s = s + ″R″
End If
Loop
Text1.Text = s
数组元素a(1)到a(9)的值依次为“24,35,38,41,45,69,78”。若该程序段执行后,文本框Text1中显示的内容可能是( )
A.RL B.LMR C.RLR D.LRLM
【答案】C
【考点】查找算法及程序实现
【解析】【解答】分析程序得知,查找成功会输出″M″,循环结束,所以M不可能在中间,排除B选项。对n个数据查找,最多查找次数为 Log2n+1(向下取整),7个元素,最多查找3次,所以排除D选项。如果无法找到(不输出″M″),则需要查找3次,也就是最多查找次数。故答案选C。
【分析】本题考查的是对分查找算法。对分查找的基本思路:在有序的数据序列中(一般放在数组中),首先把查找的数据与数组中间位置的元素进行比较,若相等,则查找成功并退出查找;否则,根据数组元素的有序性,确定数据应在数组的前半部分还是在后半部分查找;在确定了新的查找范围后,重复进行以上比较,直到找到或未找到为止。
8.(2022高三下·浙江)数组a中存储的是左右交替上升的n个正整数,如下表所示:
a(1) a(2) a(3) …… a(n-2) a(n-1) a(n)
3 25 38 …… 55 31 12
依据对分查找思想,设计一个在数组a中查找数据key的程序。实现该功能的VB程序如下,但加框处代码有错,请改正。
Private Sub Command1_Click( )
Const n=6
Dim a(1 To
n) As Integer,flag As
Boolean
Dim i As
Integer,j As Integer,m As Integer,key As Integer
′读取一组正整数,按上述规则存入数组a中,代码略。
key=Val (Text1.Text)
i=1
j=(n+1)\2
flag=True
Do While And Not flag′
m=(i+j)\2
If key=a(m) Then
flag=True
ElseIf key<a(m) Then
j=m-1
Else
i=m+1
End If
Loop
If Not flag And j>0 Then
m=
If key=a(m) Then flag=True
End If
If flag Then
Text2.Text=Str(m)
Else
Text2.Text=“找不到”
End If
End Sub
其中,加框处应改正为 、
【答案】i<=j;n-i+2或n-j+1或n+1-(i+j)\2或其他等价表达式
【考点】查找算法及程序实现
【解析】【解答】数组的前半部分是递增的,后半部分是递减的,且他们的大小变化规律是3→12→25→31→38→55。因此如果在前半部分找不到,还可能在右半部分对称的位置找到。因此第一个加框处应修改为i<=j,也就是说最后一次查找,变量i=j=m。如果在前半部分找不到,该数可能比a(m)小,此时j=m-1,该数大于(j)但小于a(m),在与j对称的位置(即n-j+1)可能是要找的数;该数可能比a(m)大,此时i=m+1,该数大于a(m)但小于a(i),在与(i-1)对称的位置(即n-(i-1)+1)可能是要找的数。故答案为:i<=j,n-i+2或n-j+1或n+1-(i+j)\2或其他等价表达式。
【分析】本题考查的是对分查找的思想,算法比较简单,关键是对数组a中存储的是左右交替上升的n个正整数的理解。
9.(2022高三下·浙江)数组a为一组正整数,奇数在前,偶数在后。奇数与偶数已分别按升序排序。依据对分查找思想:设计一个在数组a中查找数据Key的程序。实现该功能的VB程序段如下:
i=1∶j=10
Key=Val(Text1.Text)
Do While i<=j
m=(i+j)\2
If a(m)=Key Then Exit Do ′Exit Do表示退出循环
If Key Mod 2=1 And a(m) Mod 2=0 Then
ElseIf Key Mod 2=0 And a(m) Mod 2=1 Then
Else
End If
Loop
If i>j Then s=“没有找到!” Else s=“位置:”+Str(m)
Text2.Text=s
上述程序中方框处可选语句为:
①i=m+1
②j=m-1
③If Key
则方框处语句依次是( )
A.①、②、③ B.①、③、② C.②、①、③ D.③、②、①
【答案】C
【考点】查找算法及程序实现
【解析】
10.(2022高三下·浙江)采用如下对分查找算法对数组a中7个有序数据“15,38,51,66,77,81,99”进行查找,查找数据为“55”,
i=1∶j=7∶x=55
Do While i<=j
m=(i+j)\2
If a(m)=x Then Exit Do
If a(m)>x Then j=m-1 Else i=m+1
Loop
经过上述代码查找后,下列表述正确的是( )
A.i=m+1 B.i=m-1 C.j>m+1 D.j<m-1
【答案】A
【考点】查找算法及程序实现
【解析】【解答】程序运行过程中的变量变化情况:
查找次数 变量i 变量j 变量m a(m)
第1次查找 1 7 4 66
第2次查找 1 3 2 38
第3次查找 3 3 3 51
退出循环 4 3
经过3次查找,i=4,j=3,i>j,退出循环。故答案选A。
【分析】本题考查的是对分查找算法程序。对分查找的基本思路:在有序的数据序列中(一般放在数组中),首先把查找的数据与数组中间位置的元素进行比较,若相等,则查找成功并退出查找;否则,根据数组元素的有序性,确定数据应在数组的前半部分还是在后半部分查找;在确定了新的查找范围后,重复进行以上比较,直到找到或未找到为止。
11.(2022高三下·浙江)某学校图书管理系统中有10万条图书资料记录(已经索引排序),假设从中取出一条记录并与待查找项进行比较所花时间为10毫秒,则用对分法在该系统中查找任意一本指定图书最多花费的时间约为( )
A.100万毫秒 B.50万毫秒 C.10毫秒 D.170毫秒
【答案】D
【考点】查找算法及程序实现
【解析】【解答】对分查找的查找效率较高,无论是否找到,最多进行Int(log2n)+1次查找,表示小于等于log2n+1的最大整数。n=100000,比较次数为17次,因此最多花费的时间是170毫秒。故答案选D。
【分析】本题考查的是对分查找算法。对分查找的基本思路:在有序的数据序列中(一般放在数组中),首先把查找的数据与数组中间位置的元素进行比较,若相等,则查找成功并退出查找;否则,根据数组元素的有序性,确定数据应在数组的前半部分还是在后半部分查找;在确定了新的查找范围后,重复进行以上比较,直到找到或未找到为止。
12.(2022高三下·浙江)使用VB程序查找单词最大间距:在文本框Text1中输入一段英文,并在文本框Text2中输入英文段落中的某个单词(或字符串),单击“最大间距”按钮(Command1)后,在文本框Text3中显示该单词在文中某两次出现的最大间距,若只出现一次或不出现则显示值为0。程序运行界面如下图所示:
实现上述功能的VB程序如下,请在划线处填入正确的代码。
Private Sub Command1_Click()
Dim a(1 To 1000)As String '数组a存储文中出现该指定单词(或字符串)的各个位置
Dim s As String,c As String,ch As String
Dim n As Integer,max As Integer,i As Integer
s=Text1.Text
c=Text2.Text
n=0∶Max=0
For i=1 To Len(s)-Len(c)+1
ch=
If ch=c Then
n=n+1
If n>=2 Then
If a(n)-a(n-1)-Len(c)>Max Then Max=a(n)-a(n-1)-Len(c)
End If
End If
Next i
Text3.Text=str(max)
End Sub
【答案】mid(s,i,len(c));a(n)=i
【考点】查找算法及程序实现
【解析】【解答】程序采用顺序查找算法,查找单词c。输入的英文总长度为len(s),待查的单词长度为len(c),循环查找从第1个字符开始,依次截取len(c)个字符与待查单词对比,对比一致则记录个数和出现位置,出现位置存入数组,即a(n)=i。如果找到2个或2个以上相同的字符,储存间距较大的间距值Max。所以①处应为在一段英文s中,从第i个字符开始截取len(c)个字符,即mid(s,i,len(c))。故答案为: mid(s,i,len(c))、a(n)=i。
【分析】本题考查的是查找算法。顺序查找的基本思想是:从第一个元索开始,按索引顺序遍历待查找序列,直到找出给定目标或者查找失败。
13.(2022高三下·浙江)某排序算法的VB程序段如下:
For i=7 To 5 Step -1
k=i
For j=1 To i-1
If a(j)
Next j
If i<>k Then
t=a(i):a(i)=a(k):a(k)=t
End If
Next i
数组元素a(1)到a(7)的数据依次为“10,41,75,12,63,11,85”。则排序“加工”后数组元素a(1)到a(7)的数据依次是( )
A.85,41,75,63,12,11,10 B.85,75,63,41,12,11,10
C.10,11,12,63,75,41,85 D.10,11,12,41,63,75,85
【答案】A
【考点】排序算法及程序实现
【解析】【解答】当i=7时,k=i,k指向的数与前面6个数进行比较,k指向前面较小的数,并交换,第一轮10与85互换。
当i=6时,k=i,k指向的数与前面5个数进行比较,k指向前面较小的数,并交换,第二轮没有交换。
当i=5时,k=i,k指向的数与前面4个数进行比较,k指向前面较小的数,并交换,第三轮12与63交换。
故答案选A。
【分析】本题考查的是排序算法的变形应用。
14.(2022高三下·浙江)双向选择排序算法。在经典的选择排序基础上,如果在选择出最小数的同时,也能选择预见最大数并将两数放置合适位置,这样就使排序效率提高一倍。依照上述双向选择排序的算法,小张编写了一个VB程序,功能如下:在列表框List中显示排序前数据,单击“排序”按钮Command1,在列表框List中显示这些数据按升序排序后的结果。运行效果如下图所示。
实现上述功能的VB程序如下,但加框处代码有错,请改正。
Const n=10
Dim b(1 To n)As Integer
Private Sub command1_Click( )
Dim i As Integer
Dim t As Integer
For i=1 To
For j=i To
If b(j)
t=b(i):b(i)=b(j):b(j)=t
End If
If b(j)>b(n-i+1) Then
t=b(j):b(j)=b(n-i+1):b(n-i+1)=t
End If
Next j
Next i
For i=1 To n
List2.AddItem Str(b(i))
Next i
End Sub
Private Sub Form_Load( )
For i=1 To 10
b(i)=1+Int(Rnd*100)
List1.AddItem Str(b(i))
Next i
End Sub
【答案】n\2;n-i+1
【考点】排序算法及程序实现
【解析】【解答】每次找出两个最值,因此只要比较的趟数是总数的一半即可。每次实现头尾有序,i相对的数在n-i+1。故答案为:n\2、n-i+1。
【分析】本题考查的是排序算法的应用。
二一教育在线组卷平台(zujuan.21cnjy.com)自动生成 1 / 1登录二一教育在线组卷平台 助您教考全无忧
查找算法的程序实现专项训练 浙江2022届选考专用
一、查找算法的程序实现专项训练 浙江2022届选考专用【gb】
1.(2022高三下·浙江)在数组元素a(1)到a(8)中查找键值为key的数,其顺序查找的VB程序段如下,请在划线处填写正确的语句。
for i=1 to 8
if then
Text1.text=str(i)
exit
for
end if
next i
if then
text1.text=″在数组中没有找到″+str(key)
end if
2.某数组的6个元素依次为“27,32,57,78,80,90”。若对该数组进行顺序查找,其平均查找次数为(1+2+3+4+5+6)/6=7/2;若对该数组进行对分查找,其平均查找次数为( )
A.7/2 B.7/3 C.5/2 D.2
3.(2022高三下·浙江)某对分查找算法的VB程序段如下:
i=1:j=8:c=0
Do While i<=j
c=c+1
m=Fix((i+j)/2)
If key=b(m) Then Exit Do
If key
Loop
数组元素b(1)到b(8)的值依次为“22,32,39,48,71,82,96,106”。若该程序段运行结束后,c的值为2,则key的值是( )
A.48或32 B.48或96 C.32或82 D.82或96
4.(2022高三下·浙江)数组a为一组正整数,奇数在前,偶数在后。奇数与偶数已分别按升序排序。依据对分查找思想:设计一个在数组a中查找数据Key的程序。实现该功能的VB程序段如下:
i=1:j=10
Key=Val(Text1.Text)
Do While i<=j
m=(i+j)\2
If a(m)=Key Then Exit Do 'Exit Do 表示退出循环
If Key Mod 2=1 And a(m) Mod 2=0 Then
ElseIf Key Mod 2=0 And a(m) Mod 2=1 Then
Else
End If
Loop
If i>j Then s=″没有找到!″ Else s=″位置:″+Str(m)
Text2.Text=s
上述程序中划线处可选语句为:
①i=m+1
②j=m-1
③If Key
则横线处语句依次是( )
A.①、②、③ B.①、③、② C.②、①、③ D.③、②、①
5.(2022高三下·浙江)数组a中存放着已排序的n-1个实验数据(a(1)≥a(2)≥……≥a(n-1),a(n)暂未存储数据)。现将文本框Text1中输入的新数据插入到数组a中相应位置,从而使n个数据仍保持有序。完成该功能的VB程序段如下,请在划线处填入正确的语句。
x=Val(Text1.Text)
i=1:j=n-1
Do While i<=j
m=(i+j)\2
If
x
Loop
For k=n To Step-1
a(k)=a(k-1)
Next k
a(i)=x
6.(2022高三下·浙江)某对分查找算法的VB程序段如下:
n=0:i=1:j=6
Key=Val(Text1.Text)
Do While i<=j
m=(i+j)\2
n=n+1
If Key=d(m) Then Exit Do
If Key>d(m) Then j=m-1 Else i=m+1
Loop
If i<=j Then s=m-n Else s=n
d(1)到d(6)的值依次为“88,77,53,47,39,28”,输入某个Key值后,运行该程序段后,变量s结果为1,则输入key的值是( )
A.89 B.77 C.47 D.39
7.(2022高三下·浙江)某对分查找算法的VB程序段如下:
i = 1:j = 7:s = ″ ″
key =Int(Rnd * 100)
Do While i <= j
m = (i + j) \ 2
If key = a(m) Then
s = s + ″M″:Exit Do 'Exit Do表示退出循环
ElseIf key < a(m) Then
j = m-1:s = s + ″L″
Else
i = m + 1:s = s + ″R″
End If
Loop
Text1.Text = s
数组元素a(1)到a(9)的值依次为“24,35,38,41,45,69,78”。若该程序段执行后,文本框Text1中显示的内容可能是( )
A.RL B.LMR C.RLR D.LRLM
8.(2022高三下·浙江)数组a中存储的是左右交替上升的n个正整数,如下表所示:
a(1) a(2) a(3) …… a(n-2) a(n-1) a(n)
3 25 38 …… 55 31 12
依据对分查找思想,设计一个在数组a中查找数据key的程序。实现该功能的VB程序如下,但加框处代码有错,请改正。
Private Sub Command1_Click( )
Const n=6
Dim a(1 To
n) As Integer,flag As
Boolean
Dim i As
Integer,j As Integer,m As Integer,key As Integer
′读取一组正整数,按上述规则存入数组a中,代码略。
key=Val (Text1.Text)
i=1
j=(n+1)\2
flag=True
Do While And Not flag′
m=(i+j)\2
If key=a(m) Then
flag=True
ElseIf key<a(m) Then
j=m-1
Else
i=m+1
End If
Loop
If Not flag And j>0 Then
m=
If key=a(m) Then flag=True
End If
If flag Then
Text2.Text=Str(m)
Else
Text2.Text=“找不到”
End If
End Sub
其中,加框处应改正为 、
9.(2022高三下·浙江)数组a为一组正整数,奇数在前,偶数在后。奇数与偶数已分别按升序排序。依据对分查找思想:设计一个在数组a中查找数据Key的程序。实现该功能的VB程序段如下:
i=1∶j=10
Key=Val(Text1.Text)
Do While i<=j
m=(i+j)\2
If a(m)=Key Then Exit Do ′Exit Do表示退出循环
If Key Mod 2=1 And a(m) Mod 2=0 Then
ElseIf Key Mod 2=0 And a(m) Mod 2=1 Then
Else
End If
Loop
If i>j Then s=“没有找到!” Else s=“位置:”+Str(m)
Text2.Text=s
上述程序中方框处可选语句为:
①i=m+1
②j=m-1
③If Key
则方框处语句依次是( )
A.①、②、③ B.①、③、② C.②、①、③ D.③、②、①
10.(2022高三下·浙江)采用如下对分查找算法对数组a中7个有序数据“15,38,51,66,77,81,99”进行查找,查找数据为“55”,
i=1∶j=7∶x=55
Do While i<=j
m=(i+j)\2
If a(m)=x Then Exit Do
If a(m)>x Then j=m-1 Else i=m+1
Loop
经过上述代码查找后,下列表述正确的是( )
A.i=m+1 B.i=m-1 C.j>m+1 D.j<m-1
11.(2022高三下·浙江)某学校图书管理系统中有10万条图书资料记录(已经索引排序),假设从中取出一条记录并与待查找项进行比较所花时间为10毫秒,则用对分法在该系统中查找任意一本指定图书最多花费的时间约为( )
A.100万毫秒 B.50万毫秒 C.10毫秒 D.170毫秒
12.(2022高三下·浙江)使用VB程序查找单词最大间距:在文本框Text1中输入一段英文,并在文本框Text2中输入英文段落中的某个单词(或字符串),单击“最大间距”按钮(Command1)后,在文本框Text3中显示该单词在文中某两次出现的最大间距,若只出现一次或不出现则显示值为0。程序运行界面如下图所示:
实现上述功能的VB程序如下,请在划线处填入正确的代码。
Private Sub Command1_Click()
Dim a(1 To 1000)As String '数组a存储文中出现该指定单词(或字符串)的各个位置
Dim s As String,c As String,ch As String
Dim n As Integer,max As Integer,i As Integer
s=Text1.Text
c=Text2.Text
n=0∶Max=0
For i=1 To Len(s)-Len(c)+1
ch=
If ch=c Then
n=n+1
If n>=2 Then
If a(n)-a(n-1)-Len(c)>Max Then Max=a(n)-a(n-1)-Len(c)
End If
End If
Next i
Text3.Text=str(max)
End Sub
13.(2022高三下·浙江)某排序算法的VB程序段如下:
For i=7 To 5 Step -1
k=i
For j=1 To i-1
If a(j)
Next j
If i<>k Then
t=a(i):a(i)=a(k):a(k)=t
End If
Next i
数组元素a(1)到a(7)的数据依次为“10,41,75,12,63,11,85”。则排序“加工”后数组元素a(1)到a(7)的数据依次是( )
A.85,41,75,63,12,11,10 B.85,75,63,41,12,11,10
C.10,11,12,63,75,41,85 D.10,11,12,41,63,75,85
14.(2022高三下·浙江)双向选择排序算法。在经典的选择排序基础上,如果在选择出最小数的同时,也能选择预见最大数并将两数放置合适位置,这样就使排序效率提高一倍。依照上述双向选择排序的算法,小张编写了一个VB程序,功能如下:在列表框List中显示排序前数据,单击“排序”按钮Command1,在列表框List中显示这些数据按升序排序后的结果。运行效果如下图所示。
实现上述功能的VB程序如下,但加框处代码有错,请改正。
Const n=10
Dim b(1 To n)As Integer
Private Sub command1_Click( )
Dim i As Integer
Dim t As Integer
For i=1 To
For j=i To
If b(j)
t=b(i):b(i)=b(j):b(j)=t
End If
If b(j)>b(n-i+1) Then
t=b(j):b(j)=b(n-i+1):b(n-i+1)=t
End If
Next j
Next i
For i=1 To n
List2.AddItem Str(b(i))
Next i
End Sub
Private Sub Form_Load( )
For i=1 To 10
b(i)=1+Int(Rnd*100)
List1.AddItem Str(b(i))
Next i
End Sub
答案解析部分
1.【答案】a(i)=key;i>8
【考点】查找算法及程序实现
【解析】【解答】程序实现时,变量i用来表示第几次查找,而a(i)则是第i次查找时被访问到的数组元素。如果某个数组元素a(i)的值等于key则将该数组元素的下标值i显示在text1文本框中,并通过exit for来结束查找。若没有找到key,则i的值必定大于8,故第一空答案为:a(i)=key,第一空答案为:i>8。
【分析】本题考查的是查找算法分析。根据顺序查找的基本思想,依次将数组元素a(1)到a(8)跟查找键值key比较,若相等,显示找到结果并退出循环,否则继续查找。
2.【答案】B
【考点】查找算法及程序实现
【解析】【解答】对该数组进行对分查找,查找关键字“27”需要查找次数是2,查找关键字“32”需要查找次数是3,查找关键字“57”需要查找次数是1,查找关键字“78”需要查找次数是3,查找关键字“80”需要查找次数是2,查找关键字“90”需要查找次数是3,因此平均查找次数为(2+3+1+3+2+3)/6=7/3。故答案选B。
【分析】本题考查对分查找算法。对分查找基本思想:将所要查找的关键数与有序数组内处于中间位置的元素进行比较,如果中间位置上的元素数值与查找关键数相同,表示找到,否则根据数组元素的有序性,就可以确定应该在数组的前半部分还是后半部分继续进行查找。在新确定的范围内,继续按上述方法进行查找,直到获得最终结果。
3.【答案】C
【考点】查找算法及程序实现
【解析】【解答】程序采用对分查找算法,变量c表示查找次数,第一次查找的值为48,第二次查找的值为32或82。故答案选C。
【分析】本题考查的是查找算法。可以用二叉树的方法考虑这个问题,如下图所示:
节点中的数字表示元素编号,节点在第n层,表示找到该数要n次。对于8个升序的数列a,第1次查找的是a(4),第2次找的是a(2)、a(6),第3次找的是a(1)、a(3)、a(5)、a(7),第4次找的是a(8)。
4.【答案】C
【考点】查找算法及程序实现
【解析】【解答】如果key是奇数并且查找区间的中间是偶数,则在前半段查找(因为后半段肯定都是偶数),即j=m-1;否则如果key是偶数并且查找区间的中间是奇数,则在后半段查找(因为前半段肯定都是奇数),即i=m+1;否则就是纯偶数升序列中找偶数或纯奇数的升序列中找奇数,按正常对分查找即If Key
【分析】本题考查的是查找算法。对分查找的基本思路:在有序的数据序列中(一般放在数组中),首先把查找的数据与数组中间位置的元素进行比较,若相等,则查找成功并退出查找;否则,根据数组元素的有序性,确定数据应在数组的前半部分还是在后半部分查找;在确定了新的查找范围后,重复进行以上比较,直到找到或未找到为止。
5.【答案】i+1或j+2
【考点】查找算法及程序实现
【解析】【解答】 程序中通过对分查找法找到插入位置,该位置是i,那么就需要把a(n-1)、a(n-2)……a(i)依次往后移一个位置,相当于各位置加1,然后把x存入a(i)中。该位置也可以是j+2。故答案为: i+1或j+2。
【分析】本题考查的是查找算法。对分查找的基本思路:在有序的数据序列中(一般放在数组中),首先把查找的数据与数组中间位置的元素进行比较,若相等,则查找成功并退出查找;否则,根据数组元素的有序性,确定数据应在数组的前半部分还是在后半部分查找;在确定了新的查找范围后,重复进行以上比较,直到找到或未找到为止。
6.【答案】C
【考点】查找算法及程序实现
【解析】【解答】本题可以用二叉树的方法解决,如下图所示:
节点中的数字表示元素编号,节点在第n层,表示找到该数要n次。要满足m-n=1,即中点值比查找次数要大1,由图可知,a(4)满足这个条件。
【分析】本题考查的是对分查找算法。程序采用对分查找算法,由代码得如果s=n为1,需满足i>j,即需要查找的key不在数组中,但是仅查找1次不满足该条件,故s=m-n=1,查找3次满足。故答案选C。
7.【答案】C
【考点】查找算法及程序实现
【解析】【解答】分析程序得知,查找成功会输出″M″,循环结束,所以M不可能在中间,排除B选项。对n个数据查找,最多查找次数为 Log2n+1(向下取整),7个元素,最多查找3次,所以排除D选项。如果无法找到(不输出″M″),则需要查找3次,也就是最多查找次数。故答案选C。
【分析】本题考查的是对分查找算法。对分查找的基本思路:在有序的数据序列中(一般放在数组中),首先把查找的数据与数组中间位置的元素进行比较,若相等,则查找成功并退出查找;否则,根据数组元素的有序性,确定数据应在数组的前半部分还是在后半部分查找;在确定了新的查找范围后,重复进行以上比较,直到找到或未找到为止。
8.【答案】i<=j;n-i+2或n-j+1或n+1-(i+j)\2或其他等价表达式
【考点】查找算法及程序实现
【解析】【解答】数组的前半部分是递增的,后半部分是递减的,且他们的大小变化规律是3→12→25→31→38→55。因此如果在前半部分找不到,还可能在右半部分对称的位置找到。因此第一个加框处应修改为i<=j,也就是说最后一次查找,变量i=j=m。如果在前半部分找不到,该数可能比a(m)小,此时j=m-1,该数大于(j)但小于a(m),在与j对称的位置(即n-j+1)可能是要找的数;该数可能比a(m)大,此时i=m+1,该数大于a(m)但小于a(i),在与(i-1)对称的位置(即n-(i-1)+1)可能是要找的数。故答案为:i<=j,n-i+2或n-j+1或n+1-(i+j)\2或其他等价表达式。
【分析】本题考查的是对分查找的思想,算法比较简单,关键是对数组a中存储的是左右交替上升的n个正整数的理解。
9.【答案】C
【考点】查找算法及程序实现
【解析】
10.【答案】A
【考点】查找算法及程序实现
【解析】【解答】程序运行过程中的变量变化情况:
查找次数 变量i 变量j 变量m a(m)
第1次查找 1 7 4 66
第2次查找 1 3 2 38
第3次查找 3 3 3 51
退出循环 4 3
经过3次查找,i=4,j=3,i>j,退出循环。故答案选A。
【分析】本题考查的是对分查找算法程序。对分查找的基本思路:在有序的数据序列中(一般放在数组中),首先把查找的数据与数组中间位置的元素进行比较,若相等,则查找成功并退出查找;否则,根据数组元素的有序性,确定数据应在数组的前半部分还是在后半部分查找;在确定了新的查找范围后,重复进行以上比较,直到找到或未找到为止。
11.【答案】D
【考点】查找算法及程序实现
【解析】【解答】对分查找的查找效率较高,无论是否找到,最多进行Int(log2n)+1次查找,表示小于等于log2n+1的最大整数。n=100000,比较次数为17次,因此最多花费的时间是170毫秒。故答案选D。
【分析】本题考查的是对分查找算法。对分查找的基本思路:在有序的数据序列中(一般放在数组中),首先把查找的数据与数组中间位置的元素进行比较,若相等,则查找成功并退出查找;否则,根据数组元素的有序性,确定数据应在数组的前半部分还是在后半部分查找;在确定了新的查找范围后,重复进行以上比较,直到找到或未找到为止。
12.【答案】mid(s,i,len(c));a(n)=i
【考点】查找算法及程序实现
【解析】【解答】程序采用顺序查找算法,查找单词c。输入的英文总长度为len(s),待查的单词长度为len(c),循环查找从第1个字符开始,依次截取len(c)个字符与待查单词对比,对比一致则记录个数和出现位置,出现位置存入数组,即a(n)=i。如果找到2个或2个以上相同的字符,储存间距较大的间距值Max。所以①处应为在一段英文s中,从第i个字符开始截取len(c)个字符,即mid(s,i,len(c))。故答案为: mid(s,i,len(c))、a(n)=i。
【分析】本题考查的是查找算法。顺序查找的基本思想是:从第一个元索开始,按索引顺序遍历待查找序列,直到找出给定目标或者查找失败。
13.【答案】A
【考点】排序算法及程序实现
【解析】【解答】当i=7时,k=i,k指向的数与前面6个数进行比较,k指向前面较小的数,并交换,第一轮10与85互换。
当i=6时,k=i,k指向的数与前面5个数进行比较,k指向前面较小的数,并交换,第二轮没有交换。
当i=5时,k=i,k指向的数与前面4个数进行比较,k指向前面较小的数,并交换,第三轮12与63交换。
故答案选A。
【分析】本题考查的是排序算法的变形应用。
14.【答案】n\2;n-i+1
【考点】排序算法及程序实现
【解析】【解答】每次找出两个最值,因此只要比较的趟数是总数的一半即可。每次实现头尾有序,i相对的数在n-i+1。故答案为:n\2、n-i+1。
【分析】本题考查的是排序算法的应用。
二一教育在线组卷平台(zujuan.21cnjy.com)自动生成 1 / 1
点击下载
同课章节目录
点击下载
VIP下载