浙教版(2019)高中信息技术必修一 3.3 简单算法及其程序实现
试卷更新日期:2021-12-14 类型:同步测试
一、单选题
-
1. 下列问题中可以用枚举算法解决的是( )。A、根据三个系数a、b、c的值,求一元二次方程ax2+bx+c=0的解 B、找出一串钥匙(30把)中所有能打开某一实验室门的钥匙 C、将10个评委的打分按由大到小的顺序进行排序 D、已知5个电阻阻值,求它们并联后的阻值2. 已知由字母组成的字符串s,现要实现如下功能:将字符串s中的字母按照26个英文字母顺序依次输出(重复出现的字母只需输出一次)。如s="Congratulate",输出结果为"aceglnortu",为实现上述功能,在横线处填入的代码应该是( )
Dim a(1 To 26)As Integer
s=Text1. Text
For i=1 To Len(s)
①
If c>="A" And c<="Z" Then c=Chr(Asc(c)+32)
②
Next i
For i=1 To 26
If a(i)<> 0 Then Label1.Caption= Label1.Caption+ ③
Next i
A、①c=Mid(s,i,1) ②a(Asc(c)-96)=a(Asc(c)-96)+1 ③Chr(96+i) B、①c=Mid(s,i,1) ②a(i)=a(i)+1 ③Chr(a(i)) C、①c=Mid(s,i,1) ②a(Asc(c)-96)=a(Asc(c)-96)+1 ③Chr(a(i)) D、①c=Mid(s,i,1) ②a(i)=a(i)+1 ③Chr(96+i)3. 有如下VB程序段:Dim a(1 To 10) As Integer
s = "7218634594": n = Len(s)
t = 0
For i = 1 To n - 1
a(i) = Val(Mid(s, i, 2))
Next i
For i = 1 To n - 2 Step 2
k = i
For j = i + 2 To n - 1 Step 2
If a(j) < a(k) Then k = j
Next j
If k <> i Then
temp = a(i): a(i) = a(k): a(k) = temp: t = t + 1
End If
Next i
Text1.Text = Str(t)
该程序段运行后,文本框Text1中显示的内容是( )
A、1 B、2 C、3 D、44. 有如下VB程序段:a=1: b=1: n=12
f(1)=a: f(2)=b
For i=3 To n
c=a+b
f(i)=c Mod 4
a=b
b=c
Next i
执行该 段程序后,数组元素f(12)的值为( )
A、0 B、1 C、2 D、35. 有如下VB程序:Dim i As Integer,j As Integer,k As String,n As Integer
n=3
List1.Clear
For i=1 To n
k=“”
For j=1 To i
k=k+“*”
Next j
List1.AddItem k
Next i
该程序运行中,在列表框List1中显示的是( )
A、 B、 C、 D、6. 有如下程序段:Function delStr (S As String, m As Integer) As String
Dim n As Integer:n = Len(S)
If m <1 Or m > n Then delStr = "输入位置有误!"
If m = 1 Then delStr = Mid(S, 2, n-1)
If m < n Then delStr = Mid(S, 1, m-1)+Mid(S, m+1, n-m)
If m = n Then delStr = Mid(S, 1, n-1)
End Function
Private Sub Command1_ Click()
Dim S As String:Dim i As Integer
S = Text1.Text
For i = 1 To 10 Step 2
S = delStr(S, i)
Next i
Text2. Text = S
End Sub
文本框Text1中输入Happybirthday,执行该程序段,文本框Text2中显示的是( )
A、apybrtda B、apbrhday C、Happybirhday D、Day7. 有n个整数存放在数组a中,整数k1与k2且k1<k2。某程序段如下:i = 1: L = 0: R = n + 1
Do While i < R
If a(i) < k1 Then
L = L + 1
If L <> i Then tt = a(i): a(i) = a(L): a(L) = tt
i = i + 1
ElseIf a(i) > k2 Then
R = R - 1
tt = a(i): a(i) = a(R): a(R) = tt
Else
i = i + 1
End If
Loop
则执行上述代码后,下列说法正确的是( )
A、数组a变成升序排列 B、a(L)<=k1 C、a(R)>=k2 D、a数组中大于等于k1小于等于k2的元素个数为R-L-18. 某VB程序段如下:s = "Hello World"
s1 = ""
n = Len(s)
For i = 1 To n \2
If Mid(s, i, 1) > Mid(s, n - i + 1, 1) Then
s1 = s1 + Mid(s, i, 1)
Else
s1 = Mid(s, n - i + 1, 1) + s1
End If
Next i
Text1.Text = s1
执行该程序段后,在文本框Text1中显示的是( )
A、WlleH B、oorld C、dlroo D、Orldo二、程序分析
-
9. 为了丰富学生业余生活,学校举办校园歌手大赛,邀请了5位音乐老师作为评委打分,打分的上限是10分。统计选手得分时,去掉一个最高分,再去掉一个最低分,取评委打分的平均值作为选手的最终得分。程序运行结果界面如图所示。
请分析任务,完成下列题目。
程序代码如下:
Private Sub Command1_Click()
Dim s As single
Dim Max , Min ,i As Integer
Dim a(5) As Integer
Max = 0
Min = ①
s = 0
For i = 1 To 5
a(i) = InputBox("请输入第" & i & "个分数")
s = s + a(i)
If ② Then Max = a(i)
If Min > a(i) Then Min = a(i)
Next i
s = ③
Text1.Text = Max
Text2.Text = Min
Text3.Text = s
End Sub
Private Sub Command2_Click()
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
End Sub
Private Sub Command3_Click()
End Sub
请分析任务,完成下列题目。
(1)、下列控件在本程序窗体中用到的是( )A、列表框 B、单选按钮 C、标签 D、组合框(2)、为精确计算选手的最终得分,程序中变量s的数据类型应定义为( )A、整型 B、单精度型 C、字符型 D、布尔型(3)、程序中①所在位置表达式正确的是( )A、0 B、1 C、5 D、10(4)、程序中②所在位置表达式正确的是( )A、Max < a(i) B、Max >a(i) C、Max =a(i) D、Max <> a(i)(5)、程序中③所在位置表达式正确的是( )A、s/3 B、(s+Max+ Min)/5 C、(s - Max - Min) / 3 D、(s - Max - Min) / 5(6)、变量s所表示的含义是( )A、最低分 B、最高分 C、评委打分 D、最终得分(7)、当一个选手的得分分别为9,8,9,7,8的时候,下列最终得分计算正确的是( )A、8 B、8.33 C、7.66 D、7(8)、程序中Command1控件响应的事件是( )A、单击事件 B、双击事件 C、载入事件 D、活动事件(9)、程序中数组a(5)包含的元素个数是( )A、1 B、5 C、6 D、10(10)、程序“For i = 1 To 5 ……Next i”中“s = s + a(i) ”被执行的次数是( )A、1 B、4 C、5 D、610. 有一个报数游戏,n个人排成一圈,游戏开始时规定个报数号m,然后从其中一个人开始按顺时针报数1,2,3,…,n,当某人报到的数为m的倍数时,即被淘汰,其他人继续游戏,直到最后。现用VB设计了一个程序,程序界面如下图所示。在文本框Text1中输入参加游戏的人数n,在文本框Text2中输入报数号m,单击“报数”按钮,即在列表框List1中显示每次被淘汰的人的顺序号。实现上述功能的VB代码如下,但加框处有错,请改正。
Private Sub Command1_Click()
Dim n As Integer,m As Integer
Dim a(1 To 50)As Integer
n= Val(Text1. Text)
m= Val(Text2. Text)
For i= 1 To n
Next i
s=0;j=0
Do While s <n
t=0
Do While t <m
t=t+ a(j)
Loop
a(j)=0
s=s+1
List1. Additem"第"+Str(s)+"次:"+Str(j)
Loop
End sub
(1)、“报数”按钮的对象名称是。(2)、程序代码中,加框处有错,请改正。应改为
(3)、程序代码中,将横线处语句补充完整。(4)、程序运行结束后,变量t的值是。11. 小明用VB编写了统计短文(不超过500字)中英语单词频次的程序。在文本框Text1中输入短文,单击“单词统计”按钮Count后,在列表框List1中按字典升序输出单词(不区分大小写)和出现频次,程序运行结果如图所示。请回答下列问题:
(1)、观察程序代码,该事件处理过程名为。(2)、实现上述功能的 VB 程序如下,请在划线处填入合适的代码。Private Sub Count_Click()
Dim word(1 To 500) As String, num(1 To 500) As Integer
Dim s As String, c As String, tmp As String, t As Integer
Dim i As Integer, j As Integer, k As Integer, low As Integer, high As Integer
Dim m As Integer, n As Integer, b As Integer
For i = 1 To 500
num(i) = 0
Next i
s = Text1.Text : n = Len(s)
i = 1 : b = 1 : m = 0 : j = 0
Do While i <= n
c = Mid(s, i, 1)
If c >= "A" And c <= "Z" Or c >= "a" And c <= "z" Then
j = j + 1
Else
If j > 0 Then
tmp =
low = 1
high = m
Do While low <= high
t = (low + high) \ 2
If tmp = word(t) Then
Exit Do
If tmp < word(t) Then
high = t - 1
Else
low = t + 1
Loop
If Then
For k = m To low Step -1
word(k + 1) = word(k)
num(k + 1) = num(k)
Next k
num(low) = 1
m = m + 1
Else
num(t) = num(t) + 1
End If
j = 0
End If
b = i + 1
End If
i = i + 1
Loop
List1.Clear
For i = 1 To m
List1.AddItem word(i) + ":" + Str(num(i)) + "次"
Next i
End Sub
Function Lowcase(t As String) As String
Dim c As String, s As String, i As Integer
s = ""
For i = 1 To Len(t)
c = Mid(t, i, 1)
If c >= "A" And c <= "Z" Then s = s + Chr(Asc(c) + 32) Else s = s + c
Next i
End Function
12. 亲戚寻找。小李总是因为认不清亲戚而苦恼,于是他设计了如下程序来模拟亲戚寻找的过程。已知:如果1和2是亲戚,1和3是亲戚,则2和3也是亲戚。代码思维如下:1)将每个人看成是一个钩码,能挂在另一个挂钩底下,自己底下也能挂其他挂钩。
2)如果两个钩码在同一条钩码串上,则为亲戚(如2、3都能找到1)。
3)如果两个是亲戚但不在一串钩码上,则可将其中一串的最上面的钩码挂在另一串的下方。
例如从图a加框处的前三行数据可得到图b所示的钩码串1和钩码串2,从第四行数据可知9、5也为亲戚,则可将两串钩码合并,合并后3为2的顶端,5为3的顶端,其余数据以此类推。
根据算法思想,编写VB程序功能如下:程序初始化时给出6条亲戚关系显示在List1中,单击“理关系”按钮,在List2中显示每个人所在钩码的顶端编号。在Text1和Text2中分别输入两人的编号,单击“询问”按钮,输出两个人是否为亲戚关系。程序运行界面如图a所示。
(1)、根据图a数据,若输入两人的编号为4和5,则两人的关系是否为亲戚(填:是/否)。(2)、实现上述功能的VB程序如下,请在划线处填入合适的代码。Const n = 9 '总人数
Const m = 6 '已知的亲戚关系数
Dim a(1 To n) As String , b(1 To n) As String
Dim f(1 To n) As String '记录不同的亲戚钩码串成员,每条亲戚钩码串内互为亲戚
Dim k As Integer '亲戚钩码串的数目
Private Sub Form_Load()
'初始化List1和List2,生成m条亲戚关系,每条亲戚关系的编号对应存储在数组a(i)和b(i) '中,在List1中输出a(i)和b(i),代码略
End Sub
Private Sub Command1_Click()
Dim i As Integer, x As Integer, y As Integer
f(1) = a(1) + b(1) '利用a(1)、b(1)生成第一条钩码串存储在f(1)中
k = 1 'k为钩码串编号
For i = 2 To m
x = root(a(i), 0): y = root(b(i), 0) 'x为调用函数获取a(i)所在的钩码串编号
If x = 0 And y = 0 Then k = k + 1: '根据x与y分类讨论
If x <> 0 And y = 0 Then f(x) = f(x) + b(i)
If x = 0 And y <> 0 Then f(y) = f(y) + a(i)
If x <> y And x <> 0 And y <> 0 Then 'x、y在不同钩码串则将两条钩码串合并
f(x) = f(x) + f(y): f(y) = f(k): k = k - 1
End If
Next i
For i = 1 To n '输出每个人所在钩码的顶端编号
x = root(CStr(i), 0): y = root(CStr(i), 1) 'Cstr()函数用于去除字符前导空格
If x <> 0 Then
If y = Len(f(x)) Then List2.AddItem Str(i) + " " + CStr(i)
If y <> Len(f(x)) Then List2.AddItem Str(i) + " " +
End If
Next i
End Sub
'按钮Command2的功能为判断输入的两个人是否为亲戚关系,代码略
Function root(a As String, b As Integer) As Integer '参数a表示待查找目标,参数b
'表示返回值类型,0表示返回目标所在钩码串编号,1表示返回目标在该钩码串中的位置
Dim m As Integer, n As Integer, i As Integer, j As Integer
m = 0: n = 0: i = k: j = 0
Do While i > 0
If a = Mid(f(i), Len(f(i)) - j, 1) Then m = i: n = Len(f(i)) - j: Exit Do
j = j + 1
If j = Len(f(i)) Then i = i - 1: j = 0
Loop
If Then root = m Else root = n
End Function
13. 编写一个VB程序,实现如下功能:输入s位数字构成的数字字符串(第1位数字不为0),移除k (0<k<s)个数字后,在保证原数字相对位置不变的情况下,使剩余数字组成的新数为最小(注:新数第1位不能为0)。例如8个数字构成的数字字符串“71803296”,移除3个数字,得到5位数字构成的最小数是“10296”,具体算法如图a所示。算法分析:要使得到的5位数字最小,首先需保证能取到5个数字,且首位应尽量小,那么取首位数的范围应保证余下有4个数字,即在前4位中选最小非0的数字。
程序运行时,在文本框Text1中输入一个数字字符串,在文本框Text2中输入要移除的数字个数,单击“运行”按钮CmdRun后,在标签Labell显示得到的最小新数,程序运行界面如图b所示。
(1)、程序运行时,若要在名为Form1的窗体标题上显示“删数”,可以在Form Load事件处理过程中添加语句为(单选,填字母:A . Form1. Text ="删数"\B . Form1. Caption ="删数"\C . Form1. AddItem"删数")(2)、实现上述功能的VB程序代码如下,请在划线处填入合适的代码。Private Sub CmdRun_ Click()
Dim Num As String,New_num As String ' Num为输入的数字字符串
Dim i As Integer, j As Integer, m As Integer,
Dim As Integer, s As Integer, k As Integer
Dim a(30) As String, b(30) As Integer
Num = Text1. Text: s = Len(Num)
k = Val (Text2. Text) 'k为删除数字个数
For i=1 To s
a(i) = Mid(Num,i,1)
Nexti
j =1
m=1
n=
For i=m+l To n '取第一个非零最小数字
If Then m=I '加框处程序代码有误,请改正
Next i
b(j)= m
Do While '取其他最小数字
m=m+1
n=n+1
For i=m+1 To n
If a(i) < a(m) Then m= i
Next i
j =j+1:b(j)=m
Loop
For i= m+1 To s '最后直接取的数字
j =j+1:b(j)=i
Next i
For j=1 To s- k '输出最小数
New_ num =
Next j
Labell. Caption = New_num
End Sub
(3)、加框处程序代码有误,请改正。