第4单元 计算与问题解决 知识点题库

编写一个删除数字字符串s中的最大和次大数字字符的程序。具体功能如下:在文本框Text1中输入一个数字字符串,单击“删数”按钮Command1,将删除后的结果显示在文本框Text2中。程序运行界面如下图所示:

  1. (1) 要使程序运行时,按钮Command1上显示的标题为“删数”,可在Form_Load事件处理过程中添加语句(单选,填字母:A .Caption.Command1=″删数″/B .Command1.Caption=″删数″/C .Caption=″删数″)。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Private Sub Command1_Click()

    Dim s As String,ch As String

    Dim i As Integer,n As Integer

    Dim max1 As Integer,max2 As Integer

    s=Text1.Text:n=Len(Text1.Text)

    If Mid(s,1,1)>Mid(s,2,1) Then

    max1=1:max2=2

    Else

    max1=2:max2=1

    End If

    For i=3 To n

    ch=Mid(s,i,1)

    If ch>Mid(s,max1,1) Then

    max1=i

    ElseIf ch>=Mid(s,max2,1) Then

    max2=i

    End If

    Next i

    For i=1 To n

    If Then Text2.Text=Text2.Text & Mid(s,i,1)

    Next i

    End Sub

  3. (3) 若在文本框Text1中输入的内容为“82176736”,单击按钮Command1,文本框Text2中显示的内容是
学习完数组这个知识点后,小林设计了一个程序,该程序的主要功能是,先给数组中每个元素赋值,再找出数组中最大的数,具体程序如下。

  1. (1) 数组a中共有个变量。
  2. (2) 数组a中所有变量的类型(相同或不相同)。
  3. (3) 将程序中①的代码补充完整
  4. (4) 将程序中②的代码补充完整
有如下VB程序段:

a(l) = 5: a(2) = 16: a(3) = 22: a(4) = 28: a(5) = 35

a(6) = 43: a(7) = 52: a(8) = 67: a(9) = 78: a(10) = 89

i = 1: j = 10: n = 0: flag = True

Key = Val(Textl. Text)

Do While i <= j And flag = True

  m = (i + j) \ 2

  If a(m) = Key Then

    flag = False

  Elself a(m) < Key Then

    i = m + 1

    n = n - 1

  Else

    j = m - 1

    n = n + 1

  End If

Loop

变量n的值最终为0,则文本框Text1输入的数值范围可能是(  )

A . (28,35) B . (43,52) C . [52,67] D . [78,89]
某数组有9个元素,值为3、6、7,10, 12,17,26,41、69,下列说法中不正确的是(  )
A . 若用对分法查找数据“10”,问的数据依次为12、6、7、10。 B . 在该数组中查找数据,既可以用顺序查找也可以用对分查找 C . 若用对分查找算法查找数据,最多需要的查找次数是3次 D . 若用顺序查找算法查找数据,最多需要的查找次数是9次
【加试题】有1个升序排列的数组a(a(1)~a(n),n≥3),从左到右相邻两个元素的差值(后一个元素值减去前一个元素值)先由小到大、再由大到小,且相邻两个差值不相等,为了查找相邻两个元素的最大差值,小李编写的VB程序段如下:

i=1:j=n

Do While i+1<j   

     m=(i+j)\2

     If a(m+1) -a(m) >a(m) -a(m-1) Then

   

     Else

   

     End if

Loop

Label 1.Caption=“相邻两个元素的最大差值是”+Str(a(j) -a(i) )

上述程序段两个方框处的语句分别为(  )

A . ①i=m ②j=m B . ①i=m ②j=m-1 C . ①i=m+1②j=m-1 D . ①i=m+1②j=m
某程序代码如下:

i=1: j=100: key=11

Do While i<=j

 mid1=i+(j-i)\4: mid2=i+(j-i)\2: mid3=j-(j-i)\4

If mid1=key Or mid2=Key Or mid3=key=Then

Exit Do

If i<=key And key <mid1 Then j=mid1-1: n1=n1+1

If mid1<key And key<mid2 Then

i=mid1+1: j=mid2-1: n2=n2+1

End If

If mid2<Key And key<mid3 Then

i=mid2+1: j=mid3-1: n3=n3+1

End If

If mid3<key And key<=j Then

i=mid3+1: n4=n4+1

End If

Loop

n=n1+n2+n3+n4

程序运行结束后,变量n的值是(  )

A . 1 B . 2 C . 3 D . 4
在使用计算机解决问题时,选择合适的算法,是有效解决问题的关键。分析下面的问题,请选择最合适的算法:__________(请用英文字母填写)

搬砖问题:100块砖,100人搬,一个男人搬4块,一个女人搬3快,两个小儿拾1块,要求一次搬完,问男、女、小儿各多少人。

A . 解析法 B . 递归法 C . 穷举法 D . 排序法
某查找算法的部分VB程序代码如下:

i=1:j=8:k=0

key=15

Do While i<=j

  k=k+1

  m=Int((i+j)/2)

  If key<a(m)Then j=m-1 Else i=m+1

Loop

数组元素a(1)到a(8)的数据依次是“14,15,15,17,28,30,37,40”,该程序执行完毕后,下列各变量的值不正确的是(    )

A . i=4 B . m=2 C . j=3 D . k=3
某对分查找算法的VB程序段如下:

Key = (Int(Rnd * 7) + 1) * 3

low = 1: high = 8

Do While low <= high

m = (low + high) \ 2

If a(m) >= Key Then

high = m - 1

Else

low = m + 1

End If

Loop

Text1.Text = high

数组元素a(1)到a(8)的值依次为“5,7,9,11,15,15,16,22”。执行该程序段,则文本框Text1中显示的内容可能是(    )

A . 3 B . 4 C . 5 D . 8
算法就是用计算机求解某一问题的方法,是能被机械地执行的动作或指令的无穷集合。
numpy是一个科学计算包,其中包括很多,如、矩阵计算方法、、线性代数等。
下列可以导入Python模块的语句是(    )
A . import module B . input module C . print module D . def module
用计算机无法解决“输出所有偶数”,其原因是解决该问题的算法违背了算法特征中的(  )
A . 有一个或多个输出 B . 有穷性 C . 确定性 D . 可行性
通过对算法的理解,下列叙述中能称为算法的是(   )。
A . 手机支付需要连接网络 B . 一般商家都支持手机支付 C . 手机支付需要进行扫描二维码、输入金额、输入支付密码这些步骤 D . 手机支付减少了纸币的使用
编写“素数查找”程序,实现如下功能:单击“生成”按钮,随机生成50个150至200(包括150和200)之间的正整数,显示在下方,每行显示10个,共5行。单击“筛选”按钮,从上面50个数中筛选出是素数的数,重复的只显示一次。程序运行界面如图所示。

请根据算法将下列程序补充完整。

Private Sub Command1_Click()

    Label3.Caption = ""

    For i = 1 To 50

        a(i) =

        If i Mod 10 = 0 Then

            Label3.Caption = Label3.Caption + CStr(a(i)) + vbCrLf '换行

        Else

            Label3.Caption = Label3.Caption + CStr(a(i)) + " "

        End If

    Next i

End Sub

Private Sub Command2_Click()

    Label4.Caption = ""

    n = 0

    For i = 1 To 50

        For k = 2 To a(i) - 1

            If Then Exit For

        Next k

        If k = a(i) Then

            n = n + 1

        If n = 1 Then b(n) = a(i)

        For j = 1 To n - 1

            If b(j) = a(i) Then: Exit For

            If j = n - 1 Then b(n) = a(i)

        Next j

    End If

Next i

For j = 1 To n

    Label4.Caption = Label4.Caption + + " "

Next j

在设计算法解决问题时,每一个步骤都必须有确切的含义,这体现了算法特征中的(   )。
A . 确定性 B . 有穷性 C . 可行性 D . 输出
字母排队游戏。有一组不重复的字母串,现根据大小写分别进行排队。排队规则如下:①根据字母大小写按原顺序提取字母,大写字母排一队,小写字母排一队;

②固定两队字母中最小字母在各队中的位置;

③将两队其余字母按从小到大的顺序排在各自最小字母的两边。大写字母队列先从最小字母右边排队,排到最后位置再从最小字母左边开始排,直到第一个位置为止。同理,小写字母队列先从左边开始排队,再排右边。过程如图1所示:

编写VB程序,实现字母排队功能:在文本框Text1中输入待排字母串后,单击“排队”按钮Comand1,在列表框List1中显示排队结果。程序运行界面如图2所示。

请回答下列问题:

  1. (1) 根据程序运行界面,“字母排队”是窗体Form1的(单选,填字母:A .对象名/B .属性名/C .属性值/D .过程名)。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Dim flag(1 To 52) As Boolean      'flag数组初值为False

    Private Sub Command1_Click()

        Dim su As String, sd As String, ch As String      'su,sd分别存储大小写字母队

        Dim i As Integer, n As Integer

        Dim ku As Integer, kd As Integer

        s = Text1.Text:n =Len(s)

        For i=1 To n

            ch =

            If ch >="A" And ch <="Z" Then su= su+ ch

            If ch>="a"Andch<="z"Thensd=sd+ch

        Next i

        ku = search(su, 0)

        kd = search(sd, 6

        su=“”:sd=“”

        For i=1 To 52

            If flag(i) And i<=26 Then su=su+Chr(i+64)

            If flag(i) And i>26 Then

        Next i

        List1.AddItem sort(su,ku, 1)

        List1.AddItem sort(sd,kd, -1)

    End Sub

    Function search(s As String, k As Integer) As Integer     '确定字母队列并查找最小元素位置

        Min = Mid(s,1, 1)

        flag(Asc(Min) - 64 - k) = True

        mini = 1

        For i=2 To Len(s)

            ch = Mid(s, i,1)

            If ch<Min Then mini=i:Min=ch

            

        Next i

        search = mini

    End Function

    Function sort(s As String, wz As Integer, k As Integer) As String      '排队

        nx = Len(s)

        sort = Mid(s, 1,1)

        i=2

        nc=1

        Do While nc <= 2

            For j=wz+k To nx^((1 +k) \ 2) Step k

                If k= 1 Then

                    sort = sort + Mid(s,i,1)

                Else

                    sort = Mid(s, i, 1) + sort

                End If

                i=i+1

            Next j

            

            nc=nc+1

        Loop

    End Function

  3. (3) 程序中加框处代码有错,请改正。
有n个连续的自然数,删除首尾两端之外的其中一个数后存储在数组元素a(1)到a(n-1)中,利用对分查找算法找出这个数的某VB程序段代码如下:

Const n=10

i= 1:j=n- 1

Do While j-i>= 2

    m=(i+j)\2

    If  ⑴  Then

        i= m

    Else

          ⑵ 

    End If

Loop

Text1.Text= Str(  ⑶  )

上述程序中(1)(2)(3)划线处可选语句有:

①a(j)-a(m)=j-m

②a(m)-a(i)=m-i

③j=m-1

④j=m

⑤a(i)+1

⑥a(i)

则上述程序中(1)、(2)、(3)划线处的代码依次为(       )

A . ①③⑤ B . ②④⑤ C . ①③⑥ D . ②④⑥
[矩阵上的枚举]大家有接触过地雷游戏吗?如图所示是一个“挖地雷”游戏的界面,9X9个格子里都有一个数字,红旗代表地雷可以用“★”表示,图中共有10个地雷,“一一”表示空白格,边上的“▲”表示边框。

定义规则:你需要标记出所有空白格子周边相邻的格子上有多少地雷(在正方向和斜45度方向挨着的格子均可视为相邻),并将数量标记在空白格中,如下图所示。

实现上述功能的VB程序如下,请在划线处填入合适的代码。

Dim n As Integer,m As Integer      'n 存储地雷区域大小,m存储地雷数目

Dim a(1 To 100 * 100) As String

Dim b(1 To 100 * 100) As Integer

Private Sub Command1_Click()       '按要求生成数组a中的数据并显示

    Randomize

    List1. Clear

    n=9 : m=10

    Dim s As String, pos As Integer, i As Integer

    s=" " : n=n+2

    For i=1 To n * n

        If isinside(i) Then a(i)="— —"

        Else a(i)="▲"

    Next i

    For i=1 To m

        pos=Int(Rnd * n * n)+1

        Do While a(pos)="★" Or

            pos= Int(Rnd * n *n)+1

        Loop

            a(pos)="★"

    Next i

    For i=1 To n* n

        s= s+" "+a(i)

        If i Mod n=0 Then

            List1. AddItem s

            s=" "

        End If

    Next i

End Sub

Private Sub Command2_Click()

    Dim i As Integer, j As Integer, row As Integer

    Dim col As Integer, start As Integer, temp As String

    For i=1 To n* n

        If a(i)="★" Then

        row=(i-1) \ n+1 : col=(i-1) Mod n+1

            For j=1 To 3

                start=

                If a(start+col- 1)="— —" Then b

                (start+ col- 1)= b(start+col- 1)+1

               If a(start+col)="— —" Then

                    b(start+ col)= b(start+col)+1

                If a(start+col+1)= "— —" Then b

                (start+col+ 1)= b(start+ col+1)+1

            Next j

        End If

    Next i

    List2. Clear

    For i=1 To n

        temp=" "

        For j=1 To n

            If a((i-1) * n+j)="— —" Then

                temp=temp+" "+ Str(b((i-1) * n+j))

            Else

                temp= temp+" "+a((i- 1)*n+j)

            End If

        Next j

        List2. AddItem temp

    Next i

End Sub

Function isinside(x As Integer) As Boolean

    isinside= x>n And And x

    Modn<;>1AndxMod<> 0

End Function

有如下VB程序:

Dim a(0 To 7) As Integer

a(0)=1:a(1)=1:a(2)=2:a(3)=2:a(4)=2:a(5)=3:a(6)=3:a(7)=5

i = 0:j=7:n=0

Key=Int(Rnd*7)

Do Whilei <=j

    m=(i+j+1)\2

    If a(m) = Key Then

        Exit Do

    ElseIf a(m) < Key Then

        i=m+1:n=n-1

    Else

        j=m-1:n=n+1

    End If

Loop

Print (n)

执行该程序,输出结果可能的是(    )

A . 3 B . 1 C . -4 D . 2