高考浙江版高考信息技术 模拟演练 12.docx

上传人:b****9 文档编号:25712478 上传时间:2023-06-11 格式:DOCX 页数:10 大小:32.98KB
下载 相关 举报
高考浙江版高考信息技术 模拟演练 12.docx_第1页
第1页 / 共10页
高考浙江版高考信息技术 模拟演练 12.docx_第2页
第2页 / 共10页
高考浙江版高考信息技术 模拟演练 12.docx_第3页
第3页 / 共10页
高考浙江版高考信息技术 模拟演练 12.docx_第4页
第4页 / 共10页
高考浙江版高考信息技术 模拟演练 12.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

高考浙江版高考信息技术 模拟演练 12.docx

《高考浙江版高考信息技术 模拟演练 12.docx》由会员分享,可在线阅读,更多相关《高考浙江版高考信息技术 模拟演练 12.docx(10页珍藏版)》请在冰豆网上搜索。

高考浙江版高考信息技术 模拟演练 12.docx

高考浙江版高考信息技术模拟演练12

第4节 查找算法及程序实现

模拟演练

1.用对分查找从数列“1,5,9,13,16,20,33,40,61,77,89”中查找“5”,一共需要比较的次数为(  )

A.2B.3C.4D.5

答案 C 本题主要考查对分查找。

对分查找的基本思想:

首先将查找键与有序数组内处于中间位置的元素进行比较,如果中间位置上的元素数值与查找键相同,表示找到,否则根据数组元素的有序性,就可确定应该在数组的前半部分还是后半部分继续进行查找。

在新确定的范围内,继续按上述方法进行查找,直到获得最终结果。

对分查找是一种效率很高的查找方法,但被查找的数据必须是有序的。

若用一个数组d

(1)到d(11)来存放升序的元素序列1,5,9,13,16,20,33,40,

61,77,89,查找键key为5。

比较次数

比较范围

mid

key与d(mid)的关系

第一次

d

(1)~d(11)

6

key

第二次

d

(1)~d(5)

3

key

第三次

d

(1)~d

(2)

1

key>d(mid)

第四次

d

(2)

2

Key=d(mid)

2.某数组的6个元素依次为“27,32,57,78,80,90”。

若对该数组进行顺序查找,其平均查找次数为(1+2+3+4+5+6)/6=7/2;若对该数组进行对分查找,其平均查找次数为(  )

A.7/2B.7/3C.5/2D.2

答案 B 本题考查对分查找算法。

对该数组进行对分查找,其平均查找次数为(2+3+1+3+2+3)/6=7/3。

3.在数组d

(1)到d(10)中存放了以下数据:

10,12,17,20,22,27,40,45,50,80。

指定关键字为50,对数组进行对分查找,依次所经过的元素为(  )

A.22,27,50B.27,45,50

C.22,45,50D.22,40,50

答案 C 本题主要考查对分查找的思想方法。

第一次找到d(5)=22(中间位置m=Fix((1+10)/2)=5),key=50,key>d(5),因此下一次查找的范围是后半部分,即d(6)到a(10)。

第二次找到d(8)=45(中间位置m=Fix((6+10)/2)=8),key>d(8),因此下一次查找的范围是后半部分,即d(9)到d(10)。

第三次找到d(9)=50(中间位置m=Fix((9+10)/2)=9),key=d(9),找到了目标。

4.有如下程序段:

DimiAsInteger,jAsInteger,KeyAsInteger,mAsInteger,sAsString

i=1:

j=7:

s=“”:

flag=False

Key=Int(Rnd()*50)

DoWhilei<=jAndNotFlag

 m=(i+j)\2

 IfKey=a(m)Then

  Flag=True

 ElseIfKey

  j=m-1

 Else

  i=m+1

 EndIf

 s=s+Str(a(m))

Loop

Text1.Text=s

数组中a

(1)到a(7)的值依次为“23,33,45,56,68,77,89”,则Text1中显示的内容不可能是(  )

A.5633B.563345C.563323D.56776811

答案 D 此题考查对分查找,因为Key的值为小于50的整数,第一次访问的值为56,因此Key<56,所以第二次访问的值一定在前半段,可能是5633或563345或563323,不可能在后半段,即不可能是567768,因此本题答案为D。

5.某对分査找算法的VB程序段如下:

i=1:

j=5:

k=0:

s=""

key=Int(Rnd*100)

DoWhilei<=j

 k=k+1

 m=(i+j)\2

 s=s+Str(a(i))

 Ifkey=a(m)Then

   ExitDo ’ExitDo表示退出循环

 ElseIfkey

   j=m-1

 Else

   i=m+1

 EndIf

Loop

Text1.Text=s

数组元素a

(1)到a(5)的值依次为“6,18,25,37,49”。

若该程序段执行后,k的值为3,则key的值不可能为(  )

A.4B.18C.47D.55

答案 A 本题属于较难题,考查对分查找算法的思路。

本题要点在于对分查找各种情况的判断,由程序可知,key为待查找数据,k表示访问数据的次数。

若key=4,则依次访问的数据为“25,6”,k=2;若key=18,则依次访问的数据为“25,6,18”,k=3;若key=47,则依次访问的数据为“25,37,49”,k=3;若key=55,则依次访问的数据为“25,37,49”,k=3。

故选项A结果与要求不符。

6.某对分查找算法的VB程序段如下:

n=0:

i=l:

j=6

key=Val(Text1.Text)

DoWhilei<=j

 m=(i+j)\2

 n=n+1

 Ifkey=d(m)ThenExitDo

 Ifkey>d(m)Thenj=m-1Elsei=m+1

Loop

Ifi<=jThens=Str(m-n)Elses=Str(n)

d

(1)到d(6)的值依次为“88,77,53,47,39,28”,输入某个key值后,运行该程序段后,变量s结果为1,则输入key的值是(  )

A.89B.77C.47D.39

答案 C 本题考查对分查找,由代码得如果s=n为1,需满足i>j,也即查找的key不在数组中,但是又只找了1次(变量n是查找次数),这是不可能的情况,故推出应该是s=m-n=1。

第一次m=3,n=1,不成立,继续第二次查找;第二次,m=1或m=5,n=2,不成立,继续第三次查找;第三次,m=2或m=4或m=6,n=3。

因此在m=4,n=3的时候,找到了key,此时满足m-n=1,所以答案选择C。

7.对数组a中6个有序数据“11,22,33,44,55,66”,用下面的程序代码查找数据“23”,程序执行完毕后,下列各变量值正确的是(  )

Dima(1To6)AsInteger

DimiAsInteger,jAsInteger,KeyAsInteger,mAsInteger

a

(1)=11:

a

(2)=22:

a(3)=33:

a(4)=44:

a(5)=55:

a(6)=66

i=1:

j=6:

p=0:

Key=23

DoWhilei<=j

p=p+1

  m=(i+j)\2

  IfjMod2=0Thenm=m+1

  Ifa(m)=KeyThenExitDo

  IfKey

Elsei=m+1

Loop

A.i=5B.j=4C.m=3D.p=2

答案 C 本题主要考查对分查找算法的变形算法。

查找过程如下:

一共有6个升序排列的数据,第一次查找,i=1,j=6,因此首先查找的是m=(i+j)\2=3,而jmod2=0,因此m=m+1=4,即查找到第4个数“44”。

由于“23<44”,因此第二次查找,i=1,j=m-1=3,m=(i+j)\2=2,即查找到第2个数“22”。

由于“23>22”,因此第三次查找,i=m+1=3,j=3,则m=(i+j)\2=3,即查找到第3个数“33”,而“23<33”,所以第四次查找,i=m+1=4,此时i=4,m=3,j=3,p=3,i>j,整个查找过程结束,只有选项C成立。

8.有如下VB程序段:

 Dima(1To10)AsInteger

 PrivateSubForm_Load()

  a

(1)=2:

a

(2)=3:

a(3)=3:

a(4)=3:

a(5)=3

  a(6)=6:

a(7)=7:

a(8)=7:

a(9)=8:

a(10)=9

 EndSub

 PrivateSubCommand1_Click()

 DimkeyAsInteger,iAsInteger,jAsInteger

 DimmAsInteger,pAsInteger

  key=Val(Text1.Text)

  i=1:

j=10

  DoWhilei<=j

   m=(i+j)\2

   Ifa(m)=keyThen

    p=m

    j=m-1

   ElseIfkey

    j=m-1

   Else

    i=m+1

   EndIf

  Loop

  Text2.Text=Str(p)

EndSub

程序运行时,在文本框Text1中输入3,单击按钮,文本框Text2显示的内容是(  )

A.2B.3C.4D.5

答案 A 本题考查程序阅读。

本题的算法框架是对分查找,不同之处是,当Ifa(m)=key时,将j的值变为m-1,还要继续往左查找。

最左边的3的位置是2,故本题选A。

9.某对分查找算法的VB程序段如下:

t=“”:

i=0:

j=9:

key=62:

f=False

DoWhilei<=jAndNotf

 m=Fix((i+j)/2)

 t=t+Str(rn)

 Ifa(m)=keyThen

  f=True

 Elselfa(m)>keyThen

  i=m+1

  t=t+“→”

 Else

  j=m-1

  t=t+“←”

 EndIf

Loop

数组元素a⑹到a⑼的值依次为“99,94,90,87,78,70,63,56,45,36”,执行该程序段,t的值是(  )

A.“4→7←5→”B.“4→7←5→6→”

C.“4→7←5→6”D.“4→7←5”

答案 B 本题考查对分查找,查找过程如表:

i

0

5

5

6

7

j

9

9

6

6

6

m

4

7

5

6

退出循环

a(m)

78

56

70

63

t

4→

4→7←

4→7←5→

4→7←5→6→

10.循环升序数组指的是将一个升序数组循环右移动若干距离之后变成的数组。

如5、7、9、26、41、100,循环右移3位得到26、41、100、5、7、9。

对分查找算法适当优化后也适用于循环升序数组。

程序段如下:

l=1:

r=6

Key=Val(Text1.Text)

DoWhile l<=r

 m=Int((l+r)\2)

 Ifa(m)=KeyThen

   

(1) 

  ExitDo

 Elselfa(m)>=a(l)Then

   

(2) 

 Elselfa(m)

   (3) 

 EndIf

Loop

上述程序中方框处可选语句为:

①Ifa(m)=KeyThenl=m+1Elser=m-1

②Listl.AddItem“第”+Str(m)+“值是”+Str(a(m))

③Ifa(m)>KeyAnda(l)<=KeyThenr=m-1Elsel=m+1

(1)、

(2)、(3)处语句依次是(  )

A.③①②B.②①③

C.①③②D.②③①

答案 D 分析循环升序数组的特点:

一定有一个转折点,转折点两侧数组都是有序的,并且左侧数据全部比右侧数据大,也即a(n)

(1)。

“Ifa(m)=Key”的情况下,是找到了关键词,因此直接输出结果,所以

(1)处填②。

a(m)>=a(l),那么a(m)一定在左侧升序段,可以肯定[l,m]这一段是严格递增的,此时如果a(m)>KeyAnda(l)<=Key,则能得到结论key一定在[l,m]这一段里,否则就是在a(m)的右边;a(m)=Key,则能得到结论key一定在[m,r]这一段里,否则就是在a(m)的左边。

11.査找并删除重复数据的算法是对数组a中每个元素逐个作为关键字进行从后往前查找,如果有重复,删除该数据后继续查找。

例如,第一次将a

(1)作为关键字,从a(10)到a

(1)进行逐个查找,如果和a

(1)相等,则删除该数据,然后继续查找;如果是a

(1)本身和它相等,则代表无重复数据。

编写VB程序,程序功能如下:

运行程序时,在列表框List1中显示数组a中的原始数据;单击“去除重复”按钮(Command1),在列表框List2中输出去除重复后的数组a中的数据,同时在标签Label1中显示删除的数据总个数,运行效果如图所示。

请回答下列问题:

(1)当数组a中的值依次为1,2,3,7,8,1,6,6,8,7时,共删除数据    (填写数值)个。

 

(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。

Constmaxn=10

Dima(1Tomaxn)AsInteger

PrivateSubForm_Load()

 ’maxn个数据存储在数组a中,并在列表框List1中显示

 ’代码略

EndSub

PrivateSubCommand1_Click()

DimiAsInteger,nAsInteger􀆳n用于存储当前査找的数组长度

DimjAsInteger,keyAsInteger􀆳key用于存储本次查找关键字的数据位置

key=1:

n=maxn

DoWhilekey<=n

  i=n

  DoWhilea(i)<>a(key)

     ①   

  Loop

  Ifi=keyThen􀆳未找到,重新下一査找关键字

   key=key+1

  Else􀆳找到重复数据,删除

   Forj=iTon-1

     ②   

   Nextj

   n=n-1

  EndIf

Loop

Fori=1Ton

  List2.AddItemStr(a(i))

Nexti

Label1.Caption=“共删除数据”+  ③  +“个” 

EndSub

答案 

(1)4

(2)①i=i-1 ②a(j)=a(j+1) ③Str(maxn-n)

解析 

(1)略。

(2)①从底部开始逐个与a(key)比较,例如key=1时,a(10),a(9),…,a(i),…,a

(2)逐个与a

(1)比较,即数组下标递减i=i-1,若a(i)=a(key),则找到相同,循环结束。

②上面a(i)=a(key)循环结束后,若i=key,则意味着没有重复元素。

例如key=1时,只有a

(1)=a

(1),没有其他元素和a

(1)相等,就没有重复元素。

否则,意味着有重复元素,则需要去除重复元素。

后面的元素依次往前移动,即a(j)=a(j+1)。

③由于maxn是总共的数据个数,而n是剩下的数字个数,因此删除的数据个数就是Str(maxn-n)。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1