2.3周而复始的循环 练习(原卷版+解析版)

文档属性

名称 2.3周而复始的循环 练习(原卷版+解析版)
格式 zip
文件大小 4.4MB
资源类型 试卷
版本资源 教科版(2019)
科目 信息技术(信息科技)
更新时间 2020-11-24 13:58:38

文档简介

中小学教育资源及组卷应用平台
2.3周而复始的循环-教科版(2019)高中信息技术必修一练习
学校:___________姓名:___________班级:___________考号:___________
一、选择题
1.下面的程序段运行后的结果为(

s=1
for
i
in
range(1,6,2):
s=s+i
print(s)
A.15
B.10
C.12
D.9
2.某算法的部分流程图如下图所示,输入s=11200,执行这部分流程后,输出m和n的值分别是(

A.14
4
B.21
4
C.22
5
D.42
5
3.有两个VB程序段,如下所示:
已知程序段中①②两处内容相同,数组元素a(1)到a(10)的值依次为:6,43,21,78,33,16,80,45,12,90,执行“程序段1”后,数组元素a(1)~a(10)的值依次为80,78,90,45
,43,33,21,16,12,6,则下列说法正确的是()
A.①和②处的填空为7
B.两程序段的比较次数不一样,交换次数一样
C.执行完程序段2后,数据6移动到了a(10)
D.两段程序的得到的运行结果相同
4.有如下
VB
程序段:
i
=
1
Do
While
i
<=
5
a(i)
=
(Int(Rnd
6)
+
5)
(i
Mod
2
+
1)
For
j
=
1
To
i
-
1
If
a(j)
=
a(i)
Then
i
=
i
-
1:
Exit
For
Next
j
i
=
i
+
1
Loop
执行该程序段后,a(1)到
a(5)各元素的值可能是(
)。
A.18,8,16,6,12
B.11,5,10,6,20
C.14,10,12,10,20
D.5,6,7,8,9
5.编写了一个统计数组元素a(1)到a(n)中的“升序段”个数s。例:如图所示的数据序列,其“升序段”的个数等于3的VB程序:
k=0
s=0
For
i=2
To
n
If
a(i)>a(i-1)
Then
End
If
If
k=1
Then
s=s+1
Nexti
Textl.Text=Str(s)
方框中的代码由以下三部分组成:
①k=0
②k=k+1
③Else
代码顺序正确的选项是(

A.①③②
B.②③①
C.③②①
D.②①③
6.有如下
VB
程序段:
Const
n=
10
Dim
a(1
To
n)
As
Integer
,
b(1
To
n)
As
Integer
For
i
=
1
To
n
b(i)
=
i
Next
i
For
i
=
2
To
n
j
=
i
-
1
t
=
b(i)
Do
While
a(b(j))
>
a(t)
b(j
+
1)
=
b(j)
j
=
j
-
1
If
j
=
0
Then
Exit
Do
Loop
b(j
+
1)
=
t
Next
i
若数组a中的数据依次为:69,16,44,17,34,46,10,29,37,51
,执行程序后,b(1)~b(10)的值为(

A.3
5
4
10
1
9
8
6
7
2
B.7
2
4
8
5
9
3
6
10
1
C.5
8
2
1
4
7
3
9
10
6
D.1
6
2
4
8
9
7
10
3
5
二、操作题
7.出列顺序有10个人,编号分别为1,2,3……10按顺时针方向围坐成一圈,每次随机产生一个数m,m的范围为[3,7]的随机奇数,从第10个人开始逆时针报数,当报到m的人出列,圈内剩下的人,重新产生随机数m,重新开始报数,如此下去,直到所有人出列为止。如:若每次参数的随机数m都为5,从第10个开始报数,依次出列的为6-1-5-9-2-3-10-7-4-8
小李编写了如下程序求解10个人的出列顺序。程序运行界面如图1所示,点击求解按钮后,在Textl中输出出列顺序,在Text2中显示随机数据的值。
(1)在划线出填写正确的代码
Private
Sub
Command1
_Click()
Dim
ld(1
To
10)
As
Boolean,
i
As
Integer,
j
As
Integer
Dim
rs
As
Integer,
C
As
Integer,
m
As
Integer
Randomize
For
i=1
To
10
ld(i)
=
True'数组元素为
True表示第i人当前在队列中
Next
i
c=0:rs=10
_______
m
=Int(Rnd
3)
2+3
Do
While
rs
<>
0
If
ld(i)
=
True
Then
_________
If
c=m
Then
ld(i)
=
False
Text1.Text
=
Text1.Text
+
Str(i)
___________
c=0
End
If
End
If
i
=i-1
If
____________Then
i=10
Loop
End
Sub
(2)加框处两语句互换下顺序,会不会对出列顺序产生影响______(选填:会/不会)。
8.求不大于n的五位正整数中,满足高两位与低两位相同,且能被3除余2的所有数之和。
(1)本题适用的算法是(
),此算法的基本实现方法是(
)。
A.枚举算法,循环中嵌套循环
B.查找算法,循环中嵌套分支
C.枚举算法,循环中嵌套分支
D.查找算法,循环中嵌套循环
(2)设x为五位正整数,以下检验条件的分析,正确的是(
)。
A.x
\
100
=
x
mod
100
and
x
mod
3=2
B.x
\
1000
=
x
mod
100
and
x
mod
3=2
C.x
\
100
=
x
mod
1000
and
x
mod
3=2
D.x
\
1000
=
x
mod
1000
and
x
mod
3=2
(3)请编写程序,完成题目要求的功能。
9.小奕同学基于排序算法设计了一个数字矩阵排序的程序。程序界面如下图所示,在文本框中输入矩阵大小,点击“生成”按钮Command1,在左侧列表框List1中输出一个长宽均为指定大小的随机整数矩阵,随机整数范围为[1,99]。点击“排序”按钮Command2,结果输出在右侧列表框List2中,奇数行从左到右依次递增,偶数行从右至左依次递增,且保持输出矩阵的长宽不变。
(1)实现上述功能的VB程序如下,显示数据用的additem是一种________(单选,填字母:A.属性名/B.事件名/C.方法名/D.过程名)。
(2)请在划线处填入合适的代码。
(3)程序中加框处代码有错,请改正。
Dim
a
(1
To
100)
As
Integer
Dim
n
As
Integer
Function
dq
(s
As
String,L
As
Integer)
As
String
'自定义对齐函数Rem在输入的字符串s前加若干空格,输出长度为L的字符串,代码略
End
Function
Private
Sub
Command1_Click()'生成数字矩阵
'随机生成n^2个数字,存储在数组a中,代码略
'以一行n个,共n行的格式显示在List1中,代码略
End
Sub
Private
Sub
Command2_Click'数字矩阵排序
Dim
i
As
Integer,k
As
Integer,j
As
Integer,s
As
String
Dim
f
As
Boolean
List2.Clear
f
=
True
For
i
=
1
To
n^2
Step
n
s=
"
"
For
j
=
i
To
k=n^2
Do
While

If
a(k)
<
a(k-1)
Then
t
=
a(k):a(k)
=
a(k-1):a(k-1)
=
t
End
If
k
=
k-1
Loop
If
f
=
True
Then
s=s+
"
"+dq(Str(a(j)),2)
Else
s=s+
"
"+dq(Str(a(j)),2)+s
End
If
Next
j
List2.AddItems

Next
i
End
Sub
10.求最大连续子矩阵和。给出一个矩阵,序列元素有正整数、0、负整数,在矩阵中限定一块区域,并要求找到该限定区域内的一个子矩阵,使得这个子矩阵与限定区域同宽但可能不同高,且包含的所有元素之和为限定区域矩阵中最大值,在和最大的前提下还要求该子矩阵包含的元素个数最多。
算法描述如下:
(1)从第一行开始向下进行累加,累加和若大于之前的最大和,则记录此时的最大和及结束位置;
(2)若累加和等于之前的最大和,但元素个数大于之前的最大和的元素个数,则记录此连续子矩阵的结束位置;
(3)若累加和小于
0,则重新开始记录;
(4)若有符合条件的多个连续子矩阵,则输出最先找到的子矩阵。
小俞编写了一个实现该功能的
VB
程序,窗体加载时生成
m
n个序列数据,依次存放在数组
a,并显示在列表框
List1
中,在文本框
Text1
中输入该矩阵限定区域的左上角位置,在文本框
Text2
中输入右下角位置,单击“计算”按钮
Command1
后,找出连续和最大的子矩阵,在标签
Label3
上显示最大连续子矩阵和,在Label4
上显示该连续子矩阵的元素个数,在
Label5
上显示该连续子矩阵开始与结束位置。程序运行界面如图所示。
(1)在设计程序界面时,要清空文本框中的显示内容,应修改文本框的___________
属性
(2)VB
程序代码如下,请在划线处填入合适的代码。
Const
m
=
12:
Const
n
=
6
Dim
a(1
To
m
n)
As
Integer
Private
Sub
Form_Load()
'生成
m
n
个数据,并显示在列表框
List1
,代码略
End
Sub
Private
Sub
Command1_Click()
Dim
i
As
Integer,j
As
Integer,k
As
Integer,temp
As
Integer
Dim
length
As
integer,begin
As
Integer
,sum
As
Integer
Dim
ks
As
String,js
As
String
Dim
xy(1
to
4)
As
Integer
,
hsum(1
to
m
n)
As
Integer
'读取文本框
Text1
的数值分别存储到数组
xy(1)、xy(2),
读取文本框
Text2
的数值分别存储到数组
xy(3)、xy(4),xy(1)、xy(3)表示所在行,xy(2)、xy(4)表示所在列,代码略
For
i
=
1
To
xy(3)
-
xy(1)
+
1
hsum(i)
=
0
Next
i
'求限定区域内每行数据之和
For
i
=
1
To
xy(3)
-
xy(1)
+
1
For
j
=
1
To________
hsum(i)
=
hsum(i)
+
a((xy(1)
+
i
-
2)
n
+
xy(2)
+
j
-
1)
Next
j
Next
i
'找出最大连续之矩阵和
temp
=
0:
sum
=
0:
length
=
0:
begin
=
0
For
i
=
1
To
xy(3)
-
xy(1)
+
1
If
temp
+
hsum(i)
>
sum
Then
sum
=
temp
+
hsum(i)
length
=
i
-
begin
k
=
i
ElseIf
temp
+
hsum(i)
=
sum
And________
Then
length
=
i
-
begin
k
=
i
End
If
If
temp
+
hsum(i)
<
0
Then
begin
=
i
temp
=
0
Else
temp
=
temp
+
hsum(i)
End
If
Next
i
ks
="("
+_________+
","
+
Str(xy(2))
+
")"
'




js
="("
+
Str(k
+
xy(1)
-
1)
+
","
+
Str(xy(4))
+
")"
'结束位置
Label3.Caption
=
"最大子矩阵和为
:"
+
Str(Sum)
Label4.Caption
=
"子矩阵中的元素个数为:"
+
Str(length
(xy(4)
-
xy(2)
+
1))
Label5.Caption
=
"子矩阵位置为:"
+
ks
+
","
+
js
End
Sub
11.使用Python自身提供的IDLE集成开发环境录入以下代码及调试
运行,检测结果。
#
鸡兔同笼
for
x
in
range(1,23):
y=35-x
if
4
x+2
y==94:
print("兔子有%s只,鸡有%s只"%(x,y))
特别提示:代码录入完毕,调试运行,检测错误,讨论错误原因,上网查找错误格式的处置办法,直至能正确输出结果。
12.请编写Python程序,实现如下功能需求:
1)程序运行后,给出文字提示:“请输入一个正整数:”
2)输入一个整数n按回车后,程序输出从1-n所有整数中既是3的倍数又是5的倍数的数。
3)不要超过5行代码。
程序运行举例:
13.某考试的多选题有“A、B、C、D、E”5个答案选项。阅卷的评分标准为:“全部选对的得2分,选对但不全的得1分,不选或有选错的得0分”。阅卷算法描述如下:
例如,标准答案为“ABE”,则对应得分表如下所示。
学生答案
ABE
AB
AE
BE
A
B
E
AC
......
字符串
11001
11000
10001
01001
10000
01000
00001
10100
......
十进制数(x)
25
24
17
9
16
8
1
20
......
ans(x)
2
1
1
1
1
1
1
0
0
小温依据上述描述设计了“多选题阅卷”的VB程序,实现如下功能:在文本框Text1中输入标准答案(大写字母),先单击“初始化”按钮
Command1,在数组ans中生成所有答案组合对应
的分值,然后单击“阅卷”按钮Command2,从数
据库中读取学生的答案并进行阅卷,在列表框List1中显示得分结果。程序运行界面如图所示。
(1)若标准答案为“ACD”,则数组元素ans?(18)的值为
(2)请在划线处填入合适的代码。
Dim?ans(0?To?31)?As?Integer
Private?Sub?Command1_Click()
Dim?b(0?To?4)?As?Integer
Dim?s?As?String,?c?As?String,?sum?As?Integer,?k?As?Integer
'初始化数组ans和数组b,各元素的初始值均为0。代码略
s?=?Text1.Text:k?=?Len(s)
???
For?i?=?1?To?k
????????
c?=?Mid(s,?i,?1)
????????
b(Asc(c)?-?65)?=?2?^?(69?-?Asc(c))
????
Next?i
????
For?i?=?0?To?4
????????
If?b(i)?<>?0?Then
????????????
ans(b(i))?=?1
????????????
sum?=

????????
End?If
????
Next?i
???
ans(sum)?=?2
???
'当标准答案含3个及以上选项时,学生答案选其中2个选项可得1分
????
i?=?0
????
Do?While?k?>=?3?And?i?<=?4
????????
For?j?=?i?+?1?To?4
???????????
If?b(i)?
?b(j)?<>?0?Then?ans(b(i)?+?b(j))?=?1
????????
Next?j
????????
i?=?i?+?1
????
Loop
???
'当标准答案含4个及以上选项时,学生答案选其中3个选项可得1分
????
i?=?0
????
Do?While?k?>=?4?And?i?<=?4
????????
For?j?=?i?+?1?To?4
????????????
If?b(i)?
?b(j)
=?0?Or?k?=?5?Then?

????????
Next?j
????????
i?=?i?+?1
???
Loop
???
'当标准答案含5个选项时,学生答案选其中4个选项可得1分。代码略
?
End?Sub
Private?Sub?Command2_Click()
????
Dim?xh(1?To?1000)?As?String,?answer(1?To?1000)?As?String
??
'从数据库中读取学生学号和答案的数据分别存储在数组xh和answer中
'记录总数存储在变量n中,代码略
??
List1.Clear
????
For?i?=?1?To?n
????????
List1.AddItem?xh(i)?+?"???????"?+?answer(i)?+?"???????"?+?Str(ans(f(answer(i))))
????
Next?i
End?Sub
Function?f(s?As?String)?As?Integer
????
Dim?i?As?Integer,?x?As?Integer
???
x?=?0
????
For?i?=?1?To?Len(s)
??????
x?=

????
Next?i
????
f?=?x
End?Function
14.某校老师编写一个VB程序分析学生技术成绩,功能如下:在列表框List1中显示原始学生信息,单击“分析”按钮Command1,统计各班参加考试人数、高分(97及以上)人数和均分,并按班级均分从大到小显示在列表框List2中,程序运行界面如图所示。
实现上述功能的VB程序段如下,请回答下列问题:
(1)学生成绩存储在数据表中,其字段名是
(2)请在划线处填入合适的代码。
Dim
recCount
As
Integer
'存放学生人数
Dim
sClass(1
To
1000)
As
Integer
'存放学生班级
Dim
sName(1
To
1000)
As
String
'存放学生姓名
Dim
sScore(1
To
1000)
As
Integer
'存放学生成绩
Private
Sub
Command1_Click()
Dim
i
As
Integer,
t
As
Integer,
nc
As
Integer
Dim
a(1
To
20)
As
Integer,
b(1
To
20)
As
Integer
'分别存放班级高分人数和班级参加考试人数
Dim
sum(1
To
20)
As
Integer,
ave(1
To
20)
As
Single
'分别存放班级总分和班级均分
Dim
c(1
To
20)
As
Integer
For
i
=
1
To
recCount

b(t)
=
b(t)
+
1
If
b(t)
=
1
Then
nc
=
nc
+
1

End
If
If
sScore(i)
>=
97
Then
a(t)
=
a(t)
+
1
sum(t)
=
sum(t)
+
sScore(i)
Next
i
For
i
=
1
To
nc
ave(c(i))
=
Int(sum(c(i))
/
b(c(i))
100
+
0.5)
/
100
Next
i
For
i
=
1
To
nc
-
1
For
j
=
nc
To
i
+
1
Step
-1
If

Then
t
=
c(j):
c(j)
=
c(j
-
1):
c(j
-
1)
=
t
End
If
Next
j
Next
i
For
i
=
1
To
nc
List2.AddItem
Str(c(i))
+
"
"
+
Str(b(c(i)))
+
"
"
+
Str(a(c(i)))
+
"
"
+
Str(ave(c(i)))
Next
i
End
Sub
Private
Sub
Form_Load()
'链接数据库,代码略
recCount
=
0
Do
While
Not
rs.EOF
recCount
=
recCount
+
1
sClass(recCount)
=
rs.Fields("class")
sName(recCount)
=
rs.Fields("name")
sScore(recCount)
=
rs.Fields("score")
rs.MoveNext
Loop
'将数据显示在列表框List1中,代码略
End
Sub
三、填空题
15.以下流程图描述的算法,执行结果是_______。
16.如图所示,这是打印九九乘法表的程序,请你完善程序。
Private
Sub
Form_click()
Dim
i
As
Integer,
j
As
Integer
For
i
=
1
To
①________
For
j
=
1
To
②_________
Print
j;
"
";
i;
"=";
i
j;
Next
j
Print
‘换行
Next
i
End
Sub
21世纪教育网
www.21cnjy.com
精品试卷·第
2

(共
2
页)
21世纪教育网(www.21cnjy.com)中小学教育资源及组卷应用平台
2.3周而复始的循环-教科版(2019)高中信息技术必修一练习
学校:___________姓名:___________班级:___________考号:___________
一、选择题
1.下面的程序段运行后的结果为(

s=1
for
i
in
range(1,6,2):
s=s+i
print(s)
A.15
B.10
C.12
D.9
答案:B
详解本题主要考查程序的运行。for循环中,变量i的变化是1,3,5,7,当i=7时退出循环,此时s的值为,s=1+1+3+5=10,故本题选B选项。
2.某算法的部分流程图如下图所示,输入s=11200,执行这部分流程后,输出m和n的值分别是(

A.14
4
B.21
4
C.22
5
D.42
5
答案:C
【解析】
【分析】
【详解】
本题主要考查循环结构流程图的读取。
第一次循环:m=0
3+11200
mod
10=0+0=0
n=1
s=11200\10=1120
第二次循环:m=0
3+1120
mod
10=0+0=0
n=2
s=1120\10=112
第三次循环:m=0
3+112
mod
10=0+2=2
n=3
s=112\10=11
第四次循环:m=2
3+11
mod
10=6+1=7
n=4
s=11\10=1
第五次循环:m=7
3+1
mod
10=21+1=22
n=5
s=1\10=0
当s<>0不成立时,跳出循环,输出m=22
n=5,因此C选项正确。A、B、D选项均不正确。
3.有两个VB程序段,如下所示:
已知程序段中①②两处内容相同,数组元素a(1)到a(10)的值依次为:6,43,21,78,33,16,80,45,12,90,执行“程序段1”后,数组元素a(1)~a(10)的值依次为80,78,90,45
,43,33,21,16,12,6,则下列说法正确的是()
A.①和②处的填空为7
B.两程序段的比较次数不一样,交换次数一样
C.执行完程序段2后,数据6移动到了a(10)
D.两段程序的得到的运行结果相同
答案:A
详解本题考查冒泡排序。根据题干,执行“程序段1”后,数组元素a(1)~a(10)的值依次为80,78,90,45
,43,33,21,16,12,6,可知a(10)-a(4)实现排序,故整个排序执行了七趟。根据程序段1,双重for循环的内循环for
j=1
to
10-i,这是一个下沉的排序,对整个程序段总共要执行七趟,那么i的变化是1-7,故外循环填入7。选项A正确。两个程序段都执行七趟,比较次数一样。执行完程序段2后,数据6移动到了a(8)。故本题选A。
4.有如下
VB
程序段:
i
=
1
Do
While
i
<=
5
a(i)
=
(Int(Rnd
6)
+
5)
(i
Mod
2
+
1)
For
j
=
1
To
i
-
1
If
a(j)
=
a(i)
Then
i
=
i
-
1:
Exit
For
Next
j
i
=
i
+
1
Loop
执行该程序段后,a(1)到
a(5)各元素的值可能是(
)。
A.18,8,16,6,12
B.11,5,10,6,20
C.14,10,12,10,20
D.5,6,7,8,9
答案:A
【解析】
【分析】
【详解】
本题考查的是VB循环语句。首先考虑取值范围,int(rnd
6)+5
产生随机整数范围是[5,
10],当
i
为奇数时,
(Int(Rnd
6)
+
5)
(i
Mod
2
+
1)的范围是{10,12,14,16,18,20};当
i
为偶数时,
(Int(Rnd
6)
+
5)
(i
Mod
2
+
1)的范围是整数[5,
10]。接着
a
数组满足不重复的条件。所以选项
BCD
都不对。
5.编写了一个统计数组元素a(1)到a(n)中的“升序段”个数s。例:如图所示的数据序列,其“升序段”的个数等于3的VB程序:
k=0
s=0
For
i=2
To
n
If
a(i)>a(i-1)
Then
End
If
If
k=1
Then
s=s+1
Nexti
Textl.Text=Str(s)
方框中的代码由以下三部分组成:
①k=0
②k=k+1
③Else
代码顺序正确的选项是(

A.①③②
B.②③①
C.③②①
D.②①③
答案:B
详解本题考查的是VB循环、选择语句。阅读程序可知,k表示每个升序段中元素的个数,s是表示升序段的个数。由If
a(i)>a(i-1)
Then可知,接下来升序段中元素的个数增加1,否则为统计下一个升序段中元素的个数做准备即k=0。故代码顺序为:②③①。选项B正确。
6.有如下
VB
程序段:
Const
n=
10
Dim
a(1
To
n)
As
Integer
,
b(1
To
n)
As
Integer
For
i
=
1
To
n
b(i)
=
i
Next
i
For
i
=
2
To
n
j
=
i
-
1
t
=
b(i)
Do
While
a(b(j))
>
a(t)
b(j
+
1)
=
b(j)
j
=
j
-
1
If
j
=
0
Then
Exit
Do
Loop
b(j
+
1)
=
t
Next
i
若数组a中的数据依次为:69,16,44,17,34,46,10,29,37,51
,执行程序后,b(1)~b(10)的值为(

A.3
5
4
10
1
9
8
6
7
2
B.7
2
4
8
5
9
3
6
10
1
C.5
8
2
1
4
7
3
9
10
6
D.1
6
2
4
8
9
7
10
3
5
答案:B
【解析】
【分析】
【详解】
本题主要考查VB中数组及循环结构的使用。“Exit
Do”用以跳出Do循环,Do循环的循环条件为“a(b(j))
>
a(t)”,由题意可知为“a(b(i-1))
>
a(b(i))”,程序执行中数组b变化过程为:2,1,3,4,5,6,7,8,9,10—>2,3,1,4,5,6,7,8,9,10—>2,4,3,1,5,6,7,8,9,10—>2,4,5,3,1,6,7,8,9,10—>2,4,5,3,6,1,7,8,9,10,—>7,2,4,5,3,6,1,8,9,10—>7,2,4,8,5,3,6,1,9,10—>7,2,4,8,5,9,3,6,1,10—>7,2,4,8,5,9,3,6,10,1。故B选项正确。其余选项均不符合题意。
二、操作题
7.出列顺序有10个人,编号分别为1,2,3……10按顺时针方向围坐成一圈,每次随机产生一个数m,m的范围为[3,7]的随机奇数,从第10个人开始逆时针报数,当报到m的人出列,圈内剩下的人,重新产生随机数m,重新开始报数,如此下去,直到所有人出列为止。如:若每次参数的随机数m都为5,从第10个开始报数,依次出列的为6-1-5-9-2-3-10-7-4-8
小李编写了如下程序求解10个人的出列顺序。程序运行界面如图1所示,点击求解按钮后,在Textl中输出出列顺序,在Text2中显示随机数据的值。
(1)在划线出填写正确的代码
Private
Sub
Command1
_Click()
Dim
ld(1
To
10)
As
Boolean,
i
As
Integer,
j
As
Integer
Dim
rs
As
Integer,
C
As
Integer,
m
As
Integer
Randomize
For
i=1
To
10
ld(i)
=
True'数组元素为
True表示第i人当前在队列中
Next
i
c=0:rs=10
_______
m
=Int(Rnd
3)
2+3
Do
While
rs
<>
0
If
ld(i)
=
True
Then
_________
If
c=m
Then
ld(i)
=
False
Text1.Text
=
Text1.Text
+
Str(i)
___________
c=0
End
If
End
If
i
=i-1
If
____________Then
i=10
Loop
End
Sub
(2)加框处两语句互换下顺序,会不会对出列顺序产生影响______(选填:会/不会)。
答案:①
i=10

c=c+1

rs=rs-1

i=0
不会
详解本题考查VB综合能力。(1)初始化i的值,填入i=10。(2)报数数量加1,填入c=c+1。(3)出列后总人数减1,故填入rs=rs-1。(4)当i=0时候,代表转到了最后一人,故i=10。(5)对出列顺序没有影响。
8.求不大于n的五位正整数中,满足高两位与低两位相同,且能被3除余2的所有数之和。
(1)本题适用的算法是(
),此算法的基本实现方法是(
)。
A.枚举算法,循环中嵌套循环
B.查找算法,循环中嵌套分支
C.枚举算法,循环中嵌套分支
D.查找算法,循环中嵌套循环
(2)设x为五位正整数,以下检验条件的分析,正确的是(
)。
A.x
\
100
=
x
mod
100
and
x
mod
3=2
B.x
\
1000
=
x
mod
100
and
x
mod
3=2
C.x
\
100
=
x
mod
1000
and
x
mod
3=2
D.x
\
1000
=
x
mod
1000
and
x
mod
3=2
(3)请编写程序,完成题目要求的功能。
答案:(1)
C
(2)
B
(3)
Dim
x
As
Long,
s
As
Double,
n
As
Long
n
=
val(InputBox("输入"))
s
=
0
For
x
=
10000
To
n
Step
1
If
x
\
1000
=
x
Mod
100
And
x
Mod
3
=
2
Then
s
=
s
+
x
End
If
Next
x
Print
s
详解本题考查VB综合能力。(1)求不大于n的五位正整数中,满足高两位与低两位相同,且能被3除余2的所有数之和适合采用枚举算法,枚举算法是指从所有候选答案中去搜索正确的解,使用该算法需要满足两个条件,所以在代码中需要分支结构。故选C。(2)x
\
1000
=
x
mod
100
and
x
mod
3=2可以判断高两位与低两位相同,且能被3除余2的整数,故选B。(3)根据题目意思,完成代码。
9.小奕同学基于排序算法设计了一个数字矩阵排序的程序。程序界面如下图所示,在文本框中输入矩阵大小,点击“生成”按钮Command1,在左侧列表框List1中输出一个长宽均为指定大小的随机整数矩阵,随机整数范围为[1,99]。点击“排序”按钮Command2,结果输出在右侧列表框List2中,奇数行从左到右依次递增,偶数行从右至左依次递增,且保持输出矩阵的长宽不变。
(1)实现上述功能的VB程序如下,显示数据用的additem是一种________(单选,填字母:A.属性名/B.事件名/C.方法名/D.过程名)。
(2)请在划线处填入合适的代码。
(3)程序中加框处代码有错,请改正。
Dim
a
(1
To
100)
As
Integer
Dim
n
As
Integer
Function
dq
(s
As
String,L
As
Integer)
As
String
'自定义对齐函数Rem在输入的字符串s前加若干空格,输出长度为L的字符串,代码略
End
Function
Private
Sub
Command1_Click()'生成数字矩阵
'随机生成n^2个数字,存储在数组a中,代码略
'以一行n个,共n行的格式显示在List1中,代码略
End
Sub
Private
Sub
Command2_Click'数字矩阵排序
Dim
i
As
Integer,k
As
Integer,j
As
Integer,s
As
String
Dim
f
As
Boolean
List2.Clear
f
=
True
For
i
=
1
To
n^2
Step
n
s=
"
"
For
j
=
i
To
k=n^2
Do
While

If
a(k)
<
a(k-1)
Then
t
=
a(k):a(k)
=
a(k-1):a(k-1)
=
t
End
If
k
=
k-1
Loop
If
f
=
True
Then
s=s+
"
"+dq(Str(a(j)),2)
Else
s=s+
"
"+dq(Str(a(j)),2)+s
End
If
Next
j
List2.AddItems

Next
i
End
Sub
答案:(1)
C
(2)

k>
=
j+1
②f
=
Not
f
(3)
i+n-1
详解本题考查VB综合能力。(1)additem是一种方法名。(2)第一空,DO
While循环是冒泡排序的内循环,根据题干,每次排序排第i行的n个数据,从a(j)到a(j+n-1)的排序,故填入k>=j+1。(3)第二空,f代表奇偶行,奇数行f为True,偶数行反之,故填入f=Not
f。(4)每次排序排第i行的n个数据,加框处改为i+n-1。
10.求最大连续子矩阵和。给出一个矩阵,序列元素有正整数、0、负整数,在矩阵中限定一块区域,并要求找到该限定区域内的一个子矩阵,使得这个子矩阵与限定区域同宽但可能不同高,且包含的所有元素之和为限定区域矩阵中最大值,在和最大的前提下还要求该子矩阵包含的元素个数最多。
算法描述如下:
(1)从第一行开始向下进行累加,累加和若大于之前的最大和,则记录此时的最大和及结束位置;
(2)若累加和等于之前的最大和,但元素个数大于之前的最大和的元素个数,则记录此连续子矩阵的结束位置;
(3)若累加和小于
0,则重新开始记录;
(4)若有符合条件的多个连续子矩阵,则输出最先找到的子矩阵。
小俞编写了一个实现该功能的
VB
程序,窗体加载时生成
m
n个序列数据,依次存放在数组
a,并显示在列表框
List1
中,在文本框
Text1
中输入该矩阵限定区域的左上角位置,在文本框
Text2
中输入右下角位置,单击“计算”按钮
Command1
后,找出连续和最大的子矩阵,在标签
Label3
上显示最大连续子矩阵和,在Label4
上显示该连续子矩阵的元素个数,在
Label5
上显示该连续子矩阵开始与结束位置。程序运行界面如图所示。
(1)在设计程序界面时,要清空文本框中的显示内容,应修改文本框的___________
属性
(2)VB
程序代码如下,请在划线处填入合适的代码。
Const
m
=
12:
Const
n
=
6
Dim
a(1
To
m
n)
As
Integer
Private
Sub
Form_Load()
'生成
m
n
个数据,并显示在列表框
List1
,代码略
End
Sub
Private
Sub
Command1_Click()
Dim
i
As
Integer,j
As
Integer,k
As
Integer,temp
As
Integer
Dim
length
As
integer,begin
As
Integer
,sum
As
Integer
Dim
ks
As
String,js
As
String
Dim
xy(1
to
4)
As
Integer
,
hsum(1
to
m
n)
As
Integer
'读取文本框
Text1
的数值分别存储到数组
xy(1)、xy(2),
读取文本框
Text2
的数值分别存储到数组
xy(3)、xy(4),xy(1)、xy(3)表示所在行,xy(2)、xy(4)表示所在列,代码略
For
i
=
1
To
xy(3)
-
xy(1)
+
1
hsum(i)
=
0
Next
i
'求限定区域内每行数据之和
For
i
=
1
To
xy(3)
-
xy(1)
+
1
For
j
=
1
To________
hsum(i)
=
hsum(i)
+
a((xy(1)
+
i
-
2)
n
+
xy(2)
+
j
-
1)
Next
j
Next
i
'找出最大连续之矩阵和
temp
=
0:
sum
=
0:
length
=
0:
begin
=
0
For
i
=
1
To
xy(3)
-
xy(1)
+
1
If
temp
+
hsum(i)
>
sum
Then
sum
=
temp
+
hsum(i)
length
=
i
-
begin
k
=
i
ElseIf
temp
+
hsum(i)
=
sum
And________
Then
length
=
i
-
begin
k
=
i
End
If
If
temp
+
hsum(i)
<
0
Then
begin
=
i
temp
=
0
Else
temp
=
temp
+
hsum(i)
End
If
Next
i
ks
="("
+_________+
","
+
Str(xy(2))
+
")"
'




js
="("
+
Str(k
+
xy(1)
-
1)
+
","
+
Str(xy(4))
+
")"
'结束位置
Label3.Caption
=
"最大子矩阵和为
:"
+
Str(Sum)
Label4.Caption
=
"子矩阵中的元素个数为:"
+
Str(length
(xy(4)
-
xy(2)
+
1))
Label5.Caption
=
"子矩阵位置为:"
+
ks
+
","
+
js
End
Sub
答案:text
①xy(4)
-
xy(2)
+
1
②i-begin
>
length
③Str(k
-
length
+
xy(1))
详解本题考查VB综合能力。(1)在设计程序界面时,要清空文本框中的显示内容,应修改文本框的text属性。(2)xy(1)、xy(3)表示所在行,xy(2)、xy(4)表示所在列,内循环表示限定区域有多少列,故填入xy(4)
-
xy(2)
+
1。(3)根据题干若累加和等于之前的最大和,但元素个数大于之前的最大和的元素个数,则记录此连续子矩阵的结束位置,填入i-begin
>
length。(4)开始位置表示为Str(k
-
length
+
xy(1))。
11.使用Python自身提供的IDLE集成开发环境录入以下代码及调试
运行,检测结果。
#
鸡兔同笼
for
x
in
range(1,23):
y=35-x
if
4
x+2
y==94:
print("兔子有%s只,鸡有%s只"%(x,y))
特别提示:代码录入完毕,调试运行,检测错误,讨论错误原因,上网查找错误格式的处置办法,直至能正确输出结果。
答案:错误1:兔子4只腿,最多只能是23只,而
range(1,23)只取到22,没取到23,故应改为:
range(1,24)
错误2:缩进错误,y=35-x、if
4
x+2
y==94:是for语句中的语句块,应缩进。print("兔子有%s只,鸡有%s只"%(x,y))是if语句中的语句块,应缩进。
详解本题考查的是Python调试。本题程序错误如下:
错误1:兔子4只腿,最多只能是23只,而
range(1,23)只取到22,没取到23,故应改为:
range(1,24)
错误2:缩进错误,y=35-x、if
4
x+2
y==94:是for语句中的语句块,应缩进。print("兔子有%s只,鸡有%s只"%(x,y))是if语句中的语句块,应缩进。
调试完最终输出:兔子有12只,鸡有23只。
12.请编写Python程序,实现如下功能需求:
1)程序运行后,给出文字提示:“请输入一个正整数:”
2)输入一个整数n按回车后,程序输出从1-n所有整数中既是3的倍数又是5的倍数的数。
3)不要超过5行代码。
程序运行举例:
答案:n=input("请输入一个正整数:
")
n=int(n)
For
i
in
range(15,n+1,15)
print(i)
【解析】
【分析】
【详解】
本题考查的是Python循环语句。range函数,第一个参数表示开始,第二个参数表示停止,第三个参数表示步长。print缺省的话默认是换行输出。
13.某考试的多选题有“A、B、C、D、E”5个答案选项。阅卷的评分标准为:“全部选对的得2分,选对但不全的得1分,不选或有选错的得0分”。阅卷算法描述如下:
例如,标准答案为“ABE”,则对应得分表如下所示。
学生答案
ABE
AB
AE
BE
A
B
E
AC
......
字符串
11001
11000
10001
01001
10000
01000
00001
10100
......
十进制数(x)
25
24
17
9
16
8
1
20
......
ans(x)
2
1
1
1
1
1
1
0
0
小温依据上述描述设计了“多选题阅卷”的VB程序,实现如下功能:在文本框Text1中输入标准答案(大写字母),先单击“初始化”按钮
Command1,在数组ans中生成所有答案组合对应
的分值,然后单击“阅卷”按钮Command2,从数
据库中读取学生的答案并进行阅卷,在列表框List1中显示得分结果。程序运行界面如图所示。
(1)若标准答案为“ACD”,则数组元素ans?(18)的值为
(2)请在划线处填入合适的代码。
Dim?ans(0?To?31)?As?Integer
Private?Sub?Command1_Click()
Dim?b(0?To?4)?As?Integer
Dim?s?As?String,?c?As?String,?sum?As?Integer,?k?As?Integer
'初始化数组ans和数组b,各元素的初始值均为0。代码略
s?=?Text1.Text:k?=?Len(s)
???
For?i?=?1?To?k
????????
c?=?Mid(s,?i,?1)
????????
b(Asc(c)?-?65)?=?2?^?(69?-?Asc(c))
????
Next?i
????
For?i?=?0?To?4
????????
If?b(i)?<>?0?Then
????????????
ans(b(i))?=?1
????????????
sum?=

????????
End?If
????
Next?i
???
ans(sum)?=?2
???
'当标准答案含3个及以上选项时,学生答案选其中2个选项可得1分
????
i?=?0
????
Do?While?k?>=?3?And?i?<=?4
????????
For?j?=?i?+?1?To?4
???????????
If?b(i)?
?b(j)?<>?0?Then?ans(b(i)?+?b(j))?=?1
????????
Next?j
????????
i?=?i?+?1
????
Loop
???
'当标准答案含4个及以上选项时,学生答案选其中3个选项可得1分
????
i?=?0
????
Do?While?k?>=?4?And?i?<=?4
????????
For?j?=?i?+?1?To?4
????????????
If?b(i)?
?b(j)
=?0?Or?k?=?5?Then?

????????
Next?j
????????
i?=?i?+?1
???
Loop
???
'当标准答案含5个选项时,学生答案选其中4个选项可得1分。代码略
?
End?Sub
Private?Sub?Command2_Click()
????
Dim?xh(1?To?1000)?As?String,?answer(1?To?1000)?As?String
??
'从数据库中读取学生学号和答案的数据分别存储在数组xh和answer中
'记录总数存储在变量n中,代码略
??
List1.Clear
????
For?i?=?1?To?n
????????
List1.AddItem?xh(i)?+?"???????"?+?answer(i)?+?"???????"?+?Str(ans(f(answer(i))))
????
Next?i
End?Sub
Function?f(s?As?String)?As?Integer
????
Dim?i?As?Integer,?x?As?Integer
???
x?=?0
????
For?i?=?1?To?Len(s)
??????
x?=

????
Next?i
????
f?=?x
End?Function
答案:(1)1
(2)①
sum
+
b(i)
或sum
+
2
^
(4

i)

ans(sum
-
b(i)
-
b(j))
=
1

x
+
Val(Mid(s,
i,
1))
2
^
(Len(s)
-
i)或者x
+
Val(Mid(s,
i,
1))
2
^
(5
-
i)或者
x
+
Val(Mid(s,
Len(s)
-
i
+
1,
1))
2
^
(i
-
1)或者
x
+
Val(Mid(s,
6
-
i,
1))
2
^
(i
-
1)
或者
x
2
+
Val(Mid(s,
i,
1))
详解标题考查VB综合能力。(1)若标准答案为“ACD”,则数组元素ans(18)表示选了AD,得1分。(2)代码第一空,将正确答案转换的十进制求和,故填入sum+b(i)。(2)代码第二空,b(i)和b(j)是错误答案,那么反过来就是正确答案之一,故填入ans(sum-b(i)-b(j))=1。(3)代码第三空,自定义函数将二进制转为十进制,位权相加,故填入x+Val(Mid(s,i,1))
2^(Len(s)-i)。
14.某校老师编写一个VB程序分析学生技术成绩,功能如下:在列表框List1中显示原始学生信息,单击“分析”按钮Command1,统计各班参加考试人数、高分(97及以上)人数和均分,并按班级均分从大到小显示在列表框List2中,程序运行界面如图所示。
实现上述功能的VB程序段如下,请回答下列问题:
(1)学生成绩存储在数据表中,其字段名是
(2)请在划线处填入合适的代码。
Dim
recCount
As
Integer
'存放学生人数
Dim
sClass(1
To
1000)
As
Integer
'存放学生班级
Dim
sName(1
To
1000)
As
String
'存放学生姓名
Dim
sScore(1
To
1000)
As
Integer
'存放学生成绩
Private
Sub
Command1_Click()
Dim
i
As
Integer,
t
As
Integer,
nc
As
Integer
Dim
a(1
To
20)
As
Integer,
b(1
To
20)
As
Integer
'分别存放班级高分人数和班级参加考试人数
Dim
sum(1
To
20)
As
Integer,
ave(1
To
20)
As
Single
'分别存放班级总分和班级均分
Dim
c(1
To
20)
As
Integer
For
i
=
1
To
recCount

b(t)
=
b(t)
+
1
If
b(t)
=
1
Then
nc
=
nc
+
1

End
If
If
sScore(i)
>=
97
Then
a(t)
=
a(t)
+
1
sum(t)
=
sum(t)
+
sScore(i)
Next
i
For
i
=
1
To
nc
ave(c(i))
=
Int(sum(c(i))
/
b(c(i))
100
+
0.5)
/
100
Next
i
For
i
=
1
To
nc
-
1
For
j
=
nc
To
i
+
1
Step
-1
If

Then
t
=
c(j):
c(j)
=
c(j
-
1):
c(j
-
1)
=
t
End
If
Next
j
Next
i
For
i
=
1
To
nc
List2.AddItem
Str(c(i))
+
"
"
+
Str(b(c(i)))
+
"
"
+
Str(a(c(i)))
+
"
"
+
Str(ave(c(i)))
Next
i
End
Sub
Private
Sub
Form_Load()
'链接数据库,代码略
recCount
=
0
Do
While
Not
rs.EOF
recCount
=
recCount
+
1
sClass(recCount)
=
rs.Fields("class")
sName(recCount)
=
rs.Fields("name")
sScore(recCount)
=
rs.Fields("score")
rs.MoveNext
Loop
'将数据显示在列表框List1中,代码略
End
Sub
答案:(1)
score
(2)①t
=
sClass
(i)
②c(nc)=
t或其他相同答案
③ave(c(j))
>
ave(c(j
-1))
【解析】
【分析】
【详解】
本题考查VB综合能力,VB连接数据库等(1)根据sScore(recCount)=rs.Fields(score)这条代码可知,学生成绩存储在数据表中,其字段名是score。(2)代码第一空,联系上下代码,可知此处关于t的赋值,t代表班级,故t=sClass(i)是该空答案。(3)代码第二空是c数组赋值,c数组中存放的是按顺寻访问到的是第几个班级,故c(nc)=t是该空答案。(4)第三空是冒泡排序内循环,根据平均分降序排序,故填入ave(c(j))
>
ave(c(j-1))。
三、填空题
15.以下流程图描述的算法,执行结果是_______。
答案:@@@@########
【解析】
【分析】
【详解】
本题考查的知识点是程序的识读。
初始值t=0,n=1,执行输出“@@@@”语句,再执行判断n>2表达式,不符合该条件表达式,故执行输出“####”,再执行n=n+1语句,即n=2,再执行判断t=1表达式,不符合该条件表达式,故执行判断n>2表达式,不符合该条件表达式,故执行输出“####”,再执行n=n+1语句,即n=3,再执行判断t=1表达式,不符合该条件表达式,故执行判断n>2表达式,符合该条件表达式,故执行输出“”,
再执行t=1语句,再执行n=n+1语句,即n=4;再执行判断t=1表达式,符合该条件表达式,故程序结束。
所以流程图的执行结果为:@@@@########。
故答案为@@@@########。
16.如图所示,这是打印九九乘法表的程序,请你完善程序。
Private
Sub
Form_click()
Dim
i
As
Integer,
j
As
Integer
For
i
=
1
To
①________
For
j
=
1
To
②_________
Print
j;
"
";
i;
"=";
i
j;
Next
j
Print
‘换行
Next
i
End
Sub
答案:9
i
【解析】
【分析】
【详解】
本题主要考查程序循环的嵌套。题中外层循环决定乘法表竖向执行的次数,内层循环决定横向执行的次数,因此答案①9②i。
21世纪教育网
www.21cnjy.com
精品试卷·第
2

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