ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:163.40KB ,
资源ID:5407981      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5407981.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(高考信息技术大一轮优选课件+习题 9.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

高考信息技术大一轮优选课件+习题 9.docx

1、高考信息技术大一轮优选课件+习题 9第九单元算法的程序实现单元检测题组时间:40分钟分值:50分一、选择题(每题3分,共27分)1.对包含100个元素递增排序的数组a,采用对分查找法找某关键字,若查找不成功,则关键字的比较次数最多是()A.100 B.6 C.7 D.8答案C本题考查对分查找的基本原理。n个元素中查找不成功的最多比较次数为log2n+1。2.有如下某排序算法程序段:For i=1 To 3k=iFor j=i+1 To 6If a(j) a(k) Then k=jNext jt=a(i):a(i)=a(k):a(k)=tNext i数组元素a(1)到a(6)的值依次为“8,2,

2、9,3,5,1”,经过该程序段“加工”后,数组元素a(1)到a(5)的值依次为()A.8,2,9,3,5,1 B.9,2,8,3,5,1C.9,8,5,2,3,1 D.9,8,5,3,2,1答案D本题考查排序算法及其程序的实现。i=1时,代入循环体,计算得到数组元素的值依次为9,2,8,3,5,1。i=2时,代入循环体,计算得到数组元素的值依次为9,8,2,3,5,1。i=3时,代入循环体,计算得到数组元素的值依次为9,8,5,3,2,1。3.某VB程序段如下:For i=1 To 6j=7Do While j iIf a(j)a(j-1) Thena(j)=a(j)+a(j-1)a(j-1)

3、=a(j)-a(j1)a(j)=a(j)-a(j-1)End Ifj=j-1LoopNext iFor i=3 To 6s=s+a(i)Next iLabel1. Caption=Str(s)已知数组元素a(l)到a(7)的值依次为“8, 2, 3, 7, 10, 6, 5”,则执行该程序段后,标签Label1中显示的是()A.21 B.26 C.41 D.18答案A首先理解 a(j)=a(j)+a(j-1),a(j-1)=a(j)-a(j-1),a(j)=a(j)-a(j-1)这三个语句实际上就是将a(j)与 a(j-1)两数据交换。两数交换的经典写法是:t=a,a=b,b=t。程序首先实现

4、数组a中的数据降序,得到“10,8,7,6,5,3,2”,而后将 a(3),a(4),a(5),a(6)的值相加输出。4.有如下程序段:Dim a(4) As IntegerPrivate Sub Command1_Click()Dim s As Stringa(1)=10:a(2)=30:a(3)=20:a(4)=40s=doit(4)Label1.Caption=sEnd SubFunction doit(k As Integer) As StringIf k=1 Thendoit=Str(a(1)Elsedoit=doit(k-1) & Str(a(k)End IfEnd Functio

5、n程序运行后,标签Label1中显示的内容是()A.10 20 30 40 B.10 30 20 40C.40 30 20 10 D.40 20 30 10答案B本题考查递归程序。递归调用过程如下:5.用以下对分查找算法:在一个包含有重复元素且从小到大排序(相等元素排在一起)的整数数组a中,查找某个重复出现的整数key,其中数组元素的总个数是n。i=1: j=nDo While i =jm=(i+j) 2If a(m) key Then i=m+1Elsej=m-1End IfLoop那么执行该程序后,下列说法正确的是()A.程序可以找到重复元素key最开始出现的位置,该位置信息由变量i指示B

6、.程序可以找到重复元素key最后出现的位置,该位置信息由变量i指示C.程序可以找到重复元素key最开始出现的位置,该位置信息由变量j指示D.程序可以找到重复元素key最后出现的位置,该位置信息由变量j指示答案A本题考查对分查找算法的理解和应用。由程序可知,当ij时程序要循环,而循环时,当a(m)key时,变量j移动,这就表明当找到key时,指示变量j势必会跑到key所在位置的前面去,key所在位置由i来指示。由升序排序和j的移动方向可知,这是起始位置。6.有以下VB程序段i=1: j=10: flag=True: cs=0Key=Int(Rnd()*10)+28Do While i =j An

7、d flag=Truem=(i+j) 2 : cs=cs+1If a (m)=Key Thenflag=FalseElse If a(m) Key Theni=m+1Elsej=m-1End IfLoop数组元素a(1)到a(10)依次是3 10 17 23 27 30 35 40 45 50,变量cs的值可能是()A.1或2 B.2或3C.3或4 D.4或5答案C本题考查对分查找,key=Int(Rnd() * 10)+28即产生28,37的随机整数。cs表示查找次数,10个数查找过程如下(只需要考虑28至37范围内的数):3101723273035404550因此三次(如30)、四次(如3

8、5)都可能,找不到的情况也可能是三次(如28)或四次(如33),10个数不管找不找得到,最多查找次数不超过int(log210)+1=4次。7.有如下程序段:For i=1 To 2k=iFor j=i+1 To 5If d(k) d(j) Then k=jNext jIf k i Then t=d(k): d(k)=d(i) :d(i)=tNext i经过该程序段“加工”后,数组元素d(1)到d(5)的值依次为“44, 35, 30, 11,7”,则数组元素d(1)到d(5)的原始数据依次为()A.30,44,7,11,35 B.30,11,44,7,35C.44,30,11,7,35 D.

9、30,7,44,11,35答案D该段程序仅进行了两趟排序,数据就已完成降序排序。而选项 A 需要三趟,B、C两个选项都需要四趟才能使数据完成降序排序。 所以答案选 D。8.有如下VB程序段:i=1j=6s=“”Key=Text1. TextDo While i a(m) Theni=m+1Elsej=m-1End IfLoopText1. Text=s数组元素a(1)到a(6)的值分别为“Beijing”“Guangdong”“Jiangsu” “Jiangxi”“Shanghai” “Zhejiang”,己按字典序排序。当key的值为“Zhejiang”时,单击命令按钮Command1,文本

10、框Text1中显示的内容为()A.Jiangxi ZhejiangB.Jiangsu Shanghai Jiangxi ZhejiangC.Jiangxi Zhejiang ShanghaiD.Jiangsu Shanghai Zhejiang答案C本题考查对分查找,第一次查找时i=1,j=6,得到m=4,因此s=“Jiangxi”,因为keya(m),因此第二次查找时i=5,j=6,得到m=6,因此s=“Jiangxi Zhejiang”,此时key=a(m),执行j=m-1=5;因此第三次查找时i=5,j=5,得到m=5,因此s=“Jiangxi Zhejiang Shanghai”,此时

11、keya(m),因此执行i=m+1=6,此时ij,退出循环。所以答案选择C。9.有如下VB程序段:s=“7218634594” : n=Len(s): c=0For i=1 To n-1a(i)=Val(Mid(s, i, 2)Next iFor i=1 To n-2 Step 2k=iFor j=i+2 To n-1 Step 2If a(j) a(k) Then k=jNext jIf k i Thent=a(i): a(i)=a(k): a(k)=t: c=c+1End IfNext iText1.Text=Str(c)该程序段运行后,Text1中显示的内容是()A.1 B.2 C.3

12、D.4答案B首先获取 a数组的各元素为72,21,18,86,63,34,45,59,94。然后从外层For i=1 To n-2 Step 2看出,仅对奇数位上的数据排序。变量c统计排序过程中数据交换的次数。第一趟排序,数据“ 72 ”与“ 18 ”交换。第二趟排序,数据“ 72 ”与“ 45 ”交换。而后奇数位上的数据已有序。 所以答案选 B。二、非选择题(共23分)10.现有n根棍子,第i根棍子的长度为ai。想要从中选出三根棍子组成周长尽可能长的三角形,输出最大的周长;若无法组成三角形,则输出0。如当n=5,a=2,3,4,5,10时,输出12,即选择了3、4、5。当n=4,a=4,5,

13、10,20时,无法组成三角形,输出0。加框处代码有误,请改正。Dim a(1 To 1000) As IntegerDim n As IntegerPrivate Sub Form_Load()确定 n 的值和数组 a 的各个元素值,即每根棍子的长度值,代码略End SubFunction max(x As Integer , y As Integer) As IntegerIf x y Thenmax=xElsemax=yEnd IfEnd FunctionPrivate Sub Command1_Click()Dim i As Integer , j As Integer , k As I

14、ntegerDim ans As Integer , c As Integer , longest As Integer , rest As Integerans=0让 ij c Then ans=max(ans , c)End IfNext kNext jNext iPrint ansEnd Sub答案max(a(i), max(a(j), a(k)(或其他写法)rest longest解析由三重For循环和变量c的组成可以判断这是一个枚举算法,c是当前枚举到的周长。而由程序的输出可知ans是最长的周长,显然要找到最大值,需要比较,还有一个很重要的条件就是三条边可以组成三角形。大小比较的任务

15、已经由ans=max(ans,c)来完成,那么第空就是判断能否成为三角形的条件。这里可以写成a(i)+a(j)a(k)&a(i)+a(k)a(j) &a(j)+a(k)a(i)的复合表达式,但由前面的rest=c-longest可以猜测出longest保存了最长边,而rest是剩余两边之和。于是第空的条件可以简单地变成最短两边之和大于最长边,即restlongest。而第空就是a(i),a(j),a(k)三者的最大值,可以迭代调用函数max(),即现调用任意两个,再调用第3个,如max(max(a(i),a(j),a(k)或者任意交换这三个变量的书写位置都可以。11.小王编写“合并区间” VB

16、程序,功能如下:窗体加载时,获取并存储合并前的区间数据,并显示在列表框List1中。单击“合并”按钮后,以区间左端点数值对区间进行升序排序,然后相邻区间的相交进行合并,最后在列表框List2上显示合并后的区间。程序运行如图所示:实现以上功能的VB程序如下,在横处填入合适的代码。Dim a(1 To 20) As Integer 􀆳存储区间的左端点数值Dim b(1 To 20) As Integer 􀆳存储区间的右端点数值Private Sub Form_Load()将区间左端点存入数组a,区间右端点存入数组b,并在列表框List1显示,代码略End Sub

17、Private Sub Command1_Click()Dim i As Integer, j As IntegerDim curL As Integer, curR As IntegerFor i=1 To n-1For j=l To n-iIfThent=a(j): a(j)=a(j+1): a(j+1)=tt=b(j): b(j)=b(j+1): b(j+1)=tEnd IfNext jNext icurL=a(1): curR=b(1)For i=2 To nIf ThenIf curR a(j+1)a(i) =curRcurR=b(i)解析第空,以区间左端点数值,即数组a,对区间进行

18、升序排序。第空和第空,这是需要合并区间的情况,首先理解变量 curR 的含义,curR 表示第i个区间的上一个区间的右端点数值。因此如果当前区间的左端点数值即a(i)curR时,上一个区间与当前区间就可以合并。因此第空填a(i) =curR。第空是合并后,右区间curR则等于第 i 个区间右端点数值。12.插数。输入一个整数x,要将x插入到n(n50)个有序(按降序排列)数据中,并使数据序列仍保持有序,试求出x应插入的位置。界面设计如图所示。程序说明:(1)其中n由文本框Text1中数据得到,x由文本框Text2中数据得到,插入位置显示在文本框Text3中。(2)其中n个有序数据将通过随机函数

19、Rnd产生,并对n个数进行降序排序后存入数组a中,同时显示在列表框List1中。为了实现这一目标,完善下面的VB程序,在横线处填入合适的语句或表达式,完成程序设计。Private Sub Command1_Click()Dim a(1 To 50)As IntegerDim n As Integer,i As IntegerDim x As Integer,temp As IntegerRandomizeList1.Clearn=Val(Text1.Text)x=Val(Text2.Text)随机产生n个数,并存放至a数组中For i=1 To na(i)=Rnd*200+1Next i将数组

20、a中的数按降序排序For i=2 To nFor j=n To i Step-1If (1) Thentemp=a(j):a(j)=a(j-1):a(j-1)=tempNext jNext i将排序后的数组元素显示在列表框List1中For i=1 To nList1.AddItem Str(a(i)Next i插入操作If (2) Theni=n+1Else(3)Do While xa(j-1)(2)xa(j-1)。(2)变量i用于存储x应该插入的位置。由于数据源是从大到小排列,因此如果x小于或等于数据源中最后一个数据,则它应该插在最后面,这是最简单的情况。该数据源总共有n个数,最后一个数据

21、是a(n)。因此如果xa(n),则i=n+1。(3)如果x比数据源中最后一个数据要大,那么就要寻找它合适的位置。方法是通过循环语句,将x与该数列中的每一个数据a(i)比较,如果xa(i),则当前的i值就是x该插入的位置。13.n个数据的冒泡升序排序需要经过n-1遍的加工,每一遍加工自下而上比较相邻两个数据,把较小者交换到上面,在第i遍加工过程中需要进行n-i对数据的比较。在某些情况下,第i遍加工过程中,在上面部分较小数据已经有序的情况下,不需要再进行n-i对数据的比较。如对“17, 18,19, 24, 23, 20”这6个数据排序中,第1遍排序结束后数据为“17, 18,19, 20, 24

22、, 23”,第2遍排序时不再需要对20及其前面3个数据进行比较。以下程序实现了冒泡排序的优化,在横处填入合适的代码。Dim n As IntegerDim a(1 To 100) As Integern=10,排序前生成的数据存储在数组a中,并在列表框List1中显示,代码略Private Sub Command1_Click()Dim i As Integer, j As Integer, start As Integer, t As Integeri=2Do While i n start=nFor j=n To i Step-1IfThent=a(j):a(j)=a(j-1):a(j-1

23、)=tEnd IfNext ji=start+1LoopFor i=1 To nList2.AddItem Next iEnd Sub答案a(j) a(j-1) start=j Str(a(i)解析第空,从图中得知程序要实现升序排序,所以只有当后面的数据小于前面的数据时才需要数据交换,而从后面交换的语句中可以看出是 a(j) 与 a(j-1)交换,所以填 a(j) a(j-1)。第空,冒泡升序排序优化即每一趟排序记录下最后一个数据交换的位置,那么下一趟排序时就不需要对该位置前面的数据进行比较了。因此把每一趟的最后一个数据交换的位置定义为下一趟排序时的结束位置,所以 start=j 。第空, 列

24、表框中输出排序好的数组 a,同时注意列表框输出结果是字符串类型。14.查找最接近的数。编写一个查找最接近的数的VB程序:程序运行时,在文本框Text1中输入产生随机数的个数(1到100之间),单击命令按钮“产生随机数并升序排列”后,在列表框List1中显示已经按升序排列后的随机整数。然后在文本框Text2中输入要查找的整数,单击命令按钮“查找”后,在标签Label3中显示随机整数序列中与待查找数最接近的整数(当最接近的数有2个时,输出较大的一个)。程序运行效果如图所示。实现上述功能的VB代码如下,请在横线处填入合适代码。Dim n As Integer 存储随机数的个数Dim f(1 To 1

25、00) As Boolean f (i)为true时表示随机整数i已经产生过Dim a(1 To 100) As Integer 依次存放升序排序后的n个随机数Private Sub Command1_Click()命令按钮“产生随机数并升序排列”的单击事件Dim i As IntegerRandomizeFor i=1 To 100f(i)=FalseNext in=Val(Text1. Text)For i=1 To nt=Int(Rnd * 100+1)Do While f(i)=Truet=Int (Rnd * 100+1)LoopNext ij=0For i=1 To 100

26、49011;实现排序并输出If f(i)=True Thena(j)=iList1.AddItem Str(i)End IfNext iEnd SubPrivate Sub Command2_Click()􀆳命令按钮“查找”的单击事件Dim key As Integerkey=Val(Text2. Text)If key =a(n) Then Label3. Caption=Str(a(n) : Exit SubL=1: R=nDo While L =R􀆳找到与key较为接近的两个数a(R)和a(L)m=(L+R) 2If key =a(m) ThenR=m

27、-1 ElseL=m+1 End IfLoopIfThen 􀆳在a(R)和a(L)中选出更接近key的数Label3. Caption=Str(a(R)ElseLabel3. Caption=Str(a(L)End IfEnd Sub答案 f(t)=True j=j+1 Abs(a(R)-key) Abs(a(L)-key)解析处根据题干可知该处为产生不重复的随机数,产生之后将对应的f数组内的值改为 True,标记该数字已产生,故f(t)=True,将产生的数依次输出,故j=j+1,通过对分查找到二个数 a(R)、 a(L),判别更接近key的数。故Abs(a(R)-key) Abs(a(L)-key)。15.有100个大小形状一样的玻璃球,其中有1个玻璃球的重量轻于其

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

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