2 6
等腰三角形, 只要 a=b 或 b=c 或 a = c 中一个为 True,表达式
a=b Or b=c Or a=c 值为 True。 选项 D 只能表明 c=a+b,而这
甚至都不能组成一个三角形。
8.某算法部分流程图如图所示 执行这部分流程,依次输入 20
3 10 8 11 0,则输出值是 ( )
A. 11 B. 3 C.8 D.20
答案 C 本题主要考查算法流程图。 分析该流程可得出
其功能是:求输入序列中大于 0 的最小数,故最后 b 的值为 8,
选项 C 正确。 本题也可以通过直接代入的方法求解,一样可
以求得正确答案。
9.有如下 VB 程序段:
s = Text1.Text: n = 0:f = False
For i = 1 To Len(s)
ch = Mid(s, i, 1)
If ch >= "0" And ch <= "9" Then
If Not f Then
f = True: n = n + 1
End If
Else
f = False
End If
Next i
运行该程序段后,在文本框 Text1 中输入“13+(123 23)?2”,
则变量 n 的值为 ( )
A.1 B.4 C.8 D.13
答案 B 本题主要考查 VB 程序设计。 分析该程序可得出
其功能是:统计文本框 Text1 中输入的字符串中包含的整数个
数,“13+(123 23)?2”包含整数 13,123,23,2,共 4 个,选项
B 正确。
10.下列 VB 程序段的功能为:先计算数组 a 中各个整数的降序
排序的名次存入数组 c 中,然后根据名次进行排序,排序结
果存入数组 b 中 如数组元素 a(1) ~a(5)的各元素值为
“2,3,1,0,8”,程序运行后 c(1) ~c(5)各元素的值为“3,2,
4,5,1”, b(1)~b(5)各元素的值为“8,3,2,1,0”
For i = 1 To n
(1)
Next i
For i = 1 To n - 1
For j = i + 1 To n
If (2) Then
c(i) = c(i) + 1
Else
c(j) = c(j) + 1
End If
Next j
Next i
For i = 1 To n
(3)
Next i
为完成如题所述功能,上述程序段 3 个方框处的代码分别为
( )
A.(1)c(i) = 1 (2)a(j) > a(i) (3)b(c(i)) = a(i)
B.(1)c(i) = 1 (2)a(j) < a(i) (3)b(i) = a(c(i))
C.(1)c(i) = i (2)a(j) > a(i) (3)b(c(i)) = a(i)
D.(1)c(i) = i (2)a(j) < a(i) (3)b(i) = a(c(i))
答案 A 本题主要考查 VB 表达式和 VB 语句。 c( i)表
示数组 a 第 i 位置元素降序排序的名次,即降序排序后的位
置。 数组 c 各元素的初值为 1,为保证数组 a 中的元素两两
比较一次,则 i 的范围:1→n 1,j 的范围:i+1→n。 由于是降
序排序,若 a( j)>a( i),则 a( i)对应的名次号 c( i)加 1;否则 a
( j)对应的名次号 c( j)加 1,故(1)处代码为“c( i) = 1”,(2)
处代码为“a( j) > a( i)”。 c( i)表示数组 a 第 i 位置元素降序
排序在数组 b 中的位置,依次处理数组 a 第 1 到 n 位置元素,
通过赋值语句“b( c( i)) = a( i)”存入数组 b,故(3)处代码
为“b(c( i)) = a( i)”,选项 A 正确。
11.有如下 VB 程序段:
For i = 1 To 8
a(i) = Int(Rnd ? 10) + 1
Next i
For i = 1 To 5 Step 2
k = i
For j = i + 2 To 7 Step 2
If a(j) < a(k) Or a(j) = a(k) And a(j + 1) <
a(k + 1) Then k = j
Next j
If i <> k Then
t = a(i): a(i) = a(k): a(k) = t
t = a(i + 1): a(i + 1) = a(k + 1): a(k + 1) = t
End If
Next i
运行该程序段后,数组 a 各元素的值可能为 ( )
A.1,2,1,1,4,3,6,5 B.1,1,1,2,3,4,5,6
C.0,1,5,2,7,4,5,6 D.3,4,5,2,6,4,7,11
答案 B 本题主要考查产生随机数和选择排序的变式。
Int(Rnd ? 10) + 1 可以产生 1~10 范围内的随机整数,故
不可能有 0 或 11,选项 C 和 D 错误。 选择排序第 i 遍加工,
若 a( j) < a(k),则更新 k 为 j,挑选出奇数位置最小元素的
位置;若 a( j) = a(k) And a( j + 1) < a(k + 1),表明奇数位
置相等,则比较后续相邻偶数位置元素与 a(k+1)的关系,即
奇数位置元素最小值有多个,则 k 记录对应后续偶数位置最
小数据的前一位置。 归纳可得该程序功能是按奇数位置数
据为主要关键字升序,偶数位置数据为次要关键字升序进行
选择排序。 选项 A 中“1,2”应该排在“1,1”的后面,选项 A
错误。
12.有如下 VB 程序段:
a(1) = 5: a(2) = 3: a(3) = 6: a(4) = 8: a(5) = 9
For i = 0 To 10
b(i) = i
Next i
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
3 6
j = 0
For i = 1 To 5
b(j) = a(i): j = b(j)
Next i
j = 0: key = Val(Text1.Text)
Do While j <> b(j)
If key <> b(j) Then
List1.AddItem Str(b(j))
j = b(j)
Else
If b(b(j)) <> b(j) Then
t = b(j): b(j) = b(t): b(t) = t
Else
b(j) = j
End If
End If
Loop
运行该程序段,在文本框 Text1 中输入 6,则列表框 List1 中第
3 行显示的内容为 ( )
A.3 B.5 C.8 D.9
答案 C 本题主要考查 VB 程序设计。 该程序用数组模
拟链表,b( j)表示 j 的下一个元素为 b( j),建立链表后,数组
元素 b(0)= 5、b(5)= 3、b(3)= 6、b(6)= 8、b(8)= 9、b(9)=
9,b( j)= j 表示已到链表尾,后续已无元素。 key = 6,顺序查
找 key,若 key <> b( j),则输出 b( j),调整 j = b( j),到下一
节点,否则删除 b( j),故 6 被删除,列表框 List1 第 3 行输出
8,选项 C 正确。
二、非选择题(本大题共 4 小题,其中第 13 小题 4 分,第 14 小
题 8 分,第 15 小题 7 分,第 16 小题 7 分,共 26 分)
13.小王收集了 2017 年中国智能手机销量数据表,并使用 Excel
软件进行数据处理,如图 a 所示
图 a
请回答下列问题:
(1)区域 D3:D13 的数据是通过公式计算得到的,在 D3 单元
格输入公式后,用自动填充功能完成 D4:D13 的计算,则
D3 单元格中的公式是 (公
式提示:销量份额=该品牌销量 / 所有品牌的总销量)
(2)图 a 所示区域 A2:D13 的数据已进行了排序,则排序的主
要关键字是
(3)图 a 所示区域 A2:D13 的数据对“类别”列进行筛选如图
b 所示,对“销量(万台)”列进行筛选如图 c 所示,则筛选
出的品牌有 个(填数量)
图 b 图 c
(4)根据图 a 中数据制作图表如图 d 所示,要使图表的横坐
标显示各手机“品牌”,则可进行的操作是
图 d
答案 (1)= C3 / SUM($C$3:$C$13) 或 = C3 / SUM(C$3:
C$13)
(2)类别
(3)4
(4)把图表数据区域改为 B2:B10,C2:C10
解析 (1)销量份额=该品牌销量 / 所有品牌的总销量,可
以用 SUM 函数计算总销量,由于向下填充公式时,SUM 函数
的计算区域需固定不变,故行号前必须加“$”符号。
(2)观察图表发现,“类别”相同的记录按“销量(万台)”或者
“销量份额”降序排序,故可判断排序的主要关键字是“类
别”,次要关键字是“销量(万台)”或“销量份额”。
(3)“最大的 5 项”筛选出的是所有记录中最大的 5 项,分别
是 “华为 & 荣耀”“OPPO”“VIVO”“小米”“苹果”,同时符合
“类别”是“国内”的只有 4 个品牌。
(4)观察图表可得,原图表的横坐标对应数据区域是“A2:
A10”,为使横坐标显示“品牌”,则图表数据区域需改为“B2:
B10,C2:C10”。
14.小张使用 Flash 软件创作主题为“游子吟”的多媒体作品,如
图 a 所示
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
4 6
图 a
请回答下列问题:
(1)在脚本编写阶段,一般需经历以下四个步骤:①媒体元素
分解,②编写文字脚本,③编写制作脚本,④编写脚本大
纲,正确的步骤顺序是: (填数字)
(2)测试影片时,要使“主界面”场景动画播放完后能自动停
止,则“按钮”图层的第 60 帧应添加的动作脚本是
(3)“小孩”图层的第 1 帧到第 12 帧利用元件实例实现小孩
从舞台外移动到舞台中的动画效果,则该动画类型是
(单选,填字母:A.动画补间 / B.形状补间 / C.逐
帧动画)
(4)测试场景时,“古诗”图层内容在播放完第 36 帧后消失,
要使该图层第 36 帧中的内容一直在本场景中呈现,则可
进行的操作是
(5)测试影片时,当鼠标移到“退出”按钮上时,鼠标指针未
变成小手状 该按钮部分编辑界面如图 b 所示,要使该
按钮能够响应鼠标动作,则以下操作可行的是
(多选,填字母:A.选中“文字”图层“点击”帧,执行“清
除关键帧” / B.选中“文字” 图层“点击” 帧,执行“清除
帧” / C.选中“文字”图层“点击”帧,执行“删除帧” / D.选
中“背景”图层“点击”帧,执行“插入帧”)
图 b
(注:全部选对的得 2 分,选对但不全的得 1 分,不选或有
选错的得 0 分)
(6)测试影片时,弹出如图 c 所示的错误提示窗口,由图中信
息可知,该动作脚本设置在 上(选填,按钮 / 关键
帧)
图 c
答案 (1)④②③①
(2)Stop();或 gotoAndStop(60);
(3)A
(4)选中“古诗”图层第 60 帧执行“插入帧”或“插入关键
帧”,再选中该图层第 37 帧执行“清除关键帧”或选中“古
诗”图层第 37 帧执行“删除帧”,再选中该图层第 60 帧执行
“插入帧”或“插入关键帧” 或其他等价答案
(5)ACD
(6)关键帧
解析 (1)脚本编写的步骤依次是:编写脚本大纲→编写
文字脚本→编写制作脚本→媒体元素分解。
(2)可以用帧脚本动作“Stop();”使“主界面”场景动画播放
完后自动停止。
(3)利用元件实例创建的补间动画类型是动画补间。
(4)选中“古诗”图层第 60 帧执行“插入帧”或“插入关键
帧”,再选中该图层第 37 帧执行“清除关键帧”,可以使第 37
帧变为普通帧,第 36 帧关键帧可以延续至本场景最后一帧。
选中“古诗”图层第 37 帧执行“删除帧”,则第 37 帧被删除,
再选中该图层第 60 帧执行“插入帧”或“插入关键帧”,可把
第 36 帧关键帧延续至本场景最后一帧。
(5)选中“文字”图层“点击”帧,执行“清除关键帧”,则该图
层“点击”帧变为普通帧,延续之前关键帧的内容,按钮能响
应。 选中“文字”图层“点击”帧,执行“删除帧”,则“文字”和
“背景”图层的“点击”帧都是空白,从右往左,最先出现关键
帧,按钮能响应。 选中“背景”图层“点击”帧执行“插入帧”,
则把“背景”图层“按下”这一个关键帧延续至“点击”帧,按
钮也能响应。
(6)观察题图 C 可得,添加的脚本动作是“ on( press) { stop
();}”,若该脚本动作加在按钮上,则是正确的。 现在报错,
则可判断该脚本添加在了关键帧上。
15.小王基于插入排序思想设计了一个改进的排序算法,该算法
是先用对分查找算法寻找插入位置,然后把数据插入相应位
置 他编写 VB 程序功能如下:产生 10 个随机整数存入数组
a 中,并在列表框 List1 中显示,单击“排序”按钮 Command1,
对数组 a 升序排序,并在列表框 List2 中显示 程序运行界面
如图所示,实现上述功能的 VB 代码如下:
Dim a(1 To 10) As Integer
Private Sub Form_Load()
'程序功能:产生 10 个随机整数存入数组 a,在列表
框 List1 中显示,代码略
End Sub
Private Sub Command1_Click()
Dim key As Integer, i As Integer, j As Integer
Dim m As Integer, low As Integer, high As Integer
For i = 2 To 10
key = a(i)
If key < a(i - 1) Then
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
5 6
low = 1: ①
Do While low <= high
m = (low + high) \2
If a(m) > key Then
high = m - 1
Else
low = m + 1
End If
Loop
For j = i To high + 1 Step -1
a(j) = a(j - 1)
Next j
②
End If
Next i
For i = 1 To 10
List2.AddItem Str(a(i))
Next i
End Sub
(1)代码“Private Sub Command1 Click()”中的 Click 是
(单选,填字母:A.对象名 / B.属性名 / C.事件名)
(2)将程序代码中①②划线处代码补充完整
(3)程序代码中的加框处代码有误,请改正
(4)运行程序,单击“排序”按钮后,列表框 List1 中第 2 个整
数“10”存储在排序后数组 a 的第 个位置(填数
字)
答案 (1)C
(2)①high = i 1
②a(high + 1) = key 或 a( low) = key
(3)high + 2 或 low + 1
(4)3
解析 ( 1) Command1 Click 是事件处理过程名,其中
Command1是对象名,Click 是事件名。
(2)①插入排序,插入 a( i)时需要在 a(1)到 a( i 1)范围内
通过对分查找寻找插入位置,故初始时 low = 1,high = i 1,故
①处代码为“high = i 1”。 ②对分查找结束时必定有 low =
high+1,high+1 或 low 即为 key 的插入位置,故②处代码为
“a(high+1)= key”或“a( low)= key”。
(3)插入位置为 high+1 或 low,则需要把 a( i 1)到 a(high+
1)位置的元素逐个后移一个位置即 a( j)= a( j 1),j 表示待
移入的位置,故 j 的取值范围是 i 到 high+2 或( low+1),故加
框处代码应改为“high+2”或“ low+1”。
(4)根据对分查找代码可得:当 key> =a(m)时,执行 low =m+
1,在右区间继续查找,则查找序列中存在 key 时,key 插入在
最后一个与之相同数据的下一位置。 故 List1 中第 2 个整数
“10”插在前一个“10”的后面,即数组 a 的第 3 个位置。
16.某种数据加密方法描述如下(加密前数据是 ASCII 字符):
●以 8 个数据为一段,将 n 个待加密数据依次分割成若干个
数据段,剩余数据(个数小于 8)为独立数据段
●数据加密规则:数据个数等于 8 的数据段,对各个字符进
行位置变换;数据个数小于 8 的数据段,不进行位置变换
位置变换:用位置变换密钥数组 c,将数据段每个字符进行位
置变换,方法如下:
加密后某数据段的第 i 个元素 = 对应原数据段的第 c( i)个
元素,其中 i = 1,2,……,8
数值变换:位置变换后,依次取出各个字符进行数值变换:把
该字符的 ASCII 码转二进制,然后与密钥 m 对应的二进制数
(m 为 1 到 255 之间的整数)按位异或运算 异或运算(⊕)
规则:如果 a b 两个值不相同,则 a⊕b 结果为 1;如果 a b 两
个值相同,则 a⊕b 结果为 0,即:0 ⊕ 0 = 0,1 ⊕ 0 = 1,0 ⊕
1 = 1,1 ⊕ 1 = 0
●把上述处理的得到二进制数依次拼接,即构成最后的加密
数据
例如,待加密数据为“python3.50”,数组 c 各元素的值依次是
数组 c 3 6 5 2 8 4 7
则数据位置变换如下:
如值变换密钥 m 为 35 (二进制表示是 00100011),则字符
“t” (ASCII 码值是 116,二进制表示是 01110100)的数值变
换过程如下:
变换前 0 0 0 0
密钥 0 0 0 0 0
变换后 0 0 0
(1)已知“A”的 ASCII 码值是 65,m = 35,则“A”数值变换后
的结果是 (填二进制数据)
(2)小李根据上述算法,设计了一个数据加密程序,其 VB 代
码如下,请在划线处填入合适的代码
Const n = 1024
Dim c(1 To 8) As Integer
Private Sub Form_Load()
'产生位置变换密钥数组 c,代码略
End Sub
Function convert(c As Integer) As String
'程序功能:把整数 c 转成 8 位二进制数,代码略
End Function
Private Sub Command1_Click()
Dim s As String, st As String, ss As String,
res As String
Dim i As Integer, j As Integer, start As
Integer
Dim a(1 To n) As String, b(1 To n) As String
s = Text1.Text
st = convert(Val(Text2.Text))
For i = 1 To Len(s)
a(i) = Mid(s, i, 1)
Next i
i = 1: start = -8
Do While ①
If i Mod 8 = 1 Then start = start + 8
b(i) = ②
i = i + 1
Loop
For j = i To Len(s)
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
6 6
b(j) = a(j)
Next j
For i = 1 To Len(s)
③
For j = 1 To 8
If Mid(ss, j, 1) = Mid(st, j, 1) Then
res = res + "0" Else res = res + "1"
'按位异或
Next j
Next i
Text3.Text = res
End Sub
答案 (1)01100010
(2) ①i <= (Len(s) \ 8) ? 8
②a(start + c(( i 1) Mod 8 + 1))
③ss = convert(Asc(b( i)))
解析 ( 1) “A” 的 ASCII 码值是 65,用二进制表示为
01000001,m= 35,用二进制表示为 00100011,按位做异或运
算,相同为 0,相异为 1,可得: 01100010。
(2)①以 8 个数据为一段进行分段处理,个数等于 8 的数据
段需进行位置变换,故需进行位置变换的数据段有(Len( s)
\ 8)个,数据个数为 i < = (Len(s) \ 8) ? 8。
②位置变换方法:加密后数据段的第 i 个元素 = 原数据段的
第 c( i)个元素,其中 i = 1,2,……,8,i 表示段内位置。 代码
“Do While i < = (Len(s) \ 8) ? 8”中的 i 对应段内位置可
为“1+( i 1) Mod 8”,start 表示该数据段第一个数据的前一
个位置,故数组 b 第 i 位置元素是来自数组 a 第 start+c(1+( i
1) Mod 8)位置,故②处代码为“a( start + c(( i 1) Mod 8
+ 1))”。
③位置变换后的数据需转二进制,再按位做异或运算,故③
处的代码是调用自定义函数 convert 把 b( i)中字符的 ASCII
码转二进制后存入变量 ss,故此处代码为“ ss = convert(Asc
(b( i)))”。
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????
????