4.3 非数值计算 知识点题库

有6位学生的身高分别为165,170,172,175,176,180。其中,小民的身高为175,若老师采用对分查找法想要找到小民,则需要找多少次才能够找到(   )
A . 2 B . 3 C . 4 D . 5
已知单调函数 在[0,1]区间存在一个 ,使 。现用对分查找法搜索 的值,开始搜索区间为[0,1],若经过10次对分查找后还需继续搜索,则第11次搜索区间的长度为(   )
A . 1/2 B . 1/10 C . D .
【加试题】实现某对分查找算法的VB程序段如下:

  a(1)=12:a(2)=32:a(3)=70:a(4)=88:a(5)=90:a(6)=97

  i=1:i=6:n=0

  key=Val(Text1.Text)

  Do While i<=j

    n=n+1

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

    If key=a(m)Then Exit Do        ‘Exit Do表示退出循环

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

  Loop

  Text2.Text=Str(n)

运行程序,在文本框Text1中输人100,程序段运行后,文本框Text2中显示的内容为(  )

A . 1 B . 2 C . 3 D . 4
【加试题】数组a中依次存放6个有序数据“23 33 44 55 66 77”。

Dim a(1 To 10) As Integer

Dim s As String, n, key As Integer

a(1) = 23: a(2) = 33: a(3) = 44: a(4) = 55: a(5) = 66: a(6) = 77

i = 1: j = 6: c = 0: key = 35

Do While i <= j

c = c + 1

m = (i + j) \ 2

If (j - i + 1) Mod 2 = 0 Then m = m + 1

If a(m) = key Then Exit Do

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

Loop

该程序段运行后,下列各变量的值不正确的是(  )

A . i=3 B . j=2 C . c=3 D . m=2
有如下VB程序段:

a(1)=2: a(2)=6: a(3)=8: a(4)=9: a(5)=12

a(6)=15: a(7)=17: a(8)=18: a(9)=22: a(10)=30

k=Val(Text1.Text)

i=1: j=10

Do While i <=j

 m=(i+j) \ 2

 If a(m) <=k Then

    i=m+1

 Else

    j=m-1

 End If

Loop

Text2.Text=Str(a(i))+"← →"+Str(a(j))

程序运行时,文本框Text1中输入5,文本框Text2中显示的内容是(  )

A . 2← →1 B . 6← →8 C . 2← →6 D . 6← →2
用对分查找从数列“1,5,9,13,16,20,33,40,61,77,89”中查找“5”,一共需要比较的次数为(  )
A . 2 B . 3 C . 4 D . 5
有8阶楼梯,从第0阶开始往上走,每次可以走一步或者两步,自定义函数fg可以计算走完n阶楼梯有多少种走法:

Function fg(n as Integer)As Integer

 If n=1 fg=1

 If n=2 fg=2

 If n>=3 fg=fg(n-1)+fg(n-2)

End Function

请问走完这8阶楼梯的走法有(  )

A . 34种 B . 35种 C . 36种 D . 37种
小李用VB编写了一个VB程序,在文本框Text1中输入任意字串s,单击命令按钮Command1,统计s中以各连续数字字串为一因子的数字之和。如输入字符串 “ast23bcde567fg8”,则输出598,即23+567+8,并在Text2中输出结果。程序界面如图所示。代码如下:

  1. (1) 若要将文本框的默认值设为空,则应设置文本框的属性为空。
  2. (2) 为实现上述功能的VB程序,请在划线处填写合适的代码。

    Private Sub Command1_Click()

     Dim s As String, a As String, b As String

     Dim p As Integer, sum As Integer

     s=Text1.Text + "e"  ′加一个结尾非数字字符

     i=1

     p=0

     sum=0

     Do While i<Len(s)

      a=Mid(s,i,1)

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

      If (a>="0" And  a<="9") And (b>="0" And  b<="9") Then

       p=p*10+Val(a)

      

       p=p*10+Val(a)

       sum=sum+p

      

       i=i+1

      End If

      i=i+1

     Loop

     Text2.Text=Str(sum)

    End Sub

  3. (3) 若输入字符串是“a2b056789bc8”,则程序运行后显示的结果是:
幻方是一种将数字安排在正方形格子中,使每行、列和对角线上的数字和都相等的方法。n阶幻方是由1~n2之间的自然数组成的一个n阶方阵,其各行、各列及对角线所含的数字之和均相等。例如3阶幻方(如图1),幻和为15。

奇数阶幻方的构造是所有幻方中最简单的,可以按照如下规则来实现:

⑴将1放在第一行中间一列;(如图2)

⑵从2开始直到n*n为止,各数按下列规则存放:

假设当前要存放的数为k,则k存放在k-1)数的右上方并按照规则

①若(k-1)放在第1行且不是最后一列,则将k存放在n行,(k-1)所在列右侧;(如图3)

②若(k-1)放在第n列且不是第一行,则将k存放在第1列,k-1)的上1行;(如图4)

③若(k-1)即不在第1行也不在最后1列:

若(k-1)右上方有数,则将k放在(k-1)的下1行的同一列。(如图5)

若(k-1)右上方没有数,则将k放在(k-1)的右上方;(如图6)

④若(k-1)在第1行第n列,将k填在(k-1)的正下方(如图7)

  1. (1) 用下图的程序生成5阶幻方后,List1中的第一行显示的是

  2. (2) 30阶以内的幻方程序如下图,代码如下,请完成代码填空

        Private Sub Command1_Click()

        Dim i As Integer, i As Integer, n As Integer      ‘i表示行,j表示列

        Dim a(1 To 1000) As Integer, k As Integer      ‘数组a依次保存幻方中的数

        Dim s As String

        n= Val(Text1.Text)

        j=  ①   : a(j)=1

        i=1

        For k =2 To n*n

            If i=1 And j<>n Then

            i=n: j=j+1

            a((i-1)*n+j)=k

        ElseIf j= n And i<> 1Then

              ②   : j=1

            a((i-1)*n+j)=k

        ElseIf i=1 And j=n Then

            i+1 =1

            a((i-1)*n+j)=k

        ElseIf i <> 1 And j<> n Then

            If   ③   Then

                i=i-1:j=j+1

            va((i-1)*n+j)=k

            Else

                i=i+1

                a((i-1)*n+j)=k

            End If

        End If

    Next k

    List1. Clear

    For i=1 To n

        s=“”

        For j=1 To n

            s=s+ format(a((i-1)*n+j))

        Next j

        List1AddItem s

    Next i

    End Sub

    Function format( x As Integer) As String      ‘将数字字符串格式化为3个字符长度

    Dim n As integer, i As Integer

    format =Str(x)

    n=Len(format)

    For i=1 To   ④ 

        format ="”+ format

    Next i

    End Function

     ② ③ ④ 

按钮Command1的鼠标单击事件处理过程如下:

Private Sub Command1_Click ( )

Dim st (1 To 6) As string

st(1)= “she”: st(2)= “her”: st(3)=“your”

st(4)=“me”: st(5)= “you”: st(6) =“i”

  Key Text1 Text

  t= False

  i = 0

  Do While i < 6 And t= False

    i=i+1

    If st(i) = Key Then t = True

  Loop

  If t= False Then i =0

  Text2. Text Str(i)

End Sub

程序运行时,在文本框中输入“you”后单击按钮Command1,则文本框Text2中显示的内容是(  )

A . 0 B . 1 C . 5 D . 7
有如下VB程序段:

i = 1: j = 9: flag = False

Key = Val(Text1.Text)

Do While i < j

m = (i + j + 1) \ 2

If a(m) > Key  Then  j = m - 1  Else  i = m + 1

If a(m) = Key Or a(m + 1) = Key  Then  flag = True: Exit Do

Loop

If flag Then

If a(m) = Key  Then  Text2.Text = Str(m)  Else Text2.Text = Str(m + 1)

Else

Text2.Text = "找不到"

End If

程序运行时,数组元素a(1)到a(9)中的数据为12,24,27,34,39,46,68,73,84,在文本框Text1中输入“68”,执行该程序段,则下列表达式正确的是(  )

A . j=8 B . i=8 C . j=9 D . m=6
有如下VB程序段:

Dim a(1 To 10)As Integer

Private Sub Form_Load()

a(1)=2: a(2)=3: a(3)=3: a(4)=3: a(5)=3

a(6)=6: a(7)=7: a(8)=7: a(9)=8: a(10)=9

End Sub

Private Sub Command1_Click()

Dim key As Integer, i As Integer, j As Integer

Dim m As Integer, p As Integer

key=Val(Text1.Text)

i=1: j=10

Do While i<=j

m=(i+j)\2

If a(m)= key Then

p=m

j=m-1

ElseIf key<a(m)Then

j=m-1

Else

i=m+1

End If

Loop

Text2.Text=Str(p)

End Sub

程序运行时,在文本框 Text1中输入3,单击按钮,文本框Text2中显示的内容是(  )

A . 2 B . 3 C . 4 D . 5
某查找算法的VB 程序如下:

Private Sub Command1_Click()

Dim a(1 To 9) As Integer, key As Integer, i As Integer, j As Integer

Dim mid1 As Integer, mid2 As Integer

a(1)=4: a(2)=22: a(3)=27: a(4)=32: a(5)=35: a(6)=44: a(7)=56: a(8)=59: a(9)=78

key=Val(Text1.Text)

i=1: j=9

flag=False

Do While i<=j And Not flag

Mid1=i+(j-i)\3

mid2=j-(j-i)\3

If key=a(mid1) Then

flag=True

ElseIf key<a(mid1) Then

j=mid1-1

ElseIf key=a(mid2) Then

flag=True

ElseIf key>a(mid2) Then

i=mid2+1

Else

i=mid1+1

j=mid2-1

End If

Loop

If flag Then Label1.Caption=″查找成功!″Else Label1.Caption=″查找失败!″

End Sub

该程序段执行时,在文本框Text1中输入36,单击命令按钮Command1,程序运行结束后,i和j的值为(  )

A . 4,5 B . 6,5 C . 5,6 D . 6,4
数组a为一组循环有序不重复的数组,如(a(1)=25,a(2)=41,a(3)=100,a(4)=5,a(5)=7,a(6)=9)。依据对分查找思想:设计个在数组a中查找数据Key并显示在列表框的程序,界面如图所示。实现该功能的VB程序段如下:

1=1:r=6

Key=Val(Text1.Text)

Do While <=r

m=Int((1+r)\2)

If a(m)=Key Then

Exit Do

Elself a(m)>=a(1) Then

ElseIf a(m)<a(1) Then

End If

Loop

上述程序中方框处可选语句为:

①If a(m)<Key And a(r)>Key Then 1=m+1

Else r=m-1

②List1.AddItem "第"+Str(m)+ "值是"+Str(a(m))

③If a(m)>Key And a(1)<=Key Then r=m-1

Else=m+1

则(1)、(2)、(3)处语句依次是(  )

A . ③①② B . ②①③ C . ①③② D . ②③①
有如下 VB 程序段:

Private Sub Command1_Click()

Dim i As Integer,s As string

s = ""

For i = 1 To 3 Step 2

 s = str(f(i)) + s

Next i

Text1. Text = s

End Sub

Function f(n As Integer) As Integer

If n = 1 Then

 f = 2

Else

 f = f(n - 1) + n

End If

End Function

则执行该程序段后,s 的值为(  )

A . 247 B . 27 C . 72 D . 742
递归的边界条件要素,是为了保证递归能在有限次的计算后得出结果,而不会产生无限循环的情况。
找数对。已知一数组a中有9个元素,在文本框Text1中输入一个正整数key,单击“找数对”Command1按钮,则在数组a中搜索是否有一对数的和等于key,若有,在标签Label2中输出最先找到的两个数,若无则输出“没有找出数对”。运行界面如图所示:

  1. (1) 根据程序,若文本框Text1中输入内容为17,则标签Label2中输出的内容是
  2. (2) 请划线处填入合适的代码。

    Const n = 9

    Dim a(1 To n) As Integer,i As Integer, j As Integer

    Private Sub Form_Load()

      Dim s As String, k As Integer

      a(1) = 9: a(2) = 13: a(3) = 11: a(4) = 3: a(5) = 20

      a(6) = 6: a(7) = 18: a(8) = 15: a(9) = 8

      For i = n To 2 Step -1

        k = i

        For j =  

          If a(j) < a(k) Then t = a(j): a(j) = a(k): a(k) = t

        Next j

                '③改错

      Next i

      Label1.Caption = s End Sub

    Private Sub Command1_Click()

    Dim L As Integer, R As Integer, m As Integer, key As Integer

      key = Val(Text1.Text)

      For i = 1 To n - 1

        L = 1: R = n

        Do While L <= R

          m = (L + R) \ 2

          If a(i) + a(m) = key Then

            Label2.Caption = Str(a(i)) & Str(a(m))

            Exit For

          ElseIf   Then

            L = m + 1

          Else

            R = m - 1

          End If

        Loop

      Next i

      If L > R Then Label2.Caption = "没有找到数对"

    End Sub

  3. (3) 请改正加框处语句的错误。
某对分查找算法的VB程序段如下:

low = 1: high = 8

key = Int(Rnd * 15 + 1) * 2

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 = Str(low)

若数组元素a(1)到a(8)的值依次为 1,10,11,12,15,30,32,37,执行该程序段后,文本框Text1中显示的内容可能是(    )

A . 1 B . 3 C . 4 D . 7
小方同学在某网站注册时需要预设登录密码,预设密码需要符合以下2点:①密码不少于6位字符组成;②必须同时包含大写英文,字母、小写英文字母、阿拉伯数字和标点符号。据此,该同学编写了生成密码的VB程序,程序运行界面如图a所示,当点击“生成密码”按钮( command1)时,在文本框Text1中输出符合要求的密码字符

图b为标准ASCII码表供你参考(其中ASCII为1-32,127的字符为特殊符号,不能用作密码):

实现上述功能的VB程序代码如下,请回答以下问题:

  1. (1) 请在划线处填入合适的代码。

    Private Sub Command1_Click() 

        Dim t As Integer, flag as Boolean

        Dim pwd as String ,n as Integer

        Dim a(1 To 4) As Integer

        flag= True

        n=0

        pwd=" "

        Randomize

        Do While flag

            t=             '随机生成33~126的ASCII码

            pwd= pwd+Chr(t)

            s= 0

            For i=1 To 4

                s=s+a(i)

            Next i

            n=n+1

            If n>=6 And s=4 Then

        Loop

        Text1. Text= pwd

    End Sub

    '获取字符类型:1-小写字母,2-大写字母,3-阿拉伯数字,4-符号

    Function check(x As Integer) As Integer

        If x>=97 And x <= 122 Then

            check= 1

        ElseIf x >=65 And x <=90 Then

            check= 2

        ElseIf x>=48 And x <=57 Then

            check= 3

        Else

            check= 4

        End If

    End Function

  2. (2) 以下字符串不可能是上述程序生成的密码的一项是(填数字序号)

    ①H2? N64Aj

    ②[26wv9,Q

    ③$ 14G/uv④zX}rb! T&}d2

某对分查找算法的VB程序段如下:

i=1:j=7 : s=””

key = Int (Rnd * 100)

Do While i <=j

    m=(i+j)\2

    If key = a(m) Then

        s = s+"M":Exit Do    'Exit Do表示退出循环

    ElseIf key < a(m) Then

        j=m-1:s=s+"L"

    Else

        i=m+1:s=s+"R"

    End If

Loop

Text1.Text = s

数组元素a(1)到a(7)的值依次为“24, 35, 38, 41,45, 69, 78”。若该程序段执行后,文本框Text1中显示的内容是LLR,则Key的值可能是(    )

A . 36 B . 34 C . 40 D . 42