内容正文:
2023-2024学年高一上学期选修1第二章第3节 循环结构程序
一、选择题
1.某VB程序功能如下:输入正整数n,单击命令按钮Command1后,则会生成一串有规律的数字序列,形式为“n n-1 n-2 … 3 2 1 2 3 … n-2 n-1 n”。例如n=8时,生成的数字序列如图所示。代码如下:
Private Sub Command1_Click()
Dim n As Integer, i As Integer, s As String
n = Val(Text1.Text)
s = ""
For i = 1 To 2 * n - 1
If i <=" n" Then ① Else ②
Next i
Label1.Caption = s
End Sub
为实现以上功能,划线①②处应分别填写
A.①s = s & Str(n - i + 1) ②s = s"& Str(i - n + 1)
B.①s =Str(n - i + 1) ②s = Str(i - n + 1)
C.①s = s & Str(i - n + 1) ②s = s& Str(n - i + 1)
D.①s = Str(i- n + 1) ②s = Str(n - i + 1)
2.小明在VB中定义了以下函数,功能是求a和b的最大公约数。
Function gcd(a As Integer,b As Integer) As Integer
Do While b>0
c=a Mod b
a=b
b=c
Loop
End Function
调试中发现计算结果一直是0。经过仔细观察与分析,发现错误的原因是( )
A.函数名有错 B.变量c没有定义
C.函数没有返回值 D.b>0应该改为b>=0
3.在VB程序中,以下程序段执行后,x的值为( )。
x=1
y=4
Do While y>4
x=x * y
y=y+1
Loop
Print x
A.1 B.4 C.8 D.20
4.结构化程序设计由三种基本结构组成,下面哪个不属于这三种基本结构( )
A.顺序结构 B.输入、输出结构 C.选择结构 D.循环结构
5.【加试题】某算法流程图如下图所示,该流程图对应的程序段为( )
A.
B.
C.
D.
6.有如下VB程序段:
s = 0
For i = 1 To 100 Step 3
If i Mod 10 = 0 Then
s = s + i
Next i
该程序段运行后,变量s中存储的是( )
A.5050 B.1717 C.220 D.120
7.有如下VB程序段:
Dim a(1 To 5)As Integer
Randomize
a(1)=2:a(2)=6:a(3)=9:a(4)=3:a(5)=4
For i=1 To 4
For j= 1 to 5-i
If a(j)+ Int(Rnd*2)< a(j+1)Then
k=a(j):a(j)=a(j+1):a(j+1)=k
End If
Next j
Next i
执行该程序段后,a(1)~a(5)的值不可能是( )
A.9,6,2,3,4 B.9,6,2,4,3 C.9,6,3,4,2 D.9,6,4,2,3
8.有以下 VB 程序段:
a(1) = 58: a(2) = 38: a(3) = 46: a(4) = 40: a(5) = 58
a(6) = 30: a(7) = 48: a(8) = 50: a(9) = 36: a(10) = 56
For i = 1 To 10
b(a(i) mod 10) = b(a(i) mod 10) + 1
Next i
s=""
For i = 0 To 9
If b(i) > 0 Then s = s+ " " +str(i)+ ":" + Str(b(i))
Next i
数组 b 各元素初值为 0,执行该程序段,s 的值是( )
A.3:4 4:3 5:4 B.8:4 6:3 0:3
C.5:4 4:3 3:4 D.0:3 6:3 8:4
9.程序代码如下:
n = 0
x = l
while x < 20:
x = x*3
n = n+1
print(x,n)
屏幕显示结果是( )。
A.27 3 B.3 27 C.20 3 D.3 21
10.某算法的部分流程图如图所示,执行这部分流程后,变量 x 的值是( )
A.5 B.4 C.6 D.10
11.两个长度相同的字符串s1和s2,若所含字符及各字符的数量均相等时可以归为一类。如字符串“ABDAC”与字符串“AABCD”可以归为一类,与“AABBC”不可以归为一类。实现该功能的VB程序段如下:
For i = 1 To Len(s1)
c = Mid(s1, i, 1)
j = 1
Do While j <= Len(s2)
If c = Mid(s2, j, 1) Then
s2 = ①
Exit Do ‘退出Do循环
Else
j = j + 1
If j = Len(s2) + 1 Then
Label1.Caption = "不可以归为一类!"
Exit For ‘退出For循环
End If
End If
Loop
Next i
If i = ② Then Label1.Caption = "可以归为一类!"
划线处应填写的代码是( )
A.①Mid(s2, i, j - 1) + Mid(s2, j,Len(s2) - j) ② Len(s1)
B.①Mid(s2, 1, j - 1) + Mid(s2, j + 1,Len(s2) - j) ② Len(s1) + 1
C.①Mid(s2, 1, j - 1) + Mid(s2, j + 1,Len(s2) - j) ② Len(s1)
D.①Mid(s2, i, j - 1) + Mid(s2, j,Len(s2) - j) ② Len(s1) + 1
12.有如下VB程序段:
s = Text1. Text
t = Mid(s, 1, 1)
max = 0
For i = 2 To Len(s)
If Mid(s, i, 1)> Mid(s, i-1, 1)Then
t = t+ Mid(s, i, 1)
If Len(t)> max Then
max = Len(t)
ans = t
Else
t = Mid(s, i, 1)
End If
End If
Next i
Text2.Text = ans
在文本框Text1中输入“11341358901”,执行该程序段后,文本框Text2中显示的是( )
A.13435891 B.01 C.3589 D.13589
13.有如下 VB 程序段:
For i = 1 To 8
t = a(i)
flag(t) = flag(t) + 1
Do While flag(t) <> 1
t = (t + 1) Mod 10
flag(t) = flag(t) + 1
Loop
b(i) = t
Next i
数组b 和flag 中各元素的初值均为0,数组元素a(1)至a(8)的初值分别为“8, 5,9, 4,9, 4, 6, 7” ,程序运行后,b(5)的值为( )
A.0 B.5 C.8 D.9
14.有如下 VB 程序段:
Dim a(1 To 6) As Integer
Dim d(1 To 6) As Integer
a(1) = 10: a(2) = 21: a(3) = 28: a(4) = 11: a(5) = 12: a(6) = 30
Const n = 6
For i = n To 1 Step -1
d(i) = 0
For j = n To i +1 Step -1
If a(j) > a(i) Then d(i) = d(j) + 1
Next j
If d(i) > Max Then Max = d(i)
Next i
Text1.Text = Str(Max)
执行该程序段,文本框 Text1 中显示的是( )
A.1 B.2 C.3 D.4
15.当单击命令按钮command1时,窗体上显示的是( )。
Private sub command1_click()
a=0
For i=1 to 2
For j=1 to 4
If j mod 2<>0 then
a=a+1
End If
a=a+1
Next j Next i
Print a
End sub
A.11 B.12 C.13 D.14
二、填空题
16.袜子颜色配对问题。现有不同颜色的袜子若干(袜子的颜色用数字编号1~15表示),颜色相同的袜子才能组成一双,其中有几只袜子是落单的,现要求找出落单袜子的颜色以及能够配对的袜子数量。编写程序解决该问题,程序运行时,在文本框Text1中依次输入袜子的颜色编号(数据都用逗号分隔并以逗号结尾),单击“查找”按钮,在列表框List1中输出落单袜子的颜色编号,在标签label1中现实能配对的袜子数量。运行界面如图所示,实现上述功能的VB程序如下。
请回答下列问题:
(1)写出VB代码中的方法名 (只需填一个方法名);
(2)根据题意,请在划线处填入合适代码;
(3)加框处程序代码有错,请改正。
Const n = 15
Private Sub Command1_Click()
Dim a(1 To n) As Integer '数组a存放不同颜色袜子的数量,默认值为0
Dim s As String, ch As String
Dim c As Integer, i As Integer, t As Integer
List1.Clear
s = Text1.Text
t = 0 :c = 0 : i = 1
Do While i <= Len(s)
ch = Mid(s, i, 1)
If ch >= "0" And ch <= "9" Then
t = t * 10 + Val(ch)
Else
a(t) =
t = 0
End If
i = i + 1
Loop
For i = 1 To n
If Then List1.AddItem "落单袜子的颜色为" + Str(i)
c =
Next i
Label1.Caption = "能配对的袜子有" + Str(c) + "双"
End Sub
17.用VB程序解答百鸡问题
我国古代数学家张丘建在“算经”里提出一个数学史上有名的百鸡问题。题曰:鸡翁一, 他钱五;鸡母一,值钱三;鸡雏三,值钱一:百钱买百鸡,问鸡翁、母、雏各几何?
请把以下算法选项填入到程序语句相对应的位置:
设i, j, k分别代表鸡翁、鸡母、鸡雏的只数。首先确定i, j, k的取值范围:
A、若100个钱全买鸡母,则最多可买33只,即j的取值范围是0~33。
B、若100个钱全买鸡翁,则最多可买20只,即i的取值范围是0~20。
C、当i. j在各自的取值范围内确定某个值后,则鸡雏的只数,k=100-i-j也确定了。
D、 让i从0变化到20,当i取某值时再让j从0变化到33,当j取某个值时,k的值也定了。如 果i*5+j*3+k/3=100成立则i, j, k当前的值就是答案。
先在窗体上绘制一个命令按钮,名称为Command1,编写命令按钮的单击事件。实现以上 算法的程序如下:
Private Sub Command1_Click()
For i = 0 To 20
For j= 0 To 33
k=100-i-j( )
If i*5+j*3 + k/ 3 = 100 Then
Print “鸡翁、鸡母、鸡雏分别为"& i & " " & j & " " & k & "只"
End if
Next j, i
End Sub
请计算出任意一种答案。鸡翁、鸡母、鸡雏分别有 只。
18.(1)某省实施《中华人民共和国道路交通安全法》办法中规定,机动车驾驶人驾驶机动车超过规定时速但未超过百分之五十的,处于二百元罚款。超过百分之五十(未造成交通事故)的,处五百元罚款,每多超过五公里,加处二百元罚款,不足五公里的忽略不计,但最高罚款不得超过二千元。用于计算罚款额的Visual Basic程序如下:
Private Sub Command1_Click()
Dim v0 As Integer, v As Integer, x As Integer
v0 = Val(Text1.Text) 'v0 存储规定速度
v = Val(Text2.Text) 'v存储实际速度
If v > v0 And v <= 1.5 * v0 Then
x = 200
ElseIf v > 1.5 * v0 Then
x = 500+ Int((v - 1.5 * v0) / 5) * 200
Else
x = 0
End If
If x > 2000 Then x = 2000
Label1.Caption = Str(x)
End Sub
运行该程序时,在Text1文本框中输入50,在Text2文本框中输入60,点击Command1时,在Label1的Caption上显示的罚款金为 。
(2)如下一段Visual Basic程序:
Private Sub Command1_Click()
Dim i As Integer,sum As Integer
Dim x As Integer,n as Integer
n=Val(Text1.text)
sum = 0
For i = 1 To n
x = Int(Sqr(i))
If x * x = i Then sum =sum + x
Next i
Label1.Caption = Str(sum)
End Sub
在Text1框中输入10时,点击Command1时,Label1上显示的是 。
19.若已知当前的人均GDP水平和GDP年增长率,可以计算达到某个GDP水平所需年份。在文本框Text1、Text2、Text3中分别输入人均GDP、年增长率和达到的GDP水平,单击计算按钮Command1,在文本框Text4中输出所需年数。程序运行界面如下:
(1)在设计程序界面时,使应使用图b所示“控件工具箱”中的 (填写相应编号)添加“计算”按钮。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim gdp As Single,ddgdp As Single,zc As Single,y As Integer
gdp=Val(Text1.Text)
zc=Val(Text2.Text)
ddgdp=Val(Text3.Text)
y=0
Do While ____①____
____②____
gdp=gdp*(1+zc)
Loop
Text4.Text=Str(y)
End Sub
划线处代码为①
②
20.DO 循环中当型循环的关键字是( ),直到型循环的关键字是( )
三、操作题
21.某考试的多选题有“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
22.在平面坐标系中,有n个节点。某机器人从原点出发,按x坐标从小到大依次寻迹,若x坐标相同,则按y坐标从小到大寻迹,两点间按直线移动。机器人按此规则访问其中的n-1个节点,求机器人寻迹n-1个节点的最短距离(移动轨迹的折线段长度)。
编写一个计算“最短寻迹距离”的程序,功能如下:单击“确定”按钮Command1,读取n个点的坐标,在列表框List1中按x坐标升序显示,若x坐标相同,则按y坐标升序显示。在标签Label1中显示最短的寻迹距离,在标签Label2上显示未访问到的节点的坐标。若有多个节点可以选择,则显示x和y坐标较大的节点。程序运行界面如下图所示。
请回答下列问题:
(1)下列类产生的对象没有Captin属性的是 (单选,填字母:A.Form / B.TextBox / C. Label D.CommandButton)。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
Const n = 5
Dim a(-1 To 2 * n) As Single
Function getdis(i As Integer, j As Integer) As Single
'计算第i和第j个点的直线距离,代码略
End Function
'读取n个点坐标存a(1)~a(2*n)中,a(1)、a(2)存储第1个点的坐标,
'a(3)、a(4)存储第2个点的坐标,依次类推。a(-1)、 a(0)存储原点坐标(0,0)。代码略
Private Sub Command1_Click()
Dim i As Integer, j As Integer, k As Integer , t As Integer
Dim dis As Single, sum As Single, dis1 As Single, dis2 As Single, dis3 As Single
Dim maxdis As Single, ans As Integer
For i = n To 2 Step -1
For j = 2 To i
If a(2 * j - 1) > a(2 * k - 1) Or a(2 * j - 1) = a(2 * k - 1) And a(2 * j) > a(2 * k) Then k = j
Next j
If i <> k Then
t = a(2 * i - 1): a(2 * i - 1) = a(2 * k - 1): a(2 * k - 1) = t
t = a(2 * i): a(2 * i) = a(2 * k): a(2 * k) = t
End If
Next i
List1.AddItem "n个点的坐标"
For i = 1 To 2 * n Step 2
List1.AddItem "(" + Str(a(i)) + "," + Str(a(i + 1)) + ")"
Next i
sum = 0
For i = 1 To n
Next i
maxdis = 0
For i = 1 To n - 1
dis1 = getdis(i - 1, i)
dis2 = getdis(i, i + 1)
dis3 = getdis(i - 1, i + 1)
If Then maxdis = dis1 + dis2 - dis3: ans = i
Next i
dis = getdis(n - 1, n)
If dis >= maxdis Then
maxdis = dis
End If
Label1.Caption = "最短寻迹距离为:" + Str(sum - maxdis)
Label2.Caption = "未访问点的坐标:" + "(" + Str(a(2 * ans - 1)) + "," + Str(a(2 * ans)) + ")"
End Sub
(3)程序加框处的代码有错,请改正 。
四、简答题
23.将一张面值为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
试卷第1页,共3页
试卷第1页,共3页
学科网(北京)股份有限公司
参考答案:
1.A
2.C
3.A
4.B
5.D
6.C
7.B
8.D
9.A
10.B
11.B
12.A
13.A
14.C
15.B
16. Clear 或 AddItem a(t) + 1 a(i) Mod 2 = 1 c + a(i) \ 2
17. B A C D 0、25、75或4、8、78或8、11、81或12、4、84
18.(1)200(2分)
(2)6(2分)
19. 3 ①gdp<ddgdp ②y=y+1
20. While Until
21.(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))
22. B k = 1 sum = sum + getdis(i - 1, i) ans = n dis1 + dis2 - dis3 >= maxdis
23.①100-i-j ②5*i+j+0.5*k=100
答案第1页,共2页
答案第1页,共2页
学科网(北京)股份有限公司
$$