2020年高考浙江版高考信息技术 模拟演练 (3)
- 格式:docx
- 大小:142.23 KB
- 文档页数:13
高考复习参考资料
高考加油,高考加油,高考加油 第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
For i = 1 To 9
b(i) = Abs(a(i + 1) - a(i))
c(b(i) \ 10) = c(b(i) \ 10) + 1
Next i
For i = 0 To 10
If c(i) > 0 Then Label1.Caption = Label1.Caption + “” + Str(c(i))
Next i
数组c各元素初值为0,执行该程序段,标签Label1上显示的内容是( )
A.23211 B.13221 C.23221 D.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编写的程序如下:
Dim a(0 To 9) As Integer, t as Long
t=Val(Text1.Text)
Do While t<>0
a(t Mod 10) = 1
t = t \ 10
Loop
For i = 0 To 9
x = x + a(i) 高考复习参考资料
高考加油,高考加油,高考加油 Next i
Text1中输入10242048,则程序执行后x的值为( )
A.1 B.2 C.5 D.10
答案 C 本题先执行一个Do While循环,然后执行一个For循环,Do While循环的作用是把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程序段如下:
For i = 1 To 5
b(a(i)) = b(a(i)) + 1
Next i
pa = 0
For j = 1 To 10
For k = 1 To b(j)
pa= pa + 1 : a(pa) = j
Next k
Next j
a(1)到a(5)的初值依次是7、5、9、4、3,程序段运行后,数组a值依次是( )
A.7, 9, 5,4, 3 B.3, 4, 5, 7, 9
C.4,5,7,9, 3 D.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的时候内部的For k=1 to b(j)循环里的语句才会执行,例如循环到j=3时,由于b(3)=1,for k=1 to b(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)
For i = 1 To n
a(i) = Mid(Text1.Text, i, 1)
Next i
Do While n > 1
If Asc(a(n)) >= Asc(a(n - 1)) Then
m = 1
Else
m = 2
End If
b(m) = b(m) + 1
n = n-1
Loop
数组b各元素的初始值都为0,文本框Text1的内容为“2018Python”。执行程序后,变量b(1)的值为( )
A.10 B.6 C.5 D.4
答案 C 本题中先用数组a把输入的字符串分开来逐个存储,然后用Do While循环从后向前,逐个两两比较,如果后面的字符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程序如下,但加框处代码有错,请改正。
Const n = 10 ’数组元素的总数
Dim a(1 To n) As Integer
Private Sub Form_Load()
’该过程对数组a进行赋值,并在列表框List1中显示,代码略
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer,flag(1 To n) As Boolean
’ flag(i)记录第 i 个元素是否重复出现
For i = 1 To n ’flag(i)=true开始假设都只出现1次
flag(i) = True
Next i
For i = 1 To n
If flag(i) Then
For j = i + 1 To n
Ifa(i) = a(i+1) Then flag(i) = False: flag(j) = False ’①
Next j
End If
Next i
For i = 1 To n
Ifflag Then List2.AddItem Str(a(i)) ’②
Next i
End Sub
高考复习参考资料
高考加油,高考加油,高考加油 答案 ①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程序如下。请在划线处填入合适代码。
Dim n As Integer
Dim gz(1 To 20) As Integer
Private Sub Command1_Click()
Dim dfa As Integer, dfb As Integer
Dim ta As Integer, tb As Integer
①
Randomize
For i = 1 To 2 * n
gz(i) = Int(Rnd* 9 + 1)
List1.AddItem “gz(“ & i & ”)” & gz(i)
Next i
num = 1
For j = 1 To 2 * n
ta = j
dfa = zwdf(ta, True)
For k = 1 To 2 * n
tb = k
②
If dfa = dfb Then
List2.AddItem num & “甲队员(“ & j &”)得分=” & dfa & “乙队员(“ & k & ”)得分=” & dfb
num = num + 1
End If
Next k