高考浙江版高考信息技术 模拟演练 12.docx
- 文档编号:25712478
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:10
- 大小:32.98KB
高考浙江版高考信息技术 模拟演练 12.docx
《高考浙江版高考信息技术 模拟演练 12.docx》由会员分享,可在线阅读,更多相关《高考浙江版高考信息技术 模拟演练 12.docx(10页珍藏版)》请在冰豆网上搜索。
高考浙江版高考信息技术模拟演练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) ②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,nAsIntegern用于存储当前査找的数组长度 DimjAsInteger,keyAsIntegerkey用于存储本次查找关键字的数据位置 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文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高考浙江版高考信息技术 模拟演练 12 高考 浙江 信息技术 模拟 演练
![提示](https://static.bdocx.com/images/bang_tan.gif)