信息技术必修2第十单元模拟演练8.docx

上传人:b****1 文档编号:1059299 上传时间:2022-10-16 格式:DOCX 页数:11 大小:37.11KB
下载 相关 举报
信息技术必修2第十单元模拟演练8.docx_第1页
第1页 / 共11页
信息技术必修2第十单元模拟演练8.docx_第2页
第2页 / 共11页
信息技术必修2第十单元模拟演练8.docx_第3页
第3页 / 共11页
信息技术必修2第十单元模拟演练8.docx_第4页
第4页 / 共11页
信息技术必修2第十单元模拟演练8.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

信息技术必修2第十单元模拟演练8.docx

《信息技术必修2第十单元模拟演练8.docx》由会员分享,可在线阅读,更多相关《信息技术必修2第十单元模拟演练8.docx(11页珍藏版)》请在冰豆网上搜索。

信息技术必修2第十单元模拟演练8.docx

信息技术必修2第十单元模拟演练8

第8节 数组问题

模拟演练

1.有以下VB程序段:

a

(1)=68:

a

(2)=88:

a(3)=76:

a(4)=60:

a(5)=98:

a(6)=100:

a(7)=64:

a(8)=85:

a(9)=99:

a(10)=59

Fori=1To9

 b(i)=Abs(a(i+1)-a(i))

 c(b(i)\10)=c(b(i)\10)+1

Nexti

Fori=0To10

 Ifc(i)>0ThenLabel1.Caption=Label1.Caption+“”+Str(c(i))

Nexti

数组c各元素初值为0,执行该程序段,标签Label1上显示的内容是(  )                  

A.23211B.13221C.23221D.13

答案 B 本程序主要由两个For循环组成,第一个循环里完成的任务为给b(i)赋值,它的值为a(i+1)与a(i)之差的绝对值,给c数组做累加用,例如b

(1)的值是20,那么c

(2)的值加1,由于b

(1)到b(9)的值分别为20,12,16,38,2,36,21,14,40,则c数组的2,1,1,3,0,3,2,1,4这些位置的值在循环中依次被加1,可知c(0)=1,c

(1)=3,c

(2)=2,c(3)=2,c(4)=1。

第二个循环把c数组中,大于0的值依次输出在label1,所以输出13221,所以答案选B。

2.有VB编写的程序如下:

Dima(0To9)AsInteger,tasLong

t=Val(Text1.Text)

DoWhilet<>0

 a(tMod10)=1

 t=t\10

Loop

Fori=0To9

 x=x+a(i)

Nexti

Text1中输入10242048,则程序执行后x的值为(  )

A.1B.2C.5D.10

答案 C 本题先执行一个DoWhile循环,然后执行一个For循环,DoWhile循环的作用是把t从个位开始逐个取出来,作为数组a的位置,并且令这个位置的值为1,例如个位数是8,则a(8)=1,这里注意到如果这个位置出现多次,那么数组a中这个位置的值还是1,例如2出现了两次,那么a

(2)=1被执行了两次。

For循环就是把数组a中的值加起来存储到x,由于数组a中只有0,1,2,4,8这几个位置的值是1,所以x=5,所以答案选C。

3.某VB程序段如下:

Fori=1To5

 b(a(i))=b(a(i))+1

Nexti

pa=0

Forj=1To10

 Fork=1Tob(j)

pa=pa+1:

a(pa)=j

 Nextk

Nextj

a

(1)到a(5)的初值依次是7、5、9、4、3,程序段运行后,数组a值依次是(  )

A.7,9,5,4,3B.3,4,5,7,9

C.4,5,7,9,3D.9,7,5,4,3

答案 B 由于数组a初始值是7、5、9、4、3,因此第一个For循环后,数组b中b(3)、b(4)、b(5)、b(7)、b(9)的值分别1,那么接下来的双重For循环里,只在j等于3、4、5、7、9的时候内部的Fork=1tob(j)循环里的语句才会执行,例如循环到j=3时,由于b(3)=1,fork=1tob(3)循环里的语句就会执行一遍,pa变成了1,那么a

(1)=3,当循环到j=5的时候,pa就变成了2,a

(2)=5,依次类推,每次pa加1,并且a(pa)=j,相当于给数组a的1到5的位置重新赋值,巧妙地实现了排序的功能,所以答案选B。

4.有如下VB程序段:

n=Len(Text1.Text)

Fori=1Ton

 a(i)=Mid(Text1.Text,i,1)

Nexti

DoWhilen>1

 IfAsc(a(n))>=Asc(a(n-1))Then

m=1

 Else

m=2

 EndIf

 b(m)=b(m)+1

 n=n-1

Loop

数组b各元素的初始值都为0,文本框Text1的内容为“2018Python”。

执行程序后,变量b

(1)的值为(  )

A.10B.6C.5D.4

答案 C 本题中先用数组a把输入的字符串分开来逐个存储,然后用DoWhile循环从后向前,逐个两两比较,如果后面的字符ASCII编码大于等于前面一个字符的编码,那么m=1,否则m=2,并且每次比较后都执行一遍b(m)=b(m)+1,即b

(1)统计出了后面字符比前1个字符编码大于等于的次数,b

(2)统计出了后面字符比前1个字符编码小的次数。

这里要注意A~Z的编码位65~90,a~z的编码是97~122,0~9的编码是48~57,根据输入的字符串“2018Python”,可知从后面开始往前逐个两两比较,后面字符编码大于等于前1个字符编码的次数是5,所以答案选C。

5.小吴编写了一个查找数组中不重复数据的VB程序,功能如下:

程序运行时在列表框List1中显示原始数据(存储在数组a中),单击“查找”按钮Command1后,在列表框List1中显示数组中元素值只出现一次的数据。

程序运行界面如图所示。

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

Constn=10’数组元素的总数

Dima(1Ton)AsInteger

PrivateSubForm_Load()

’该过程对数组a进行赋值,并在列表框List1中显示,代码略

EndSub

PrivateSubCommand1_Click()

DimiAsInteger,jAsInteger,flag(1Ton)AsBoolean

’flag(i)记录第i个元素是否重复出现

Fori=1Ton ’flag(i)=true开始假设都只出现1次

 flag(i)=True

Nexti

Fori=1Ton

 Ifflag(i)Then

Forj=i+1Ton

 Ifa(i)=a(i+1)Thenflag(i)=False:

flag(j)=False ’①

Nextj

 EndIf

Nexti

Fori=1Ton

 IfflagThenList2.AddItemStr(a(i)) ’②

Nexti

EndSub

答案 ①a(i)=a(j) ②flag(i)或flag(i)=True

解析 本程序用数组flag记录数组a的每个位置的值是否只出现一次。

利用双重循环对数组a中的每个位置的值进行统计,对每个a(i)只要用循环去找一遍i位置后面(用j表示i后面的位置)是不是有跟a(i)相同的值,如果有,则令flag(i)为false,并且flag(j)为false,说明这两个位置的值重复出现过。

①根据程序的意思,第1个改错的地方应该是把a(i)跟它后面位置的值都进行比较,所以答案是a(i)=a(j)。

②第2个位置所在的For循环为了输出没有重复出现的数据,所以这里要对每个i位置的flag(i)进行判断,答案是flag(i)=true或者flag(i)。

6.某游戏规则如下:

将2*n位队员按2人一组分成n个队(n<10),地面上有一排格子,共2*n个,每个格子都对应一个小于10的随机正整数。

游戏开始后,所有队员都选择站到一个空的格子里,等他们站满格子后,开始为每位队员进行记分。

记分规则:

每组甲乙两个队员,甲队员的分数是从自己所站的格子开始,按照格子序号递减,将这些格子中的数字一直累加到第1个格子。

乙队员的分数是从自己所站的格子开始,按照格子序号递增,一直将格子中的数字累加到第2*n个格子。

如果同一队的两名队员得到的分数相同,则该组参赛队获胜。

例如:

如图所示,有4个队8位队员,地上一排格子的数字依次为2、1、1、7、9、2、5、6。

若某队甲队员站在第4个格子,则其分数为2+1+1+7=11;乙队员站在第7个格子,则其分数为5+6=11。

两者相等,则该队获胜。

gz

(1)

gz

(2)

gz(3)

gz(4)

gz(5)

gz(6)

gz(7)

gz(8)

2

1

1

7

9

2

5

6

           甲          乙

(1)假设有3队队员,地上一排格子的数字依次为6、7、3、4、3、9。

若某队甲队员站在第3个格子上,那么该队乙队员站在第   个格子上才能获胜。

 

(2)实现上述功能的VB程序如下。

请在划线处填入合适代码。

DimnAsInteger

Dimgz(1To20)AsInteger

PrivateSubCommand1_Click()

DimdfaAsInteger,dfbAsInteger

DimtaAsInteger,tbAsInteger

 ①  

Randomize

Fori=1To2*n

 gz(i)=Int(Rnd*9+1)

 List1.AddItem“gz(“&i&”)”&gz(i)

Nexti

num=1

Forj=1To2*n

 ta=j

 dfa=zwdf(ta,True)

 Fork=1To2*n

tb=k

  ②   

Ifdfa=dfbThen

 List2.AddItemnum&“甲队员(“&j&”)得分=”&dfa&“乙队员(“&k&”)得分=”&dfb

 num=num+1

EndIf

 Nextk

Nextj

List2.AddItem“获胜的站法共有:

”+ ③ +“种” 

EndSub

Functionzwdf(pAsInteger,rAsBoolean)AsInteger

DimfsAsInteger

Ifr=TrueThen

   ④   

fs=fs+gz(i)

 Nexti

Else

 Fori=pTo2*n

 fs=fs+gz(i)

 Nexti

EndIf

zwdf=fs

EndFunction

答案 

(1)4 

(2)①n=Val(Text1.Text) ②dfb=zwdf(tb,False)或dfb=zwdf(k,False) ③Str(num-1) ④Fori=pTo1Step-1或Fori=1Top

解析 

(1)甲站在第3格上,往左累加,结果是16。

从最后一格往左累加,能得到16的是第4格。

(2)①结合窗体,通读程序,发现缺少输入语句,故填n=Val(Text1.Text)。

②需要结合理解自定义函数zwdf来填,zwdf有2个参数,第一个表示位置,第二个表示方向(True表示向左累加,False表示向右累加),由此,可先填第④空:

Fori=pTo1Step-1或者Fori=1Top。

回到主程序,第②空的下一个If语句的条件为dfa=dfb,dfa已在外层循环中赋值,其含义是从ta开始往左累加,则dfb应该为从tb开始往右累加,故填dfb=zwdf(tb,False)。

③用于输出所有能获胜的站法总数num,但要注

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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