试题

试题 试卷

logo

题型:综合题 题类:常考题 难易度:困难

浙江省杭州市2017-2018学年高三上学期信息技术教学质量检测

【加试题】某数据存储算法如下:使用长度为n的一维数组h来存储m个不同整数型数据(m<n),数据的存储位置t根据存储数据的值除n取余计算得到。例如使用长度为11的数组来存储67,45,1 275,119,145,269,64共7个数据,先存储第1个数据67,67 Mod 11=1,在第1位置上没有数据,则存放在第1位置。第2个数据45,45 Mod 11=1,而在第1位置上已存有数据,那么查找下一位置有没有数据,现第2位置上没有数据,则存放在第2位置。在查找空位时如果到了数组最后一个位置还没有空位,则从头继续查找,以此类推……,举例数据存储结果如表所示。

位置

0

1

2

3

4

5

6

7

8

9

10

数据

64

67

45

145

269

119

1275

(1)、若按上述规则,再存储一个数据79,则存储在第 位置。

 

(2)、当n=97时,实现上述数据存储及相应数据查找的VB程序如下,运行结果如图所示,请在画线处填入合适的代码。

Const n=97

Dim d(0 To 96)As Integer,h(0 To 96)As Integer

Dim m As Integer      ‘变量m为数据个数

Private Sub Command1_Click()    ‘数据存储

    Dim i As Integer,t As Integer

    ‘从数据库读取数据先存储在数组d中,代码略

    List1.Clear

    For i=0 To n-1

         h(i)=-1    ‘数组元素初始化

    Next i

    For i=0 To m

    ① 

        Do While h(t)<>-1

             t=(t+1)Mod l2

        Loop

        h(t)=d(i)

  Next i

  For i=0 To n-1

    List1.AddItem Str(i)&“:”&Str(h(i))

  Next i

End Sub

Private Sub Command2_Click()    ‘数据查找

    Dim x As Integer,Y As Integer,z As Integer

    x=Val(Text1.Text)

    y=x Mod n

    z=1

    Do While   ②  

        z=z+1

        y=(y+1)Mod n

    Loop

    If h(y)=x Then

        Label2.Caption=“共查找了”&Str(z)&“次,在第”&,Str(y)&“位置找到”

    Else

        Label2.Caption=“共查找了”&Str(z)&“次,没有找到”

    End If

End Sub

 ② 

(3)、数组h中的元素值初始化为-1表示含义是

 

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

数组元素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

返回首页

试题篮