4.4.4循环控制的应用 练习(原卷+解析卷)

文档属性

名称 4.4.4循环控制的应用 练习(原卷+解析卷)
格式 zip
文件大小 2.7MB
资源类型 试卷
版本资源 粤教版(2019)
科目 信息技术(信息科技)
更新时间 2020-11-24 08:55:52

文档简介

中小学教育资源及组卷应用平台
4.4.4循环控制的应用-粤教版(2019)高中信息技术必修一练习
学校:___________姓名:___________班级:___________考号:___________
一、选择题
1.有如下
VB
程序段:
For
i
=
1
To
Len(Text1.Text)
c
=
Mid(Text1.Text,
i,
1)
If
c
>=
"0"
And
c
<=
"9"
Then
x
=
Val(c)
a((x
+
1)
Mod
10)
=
a((x
+
1)
Mod
10)
+
1
End
If
Next
i
s
=
""
For
i
=
0
To
9
s
=
s
&
a(i)
Next
i
Text2.Text
=
s
数组元素
a(0)

a(9)
的值均为0,执行该程序段后,文本框Text2
显示的内容为“1302000100”。则文本框
Text1
中输入的内容可能是(

A.2020-6-09
B.2020-02-28
C.2020-6-01
D.2019-01-07
2.有如下
VB
程序段:
a(1)
=
1:
a(2)
=
1:b(1)
=
1:
b(2)
=
2
For
i
=
3
To
5
a(i)
=
a(i
-
1)
+
a(i
-
2)
b(i)
=
b(i
-
1)
+
a(i)
Next
i
执行该程序段后,数组元素
b(5)的值为


A.5
B.8
C.12
D.15
3.有如下
VB
程序段:
Dim
n
As
Integer
Dim
sum
As
Integer
Dim
i
As
Integer
Function
fx(i
As
Integer)
as
Integer
If
i
=
1
Then
fx
=
5
Else
fx
=
5
2
^
(i
-
1)
+
fx(i
-
1)
End
if
End
Function
Private
Sub
Command1_Click()
n
=
Val(Text1.Text):
sum
=
0
For
i
=
1
To
n
sum
=
sum
+
fx(i)
Next
i
Label1.Caption
=
Str(sum)
End
Sub
若在
Text1
中输入4,单击
Command1,则
Label1
中显示的内容为(

A.55
B.75
C.80
D.130
4.有如下VB程序段:
Dim
d(1
to
5)as
integer,i
as
integer
Dim
flag
as
Boolean,j
as
integer
‘给数组元素d(1)至d(5)赋初值为1,代码略
Randomize
For
i=1
to
5
J
=
l:flag
=
True
d(i)
=
int(Rnd
9)
Do
while
j<
=i-1
and
flag
=
True
d(i)
=
int(Rnd
5+1)
If
d(i)
=
d(j)
then
i=i-l:flag
=
False
j
=
j+1
Loop
Next
i
运行程序后,数组中的数据值可能是(

A.1
3
4
5
6
B.3
5
4
1
1
C.8
3
1
2
5
D.1
2
6
2
1
5.有如下VB程序段:
a="10001":b=0:t=0
For
i=1
To
Len(a)
c=
Mid(a,
i,
1)
If
c="0"
Then
t
=
t
-1
Else
t
=
t
+1
If
t
<
0
Then
b
=
b
2
Else
b
=
b
2+1
Next
i
执行该程序段后,变量b的值为(

A.15
B.17
C.20
D.24
6.有如下VB程序段:
b=0
For
a=1
To
10
b=a+b
a=a+3
Next
a
c=a+b
执行该程序段后,变量c的值为(

A.15
B.22
C.28
D.32
7.有如下VB程序段:
n
=
Val(Text1.Text)
i
=
1
Do
While
n
>
0
num
=
n
Mod
16
If
num
>=
0
And
num
<=
9
Then
Text2.Text
=
Chr(Asc("0")
+
num)
+
Text2.Text
Else
Text2.Text
=
Chr(Asc("A")
+
num
-
10)
+
Text2.Text【来源:21·世纪·教育·网】
End
If
n
=
n
\
16
i
=
i
+
1
Loop
执行该程序段,在文本框Text1中输入420,则文本框Text2中显示的内容的是(

A.4A
B.A4
C.1A4
D.4A1
8.有如下VB程序段:
For
i=2
to
5
For
j=i
to
5
If
j
mod
i=0
then
a(j)=a(j)+1
Next
j
Next
i
For
i=1
to
5
If
a
(i)<>1
then
s=str(i)+s
Next
i
若数组a
的初始值都为0,则运行该程序段后,s的值为(

A.2
3
5
B.1
4
C.5
3
2
D.4
1
9.有如下VB程序段:
For
i
=
1
To
6
a(i)
=
Int(Rnd()
10)
+
1
If
a(i)
Mod
2
=
i
Mod
2
Then
a(i)
=
a(i)
+
1
Else
a(i)
=
a(i)
Mod
2
End
If
Next
i
执行该程序段后,在下列选项中,a(1)~a(6)各元素可能的值是(

A.0,1,1,0,0,1
B.0,5,6,6,10,9
C.2,3,6,7,8,11
D.2,1,8,3,12,5
10.有如下
VB
程序段:
Private
Sub
Command1_Click()
Dim
a(1
To
6)
As
Integer,
i
As
Integer
For
i
=
1
To
6
a(i)
=
Int(Rnd
5)
2
+
1
Next
i
For
i
=
2
To
6
Step
2
a(i)
=
cha(a(i
-1),
a(i))
Next
i
End
Sub
Function
cha(x
As
Integer,
y
As
Integer)
As
Integer
【来源:21cnj
y.co
m】
Dim
t
As
Integer
If
x
<
y
Then
t=x:
x
=
y:
y
=
t
cha
=
y
Else
cha
=
x
-1
End
If
End
Function
执行该程序段后,在下列选项中,a(1)~a(6)各元素值可能的是(

A.8,9,3,2,5,1
B.7,6,5,5,3,1
C.9,3,5,4,4,3
D.7,3,1,0,5,4
11.字符串旋转。若整型变量
s、t、c
的值分别为
3、9、4,则下列程序执行后
str1
的值为(
)【出处:21教育名师】
str1
=
"go
it
for!"
str2
=
Mid(str1,
s,
t
-
s
+
1)
len1
=
Len(str1)
:
len2
=
Len(str2)
c
=
c
Mod
len2
For
i
=
1
To
c
str2
=
Mid(str2,
len2,
1)
+
Mid(str2,
1,
len2
-
1)
21
cnjy
com
Next
i
str1
=
Mid(str1,
1,
s
-
1)
+
str2
+
Mid(str1,
t
+
1,
len1
-
t)
A.go
for
it!
B.for!
go
it
C.for
it
go!
D.it
for
go!
12.有如下VB程序段:
For
i=1
to
3
For
j=1
to
5-i
If
a(j)>a(j+1)
Then
t=a(j)
:
a(j)=a(j+1)
:
a(j+1)=t
End
If
Next
j
Text1.Text
=
Str(a(i))+Text1.Text
Next
i
数组元素a(1)到a(5)的值依次为“2,9,7,8,5”。若该程序段执行后,文本框Text1显示的内容是(

A.2
5
7
B.9
8
7
C.2
7
7
D.7
7
2
13.字符串s1中保存了一个单词,字符串s2中保存了一句以空格结尾的句子,字符串s1和s2均由小写字母组成且s2中各个单词之间仅用空格隔开,下列程序能够统计单词s1在句子s2中出现的次数:
i=1:j=1:cnt=0
Do
While
j<=
Len(s2)
If
Mid(s1,i,1)<>
Mid(s2,j,1)Then
Else
Do
While
i<=lens
and
j<=lens2
If
Mid(s1,
i,
1)
=Mid(s2,
j,
1)Then
Else
End
If
Loop
lf
i=len(s1)+1
And
Mid(s2,j,1)=""then
cnt=
cnt+1
End
If
i=1
End
If
Loop
方框中的代码分别是:①i=1:j=j+1
②i=i+1:j=j+1
③j=j+1
代码从上到下正确的顺序是()
A.①②③
B.③②①
C.③①②
D.②①③
二、操作题
14.小王设计了一个利用矩阵“翻转法”实现矩阵逆序输出的程序,其功能为:运行程序时,在文本框
Text1
中输入矩阵大小n,点击“产生矩阵”按钮
Command1,在列表框
List1
中显示一个
n×n
的矩阵,该矩阵数据为随机两位正奇数。点击“翻转矩阵”按钮
Command2,该矩阵翻转(水平翻转和垂直翻转均要实现)后显示在列表框
List2
中,再点一次“翻转矩阵”按钮
Command2,列表框
List2
中显示的矩阵被还原为初始状态。程序运行界面如图所示。
实现上述功能的
VB
程序如下,请回答下列问题:
(1)在上图的程序运行界面基础上,再连续两次单击
Command2
按钮,则列表框
List2
中第一行显示的内容是____________________。
(2)实现此程序的代码如下,请完成程序填空。
Dim
n
As
Integer
Dim
L
As
String
Dim
i
as
Integer
Dim
j
as
Integer
Dim
a(1
To
100)
As
Integer
Dim
b(1
To
100)
As
Integer
Private
Sub
Command1_Click()
n
=
Val(Text1.Text)
Randomize
For
i
=
1
To
n
n
a(i)
=

+
1
Next
i
For
i
=
1
To
n
L
=
""
For
j
=
1
To
n
L
=
L
+
"
"
+
Str(a((i
-
1)
n
+
j))
Next
j
List1.AddItem
L
Next
i
End
Sub
Private
Sub
Command2_Click()
List2.Clear
For
i
=
1
To
n
L
=
""
For
j
=
1
To
n
b((i
-
1)
n
+
j)
=

L
=
L
+
"
"
+
Str(b((i
-
1)
n
+
j))
Next
j
List2.AddItem
L
Next
i
For
i
=
1
To
n
n
a(i)
=

Next
i
End
Sub
15.小李编写
VB
程序,功能如下:单击“产生数组”按钮
Command1,则随机生成
10
个取值范围是
1~10
的正整数,分别存储到数组
a
中,对数组
a
的元素进行升序排列,并在标签
Label1
中显示;
再单击“重复数”按钮
Command2,则在排序后的数组
a
中查找连续个数最多的一组重复数值,
若有两组连续重复数个数一样多,则取数值小的一组,将重复数的数组元素下标显示在标签Label2
中。运行界面如图所示。
21教育网
(1)已知窗体名称为
Form1,要使程序加载时,窗体标题自动显示为“统计重复数”,则可在___________(单选,填字母)事件过程中添加代码:Form1.Caption
=
“统计重复数”。
A.Form_Click()
B.Form_Load()
C.Form1_Click()
D.Form1_Load()
(2)实现上述功能的程序如下,请在划线处填写合适代码,使程序正常运行。
(3)程序加框处代码有错,请改正。
Dim
a(1
To
10)
As
Integer
Dim
n
As
Integer
Private
Sub
Command1_Click()
Dim
i
As
Integer
xkw,
j
As
Integer,
k
As
Integer,
temp
As
Integer
Dim
s
As
String
Randomize
n
=
10
For
i
=
1
To
n
a(i)
=
Int(Rnd
10)
+
1
Next
i
For
i
=
1
To
n
-
1
k
=
i
For
j
=
i
+
1
To
n
If
a(j)
<
a(k)
Then

Next
j
If
k
<>
i
Then
temp
=
a(i):
a(i)
=
a(k):
a(k)
=
temp
End
If
Next
i
s
=
""
For
i
=
1
To
n
s
=
s
+
Str(a(i))
If
i
<
n
Then
s
=
s
+
","
Next
i
Label1.Caption
=
s
End
Sub
Private
Sub
Command2_Click()
Dim
i
As
Integer,
j
As
Integer,
k
As
Integer
Dim
length
As
Integer,
origin
As
Integer
Dim
s
As
String
k
=
1:origin=1:length
=
1
For
i
=
2
To
n
If
a(i)
=
a(i
-
1)
Then
k
=
k
+
1
If
k
>
length
Then
length
=
k
origin
=

End
If
Else
k
=
1
End
If
Next
i
s
=
""
For
j
=
origin
To
s
=
s
+
Str(j)
Next
j
Label2.Caption
=
s
End
Sub
16.小章想将a数组中n个元素排列成合唱队列形态,具体方法如下:
①如果n是奇数,选出所有数据中最大元素,将其放在a数组正中间位置。
②从剩下待处理数据中选出最大的两个元素,同时将较大元素放在已处理数据段的右侧,
较小元素放在已处理数据段的左侧。2·1·c·n·j·y
③反复执行操作②,直到所有数据处理完毕。
按上述要求,小章编写一个
VB
程序,功能如下:
在文本框
Text1
中输入
n,单击“生成”按钮
Command1,并在文本框
List1
中显示排序前
数据;单击“排序”21世纪教育网按钮
Command2,在列表框
List2
中输出处理后的结果。程序运行界面如下图所示。
(1)下列哪个选项,可以将窗体Form1标题改为:“生成合唱队列”_____(单选,填字
母:A.Form.Caption="生成合唱队列"/
B.Label1.Caption
="生成合唱队列"/
C.Form1.Caption="生成合唱队列")
(2)实现上述功能的VB程序如下,请在划线处①②③填入合适代码。
①________________
②________________
③________________
(3)程序加框处代码有错,请改正。
改正:__________________
Dim
a(1
To
100)
As
Integer
Dim
n
As
Integer
Private
Sub
Command1_Click()
'在文本框
Text1
中输入
n(n<=100)
'排序前数据存储在数组
a
中,并在文本框
List1
中显示
'代码略
End
Sub
Private
Sub
Command2_Click()
Dim
i
As
Integer,
j
As
Integer,
t
As
Integer
Dim
pMax1
As
Integer,
pMax2
As
Integer
pMax1
=
n
\
2
+
1:
pMax2
=
n
\
2
If

Then
For
i
=
1
To
n
If
a(i)
>
a(pMax1)
Then
t
=
a(pMax1):
a(pMax1)
=
a(i):
a(i)
=
t
Next
i
pMax1
=
pMax1
+
1
End
If
For
i
=
1
To
n
\
2
If

Then
t
=
a(pMax1):
a(pMax1)
=
a(pMax2):
a(pMax2)
=
t
j
=
pMax1
Mod
n
+
121cnjy.com
Do
While
j
<>
pMax2
If
a(j)
>
a(pMax1)
Then
t
=
a(pMax1):
a(pMax1)
=
a(j):
a(j)
=
t
t
=
a(pMax2):
a(pMax2)
=
a(j):
a(j)
=
t
t
=
a(pMax2):
a(pMax2)
=
a(j):
a(j)
=
t
End
If

Loop
pMax1
=
pMax1
+
1
pMax2
=
pMax2
-
1
Next
i
For
i
=
1
To
n
List2.AddItem
Str(a(i))
Next
i
End
Sub
17.随机产生n个三位数,并对这些数进行索引排序。从文本框Text1中输入n的值,在列表List1中输出原始数据,列表框List2中输出升序排序结果。例如,原始数据140,472,876,811,436,965,884,150数据关系如下表所示:
原始数组a(i)
140
472
876
811
436
965
884
150
初始化索引数组index(i)
1
2
3
4
5
6
7
8
排序后的索引数组index(i)
1
4
6
5
3
8
7
2
排序后结果
140
150
436
472
811
876
884
965
(1)实现上述功能的VB程序如下,运行结果如图所示,请在划线处填入合适的代码。
Private
Sub
Command1_Click()
Dim
i
As
Integer,
j
As
Integer,
n
As
Integer
Dim
a(1
To
100),
index(1
To
100)
As
Integer,
b(1
To
100)
As
Integer
n
=
Val(Text1.Text)
List1.Clear:
List2.Clear
For
i
=
1
To
n
__________
List1.AddItem
Str(a(i))
Next
i
'索引排序
For
i
=
1
To
n
index(i)
=
i
For
j
=
1
To
i
-
1
If
a(i)
<
a(j)
Then
index(i)
=
index(i)
-
1:_____21·cn·jy·com
Next
j
Next
i
For
i
=
1
To
n
_____
Next
i
For
i
=
1
To
n
List2.AddItem
Str(b(i))
Next
i
End
Sub
(2)加框处代码改为
index(i)=1
For
j=1
to
n
If
a(i)>a(j)
then
index(i)=index(i)+1
Next
j
能否实现排序?_______(填:能/不能)
18.小董编写了一个有关“筛选操作”的VB程序,实现如下功能:在文本框Text1中显示一组随机生成个位数为“9”的两位数(原始数据),在文本框Text2中输入筛选个数,单击“操作”按钮Command1后,在文本框Text3中按降序显示所筛选个数的不重复最大数据(以逗号分隔
并以数据结尾),若在文本框Text2中输入的数大于原始数据中不相同数的个数,则在文本框Text3中显示“筛选的个数太大,请重新输入!”。程序运行界面如图所示。
(1)如图所示,该VB程序的窗体中共有
类对象(填数字)。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
(3)程序中加框处代码有错,请改正。
Const?n?=?10
Dim?d(n)?As?Integer,?c?As?Integer
Private?Sub?Form_Load()
???
Dim?i?As?Integer,?j?As?Integer,?f?As?Boolean,?s?As?String
????
Randomize
????
c?=?n
???
?
For?i?=?1?To?n
????????
f?=?False
?????????
d(i)?=?

??
?'
随机生成个位数为“9”的两位数www.21-cn-jy.com
?????????
For?j?=?1?To?i?-?1
????????????
If?

?Then?f?=?True2-1-c-n-j-y
?????????
Next?j
?????????
If?f?Then?c?=?c?-?1
????
Next?i
'原始数据在文本框Text1中显示。代码略
End?Sub
Private?Sub?Command1_Click()
Dim?i?As?Integer,?j?As?Integer,?k?As?Integer,?m?As?Integer
Dim
cnt?As?Integer,t?As?String,?s?As?String
d(0)?=?100
cnt?=?Val(Text2.Text)
????
If?cnt?>?c?Then
Text3.Text?=?"输入筛选的个数太大,请重新输入!"
???
Exit?Sub??????'Exit?Sub表示退出过程
End?If
For?i?=?1?To?cnt
?
k?=?i
For?j?=?i?+?1?To?n
If?d(j)?Next?j
??????If?k?<>?i?Then
????????????t?=?d(i):?d(i)?=?d(k):?d(k)?=?t
??????End?If
Next?i
For?i?=?1?To?cnt
??????s?=?s?+?Str(d(i))?+?","
Next?i
Text3.Text?=?

End?Sub
三、简答题
19.在“抗击疫情,‘宅’出精彩”征文活动中,每位选手可以提交一篇作品。活动以互评的形式展开:每位选手对m篇作品进行打分(本人作品回避),方法如下:【版权所有:21教育】

用1-n数字代表n个作品,打乱顺序后分配给n个选手。分配方案保存在数组a中,如图a存储了两组分配方案(n=5)。在第一个分配方案中把4号作品分配给1号参赛者,1号作品分配给2号参赛者(选手编号与序号错开)……。
4
1
5
2
3
a(1)~a(n)中存储第一个分配方案
2
3
4
5
1
a(n+1)~a(2
n)中存储第二个分配方案
↑第i列中的作品拿给i号参赛者打分
图a
②分配方案的形成方法:
将1~n之间的随机数字依次放到第1个位置、第2个位置……,随机数不能与位置号相同,并且要防止分配冲突,如前三个分配序号是“2
3
4”,那么在第4位上只能放“5”(如放“1”会导致第5个位置没有符合要求的数字,因此位置n-1需要判断数“n”是否已经分配,如果未分配,位置n-1放置数“n”),最终方案“2
3
4
5
1”。
③评m个作品需要m个分配方案。方案间要避免同一个人拿到重复的作品。如第16题图a第3行上的数据“5
1
2
3
4”不符合要求,因为会使第2号选手重复拿到1号作品。
小明依据上述方法设计了VB程序,功能如下:在文本框Text1和Text2分别输入参赛人数和每人打分的作品数量,单击“分配”按钮Command1,在列表框List1中输出结果。程序运行效果如图b所示。
请回答下列问题:
(1)n=5,m=3,a(1)~a(10)中的数据如图a所示,a(11)~a(15)的数据可能是
(单选,填字母:A.5
4
3
1
2/B.5
4
1
3
2/C.3
4
5
1
2)
(2)请在划线处填入合适的代码。
Dim
n
As
Integer
'总人数/总作品数
Dim
m
As
Integer
'每人分配篇数
Dim
a(1
To
500)
As
Integer
'数组a大小满足处理要求
Dim
c(1
To
100)
As
Integer
'数组c大小满足处理要求
Private
Sub
Command1_Click()
Dim
i
As
Integer,
j
As
Integer,
k
As
Integer
n
=
Val(Text1.Text):
m
=
Val(Text2.Text)
Randomize
i
=
1
Do
While
i
<=
m
For
j
=
1
To
n
c(j)
=
0
'本轮分配方案中还没有数字j,
c(j)=0,否则c(j)=1
Next
j
For
j
=
1
To
n
If
j
=
n
-
1
And
c(n)
=
0
Then

Else
k
=
r(n,
j)
End
If
a((i
-
1)
n
+
j)
=
k
'分配数字k到当前方案的第j个位置上
c(k)
=
1
Next
j
If

Then
i
=
i
+
1
21教育名师原创作品
Loop
s
=
""
For
i
=
1
To
n
s
=
"参赛者"
&
i
&
":"
For
j
=
1
To
m
s
=
s
+
Str(a((j
-
1)
n
+
i))+
","
Next
j
List1.AddItem
s
s
=
""
Next
i
End
Sub
Function
r(x
As
Integer,
y
As
Integer)
As
Integer
www-2-1-cnjy-com
'生成一个取值在[1,x]之间,可以放在y位置上的随机数,满足条件r<>y
andc(r)=0
End
Function
Function
check(c
As
Integer)
As
Boolean
'本轮方案和前面几次的分配方案比较,如果有人分到了重复作品,返回FALSE
Dim
p
As
Integer,f
As
Boolean
f
=
True
p
=
1
For
i
=
1
To
c
n
If

Then
f
=
False:
Exit
For
End
If
p
=
p
mod
n
+1
Next
i
check
=
f
End
Function
四、填空题
20.某学校要对班主任进行满意度调查,有20个评分项(为方便程序处理,评分项具体的名称本题中不显示,仅以序号代替),每个评分项学生可以打A、B、C
三个等级中的一个,现在已经收集所有学生对班主任的评价,为了保证隐私,不显示学生姓名,只显示班级,并存储在数据库的表中,点击command2(读取数据),读取原始数据显示在左侧list1中,左侧列表显示的原始评价数据第一条表示高二(01)班有1位同学在第9项给班主任打A,依次类推,点击command1(统计),统计出各项目的评价统计(A+B所占的百分比)。
(1)根据以下代码可知,本程序访问的数据库名称是___________
(2)完成划线处的代码填空:
Dim
classname(1
To
8000)
As
String'存储原始数据中的班级名称
Dim
selectabc(1
To
8000)
As
String'存储原始数据选项的值
Dim
xiangmu(1
To
8000)
As
String'存储原始数据选项的序号
Dim
n
As
Integer
Private
Sub
Command2_Click()'
从数据库读取数据,并且按班级名称排序
Dim
conn
As
New
ADODB.Connection
conn.ConnectionString
=
"provider=microsoft.ace.oledb.12.0;data
source="&App.Path&"\pingjia.accdb"21·世纪
教育网
conn.Open
Dim
rs
As
New
ADODB.Recordset
Set
rs.ActiveConnection
=
conn
rs.Open
"select
from
data"
n
=
0'
记录评价的总条数
'读取数据,并按班级排序,代码略
End
Sub
Private
Sub
Command1_Click()
Dim
cstart(1
To
50)
As
Integer
'存储每个班级在数组classname中的起始位置
Dim
cend(1
To
50)
As
Integer
'存储每个班级在数组classname中的末尾位置
Dim
k
As
Integer
'存储班级数量
Dim
testall(1
To
20)
As
Integer
'存储每一项总选择人数,例如testall(1)里存储这评价项目1里的总人数,testc(1)里存储评价项目1里选C的人数
Dim
testc(1
To
20)
As
Integer
'存储每一题(项)选c的人数
'
确定每个班级的起止位置,存储到cstart数组和cend数组
cstart(1)
=
1
temp
=
classname(1)
k
=
1
For
i
=
1
To
n
If
classname(i)
<>
temp
Then
________________
k
=
k
+
1
cstart(k)
=
i
temp
=
classname(i)
End
If
Next
i
cend(k)
=
n
For
i
=
1
To
k
'每个班级分别统计评价项目
_________________
For
q
=
1
To
20
'对testall和testc数组初始化,
testall(q)
=
0
testc(q)
=
0
Next
q
For
j
=
cstart(i)
To
cend(i)
'对第i个班级进行统计
testall(xiangmu(j))
=
testall(xiangmu(j))
+
121世纪教育网版权所有
If
selectabc(j)
=
"C"
Then
_________________21
cnjy
com
Next
j
For
p
=
1
To
20
'统计完成后输出这个班级的20个项目的
A+B所占百分比
s
=
s
&""&Str(Round((testall(p)
-
testc(p))
/
testall(p)
100,
1))
Next
p
List2.AddItem
s
Next
i
End
Sub
21世纪教育网
www.21cnjy.com
精品试卷·第
2

(共
2
页)
21世纪教育网(www.21cnjy.com)中小学教育资源及组卷应用平台
4.4.4循环控制的应用-粤教版(2019)高中信息技术必修一练习
学校:___________姓名:___________班级:___________考号:___________
一、选择题
1.有如下
VB
程序段:
For
i
=
1
To
Len(Text1.Text)
c
=
Mid(Text1.Text,
i,
1)
If
c
>=
"0"
And
c
<=
"9"
Then
x
=
Val(c)
a((x
+
1)
Mod
10)
=
a((x
+
1)
Mod
10)
+
1
End
If
Next
i
s
=
""
For
i
=
0
To
9
s
=
s
&
a(i)
Next
i
Text2.Text
=
s
数组元素
a(0)

a(9)
的值均为0,执行该程序段后,文本框Text2
显示的内容为“1302000100”。则文本框
Text1
中输入的内容可能是(

A.2020-6-09
B.2020-02-28
C.2020-6-01
D.2019-01-07
【答案】A
【解析】
【分析】
【详解】
本题考查VB程序段。该VB程序段对Text1中的数字字符进行桶排序,对数字x的排序规则为a((x+1)Mod10)=a((x+1)Mod10)+1。最后在文本框Text2依次输出a(0)~a(9)的值,从输出结果1302000100知,文本框Text1中含有1个9,3个0,2个2,1个6,不包含其余数字,四个选项中,只有A符合要求。
21教育网
2.有如下
VB
程序段:
a(1)
=
1:
a(2)
=
1:b(1)
=
1:
b(2)
=
2
For
i
=
3
To
5
a(i)
=
a(i
-
1)
+
a(i
-
2)
b(i)
=
b(i
-
1)
+
a(i)
Next
i
执行该程序段后,数组元素
b(5)的值为


A.5
B.8
C.12
D.15
【答案】C
【解析】
【分析】
【详解】
本题考查VB程序段。i=3时,a(3)=2,b(3)=4。i=4时,a(4)=3,b(4)=7。i=5时,a(5)=5,b(5)=12。故本题选C。
3.有如下
VB
程序段:
Dim
n
As
Integer
Dim
sum
As
Integer
Dim
i
As
Integer
Function
fx(i
As
Integer)
as
Integer
If
i
=
1
Then
fx
=
5
Else
fx
=
5
2
^
(i
-
1)
+
fx(i
-
1)
End
if
End
Function
Private
Sub
Command1_Click()
n
=
Val(Text1.Text):
sum
=
0
For
i
=
1
To
n
sum
=
sum
+
fx(i)
Next
i
Label1.Caption
=
Str(sum)
End
Sub
若在
Text1
中输入4,单击
Command1,则
Label1
中显示的内容为(

A.55
B.75
C.80
D.130
【答案】D
【解析】
【分析】
【详解】
本题考查对递归算法的掌握。递归即调用自身函数在函数中,每次循环调用5
2^(i-1)+f(i-1),当i为1时,直接返回5,作为递归边界。i等于4,则第一次计算f函数得到f(4)=40+f(3),得到f(3)=20+f(2),再次计算f(2)得到
f(2)=15,因此f(1)=5,f(2)=15,f(3)=35,f(4)=75,四个数累加为130。故选D。
4.有如下VB程序段:
Dim
d(1
to
5)as
integer,i
as
integer
Dim
flag
as
Boolean,j
as
integer
‘给数组元素d(1)至d(5)赋初值为1,代码略
Randomize
For
i=1
to
5
J
=
l:flag
=
True
d(i)
=
int(Rnd
9)
Do
while
j<
=i-1
and
flag
=
True
d(i)
=
int(Rnd
5+1)
If
d(i)
=
d(j)
then
i=i-l:flag
=
False
j
=
j+1
Loop
Next
i
运行程序后,数组中的数据值可能是(

A.1
3
4
5
6
B.3
5
4
1
1
C.8
3
1
2
5
D.1
2
6
2
1
【答案】C
【解析】
【详解】
本题考查的是VB综合应用。For循环的作用控制产生d(i)的次数,由d(i)
=
int(Rnd
9)及while
j<
=i-1,可知第一个元素的取值范围是[0,8],每次Do循环j的值从1到i-1,每次随机产生一个整数d(i),一方面d(i)的范围是[1,5],另一方面,每次产生的随机数与前面一个不重复,否则重新产生。故可以排除选项ABD,选项C正确。
5.有如下VB程序段:
a="10001":b=0:t=0
For
i=1
To
Len(a)
c=
Mid(a,
i,
1)
If
c="0"
Then
t
=
t
-1
Else
t
=
t
+1
If
t
<
0
Then
b
=
b
2
Else
b
=
b
2+1
Next
i
执行该程序段后,变量b的值为(

A.15
B.17
C.20
D.24
【答案】D
【解析】
【分析】
【详解】
本题考查VB程序段。
i
1
2
3
4
5
c
1
0
0
0
1
t
1
0
-1
-2
-1
b
1
3
6
12
24
故最终b=24,本题选D。
6.有如下VB程序段:
b=0
For
a=1
To
10
b=a+b
a=a+3
Next
a
c=a+b
执行该程序段后,变量c的值为(

A.15
B.22
C.28
D.32
【答案】C
【解析】
【详解】
本题考查VB循环语句。第一次循环,a=1,b=1,a=4,执行next
a后,a=5。第二次循环,a=5,b=6,a=8,执行next
a后,a=9。第三次循环,a=9,b=15,a=12,执行next
a后,a=13。c=a+b=15+13=28,故本题选C。
7.有如下VB程序段:
n
=
Val(Text1.Text)
i
=
1
Do
While
n
>
0
num
=
n
Mod
16
If
num
>=
0
And
num
<=
9
Then
Text2.Text
=
Chr(Asc("0")
+
num)
+
Text2.Text
Else
Text2.Text
=
Chr(Asc("A")
+
num
-
10)
+
Text2.Textwww.21-cn-jy.com
End
If
n
=
n
\
16
i
=
i
+
1
Loop
执行该程序段,在文本框Text1中输入420,则文本框Text2中显示的内容的是(

A.4A
B.A4
C.1A4
D.4A1
【答案】C
【解析】
【分析】
【详解】
本题考查循环语句,选择语句。
num
4
10
1
n
420
26
1
Text2.Text
4
A4
1A4
最后可知,选项C为正确选项。
8.有如下VB程序段:
For
i=2
to
5
For
j=i
to
5
If
j
mod
i=0
then
a(j)=a(j)+1
Next
j
Next
i
For
i=1
to
5
If
a
(i)<>1
then
s=str(i)+s
Next
i
若数组a
的初始值都为0,则运行该程序段后,s的值为(

A.2
3
5
B.1
4
C.5
3
2
D.4
1
【答案】D
【解析】
【详解】
本题考查循环语句。i=2,j=2
to
5。a(2)=1,a(4)=1。i=3,j=3
to
5,a(3)=1。i=4,j=4
to
5,a(4)=2。i=5,a(5)=1。综上,a(1)=0,a(2)=1,a(3)=1,a(4)=2,a(5)=1。故s的值为41,本题选D。【来源:21·世纪·教育·网】
9.有如下VB程序段:
For
i
=
1
To
6
a(i)
=
Int(Rnd()
10)
+
1
If
a(i)
Mod
2
=
i
Mod
2
Then
a(i)
=
a(i)
+
1
Else
a(i)
=
a(i)
Mod
2
End
If
Next
i
执行该程序段后,在下列选项中,a(1)~a(6)各元素可能的值是(

A.0,1,1,0,0,1
B.0,5,6,6,10,9
C.2,3,6,7,8,11
D.2,1,8,3,12,5
【答案】C
【解析】
【详解】
本题考查VB程序综合能力,循环语句,选择语句。外循环For
i
=
1
To
6,循环总共执行六次。
根据a(i)
=
Int(Rnd()
10)
+
1,a(i)数组的初值范围应该是[1,10],而在后面的语句中有
a(i)
=
a(i)
+
1,故a(i)的最大值应该不会超过11,故先将选项D排除。再根据判断If
a(i)
Mod
2
=
i
Mod
2
Then,若a(i)的奇偶性和i相同,则
a(i)
=
a(i)
+
1,否则a(i)
=
a(i)
Mod
2。不妨分类讨论,当i=1,3,5的时候,若a(i)是奇数,则a(i)
=
a(i)
+
1变为偶数,否则执行a(i)
=
a(i)
Mod
2,则a(i)=0。所以第1,3,5项是偶数或者0,根据这个可将A排除。再根据i=2,4,6时,a(i)是奇数或者a(i)=1,结合判断可将B排除。故本题最终C是正确选项。
21·世纪
教育网
10.有如下
VB
程序段:
Private
Sub
Command1_Click()
Dim
a(1
To
6)
As
Integer,
i
As
Integer
For
i
=
1
To
6
a(i)
=
Int(Rnd
5)
2
+
1
Next
i
For
i
=
2
To
6
Step
2
a(i)
=
cha(a(i
-1),
a(i))
Next
i
End
Sub
Function
cha(x
As
Integer,
y
As
Integer)
As
Integer
Dim
t
As
Integer
If
x
<
y
Then
t=x:
x
=
y:
y
=
t
cha
=
y
Else
cha
=
x
-1
End
If
End
Function
执行该程序段后,在下列选项中,a(1)~a(6)各元素值可能的是(

A.8,9,3,2,5,1
B.7,6,5,5,3,1
C.9,3,5,4,4,3
D.7,3,1,0,5,4
【答案】D
【解析】
【详解】
本题考查VB程序段。根据第一个循环内a(i)=Int(Rnd
5)
2+1,可知,a数组是[1,9]中的奇数。又根据第二个循环可知i=2,4,6,又a(i)=cha(a(i-1),a(i)),两种情况,若a(i-1)=a(i),则a(i)=a(i-1)-1,会出现a(i-1)>a(i),综合两种情况,必定有a(i-1)>a(i)。A中8,9不会出现,B中5,5不会出现,C中4,3不会出现,只能选D。
11.字符串旋转。若整型变量
s、t、c
的值分别为
3、9、4,则下列程序执行后
str1
的值为(

str1
=
"go
it
for!"
str2
=
Mid(str1,
s,
t
-
s
+
1)
len1
=
Len(str1)
:
len2
=
Len(str2)
c
=
c
Mod
len2
For
i
=
1
To
c
str2
=
Mid(str2,
len2,
1)
+
Mid(str2,
1,
len2
-
1)
2·1·c·n·j·y
Next
i
str1
=
Mid(str1,
1,
s
-
1)
+
str2
+
Mid(str1,
t
+
1,
len1
-
t)
A.go
for
it!
B.for!
go
it
C.for
it
go!
D.it
for
go!
【答案】A
【解析】
【分析】
【详解】
本题考查VB程序段。
i
0
1
2
3
4
Str2
it
fo
r
it
fo
or
it
f
for
it
for
it(第一个字符为空格)
Str1
go
for
it!
故本题选A。
12.有如下VB程序段:
For
i=1
to
3
For
j=1
to
5-i
If
a(j)>a(j+1)
Then
t=a(j)
:
a(j)=a(j+1)
:
a(j+1)=t
End
If
Next
j
Text1.Text
=
Str(a(i))+Text1.Text
Next
i
数组元素a(1)到a(5)的值依次为“2,9,7,8,5”。若该程序段执行后,文本框Text1显示的内容是(
)21·cn·jy·com
A.2
5
7
B.9
8
7
C.2
7
7
D.7
7
2
【答案】D
【解析】
【详解】
本题考查冒泡排序。根据外循环可知,循环执行3趟,根据内循环可知,排序方向为从上往下,结合If
a(j)>a(j+1)
Then可知,将数值更大的往下换,形成升序排序。i=1时,a(1)=2,i=2时,a(2)=7,i=3时,a(3)=7。故最终text1中为772。本题选D。www-2-1-cnjy-com
13.字符串s1中保存了一个单词,字符串s2中保存了一句以空格结尾的句子,字符串s1和s2均由小写字母组成且s2中各个单词之间仅用空格隔开,下列程序能够统计单词s1在句子s2中出现的次数:【出处:21教育名师】
i=1:j=1:cnt=0
Do
While
j<=
Len(s2)
If
Mid(s1,i,1)<>
Mid(s2,j,1)Then
Else
Do
While
i<=lens
and
j<=lens2
If
Mid(s1,
i,
1)
=Mid(s2,
j,
1)Then
Else
End
If
Loop
lf
i=len(s1)+1
And
Mid(s2,j,1)=""then
cnt=
cnt+1
End
If
i=1
End
If
Loop
方框中的代码分别是:①i=1:j=j+1
②i=i+1:j=j+1
③j=j+1
代码从上到下正确的顺序是()
A.①②③
B.③②①
C.③①②
D.②①③
【答案】B
【解析】
【详解】
本题考查VB程序段。第一空,当If
Mid(s1,i,1)<>
Mid(s2,j,1)Then成立时,那么j变量向后移动一个位置,重新开始判断,故填入j=j+1。第二空,当
If
Mid(s1,
i,
1)
=Mid(s2,
j,
1)Then成立时,i和j都往后移动,故填入i=i+1:j=j+1。第三空,表示i回到s1的起始位置,重新检测,故填入i=1:j=j+1。结合上述分析,本题选B。
二、操作题
14.小王设计了一个利用矩阵“翻转法”实现矩阵逆序输出的程序,其功能为:运行程序时,在文本框
Text1
中输入矩阵大小n,点击“产生矩阵”按钮
Command1,在列表框
List1
中显示一个
n×n
的矩阵,该矩阵数据为随机两位正奇数。点击“翻转矩阵”按钮
Command2,该矩阵翻转(水平翻转和垂直翻转均要实现)后显示在列表框
List2
中,再点一次“翻转矩阵”按钮
Command2,列表框
List2
中显示的矩阵被还原为初始状态。程序运行界面如图所示。
实现上述功能的
VB
程序如下,请回答下列问题:
(1)在上图的程序运行界面基础上,再连续两次单击
Command2
按钮,则列表框
List2
中第一行显示的内容是____________________。
(2)实现此程序的代码如下,请完成程序填空。
Dim
n
As
Integer
Dim
L
As
String
Dim
i
as
Integer
Dim
j
as
Integer
Dim
a(1
To
100)
As
Integer
Dim
b(1
To
100)
As
Integer
Private
Sub
Command1_Click()
n
=
Val(Text1.Text)
Randomize
For
i
=
1
To
n
n
a(i)
=

+
1
Next
i
For
i
=
1
To
n
L
=
""
For
j
=
1
To
n
L
=
L
+
"
"
+
Str(a((i
-
1)
n
+
j))
Next
j
List1.AddItem
L
Next
i
End
Sub
Private
Sub
Command2_Click()
List2.Clear
For
i
=
1
To
n
L
=
""
For
j
=
1
To
n
b((i
-
1)
n
+
j)
=

L
=
L
+
"
"
+
Str(b((i
-
1)
n
+
j))
Next
j
List2.AddItem
L
Next
i
For
i
=
1
To
n
n
a(i)
=

Next
i
End
Sub
【答案】(1)99
43
33
49
75
(2)
①int(rnd
45+5)
2
②a((n-i+1)
n-j+1)
③b(i)
【解析】
【分析】
【详解】
本题考查VB综合能力。(1)在图示的程序运行界面基础上,单击command2按钮一次,回到初始状态,再单击一次,实现翻转,结果为图示list2的第一行。(2)①两位奇数范围是11到99,两位奇数是两位偶数加1,两位偶然范围是10到98,先求出5到49的整数,乘以2得到两位偶数,加1得到两位奇数。②水平翻转和垂直翻转均要实现,行与行上下换,列与列左右换,控制行号是i变量,n-i+1为翻转后的的行号,(n-i+1)
n算出翻转后每一行元素的首元素坐标,首元素坐标-j+1为每一行后面元素的坐标。③题目要求再点一次“翻转矩阵”按钮command2,列表框list2中显示的矩阵被还原为初始状态,所以要把存放翻转后矩阵的数据b(i)赋值给a(i)继续翻转。
15.小李编写
VB
程序,功能如下:单击“产生数组”按钮
Command1,则随机生成
10
个取值范围是
1~10
的正整数,分别存储到数组
a
中,对数组
a
的元素进行升序排列,并在标签
Label1
中显示;
再单击“重复数”按钮
Command2,则在排序后的数组
a
中查找连续个数最多的一组重复数值,
若有两组连续重复数个数一样多,则取数值小的一组,将重复数的数组元素下标显示在标签Label2
中。运行界面如图所示。
21世纪教育网版权所有
(1)已知窗体名称为
Form1,要使程序加载时,窗体标题自动显示为“统计重复数”,则可在___________(单选,填字母)事件过程中添加代码:Form1.Caption
=
“统计重复数”。
A.Form_Click()
B.Form_Load()
C.Form1_Click()
D.Form1_Load()
(2)实现上述功能的程序如下,请在划线处填写合适代码,使程序正常运行。
(3)程序加框处代码有错,请改正。
Dim
a(1
To
10)
As
Integer
Dim
n
As
Integer
Private
Sub
Command1_Click()
Dim
i
As
Integer
xkw,
j
As
Integer,
k
As
Integer,
temp
As
Integer
Dim
s
As
String
Randomize
n
=
10
For
i
=
1
To
n
a(i)
=
Int(Rnd
10)
+
1
Next
i
For
i
=
1
To
n
-
1
k
=
i
For
j
=
i
+
1
To
n
If
a(j)
<
a(k)
Then

Next
j
If
k
<>
i
Then
temp
=
a(i):
a(i)
=
a(k):
a(k)
=
temp
End
If
Next
i
s
=
""
For
i
=
1
To
n
s
=
s
+
Str(a(i))
If
i
<
n
Then
s
=
s
+
","
Next
i
Label1.Caption
=
s
End
Sub
Private
Sub
Command2_Click()
Dim
i
As
Integer,
j
As
Integer,
k
As
Integer
Dim
length
As
Integer,
origin
As
Integer
Dim
s
As
String
k
=
1:origin=1:length
=
1
For
i
=
2
To
n
If
a(i)
=
a(i
-
1)
Then
k
=
k
+
1
If
k
>
length
Then
length
=
k
origin
=

End
If
Else
k
=
1
End
If
Next
i
s
=
""
For
j
=
origin
To
s
=
s
+
Str(j)
Next
j
Label2.Caption
=
s
End
Sub
【答案】(1)B
(2)①
k
=
j

i-length+1

i
-
k
+
1
(3)origin
+
length
-
1
【解析】
【分析】
【详解】
本题考查VB综合能力。(1)窗体载入事件的考查,窗体载入事件处理过程为form_load(),对象名不会随着窗体名的改变而改变。(2)①本题主要考查排序算法知识,根据代码分析,此处要实现的用k变量记录最小数的位置,实现a(k)和a(i)的数值交换功能,因此答案是k=j,这样,数组成员a(j)中的最小值下标记录在k变量中。②分析代码可知,此处实现重复数起始位置的计算,重复数起始位置为当前数组元素位置减去重复数长度加1。答案为i-length+1或i-k+1(3)此处判断重复数的终止位置,长度=终止位置-起始位置+1,因此终止位置=起始位置+长度-1,即为origin+length-1或length+origin-1。
16.小章想将a数组中n个元素排列成合唱队列形态,具体方法如下:
①如果n是奇数,选出所有数据中最大元素,将其放在a数组正中间位置。
②从剩下待处理数据中选出最大的两个元素,同时将较大元素放在已处理数据段的右侧,
较小元素放在已处理数据段的左侧。
③反复执行操作②,直到所有数据处理完毕。
按上述要求,小章编写一个
VB
程序,功能如下:
在文本框
Text1
中输入
n,单击“生成”按钮
Command1,并在文本框
List1
中显示排序前
数据;单击“排序”21世纪教育网按钮
Command2,在列表框
List2
中输出处理后的结果。程序运行界面如下图所示。
(1)下列哪个选项,可以将窗体Form1标题改为:“生成合唱队列”_____(单选,填字
母:A.Form.Caption="生成合唱队列"/
B.Label1.Caption
="生成合唱队列"/
C.Form1.Caption="生成合唱队列")
(2)实现上述功能的VB程序如下,请在划线处①②③填入合适代码。
①________________
②________________
③________________
(3)程序加框处代码有错,请改正。
改正:__________________
Dim
a(1
To
100)
As
Integer
Dim
n
As
Integer
Private
Sub
Command1_Click()
'在文本框
Text1
中输入
n(n<=100)
'排序前数据存储在数组
a
中,并在文本框
List1
中显示
'代码略
End
Sub
Private
Sub
Command2_Click()
Dim
i
As
Integer,
j
As
Integer,
t
As
Integer
Dim
pMax1
As
Integer,
pMax2
As
Integer
pMax1
=
n
\
2
+
1:
pMax2
=
n
\
2
If

Then
For
i
=
1
To
n
If
a(i)
>
a(pMax1)
Then
t
=
a(pMax1):
a(pMax1)
=
a(i):
a(i)
=
t
Next
i
pMax1
=
pMax1
+
1
End
If
For
i
=
1
To
n
\
2
If

Then
t
=
a(pMax1):
a(pMax1)
=
a(pMax2):
a(pMax2)
=
t
j
=
pMax1
Mod
n
+
1
Do
While
j
<>
pMax2
If
a(j)
>
a(pMax1)
Then
t
=
a(pMax1):
a(pMax1)
=
a(j):
a(j)
=
t
t
=
a(pMax2):
a(pMax2)
=
a(j):
a(j)
=
t
t
=
a(pMax2):
a(pMax2)
=
a(j):
a(j)
=
t
End
If

Loop
pMax1
=
pMax1
+
1
pMax2
=
pMax2
-
1
Next
i
For
i
=
1
To
n
List2.AddItem
Str(a(i))
Next
i
End
Sub
【答案】C

n
Mod
2
=
1

n
mod
2
<>
0

a(pMax1)
<
a(pMax2)

j
=
j
Mod
n
+
1
ElseIf
a(j)
>
a(pMax2)
Then
【解析】
【详解】
本题考查VB综合能力。(1)将窗体Form1标题改为“生成合唱队列”,语句为Form1.Caption="生成合唱队列"。(2)根据题干,如果n是奇数,选出所有数据中最大元素,将其放在a数组正中间位置。故填入n
Mod
2=1。(3)挑选出最大的数放入pmax1中,故需要先比较pmax1和pmax2的大小,填入a(pMax1)Mod
n+1。(5)改错语句判断是在pmax1和pmax2之间,故改为ElseIf
a(j)
>
a(pMax2)
Then。
17.随机产生n个三位数,并对这些数进行索引排序。从文本框Text1中输入n的值,在列表List1中输出原始数据,列表框List2中输出升序排序结果。例如,原始数据140,472,876,811,436,965,884,150数据关系如下表所示:
原始数组a(i)
140
472
876
811
436
965
884
150
初始化索引数组index(i)
1
2
3
4
5
6
7
8
排序后的索引数组index(i)
1
4
6
5
3
8
7
2
排序后结果
140
150
436
472
811
876
884
965
(1)实现上述功能的VB程序如下,运行结果如图所示,请在划线处填入合适的代码。
Private
Sub
Command1_Click()
Dim
i
As
Integer,
j
As
Integer,
n
As
Integer
Dim
a(1
To
100),
index(1
To
100)
As
Integer,
b(1
To
100)
As
Integer
n
=
Val(Text1.Text)
List1.Clear:
List2.Clear
For
i
=
1
To
n
__________
List1.AddItem
Str(a(i))
Next
i
'索引排序
For
i
=
1
To
n
index(i)
=
i
For
j
=
1
To
i
-
1
If
a(i)
<
a(j)
Then
index(i)
=
index(i)
-
1:_____21
cnjy
com
Next
j
Next
i
For
i
=
1
To
n
_____
Next
i
For
i
=
1
To
n
List2.AddItem
Str(b(i))
Next
i
End
Sub
(2)加框处代码改为
index(i)=1
For
j=1
to
n
If
a(i)>a(j)
then
index(i)=index(i)+1
Next
j
能否实现排序?_______(填:能/不能)
【答案】①a(i)=100+int(rnd
900)
②index(j)=index(j)+1
③b(index(i))=a(i)
不能
【解析】
【详解】
本题考查索引排序。(1)随机产生三位数,故填入a(i)=100+int(rnd
900)。(2)a(i)18.小董编写了一个有关“筛选操作”的VB程序,实现如下功能:在文本框Text1中显示一组随机生成个位数为“9”的两位数(原始数据),在文本框Text2中输入筛选个数,单击“操作”按钮Command1后,在文本框Text3中按降序显示所筛选个数的不重复最大数据(以逗号分隔
并以数据结尾),若在文本框Text2中输入的数大于原始数据中不相同数的个数,则在文本框Text3中显示“筛选的个数太大,请重新输入!”。程序运行界面如图所示。
(1)如图所示,该VB程序的窗体中共有
类对象(填数字)。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
(3)程序中加框处代码有错,请改正。
Const?n?=?10
Dim?d(n)?As?Integer,?c?As?Integer
Private?Sub?Form_Load()
???
Dim?i?As?Integer,?j?As?Integer,?f?As?Boolean,?s?As?String
????
Randomize
????
c?=?n
???
?
For?i?=?1?To?n
????????
f?=?False
?????????
d(i)?=?

??
?'
随机生成个位数为“9”的两位数21cnjy.com
?????????
For?j?=?1?To?i?-?1
????????????
If?

?Then?f?=?True
?????????
Next?j
?????????
If?f?Then?c?=?c?-?1
????
Next?i
'原始数据在文本框Text1中显示。代码略
End?Sub
Private?Sub?Command1_Click()
Dim?i?As?Integer,?j?As?Integer,?k?As?Integer,?m?As?Integer
Dim
cnt?As?Integer,t?As?String,?s?As?String
d(0)?=?100
cnt?=?Val(Text2.Text)
????
If?cnt?>?c?Then
Text3.Text?=?"输入筛选的个数太大,请重新输入!"
???
Exit?Sub??????'Exit?Sub表示退出过程
End?If
For?i?=?1?To?cnt
?
k?=?i
For?j?=?i?+?1?To?n
If?d(j)?Next?j
??????If?k?<>?i?Then
????????????t?=?d(i):?d(i)?=?d(k):?d(k)?=?t
??????End?If
Next?i
For?i?=?1?To?cnt
??????s?=?s?+?Str(d(i))?+?","
Next?i
Text3.Text?=?

End?Sub
【答案】(1)3
(2)①
Int(Rnd
9)
10
+
19或者Int(Rnd
9
+
1)
10
+
9

d(i)
=
d(j)

Mid(s,
1,
Len(s)
-
1)
或Mid(s,
1,
Len(s)
-
2)
(3)d(k)
<
d(j)
Or
d(k)
>=
d(i
-
1)
【解析】
【详解】
本题考查VB综合能力。(1)该VB程序的窗体中共有3类对象,标签,文本框和按钮。(2)代码第一空,随机生成个位数为9的两位数,故填入Int(Rnd
9)
10+19。(2)代码第二空,判断当前产生的数是否重复,故填入d(i)=d(j)。(3)代码第三空将最后的逗号去掉,填入Mid(s,1,Len(s)-1)。(4)改错语句要注意不能和之前有重复,或者大于之前的数,在剩余的数中寻找最大的即可。故填入d(k)Or
d(k)>=d(i-1)。【版权所有:21教育】
三、简答题
19.在“抗击疫情,‘宅’出精彩”征文活动中,每位选手可以提交一篇作品。活动以互评的形式展开:每位选手对m篇作品进行打分(本人作品回避),方法如下:

用1-n数字代表n个作品,打乱顺序后分配给n个选手。分配方案保存在数组a中,如图a存储了两组分配方案(n=5)。在第一个分配方案中把4号作品分配给1号参赛者,1号作品分配给2号参赛者(选手编号与序号错开)……。
4
1
5
2
3
a(1)~a(n)中存储第一个分配方案
2
3
4
5
1
a(n+1)~a(2
n)中存储第二个分配方案
↑第i列中的作品拿给i号参赛者打分
图a
②分配方案的形成方法:
将1~n之间的随机数字依次放到第1个位置、第2个位置……,随机数不能与位置号相同,并且要防止分配冲突,如前三个分配序号是“2
3
4”,那么在第4位上只能放“5”(如放“1”会导致第5个位置没有符合要求的数字,因此位置n-1需要判断数“n”是否已经分配,如果未分配,位置n-1放置数“n”),最终方案“2
3
4
5
1”。
③评m个作品需要m个分配方案。方案间要避免同一个人拿到重复的作品。如第16题图a第3行上的数据“5
1
2
3
4”不符合要求,因为会使第2号选手重复拿到1号作品。
小明依据上述方法设计了VB程序,功能如下:在文本框Text1和Text2分别输入参赛人数和每人打分的作品数量,单击“分配”按钮Command1,在列表框List1中输出结果。程序运行效果如图b所示。
请回答下列问题:
(1)n=5,m=3,a(1)~a(10)中的数据如图a所示,a(11)~a(15)的数据可能是
(单选,填字母:A.5
4
3
1
2/B.5
4
1
3
2/C.3
4
5
1
2)
(2)请在划线处填入合适的代码。
Dim
n
As
Integer
'总人数/总作品数
Dim
m
As
Integer
'每人分配篇数
Dim
a(1
To
500)
As
Integer
'数组a大小满足处理要求
Dim
c(1
To
100)
As
Integer
'数组c大小满足处理要求
Private
Sub
Command1_Click()
Dim
i
As
Integer,
j
As
Integer,
k
As
Integer
n
=
Val(Text1.Text):
m
=
Val(Text2.Text)
Randomize
i
=
1
Do
While
i
<=
m
For
j
=
1
To
n
c(j)
=
0
'本轮分配方案中还没有数字j,
c(j)=0,否则c(j)=1
Next
j
For
j
=
1
To
n
If
j
=
n
-
1
And
c(n)
=
0
Then

Else
k
=
r(n,
j)
End
If
a((i
-
1)
n
+
j)
=
k
'分配数字k到当前方案的第j个位置上
c(k)
=
1
Next
j
If

Then
i
=
i
+
1
【来源:21cnj
y.co
m】
Loop
s
=
""
For
i
=
1
To
n
s
=
"参赛者"
&
i
&
":"
For
j
=
1
To
m
s
=
s
+
Str(a((j
-
1)
n
+
i))+
","
Next
j
List1.AddItem
s
s
=
""
Next
i
End
Sub
Function
r(x
As
Integer,
y
As
Integer)
As
Integer
'生成一个取值在[1,x]之间,可以放在y位置上的随机数,满足条件r<>y
andc(r)=0
End
Function
Function
check(c
As
Integer)
As
Boolean
'本轮方案和前面几次的分配方案比较,如果有人分到了重复作品,返回FALSE
Dim
p
As
Integer,f
As
Boolean
f
=
True
p
=
1
For
i
=
1
To
c
n
If

Then
f
=
False:
Exit
For
End
If
p
=
p
mod
n
+1
Next
i
check
=
f
End
Function
【答案】(1)B
(2)①k=
n
②check(i
-
1)
③a(i)
=
a(c
n
+
p)
【解析】
【详解】
本题考查VB综合能力,循环语句,自定义函数。(1)根据题意,评m个作品需要m个分配方案。方案间要避免同一个人拿到重复的作品。A选项,3号选手会拿到自己的作品。B选项可以。C选项,3号选手会重复拿到5号作品。故此题选B。(2)根据条件If
j
=
n
-
1
And
c(n)
=
0
Then,在第i行,第j列时,若j=n-1,并且此时
c(n)
=
0,意味着第n号作品没有分配,而n号作品不能分给第n号选手,故n号作品只能分给n-1号选手,所以此空填入k=n。(3)
此处判断语句判断该方案时候符合条件,代入自定义函数中判断,填入check(i-1)。(4)自定义函数check的作用,根据注释语句得知,函数是让本轮方案和前面几次的分配方案比较,判断是否有重复,a(c
n+p)表示当前方案中的每一个编号,要和之前的所有数据逐一比较,故填入a(i)=a(c
n+p)。
四、填空题
20.某学校要对班主任进行满意度调查,有20个评分项(为方便程序处理,评分项具体的名称本题中不显示,仅以序号代替),每个评分项学生可以打A、B、C
三个等级中的一个,现在已经收集所有学生对班主任的评价,为了保证隐私,不显示学生姓名,只显示班级,并存储在数据库的表中,点击command2(读取数据),读取原始数据显示在左侧list1中,左侧列表显示的原始评价数据第一条表示高二(01)班有1位同学在第9项给班主任打A,依次类推,点击command1(统计),统计出各项目的评价统计(A+B所占的百分比)。
(1)根据以下代码可知,本程序访问的数据库名称是___________
(2)完成划线处的代码填空:
Dim
classname(1
To
8000)
As
String'存储原始数据中的班级名称
Dim
selectabc(1
To
8000)
As
String'存储原始数据选项的值
Dim
xiangmu(1
To
8000)
As
String'存储原始数据选项的序号
Dim
n
As
Integer
Private
Sub
Command2_Click()'
从数据库读取数据,并且按班级名称排序
Dim
conn
As
New
ADODB.Connection
conn.ConnectionString
=
"provider=microsoft.ace.oledb.12.0;data
source="&App.Path&"\pingjia.accdb"2-1-c-n-j-y
conn.Open
Dim
rs
As
New
ADODB.Recordset
Set
rs.ActiveConnection
=
conn
rs.Open
"select
from
data"
n
=
0'
记录评价的总条数
'读取数据,并按班级排序,代码略
End
Sub
Private
Sub
Command1_Click()
Dim
cstart(1
To
50)
As
Integer
'存储每个班级在数组classname中的起始位置
Dim
cend(1
To
50)
As
Integer
'存储每个班级在数组classname中的末尾位置
Dim
k
As
Integer
'存储班级数量
Dim
testall(1
To
20)
As
Integer
'存储每一项总选择人数,例如testall(1)里存储这评价项目1里的总人数,testc(1)里存储评价项目1里选C的人数
Dim
testc(1
To
20)
As
Integer
'存储每一题(项)选c的人数
'
确定每个班级的起止位置,存储到cstart数组和cend数组
cstart(1)
=
1
temp
=
classname(1)
k
=
1
For
i
=
1
To
n
If
classname(i)
<>
temp
Then
________________
k
=
k
+
1
cstart(k)
=
i
temp
=
classname(i)
End
If
Next
i
cend(k)
=
n
For
i
=
1
To
k
'每个班级分别统计评价项目
_________________
For
q
=
1
To
20
'对testall和testc数组初始化,
testall(q)
=
0
testc(q)
=
0
Next
q
For
j
=
cstart(i)
To
cend(i)
'对第i个班级进行统计
testall(xiangmu(j))
=
testall(xiangmu(j))
+
121
cnjy
com
If
selectabc(j)
=
"C"
Then
_________________
Next
j
For
p
=
1
To
20
'统计完成后输出这个班级的20个项目的
A+B所占百分比
s
=
s
&""&Str(Round((testall(p)
-
testc(p))
/
testall(p)
100,
1))
Next
p
List2.AddItem
s
Next
i
End
Sub
【答案】pingjia.accdb
cend(k)=i-1
s=classname(cstart(i))或s=classname(cend(i))
testc(xiangmu(j))=
testc(xiangmu(j))+1
【解析】
【分析】
【详解】
本题考查VB程序综合能力,包括题干阅读,VB链接数据库,循环嵌套,数组嵌套等。
第(1)题根据conn.ConnectionString
=
"provider=microsoft.ace.oledb.12.0;data
source="&App.Path&"\pingjia.accdb"得知,本程序访问的数据库名称是pingjia.accdb。21教育名师原创作品
第(2)题第一空,根据代码最上方注释语句,该处循环功能是确定每个班级的起止位置,存储到cstart数组和cend数组,当classname(i)
<>
temp成立时,表示当前的班级temp和此时第i项的班级classname(i)已经不同,换话句话说已经到下一个班级了。因而k
=
k
+
1,cstart(k)
=
i,下一个班级的起始位置存放于cstart(k)中。同样的当前班级的结束位置需要记录,所以在第一空记录第k个班级的结束位置,代码为cend(k)=i-1。第二空,在整个For
i
=
1
To
k……next
i的循环中,是对每个班级分别统计评价项目,仔细阅读整个结构不难发现在For
p
=
1
To
20……next
p循环中,变量s在进行一次输出后未能重置,如不重置将会一直叠加。需要将s重置,结合题干图中list2每一行内容,可知变量s在一开始需要放入班级名称,因而第二空代码为:s=classname(cstart(i))或s=classname(cend(i))。第三空,根据判断语句If
selectabc(j)
=
"C"
Then,后续填入的是该项目评价为C的人数数量+1,因而代码为testc(xiangmu(j))=
testc(xiangmu(j))+1
21世纪教育网
www.21cnjy.com
精品试卷·第
2

(共
2
页)
21世纪教育网(www.21cnjy.com)