浙教版(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、4
  • 4. 有如下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、3
  • 5. 有如下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、Day
  • 7. 有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-1
  • 8. 某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、6
  • 10. 有一个报数游戏,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)、加框处程序代码有误,请改正。