内容正文:
2023-2024学年高一上学期选修一第二单元第四节 循环结构
一、选择题
1.有如下图所示的流程图,根据此流程图可知,最后s的值为( )
A.10 B.32 C.46 D.94
2.有如下VB程序段:
s = "1867234590" : n = Len(s)
m = 1
For i = 1 To n
ch = Val(Mid(s, i, 1))
If ch Mod 2 <> 0 Then
m = m + ch
End If
Next i
Text1.Text = Str(m)
该程序段运行后,文本框Text1中显示的内容是( )
A.25 B.5 C.26 D.15
3.有如下VB程序段:
Private Sub Command1_Click()
Dim i As Integer, j As Integer, n As Integer,st as String
n = Val(Text1.Text)
For i = 1 To n
For j = 1 To i Step 2
st = st + "*"
Next j
List1.AddItem st
Next i
End Sub
该程序段运行时,在文本框Text1中输入5,则在列表框输出的内容为( )
A. B. C. D.
4.某算法的部分流程图如图所示,执行这部分流程后,输出a,b的值分别是( )
A.5,8 B.4,8 C.5,11 D.4,11
5.有如下python 程序段:
s = "1010/1100/1111"
ans,t = 0,0
for i in s:
if "0" <= i <= "1":
t = t * 2 + int(i)
else:
ans += t
t = 0
print(ans)
运行该程序段,输出结果是( )
A.12 B.15 C.22 D.37
6.已知字符串 s 是由字母和数字组成的,现要用 VB 程序实现如下功能,将字符串中的数字字符按照原有顺序移动到 s 的左边,字母字符按照原有顺序移动到字符串右边,如 s=“Su2cc0ess20”执行完程序后变成 s=“2020Success”,为实现上述功能,在横线处填入的代码应该是( )
m=0:k=0
For i = 1 To Len(s)
ch = Mid(s, i, 1)
k = k + 1
If ch >= "a" And ch <= "z" or ch >= "A" And ch <= "Z" Then
a(k) = ch
Else
m = m + 1: ①
Do While j > m
②
j = j - 1
Loop
③
End If
Next i
n = Len(s): s = ""
For i = 1 To n
s = s + a(i)
Next i
A.①j=k ②a(j)=a(j-1) ③a(m) = ch B.①j=k ②a(j)=a(j+1) ③a(j+1)=ch
C.①j=k-1 ②a(j)=a(j-1) ③a(m) = ch D.①j=k-1 ②a(j)=a(j-1) ③a(j+1)=ch
7.在VB 中,用来实现循环结构的语句是 ( )
A.For…Next B.Do While…Loop
C.If…Then… D.Do…Loop Until
8.下列不是Visual Basic程序的基本结构的是( )。
A.顺序结构 B.树形结构 C.分支结构 D.循环结构
9.小明想用数据移位思想将一段长度为n的序列a(n), 以t位置为分界,把前t-1个数和后n-t+1个数调换前后顺序,但保持每段中数据的相对位置不变。例如一段长度为6的序列1、2、3、4、5、6。t=4时,数组a中元素顺序变成4、5、6、1、2、3.实现上述功能的代码如下,下列①、②处填写正确的是( )
t = Val(Text1. Text): m= 2
For i=t-1 To 1 Step-1
k = a(i)
For j=i To n- 1
①
Next j
②
n=n-1
Next i
A.①a(j+1)=a(j)②a(j+1)=k B.①a(j)=a(j+1)②a(j+1)=k
C.①a(j+1)=a(j) ②a(j)=k D.①a(j)=a(j+1) ②a(j)=k
10.某算法的流程图如下图所示。执行这个流程图时依次输入5、4、6、-8、4、0,下列说法正确的是( )
A.a <> 0执行了4次
B.s=s*x+a语句执行了5次
C.输出的s值是表达式4*54+6*53-8*52+4*5的值
D.输出的s值是表达式4*53+6*52-8*5+4的值
11.有以下VB程序段:
For i = 1 To 4
For j = 4 To i + 1 Step -1
s = "*" + s
Next j
List1.AddItem s
Next i
运行上述程序段后,列表框List1中显示的结果是( )
A.
B.
C.
D.
12.某算法的部分流程图如图所示,若输入“50”并执行这部分流程图,变量i的值为
A.9 B.10 C.11 D.12
13.超级素数是指一个素数,每次去掉最后面的一个数字,依然为素数。如 37,去掉最后的7 后,3 仍为素数。统计 1000 以内的超级素数的个数的 VB 程序段如下:
For i = 2 To 1000
flag = True:s = i
Do While flag And s >1
For j = 2 To Int(Sqr(s))
If s Mod j = 0 Then
Exit For
End If
Next j
Loop
If flag And s<>1 Then
End If
Next i
Label1.caption=str(c)
上述程序段中方框处可选语句为
①flag = False ②c = c + 1 ③s = s \ 10
则(1)(2)(3)处语句依次可为( )
A.①②③ B.②①③ C.③②① D.①③②
14.某算法的部分流程图如图所示。
执行这部分流程,输入11,变量i和f的值分别是( )
A.10,True B.10,False C.11,True D.11,False
15.某算法部分流程图如图所示。执行这部分流程,依次输入20、-3、10、8、-11、0,则输出值是( )
A.-11 B.-3 C.8 D.20
二、填空题
16.循环次数未知时,我们通常称为 ,只有当 成立时,才执行循环体。在 python中,使用 语句来创建这类循环。
17.若已知当前的人均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
划线处代码为①
②
18.编程求出1+2+3+……+1000的和。该题程序设计最适合使用_____________结构。
19.阅读程序,写出运行结果
Dim i As Integer
Dim x As Integer
Dim y As Integer
y=30
For i=1 To3
x=Val(InputBox(“x=”))
If y< x Then
y=x
EndIf
Next i
Print y
程序运行后,依次输入:36 87 51
运行后输出结果是 。
20.把一个数分成若干个自然数之和,如果要使这些自然数的乘积最大,那么这些自然数应全是2或3,且2最多不超过2个。在文本框Text1中输入一个自然数,单击“分解”按钮,在列表框List1中输出他们的乘积表达式。程序运行的界面如图所示:
Private Sub Command1_Click()
Dim n As Integer,cj As Integer,s As String
n=Val(Text1.Text)
cj=____①____
s=”s=”
Do While ____②____
If n<>4 Then
n=n-3
cj=cj*3
s=s+”3×”
Else
n=n-2
cj=cj*2
s=s+”2×”
End If
Loop
cj=____③____
If n=3 Then s=s+”3” Else s=s+”2”
Text2.Text=s
Text3.Text=cj
End Sub
划线处代码为①
②
③
三、操作题
21.编写“序列生成”程序,实现如下功能:在文本框Text1中输入一正奇数n,单击“生成序列”按钮Command1,在文本框Text2中显示该序列,且每个元素用逗号“,”分隔。若输入一非正奇数,那么提示“输入非正奇数,请重新输入”;若输入9,那么生成的序列为“1, 2 , 3 , 4 , 5 , 4 , 3, 2 ,1”。程序运行界面如图所示。
(1)设计界面时,为清空文本框Text2的内容,可设置 属性实现。
(2)实现“序列生成”功能的VB程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim n As Integer, i As Integer, mid As Integer
n =
If Then
Text2.Text = "输入非正奇数,请重新输入"
Else
mid = (n + 1) \ 2
Text2.Text = ""
For i = 1 To n
If i = n Then
Text2.Text = Text2.Text + "1"
Else
Text2.Text = Text2.Text + + ","
End If
Next i
End Sub
22.删数问题。输入一个数字串s,删去其中k个数字(k<数字串中数字的个数),使剩余数字在保持相对位置不变的情况下构成一个值最小的整数。例如,s=“19990608”,k=4,处理结果为:608。
删数的算法如下:
(1)如果k>0,则从前往后检测相邻字符,否则,转(3);
(2)①若所有相邻字符都已非降序,则将串尾k个字符删去,k值置0,转(1);
②若相邻两数存在逆序(即前一个数>后一个数),则将前一个数删除,k值变化,然后回到(1);
(3)去掉串首的0,输出结果。
按照上述算法思路,编写了VB程序,功能如下:在文本框Text1中输入数字串,在文本框Text2中输入删数的个数,单击“处理”按钮Command1,在文本框Text3中显示最小的整数。程序运行界面如图所示。
(1)如果输入的数字串为“20160125”,删除个数为4,则结果是 。
(2)实现上述功能的VB程序如下,请在划线处填入合适代码。
delete函数说明:delete(st,x,y)为自定义函数,功能为在字符串st中删除x位置开始的y长度的子串。
Private Sub Command1_Click()
Dim s As String, k As Integer, i As Integer, j As Integer, n As Integer
s = Text1.Text
k = Val(Text2.Text)
n = Len(s)
Do While k > 0
i = 1
Do While i < n And ①
i = i + 1
Loop
If i = n Then
②
n = n - k
k = 0
Else
s = delete(s, i, 1)
n = n - 1
③
End If
Loop
i = 1
Do While n > 1 And Mid(s, 1, 1) = "0"
s = delete(s, 1, 1)
i = i + 1
n = n - 1
Loop
Text3.Text = s
End Sub
Function delete(st As String, x As Integer, y As Integer) As String
delete = Mid(st, 1, x - 1) + Mid(st, x + y) 'mid函数第3个参数省略,则截取从开始位置向右到字符串结尾的所有字符
End Function
四、简答题
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.D
2.C
3.C
4.C
5.C
6.A
7.ABD
8.B
9.D
10.D
11.A
12.B
13.D
14.C
15.C
16. 条件循环 条件 while
17. 3 ①gdp<ddgdp ②y=y+1
18.循环
19.87
20. ①1 ②n<>2 And n<>3 ③cj*n
21. Text Val(Text1.text) n mod 2 <=0 str(mid-abs(mid-i)) End If
22. 12 ① Mid(s,i,1)<=Mid(s,i+1,1) 或 Val(Mid(s,i,1))<=Val(Mid(s,i+1,1)) ② s =delete(s, n - k + 1, k) ③ k = k - 1
23.①100-i-j ②5*i+j+0.5*k=100
答案第1页,共2页
答案第1页,共2页
学科网(北京)股份有限公司
$$