内容正文:
2023-2024学年粤教版高一上学期选修1第二章第4节程序的循环结构
一、选择题
1.有百位和个位未知的4位整数“3*9*”,能同时被37与12整除。以下VB程序段的功能是:在满足条件的所有数中,将最小一个4位数的百位与个位依次显示在文本框Text1中。
i = 0: flag = False
Do While i <= 9 And Not flag
For j = 0 To 9
flag = True
Exit For
End If
Next j
i = i + 1
Loop
方框中的代码由以下三部分组成:
①If s Mod 12 = 0 And s Mod 37= 0 Then
②s = 3 * 1000 + i * 100 + 9 * 10 + j
③Text1.Text = Str(i) + Str(j)
下列选项中代码顺序正确的是( )
A.②①③ B.②③① C.①②③ D.①③②
2.以下是依据对分查找思想,设计的一个三分查找程序。已知数组a(1 To 10)中的数据分别是12、21、34、45、59、63、72、86、94、100,当在文本框Text1中输入“34”时,输出“34”的位置值“3”,当输入“33”时,输出“33”邻近数的位置值“23”。实现该功能的VB程序段如下:
Key = Val (Text1. Text)
i=1 : j=10
flag = False
Do While i < = j And Not flag
mid1= Int (i + (j-i) /3)
mid2= Int (j - (j-i) /3)
If Key = a(mid1) Or Key = a (mid2) Then
flag = True
ElseIf Key < a (mid1) Then
______(1)______
ElseIf Key > a (mid2) Then
______(2)_______
El se
i=mid1 + 1
j=mid2 - 1
End If
Loop
If _______(3)_______ Then
List2. AddItem Str (mid1)
ElseIf flag Then
List2. AddItem Str (mid2)
Else
List2. AddItem Str(j) + Str (i)
End If
上述程序中方框处可选语句为 ①i=mid1+1;② i=mid2+1;③ j=mid1-1;④ j=mid2-1;⑤ Key=a(mid1);⑥ flag And Key=a(mid1),则(1)、(2)、(3)处语句依次是( )
A.④②⑤ B.③②⑥ C.②③⑥ D.④③⑤
3.有如下VB程序段:
Dim flag As Boolean
s=Textl.Text:j=0:cnt=1
Fori=l To lean(s)
c=Mid(s,i,l)
If c>="0" And c<="9" Then
j=j+1
flag=True
Else
If j>lenmax And cnt Mod 2=l Then lenmax=j
j=0
If flag Then cnt=cnt+1:flag=False
End If
Next i
Text2.Text=Str(lenmax)
在文本框Text1输入“one302type27645time9986”,程序运行后文本框Text2中显示为( )
A.12 B.5 C.3 D.4
4.某算法的流程图如下图所示。
当输入x的值为100时,在标签Label1中输出的内容为( )
A.4 B.33 C.36 D.48
5.有如下VB程序段:
s = " "
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
Text1. Text = s
若数组a的初始值都为0,则运行该程序段后,Text1中显示的内容为( )
A.14 B.235 C.532 D.41
6.有如下VB程序段:
s=“Good Luck 2019!”
n=0:m=0:k=0
For i=1 To Len(s)
ch=Mid(s,i,1)
If ch >=”0”And ch<=”9” Then
m=m+1
Else If ch>="a” And ch<=”z” Then
n=n+1
Else
k=k+1
End If
Next i
执行该程序段后,变量k的值为( )
A.2 B.3 C.4 D.5
7.有如下VB程序段: .
i = 1
Do While i < = 6
a(i) = Int(Rnd* 10) + 1
If a(i)Mod 2 = I Mod 2 Then
i=i-1
Else If I Mod 2 = 0 Then
a(i) =a(i – 1) + a(i)
End If
i=i+1
Loop
执行该程序后,a(1)-a(6) 各元素不可能的值是( )
A.6,13, 8,11, 6, 17 B.8,11,4,5,8,17
C.8,9,8,17,10,11 D.6,13,6,9,4,9
8.判断非重字符串s2(至少含2个字符)是否为s1的子集,若s2的字符按序在s1中出现,则称s2为s1的子集。例:s1="a3bcd",s2="ab",s3="ba",则s2是s1的子集,s3不是s1的子集。实现该功能的 VB 程序段如下:
s1 = Text1.Text : s2 = Text2.Text
i = 1 : j = 1
Do While i <= Len(s1) And j <= Len(s2)
If Mid(s1, i, 1) = Mid(s2, j, 1) Then (1)
(2)
Loop
If (3) Then Label1.Caption = "是子集" Else Label1.Caption = "不是子集"
上述程序填空处的可选语句为:
①i = i + 1 ②j = j + 1 ③i > Len(s1) ④j > Len(s2)
则(1)(2)(3)处语句依次最合理的搭配为( )
A.①②③ B.②①③ C.①②④ D.②①④
9.某 VB 程序段如下:
Dim a(1 To 3) As Single,i As Integer
Randomize
a(1) = 1
For i =2 To 3
a(i) = (Int(Rnd() * 3)) *2- 2
a(i) = Abs(a(i - 1)) / Sqr(a(i))
Next i
List1.AddItem Str(a(i))
运行该程序段,下列错误提示不可能会出现的是( )
A.下标越界 B.无效的过程调用或参数
C.类型不匹配 D.除数为零
10.有如下VB程序段:
i = 0: j = 1
Do While j <= 5
If a(j) <> 0 Then i = i + 1: a(i) = a(j)
j = j + 1
Loop
For j = i + 1 To 5
a(j) = 0
Next j
数组元素a(1)到a(5)的值依次为“0,20,0,4,31”,执行该程序段后,a(1)~a(6)各元素的值依次为( )
A.4,20,31,0,0 B.31,20,4,0,0 C.0,0,20,4,31 D.20,4,31,0,0
11.有如下VB程序段:
Private Sub Command1_Click()
Dim s As String, ch As String
Dim n As Integer, t As Integer, c As Integer
s = "Go-2020-12"
n = Len(s):t = 0
For i = 1 To n
ch = Mid(s,i,1)
If ch >= "0" And ch <= "9" Then
t = t + Val(ch)
Else
c = t:t = 0
End If
Next i
Label1.Caption = Str(c)
End Sub
执行完以上程序段后,标签Label1上显示的内容为( )
A.7 B.2 C.3 D.4
12.字符串中任意个连续的字符组成的子序列成为该字符串的子串,如字符串“123”的子串有“123”,“23”,“12”,“3”,“2”,“1”.按上述顺序输出字符串s所有子串的VB程序段如下:
s=Text1.Text:List1.Clear
len1=Len(s) ‘①
For i=len1 To 1 step-1 ‘②
For j=1 To len1-i step-1 ‘③
List1.AddItem Mid (s,j,i) ‘④
Next j
Next i
运行时发现未输出所有子串,经调试发现需要改动的是( )
A.将①处改为:len1=Len(s)+1 B.将②处改为:Fori=1 To 1en1
C.将③处改为:For j=len1-i+1 To1 step-1 D.将④处改为:List1.AddItem Mid (s,j,i)
13.有如下VB程段:
Private Sub Command1_Click()
Const n = 8
Dim i As Integer, a As Integer, s As String
Randomize
i=1
s = s + Str(Int(Rnd * 19) + 1)
Do While i < n
a = Int(Rnd * 19) + 1
If a Mod 2 = i Mod 2 Then
s = s + Str(a)
i = i + 1
End If
Loop
Text1.Text = s
End Sub
运行程序后,文本框 Text1 中可能出现的是( )
A.4 13 20 9 14 19 4 9 B.7 8 19 8 7 18 3 1
C.6 19 12 19 16 11 10 11 D.15 18 7 18 19 12 5 11
14.某算法的部分流程图如图所示,执行该流程,以下说法正确的是( )
A.第一次循环结束时,x 的值为 125
B.第一次循环结束时,y 的值为 15
C.循环结束时,输出 y 的值为 521
D.循环结束后,x<>0 执行了 3 次
15.有如下VB程序:
Function f(i As Integer)
If i=1 Then
f=2
Else
f=2 * 10^(i-1)+f(i-1)
End If
End Function
Private Sub Command1_Click()
Dim n As Integer,s As Integer,i As Integer
n=Val(Text1.Text)
s=0
For i=1 To n
s=s+f(i)
Next i
Labell.Caption=Str(s)
End Sub
若在Textl中输入5,则Labell中显示的内容为( )
A.22222 B.24690 C.20000 D.2468
二、填空题
16.运行以下VB程序,结果是 。
17.机器人灭火:下图为着火点搜索范围和机器人的智能程序。黑色区域表示障碍区,不能通行;红色星状图为着火点。机器人用箭头表示,箭头方向为机器人的前进方向,机器人会按智能程序要求进行搜索,直至完成灭火任务。完成灭火任务后,输出的i值为 。
18.为分析数组a中各元素依次变化的情况,进行如下定义:
变化段:数组中相邻两个元素构成一个变化段。变化段有上升段(a(i)>a(i-1))、下降段(a(i)<a(i-1))和持平段(a(i)=a(i-1))。数组a中的n个元素可构成n-1个依次排列的变化段。
波峰:从上升段转到下降段形成一个波峰。波峰的起点是峰顶前所有连续上升段中的第1个,终点是峰顶后所有连续下降段中的最后1个。
对称波峰:上升段与下降段个数相同的波峰称为对称波峰。
下图为一组数据的变化段及波峰示意图。
现要求统计数组a各元素依次变化过程中“对称波峰”的个数。小李依据上述描述设计如下VB程序。请回答下列问题:
(1)数组元素“1,4,3,3,2,6,8,7,9,3,4,7,9,6,3,1”依次变化过程中“对称波峰”的个数为 。
(2)请在划线处填入合适的代码。
Const n = 20
Dim a(1 To n) As Integer
Private Sub Form_Load()
'读取数据,并存储到数组a中,代码略
End Sub
Private Sub Command1_Click()
Dim flag As Integer '存储变化段的状态:1表示升,-1表示降,0表示平
Dim count As Integer '存储对称波峰段的个数
Dim steps As Integer
Dim i As Integer
flag = 0: steps = 0: count = 0
For i = To n
If a(i) > a(i - 1) Then
If IsSymPeak(flag, steps) Then count = count + 1
If flag = 0 Or flag = -1 Then
Else
steps = steps + 1
End If
flag = 1
ElseIf a(i) = a(i - 1) Then
If IsSymPeak(flag, steps) Then count = count + 1
steps = 0
flag = 0
Else steps = steps - 1
flag = -1
End If
Next i
If IsSymPeak(flag, steps) Then count = count + 1
Text1.Text = Str(count)
End Sub
Function IsSymPeak(flag As Integer, steps As Integer) As Boolean
If Then
IsSymPeak = True
Else
IsSymPeak = False
End If
End Function
19.计算1+2+3+4+…+N>2020的最小N值,采用图示算法。
在①处应填写 ,
②处应填写 。
三、操作题
20.某日期加密授权码生成方法描述如下:
(1)授权码由10位字符组成,前8位为日期的密文,后2位为验证码;
(2)从右往左依次取日期的每一位字符,若该字符第一次出现,则直接取其对应的加密字符,否则取下一个不重复的加密字符。按此操作,依次取出该日期余下各位对应的加密字符;如日期为20201223,则依次取出的字符为“3、2、2、1、0、2、0、2”。
(3)求出所有日期字符数值的和,将和除16取余加1得到一位验证码字符;若和不小于16,则将和除16取整加1得到另一位验证码字符,否则另一位验证码字符为小写字母“x”。取出验证码重复时,处理规则与(2)相同。
加密(验证码)字符对应表如下:
值(十进制)
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
加密(验证码)字符
A
K
p
j
L
t
W
b
m
a
P
F
Z
q
y
c
设计一个生成8位日期(YYYYMMDD格式)授权码的VB程序。程序功能如下:在文本框text1中输入一个8位有效日期,单击“授权码”按钮comand1,在标签labe12中显示出该日期的授权码。运行效果如图所示。
(1)若输入的日期是“20210108”,则labe12上显示内容为
(2)实现上述功能的VB程序段如下,请在划线处填入合适代码。
Dim f(0 To 15)As Integer
Const code = "AKpjLtWbmaPFZqyc"
Private Sub Comand1_Click()
Dim rq As String,sq As String
Dim c As Integer,i As Integer,d As Integer
For i = 0 To 15
f(i)= 0
Next i
rq = Text1. Text
sq="":d= 0
If Len(rq) <> 8 Then
Labe12. Caption ="请重新输入8位日期"
Else
For i = 1 To 8
c = Val(Mid(rq,i,1))
d =d + c
sq =①
Next i
If d >= 16 Then
yz = getchar(d Mod 16 + 1) + getchar(d 16 + 1)
Else
yz = getchar(d Mod 16+ 1) + "x"
End If
Labe12. Caption = sq + yz
End If
End Sub
Function getchar(x As Integer) As String'获取不重复的加密字符
Dim flag As Boolean
flag = False
Do while flag = False
f(x)=f(x)+ 1
If f(x)= 1 Then
getchar =②
f(x)=f(x)+ 1
flag = True
Else
③
End If
Loop
End Function
四、简答题
21.将一张面值为100元的人民币等值换成100张5元、1元和0.5元的零钞,要求每种零钞不少于1张,问有哪几种组合?
Dim i,j,k As Integer ′ i,j,k用于记录5元,1元,0.5元的张数
Print“5元 1元 0.5元”
For i=1 To 20
For j=1 To 100-i
k=__①__
If__②__Then
Print i,j,k ′分别输出i,j,k三个变量。
End If
Next j
Next i
22.在“抗击疫情,‘宅’出精彩”征文活动中,每位选手可以提交一篇作品。活动以互评的形式展开:每位选手对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
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页,共3页
试卷第1页,共3页
学科网(北京)股份有限公司
参考答案:
1.A
2.B
3.C
4.C
5.D
6.D
7.A
8.D
9.C
10.D
11.D
12.C
13.C
14.C
15.B
16.28
17.8
18. 3 2 steps=1 flag=-1 And steps=0或其他等价表达式
19. s<=2020 print N-1
20. mWtLKjApcx getchar(c)+ sq Mid(code,x + 1,1) x =(x + 1)mod 16
21.①100-i-j ②5*i+j+0.5*k=100
22.(1)B
(2)①k= n ②check(i - 1) ③a(i) = a(c * n + p)
答案第1页,共2页
答案第1页,共2页
学科网(北京)股份有限公司
$$