试题

试题 试卷

logo

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

浙江省浙南名校联盟2020届高三上学期信息技术第一次(10月)联考试卷

小明学了排序和查找算法后,编写了一个处理成绩的程序。单击“获取成绩”按钮得到n个非降序数保存在数组a(1)—a(n)中,并显示在 List1中。在文本框Text1中输入成绩key,单击“查找”按钮,则在标签 label1中显示共有多少位同学的成绩大于等于该成绩。

(1)、加框1处的程序代码有错,应改为
(2)、请在划线处填入合适代码:

Dim a(1000) As Integer, n As Integer Private Sub Command1_Click()

'从数据库获取n 个成绩存储在 a(1)---a(n)组中,代码略

For i = 2 To n ‘排序

    tmp = a(i)

    j = 1

    Do While tmp > a(j)

       j = j + 1

       If  ①  Then Exit Do

 Loop

    For k = i To j + 1 Step -1

      a(k) = a(k - 1)

    Next k

        '改错 (1)

Next i

For i = 1 To n List1.AddItem Str(a(i))

Next i End Sub

Private Sub Command2_Click()

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

  key = Val(Text1.Text)

  i = 1: j = n

  Do While i <= j

     m = (i + j) \ 2

     If  ②  Then

        j = m - 1

     Else

        i = m + 1     

    End If

  Loop

    Label1.Caption = "共有" +     ③     + "位同学大于等于该成绩。"

End Sub

举一反三
有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中显示每次筛选的编号区间和完成筛选的总次数。程序运行界面如图。

二叉树是每个结点最多有两个子树的树结构,如值为9的结点有两个子树6和8,值为6的结点有两个子树5和3。若设二叉树的深度为h,则除第h层外,其它各层(1~h-1)的结点数都达到最大个数,第h层所有的结点都连续集中在最左边,这就是完全二叉树。现要构造大根堆,堆是一棵顺序存储的完全二叉树,大根堆又是一种特殊的堆,它的特征是每个双亲结点的值都不小于其孩子结点的值。如下图所示,值为9的结点是6和8的双亲结点,而6和8分别是9的左孩子和右孩子;同理,6是5和3的双亲结点,而5和3分别是6的左孩子和右孩子……

假如我们用数组表示上述大根堆:

a(1)

a(2)

a(3)

a(4)

a(5)

a(6)

a(7)

a(8)

a(9)

9

6

8

5

3

4

7

2

1

现有一算法把一个无序数组改造成大根堆。例如:我们在上图的大根堆中再增加一个值为8的新元素,如下图所示。

数组存储为:

a(2)

a(3)

a(4)

a(5)

a(6)

a(7)

a(8)

a(9)

a(10)

6

8

5

3

4

7

2

1

8

具体操作方法如下:

第一步:因为a(10)大于它的双亲结点a(5),故需交换a(10)和a(5)的值;

数组存储为:

第二步:因为a(5)大于它的双亲结点a(2),故需交换a(5)和a(2)(t)值;

数组存储为:

a(1)

a(2)

a(3)

a(4)

a(5)

a(6)

a(7)

a(8)

a(9)

a(10)

9

8

8

5

6

4

7

2

1

3

第3步:因为a(2)不大于它的双亲结点a(1),故无需做交换操作。此时新元素已经放到了正确的位置,新的大根堆构造完成,上移行动结束。

返回首页

试题篮