4.3 非数值计算 知识点题库

【加试题】数组a中有50个互异的整数,已按升序排列。给定一个正整数key,寻找数组a中是否有一对数的和等于给定的数key,算法如下:

若存在和为key的数对,输出该数对包含的两个整数,小的在前,大的在后;

若存在多个数对满足条件,则输出最先找到的数对;

若找不到符合要求的数对,则输出“没有符合条件的数对”。

根据上述算法,小黄编写了一个VB程序,功能如下:程序加载时,自动生成50个互异的、按升序排列的随机正整数,依次存入数组a中,并显示在列表框List1中。在文本框Text1中输入key的值,单击“查找”按钮Command1,查找结果在列表框List2中输出。程序运行界面如图所示。

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

    Dim a(1 To 50)As Integer

    Const n As Integer=50

    Private sub form_load()

    ‘生成50个互异的、被升序排序的随机正整数,依次存人数组a中

      ‘代码略

    End Sub

     Private Sub Command1=_Click()

      Dim M As Integer,L As Integer,R As Integer

      Dim key As Integer,flag As Boolean

      flag=false:key=Val(Text1.Text)

      For i=1 To n-1

        L=i+1:R=n

        Do While    ①      

        M=    ②    

        If a(i)+a(M)<key Then

          L=M+1

        Else lf a(i)+a(M):>key Then

          R=M-1

        Else

          List2.AddItem Str(a(i))+””+    ③   

          flag=True

        End If

      Loop

      If Not flag Then List2.AddItem”没有符合条件的数对!”

    End Sub

     ② ③ 

  2. (2) 对于6个数据(12,23,35,46,57,68)的序列,若给定key的值是58,则根据上述代码查找的结果是
【加试题】有如下程序段:

  Dim a(1 To 10) As Integer

  Dim i As Integer, j As Integer, m As Integer

  Dim key As Integer

  i = 1: j = 10: key = Val(Text1.Text)

  Do While i <= j

    m = (i + j) \ 2

    If key < a(m) Then

      j = m - 1

    ElseIf key > a(m) Then

      i = m + 1

    Else

      Do While m > 1

         If a(m - 1) = key Then

          m = m - 1

         Else

          Exit Do

         End If

      Loop

      Exit Do

    End If

  Loop

数组中a(1)到a(10)依次为“1,1,2,3,3,3,3,4,4,4”,若在文本框Text1中输入值3,经上述程序段执行后变量m的值为(  )

A . 7 B . 6 C . 5 D . 4
编写VB程序,实现如下功能:在文本框Text1中输入包含数字、字母、符号等的字符串,单击“统计”按钮Cmd_1,统计该字符串中数字字符的个数,并在标签Label1中输出结果。界面如图所示。

  1. (1) 在设计界面时,应使用右图所示“控件工具箱”中的(填写相应编号)添加“统计”按钮。
  2. (2) 为实现上述功能,请在处填入合适代码。

    Private Sub Command1_Click()

      Dim s As String, c As String

      Dim i As Integer, n As Integer, num As Integer

      s = Text1.Text: num = 0

      n =

    i = 1

    Do While i <= n

          c = Mid(s, i, 1)

         If Then

    num = num + 1

    End If

    i = i + 1

    Label1.Caption = Str(num)

    End Sub

  3. (3) 在VB中运行程序,出现“要求对象”的错误,原因是:
编写VB程序,实现如下功能:在文本框Text1中输入一个整数,单击“查找删除”按钮Command1,采用对分查找法在数组a(从小到大排列,并显示在文本框Text2中)中查找该数。若找到,则从数组a中删除该数(该数后面的数组元素都前移一位),并在文本框Text3中显示删除后的结果;否则,在文本框Text3中显示“该数没有找到!”。运行效果如图所示。

实现上述功能的VB代码如下,但加框处代码有错,请改正。

Dim a(1 To 20) As Integer ’用于保存n(n<=20)个按从小到大顺序排列的整数

‘Form_Load事件过程产生n个整数,按升序保存在数组a中,并在Text1中显示

Private Sub Form_Load()

‘代码略

End Sub

Private Sub Command1_Click()

Dim i , j , m , k As Integer

Dim x As Integer,f As Boolean  ’变量f用于标记是否在数组中找到x

x = Val(Text2.Text)

i=1 :j=n  : f=False

Do While  i<=j And  f=False

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

 If a(m)=x Then f=True

 If  Then i=m+1 Else j=m-1    ‘(1)

Loop

If f = True Then

 For k = m To n-1

         ‘(2)

 Next k

n = n - 1

 Text3.Text = ""

 For k = 1 To n

Text3.Text = Text3.Text+Str(a(k))+","

 Next k

Else

 Text3.Text = "该数没有找到!"

End If

End Sub

以上程序段运行时,为了实现上述功能,加框处代码应改正为:

;⑵

【加试题】有如下程序段:

a(1)=2

For i=2 to 7

a(i)=a(i-1)*2-1

Next i

i = 1 : j = 7

Do While i <= j

m =(i + j)\ 2

If a(m)= Key Then Exit Do

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

Loop

若key的值为15,则程序执行结束后,j的值为(  )

A . 3 B . 4 C . 5 D . 6
有100个大小形状一样的玻璃球,其中有1个玻璃球的重量轻于其他99个玻璃球,如何用一台无砝码的天平,以最快的速度找出这个轻玻璃球?运用“三分筛选”法来模拟“寻找”这个轻玻璃球的算法如下:

步骤1:如果待筛选的玻璃球个数<3,则认定已经找出了这个玻璃球(认定方法参照步骤2中描述),停止筛选,并输出经过的筛选总次数;否则,重复执行步骤2。

步骤2:按编号依次将玻璃球均分成3份,如果有多余的放入第3份中;比较第1、2份的玻璃球重量:

①如果第1份等于第2份的重量,则选取第3份的玻璃球作为下一次筛选的对象;

②如果第1份小于第2份的重量,则选取第1份的玻璃球作为下一次筛选的对象;

③如果第1份大于第2份的重量,则选取第2份的玻璃球作为下一次筛选的对象;

重复执行步骤1。

例如:第1次筛选的小球编号区间是1~100,均分成三份的待称重小球编号分别是1~33、34~66、67~100;第2次则选取以上3份中的一份进行再筛选、再均分……直至找到。

解决上述问题的VB程序功能如下:运行程序,在列表框List1中显示100组数据,分别代表每个编号及对应的小球重量(其中有且只有一个小球的重量与其他小球不同),单击“筛选”按钮Command1,在列表框List2中显示每次筛选的编号区间和完成筛选的总次数。程序运行界面如图。

  1. (1) 如果编号为88的小球是最轻的,按照题中给定算法,找到此小球需经历的筛选次数是 次。
  2. (2) 实现上述功能的VB程序如下,请在横线处填入合适的代码。

    Const maxn=100

    Dim a(1 To maxn) As Integer

    Dim w(1 To 2) As Integer      ‘数组w用来存储第1份和第2份小球的重量

    Private Sub Form Load()

    ‘此处代码用来模拟产生100个小球的重量,分别存储在数组元素a(1)~a(100)中;

    ‘其中只有1个小球的重量为8,随机存储在数组a的某元素中,其余重量均为10;

    ‘此处代码略

    End Sub

    Private Sub Command1_Click()

    Dim left As Integer, right As Integer      ‘left 为起始编号,right 为结束编号

    Dim s As Integer, c As Integer      ‘s为每次查找的区间长度

    left=1: right=maxn

    c=1: s=right: i=0

    List2. AddItem Str (i+1)+“--->”+Str(maxn)

    Do While right-left > 3

     w(1)=0: w(2)=0: k=1

     i=left

     s=

     Do While i<=(s \ 3) * 2+left-1     ‘Do语句用于将待筛选的数据进行区域划分

      w(k)=w(k)+a(i)

      If i=(s \ 3) * k+left-1 Then k=k+1

      i=i+1

     Loop

     If w(1)=w(2) Then

      left=left+(s \ 3) * 2

     Elself w(1) < w(2) Then

     

     Else

      right=left+(s \ 3) *2-1

      left=s \ 3+left

     End If

     

    List2. AddItem Str(left) &“--->” & Str(right)

    Loop

    List2. AddItem “经过” +Str (c)+“次后找到”

    End Sub

下列VB程序段:

Function s(n As Integer) As Integer

 If n=1 Then

   s=1

 Else

   s=s(n-1)+n

 End If

End Function

Private Sub Form_Click()

 Dim x As Integer

 x=s(4)

 Print x

End Sub

程序运行时,单击窗体后,变量x的值为(  )

A . 1 B . 4 C . 10 D . 36
【加试题】某对分查找算法的VB程序段如下:

key=Val(Text1.text)

i=1:j=10

Text2.text=””

Do While i<=j

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

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

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

   Text2.text=Text2.text+Str(a(m))

Loop

数组元素a(1)到a(10)的值依次为“8、17、24、30、36、40、55、58、61、66”,文本框Text1中输入的值是30,执行该程序段,文本框Text2中显示的是(  )

A . 40  24 B . 40  24  36 C . 36  24 D . 36  17  24
某查找算法的部分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程序段如下:

i=1:j=10:k=0

key=Val(Text1.Text)

Do While i<=j

k=k+1

m=(i+j+1)\2

If a(m)<key Then

i=m+1

Else

j=m-1

End If

Loop

数组元素a(1)到a(10)的值依次为10,12,14,17,19,20,20,27,29,32。在文本框Text1中输入12,执行该程序段后,以下变量值正确的是(   )。

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

a = "access": b= "col": s =””

For i=1 To Len(b)

    L=1:R=Len(a)

    Do While L<=R

        m=(L+R)\2

        If Mid(a, m, 1)>Mid(b, i, 1) Then R=m- 1 Else L=m+1

     Loop

     a = Mid(a, 1, R) + Mid(b, i, 1) + Mid(a, L, Len(a) -L+ 1)

     s =s+Str(L)

Next i

上述程序执行后,变量s的值为(    )

A . 455 B . 466 C . 255 D . 266
下列对递归思想的形象化表示错误的是(   )。
A . B . C . D .
上台阶:每一步只能迈上1个或2个台阶,上完n级台阶,一共有多少种走法,下面说法正确的是(    )
A . 用递归算法,递归关系式为f(n)=f(n-1)+2 B . 用递归算法,递归关系式为f(n)=f(n-1)+f(n-2) C . 用递归算法,递归关系式为f(n)=f(n+1)+f(n+2) D . 用递归算法,递归关系式为f(n)=f(n-1)*2
有如下VB程序段:

key = Val (Text1. Text)

i =0:j=9:n=0

Do While i<= j

    m=(i+j)\2

    n=n+1

    If key <= a(m) Then

        j=m-1

    Else

        i=m+1

    End If

Loop

s=i

Do While i<9 And a(i)= a (i+1)

    i=i+1

Loop

Label2.Caption = Str(n) +“:”+ Str(i + 1-s)

数组元素a(0~9)的值依次为“3,4,7,8,8,8,8,9, 10,12”。在文本框Text1中输入“8”,点击“查找”按钮后,Labe12 中输出的结果是(    )

A . 3:3 B . 3:4 C . 4:3 D . 4:4
编写VB程序,实现把数据key插入到升序序列中,得到一个新的升序序列,原升序序列各元素已依次存放在数组元素a(1),a(2),a(3),……,a(10)中,VB程序段如下:

i=1: j=10

Do While i<=j

    m=(i+j)\2

    If key <= a(m)Then

          ①   

    Else

          ② 

    End If

Loop

For k=10 To i Step-1

      ③ 

Next k

a(i)=key

要使程序实现上述功能,则划线处①②③中的语句分别是(    )

A . j=m-1    i=m+1      a(k+1)=a(k) B . j=m-1    i=m+1      a(k)=a(k-1) C . i=m+1    j=m-1      a(k+1)=a(k) D . i=m+1    j=m-1       a(k)=a(k-1)
斐波那契数列,运用函数递归的方法可以实现,运用迭代的方式也可以实现,而且比函数递归要快许多。下列关于斐波那契数列的迭代表达式正确的是(   )。
A . f,f2,f2=f1+f2 B . f1=f1+f2,f2= C . f1,f2=f2,f1+f2 D . f=f1+f2,f1=f2,f2=f
用递归求n!,当n=1时,f(1)=1,否则f(n)=f(n-1)*n.当n=3时,递归调用顺序正确的是(      )
A . f(1)、f(2)、f(3) B . f(2)、f(3)、f(1) C . f(3)、f(2)、f(1) D . 以上都不对
某学校图书管理系统中有10万条图书资料记录(已经索引排序),假设从中取出一条记录并与待查找项进行比较所花时间为10毫秒,则用对分法在该系统中查找任意一本指定图书最多花费的时间约为(  )
A . 100万毫秒 B . 50万毫秒 C . 10毫秒 D . 170毫秒
关于大数据处理,下列说法正确的是
A . 处理大数据时, 一般采用分治思想 B . 对图结构的数据一般采用流计算模式进行处理 C . 文本数据处理时需要将非结构化的文本原始状态转化成结构化数据 D . 数据的可视化可以帮助用户更快捷观察与追踪数据
某对分查找算法的VB程序段如下:

key=Val(Text1.Text)

s=" "

i=1 : j=10

Do While i<=j

    m=(i+j)\2

    s=s+Str(a(m))

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

Loop

Text 2.Text =s

数组元素a(1)到a(10)的值依次为“2,3,5,8,9,10,13,17,19,20”。在文本框Text l中输人待查找的数,执行该程序段,则文本框Text 2中显示的内容可能的是(   )

A . 9 3 B . 9 3 5 C . 9 17 19 13 D . 9 3 5 8 19