试题

试题 试卷

logo

题型:单选题 题类:常考题 难易度:困难

浙江省十校联盟2020届高三上学期信息技术10月联考试卷

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

i=1:j=12:k=0:s=””

key= Va1(TextI Text): c=N: flag= False

Do While i<= j And flag= False

m=(i1+j+1)\2:k=k+1

If key= a(m) Then c=Y: flag=True

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

s=s& Str(a(m))

Loop

Text2 Text s: Text3 Text= c

数组a(1)到a(12)的值依次为“991.85.76,68.61,53,42.34,27,20,13”,执行该程序段后,下列说法正确的是(  )

A、该程序段只能进行两位正整数的查找 B、在文本框Text1中输入两位任意正整数,则k的值介于1和3之间 C、在文本框 Text1中输入76,程序执行后变量i和j的值分别为1和6 D、若文本框Text2中显示了两个正整数,则文本框Text3中显示的内容一定是Y
举一反三
【加试题】对分查找算法可用于求解方程的近似解。现要求方程x3-4x2+x+5=0的一个近似解,可设f(x)=x3-4x2+x+5,若有区间[a,b],使f(a)与f(b)异号,则该区间内必存在该方程的一个解。小吴为此编写了VB程序,功能如下:分别在文本框Text1和Text2中输入求解的区间值a和b(a<b),单击“计算”按钮Command1,若该区间必有解,则求解出该区间内的一个近似解(精确到10 s),否则提示“重新输入区间”,计算后的相关结果显示在列表框List1中。程序运行界面如图所示。

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

Function f(x As Double)As Double

    Dim Y As Double

    y=x^3-4*x^2+x+5:              ‘(1)

  End Function

  Private Sub Command1_Click()

    Dim a As Double,b As Double,m As Double,x As Double

    a=Val(Text1.Text):b=Val(Text2.Text)

    If f(a)*f(b)<0 And a<b Then

       Do While a<=b

       m=(a+b)/2

       If Abs(f(m))<0.00001 Then Exit Do

       If <0 Then         ‘(2)

          b=m

       Else

          a=m

       EndIf

      Loop

      x=Format(m,“0.00000”)      ‘Format函数用于定义输出的小数位数

      List1.AddItem"["&Text1.Text&","&Text2.Text&"]" & "解为:"&x

    Else

      List1.AddItem"["&a&","&b&"]" & "重新输入区间"

    EndIf

End Sub

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。

数组元素a(1)至a(5)依次为5,22,28,42,55,在a(3)处分成两段,交换位置后为:

a(1)

a(2)

a(3)

a(4)

a(5)

28

42

55

5

22

旋转数组a的最小元素是5。

数组d(1)至d(5)依次为0,1,1,1,1,在d(5)处分成两段,交换位置后为:

d(1)

d(2)

d(3)

d(4)

d(5)

1

0

1

1

1

旋转数组d的最小元素是0。

小明依据查找算法思想,设计一个查找旋转数组d最小元素的程序,功能如下:运行程序时,利用“添加”按钮Command1和文本框Text1依次输入旋转数组d的值,在列表List1中显示旋转数组,单击“求解”按钮Command2,在标签Label2中显示旋转数组d最小元素值。运行效果如图1所示,实现该功能的VB程序如下:

图1

Dim n As Integer

Dim d(1 To 100) As Integer '数组 d 存储待排序数据

Private Sub Command1_Click()

'按旋转数组规则将数据存入数组d中,代码略

End Sub

Private Sub Command2_Click()

  Dim mid As Integer, L As Integer, R As Integer

  L = 1: R = n

  mid = L

  Do While d(L) >= d(R)

    If  Then    '改错

      mid = R

      Exit Do

    End If

    mid = (L + R) \ 2

    If d(L)=d(R) And d(mid)=d(R) Then

mid =______________                              '填空

      Exit Do

    End If

    If d(L) < d(mid) Then

      L = mid

ElseIf d(mid) < d(R) Then

      R = mid

    End If

  Loop

Label2.Caption = "最小值为" + Str(d(mid))

End Sub

    End If

  Next i

End Function

返回首页

试题篮