浙江高考信息技术学科历年选考真题经典算法选择及填空题.docx

上传人:b****3 文档编号:5420461 上传时间:2022-12-16 格式:DOCX 页数:25 大小:255.28KB
下载 相关 举报
浙江高考信息技术学科历年选考真题经典算法选择及填空题.docx_第1页
第1页 / 共25页
浙江高考信息技术学科历年选考真题经典算法选择及填空题.docx_第2页
第2页 / 共25页
浙江高考信息技术学科历年选考真题经典算法选择及填空题.docx_第3页
第3页 / 共25页
浙江高考信息技术学科历年选考真题经典算法选择及填空题.docx_第4页
第4页 / 共25页
浙江高考信息技术学科历年选考真题经典算法选择及填空题.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

浙江高考信息技术学科历年选考真题经典算法选择及填空题.docx

《浙江高考信息技术学科历年选考真题经典算法选择及填空题.docx》由会员分享,可在线阅读,更多相关《浙江高考信息技术学科历年选考真题经典算法选择及填空题.docx(25页珍藏版)》请在冰豆网上搜索。

浙江高考信息技术学科历年选考真题经典算法选择及填空题.docx

浙江高考信息技术学科历年选考真题经典算法选择及填空题

经典算法选择填空历年选考真题

班级姓名

1.【2015.10】已知单调函数

在[0,1]区间存在一个

,使

现用对分查找法搜索

的值,开始搜索区间为[0,1],若经过10次对分查找后还需继续搜索,则第11次搜索区间的长度为()

A.1/2B.1/10C.

D.

2.【2015.10】n个数据的冒泡排序需要经过n-1遍加工,每一遍加工自下而上比较相邻两个数据,把较小者交换到上面。

小刘发现:

当某一遍加工过程中没有数据交换,说明数据已经有序,无需进一步加工。

为此,小刘对算法进行优化,编写了一个VB程序,功能如下:

运行程序时,在列表框List1中显示排序前数据,单击“排序”按钮Commaiid1,在列表框List2中显示这些数据按升序排序后的结果,在标签Label3中显示排序过程的加工遍数。

运行效果如第16题图所示。

 

实现上述功能的VB代码如下,但加框处代码有错,请改正。

Dima(1To8)AsInteger

DimnAsInteger

PrivateSubForm_Load()

'n=8,排序前数据存储在数组a中,并在列表框Listl中显示

'代码略

EndSub

PrivateSubCommand1_Click()

DimflagAsBoolean'flag值为True表示一遍加工中发生过交换

i=1

flag=True

DoWhile'

(1)

i<=n-1Orflag=True

flag=False

Forj=nToi+1Step-1

Ifa(j)

k=a(j):

a(j)=a(j-1):

a(j-1)=k

flag=True

EndIf

Nextj

i=i+1

Loop

Str(i)

Label3.Caption="排序过程的加工遍数为"+'

(2)

Fori=1Ton

List2.AddItemStr(a(i))

Nexti

EndSub

3.【2016.4】有如下程序段:

Fori=1To2

Forj=5Toi+1Step-1

Ifa(j)>a(i)Then

t=a(j):

a(j)=a(i):

a(i)=t

EndIf

Nextj

Nexti

数组元素a

(1)到a(5)的值依次为“33,24,45,16,77”,经过该程序段“加工”后,数组元素a

(1)到a(5)的值依次为()

A.77,45,33,16,24B.77,33,45,16,24

C.77,24,45,16,33D.77,45,33,24,16

4.【2016.4】已知一无序数组a(下标1到n),通过引入数组b(下标1到n),使得a(b

(1))≤a(b

(2))≤a(b(3))……≤a(b(n))(示例如图所示),对这些有序数据可进行对分查找。

则第一次查找时,中点位置m与中点值分别是()

 

A.m的值是Fix((1+n)/2),中点值是a(m)

B.m的值是Fix((1+n)/2),中点值是a(b(m))

C.m的值是Fix((b

(1))+b(n))/2),中点值是a(m)

D.m的值是Fix((b

(1))+b(n))/2),中点值是a(b(m))

5.【2016.4】某地1900-1999年的平均降水量数据保存在数据库中。

现要求找出相邻两年年平均降水量变化(即本年度与上年度“年平均降水量”差值的绝对值)最大的年份区间。

如果多个符合要求的年份区间,只输入距今最近的。

小吴为此编写了VB程序,程序运行时,单击按钮Command1后,在文本框Text1中输出运行结果。

实现上述功能的VB代码如下,但加框处代码有错,请改正。

Dimw(1To100)AsSingle'依次存储1900-1999年的年平均降水量数据

Constn=100

PrivateSubForm_Load()

'本过程从数据库中按19000-1999年依次读取年平均降水量数据,并存储在数组w中

'代码略

EndSub

PrivateSubCommand1_Click()

DimiAsInteger,imaxAsInteger

1

imax=

Fori=3Ton

Abs(w(i-1)-w(i-2))

IfAbs(w(i)-w(i-1))>=Thenimax=i

Nexti

Text1.Text="年平均降水量变化最大的年份区间是"+Str(imax+1898)+"-"+Str(imax+1899)

6.【2016.10】某对分査找算法的VB程序段如下:

i=1:

j=9:

n=0

key=Val(Textl.Text)

DoWhilei<=j

n=n+1

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

Ifkey=d(m)ThenExitDo'ExitDo表示退出循环

Ifkey

Loop

数组元素d

(1)到d(9)的值依次为“7,12,18,25,39,58,61,72,86”。

若该程序段运行结束后,n的值为2,则key的值是()

A.39B.18或61C.18或72D.12或61

7.【2016.10】小吴为了研究冒泡排序过程中数据的“移动”情况,编写了一个VB程序,功能如下:

在列表框List1中显示排序前数据(存储在数组a中),在文本框Text1中输入初始位置(即下标值),单击“排序”按钮Command1后,在标签Label1中显示指定初始位置的数据在排序过程中的位置变化情况,排序后的数据显示在列表框List2中。

程序运行界面如图所示。

 

实现上述功能的VB程序如下,但加框处代码有错,请改正。

Dima(1To8)AsInteger

DimnAsInteger

PrivateSubForm_Load()

a

(1)=30:

a

(2)=47:

a(3)=30:

a(4)=72

a(5)=70:

a(6)=23:

a(7)=99:

a(8)=24

n=8

Fori=1To8

List1.AddItema(i)

Nexti

EndSub

PrivateSubCommand1_Click()

DimiAsInteger,jAsInteger,kAsInteger

DimposAsInteger

DimsAsString

s=Text1.Text

pos=Val(Text1.Text)

Fori=1Ton-1

Forj=nToi+1Step-1

Ifa(j)

a(j-1)=a(j)

a(j)=k

'如果pos位置的数据参与交换,则更新pos值,记录pos变化位置

Ifpos=jThen

pos=j-1

s=s+"→"+Str(pos)

pos=j

s=s+"→"+Str(pos)

EndIf

EndIf

Nextj

Nexti

Label1.Caption="位置变化情况:

"+s

Fori=1Ton

List2.AddItemStr(a(i))

Nexti

EndSub

8.【2017.4】某对分查找算法的VB程序段如下:

key=Val(Text1.Text)

i=1:

j=10

Text2.Text=""

DoWhilei<=j

m=Int((i+j)/2+0.5)

Ifkey=a(m)ThenExitDo'ExitDo表示退出循环

Ifkey

Text2.Text=Text2.Text+Str(a(m))

Loop

数组元素a

(1)到a(10)的值依次为“8,17,24,30,36,40,55,58,61,66”,文本框Text1中输入的值是30,执行该程序段,文本框Text2中显示的是()

A.4024

B.402436

C.3624

D.361724

9.【2017.4】小赵对选择排序算法进行了如下改进:

在数组的所有元素中找出最小和最大数据的元素,然后将这两个元素分别与第一个和最后一个元素交换数据,在余下的元素中找出最小和最大数据的元素,分别与第二个和倒数第二个元素交换数据,以此类推,直到所有元素的数据按升序排列。

小赵编写的VB程序段如下:

p=1:

q=10

DoWhilep

iMin=p:

iMax=p

Fori=p+1Toq

Ifa(i)

Ifa(i)>a(iMax)TheniMax=i

Nexti

t=a(iMin):

a(iMin)=a(p):

a(p)=t

t=a(iMax):

a(iMax)=a(q):

a(q)=t

p=p+1

q=q-1

Loop

要使程序实现上述算法思想,则方框中的语句是()

A.IfiMax=pTheniMax=iMin

B.IfiMin=pTheniMin=iMax

C.IfiMax=pTheniMin=iMax

D.IfiMin=pTheniMax=iMin

10.【2017.4】小王编写了一个依据成绩计算名次的VB程序,成绩为0到100之间的整数。

算法的基本思想:

先统计每个分数的个数,然后按照分数从高到低依次计算每个有效分数(该分数的个数不为0)对应的名次,分数相同时名次并列。

最高分为第1名,该分数的名次与个数之和为下一个有效分数的名次,以此类推。

程序用数组A存放每个分数对应的个数,数组B存放每个分数对应的名次。

例如,下表中最高分100有2个,并列第1名,则分数96的名次为分数100的名次加上分数100的个数,即第3名。

分数

100

99

98

97

96

95

94

0

个数(A数组)

2

0

0

0

1

0

3

0

名次(B数组)

1

3

4

程序运行时,学生数据显示在列表框List1中,单击“计算”按钮Command1,计算结果显示在列表框List2中,程序运行界面如图所示。

 

实现上述功能的VB程序如下,请回答下列问题:

(1)如表所示,若分数93的个数为2,则该分数对应的名次为_____________。

(2)请在划线处填入合适的代码。

DimsName(1To50)AsString'存放学生姓名

DimsScore(1To50)AsInteger'存放学生分数

DimrecCountAsInteger'存放学生人数

PrivateSubForm_Load()

'本过程从数据库中读取学生数据,存储在相应的变量中,并在List1中显示

'代码略

EndSub

'整数转换成长度固定的字符串

Functionads(xAsInteger,nAsInteger)AsString

DimsxAsString,nxAsInteger,iAsInteger

sx=Str(x):

nx=Len(sx)

Fori=1Ton-nx

sx=""+sx

Nexti

EndFunction

PrivateSubCommand1_Click()

DimA(0To100)AsInteger'存放每个分数的个数

DimB(0To100)AsInteger'存放每个分数的名次

DimmcAsInteger,scoreAsInteger,iAsInteger

Fori=0To100

A(i)=0

Nexti

Fori=1TorecCount'计算每个分数的个数

Nexti

mc=1

Fori=100To0Step-1'计算每个分数的名次

IfA(i)<>0Then

B(i)=mc

EndIf

Nexti

List2.Clear

List2.AddItem"姓名分数名次"

List2.AddItem"----------------"

Fori=1TorecCount

score=sScore(i)

mc=B(sScore(i))

List2.AddItemsName(i)+ads(score,5)+"第"+ads(mc,3)+"名"

Nexti

EndSub

11.【2017.11】某对分査找算法的VB程序段如下:

i=1:

j=7:

s=""

key=Int(Rnd*100)

DoWhilei<=j

m=(i+j)\2

Ifkey=a(m)Then

s=s+"M":

ExitDo'ExitDo表示退出循环

ElseIfkey

j=m-1:

s=s+"L"

Else

i=m+1:

s=s+"R"

EndIf

Loop

Text1.Text=s

数组元素a

(1)到a(7)的值依次为“24,35,38,41,45,69,78”。

若该程序段执行后,文本框Text1中显示的内容可能是()

A.RLB.LMRC.RLRD.LRLM

12.【2017.11】小李基于冒泡排序算法编写了一个VB程序,功能如下:

在文本框Text1中显示排序前的数据,单击“排序”按钮Command1,在文本框Text2中显示剔除重复数据后的升序排序结果。

程序运行界面如下图所示。

 

实现上述功能的VB程序如下,但加框处代码有错,请改正。

Constn=10

Dima(1Ton)AsInteger

PrivateSubCommand1_Click()

DimiAsInteger,jAsInteger,tAsInteger

DimbottomAsInteger

'获取排序前数据依次存储在数组a中,并在文本框Text1中显示。

代码略

bottom=n

i=1

DoWhilei<=bottom-1

Forj=bottomToi+1Step-1

Ifa(j)

t=a(j):

a(j)=a(j-1):

a(j-1)=t

ElseIfa(j)=a(j-1)Then'相邻两个数据相等,进行剔除处理

a(bottom)=a(j)

bottom=bottom-1

EndIf

Nextj

i=i+1

Loop

Text2.Text=""

Fori=1Tobottom

Text2.Text=Text2.Text+Str(a(i))

Nexti

EndSub

13.【2018.4】下列VB程序功能为:

根据文本框Text1中各字符的大小关系,计算各字符升序排列的序号,并将序号保存在数组y中。

如文本框内容为“2011”,程序运行后y

(1)~y(4)各元素的值分别为“4,1,2,3”。

s=Text1.Text

n=Len(s)

Fori=1Ton

y(i)=1

Nexti

Fori=1To

(1)

Forj=

(2)Ton

If(3)Then

y(j)=y(j)+1

Else

y(i)=y(i)+1

EndIf

Nextj

Nexti

上述程序段3各方框处的表达式分别为()

A.

(1)n

(2)1(3)Mid(s,j,1)>=Mid(s,i,1)

B.

(1)n

(2)1(3)Mid(s,j,1)>Mid(s,i,1)

C.

(1)n-1

(2)i+1(3)Mid(s,j,1)>=Mid(s,i,1)

D.

(1)n-1

(2)i+1(3)Mid(s,j,1)>Mid(s,i,1)

14.【2018.4】有一组正整数,要求供对其中的素数进行升序排序。

排序后素数在前,非素数在后。

排序示例如下。

排序前

86

71

5

41

81

79

37

89

排序后

5

37

41

71

79

89

86

81

Constn=8

Dima(1Ton)AsInteger

PrivateSubCommand1_Click()

DimiAsInteger,jAsInteger,kAsInteger,tAsInteger

DimflagAsBoolean

'读取一组正整数,存储在数组a中,代码略

Fori=1Ton-1

k=1

IfIsPrime(a(k))Thenflag=TrueElseflag=False

Forj=i+1Ton

IfIsPime(a(j))Then

Ifa(j)

k=j

flag=True

EndIf

EndIf

Nextj

Ifk<>iThen

t=a(k):

a(k)=a(i):

a(i)=t

EndIf

IfNotflagThenExitFor'ExitFor表示退出循环

Nexti

'依次输出排序后的数据。

代码略

EndSub

FunctionIsPrime(mAsInteger)AsBoolean

'本函数判断m是否是素数:

是素数返回值为True,不是素数返回值为False

'代码略

EndFunction

15.【2018.11】下列VB程序功能为:

根据文本框Text1中各字符的大小关系,计算各字符升序排列的序号,并将序号保存在数组y中。

如文本框内容为“2011”,程序运行后y

(1)~y(4)各元素的值分别为“4,1,2,3”。

s=Text1.Text

n=Len(s)

Fori=1Ton

y(i)=1

Nexti

Fori=1To

(1)

Forj=

(2)Ton

If(3)Then

y(j)=y(j)+1

Else

y(i)=y(i)+1

EndIf

Nextj

Nexti

上述程序段3各方框处的表达式分别为()

A.

(1)n

(2)1(3)Mid(s,j,1)>=Mid(s,i,1)

B.

(1)n

(2)1(3)Mid(s,j,1)>Mid(s,i,1)

C.

(1)n-1

(2)i+1(3)Mid(s,j,1)>=Mid(s,i,1)

D.

(1)n-1

(2)i+1(3)Mid(s,j,1)>Mid(s,i,1)

16.【2018.11】数组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程序如下,但加框处代码有错,请改正。

PrivateSubCommand1_Click()

Constn=6

Dima(1Ton)AsInteger,flagAsBoolean

DimiAsInteger,jAsInteger,mAsInteger,keyAsInteger

‘读取一组正整数,按上述规则存入数组a中,代码略

key=Val(Text1.Text)

i=1

j=(n+1)\2

flag=False

DoWhilei

m=(i+j)\2

Ifkey=a(m)Then

flag=True

ElseIfkey

j=m-1

Else

i=m+1

EndIf

Loop

IfNotflagAndj>0Then

m=n–i

Ifkey=a(m)Thenflag=True

EndIf

IfflagThen

Text2.Text=Str(m)

Else

Text2.Text="找不到"

EndIf

EndSub

17.【2019.4】有1个升序排列的数组a(a

(1)~a(n),n≥3),从左到右相邻两个元素的差值(后一个元素值减去前一个元素值)先由小到大、再由大到小,且相邻两个差值不相等,为了查找相邻两个元素的最大差值,小李编写的VB程序段如下:

i=1:

j=n

DoWhilei+1

m=(i+j)\2

Ifa(m+1)-a(m)>a(m)-a(m-1)Then

1

Else

Endif

Loop

Label1.Caption="相邻两个元素的最大差值是"+Str(a(j)-a(i))

上述程序段两个方框处的语句分别为()

A.①i=m②j=m

B.①i=m②j=m-1

C.①i=m+1②j=m-1

D.①i=m+1②j=m

18.【2019.4】小明基于冒泡排序思想设计了一个改进的排序算法。

该算法先用冒泡法将数组a中奇数位置的元素、偶数位置的元素分别进行排序,然后再进行后续处理。

算法的VB程序段如下,但加框处代码有错,请改

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

当前位置:首页 > 医药卫生 > 基础医学

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

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