试题

试题 试卷

logo

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

浙江省绍兴市2017-2018学年高二下学期选考信息技术适应性考试试卷

【加试题】小李要给全班学生拍合照,要求所有学生站成一排,中间高,两端低,小李采用如下排队方法:按身高信息从高到低排序,让身高第一位的同学单独站出来,身高第二位同学站在他的左手边,身高第三位同学站在他的右手边,再依次向两端安排其他人。每个学生的学号与身高信息已存人数据库中。小李编写了VB程序,从数据库中读取学号和身高信息,在“原始信息”下方的列表框List1中显示,单击“排队”按钮Command1,在“排好的队形”下方的列表框List2中显示排好的队形,程序界面如图所示。

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

  Const maxn=100

  Dim id(1 To maxn)As Integer     ‘存储每个学生的学号

  Dim tall(1 To maxn)As Single     ‘存储每个学生的身高

  Dim n As Integer                ‘存储学生的个数

  Private Sub Form_Load()

  ‘从数据库得到学生的总人数n

    ‘从数据库读取学号信息,并存入id数组中

    ‘从数据库读取身高信息,并存入tall数组中

    ‘在列表框List1中显示学号与身高

  End Sub

  Private Sub Command1_Click()

  Dim a(1 To maxn)As Integer    ‘存储排好队形的学号

  Dim b(1 To maxn)As Single     ‘存储排好队形的身高

  Dim i As Integer,j As Integer

  Dim t1 As Integer,tr As Integer,mid As Integer

  Dim tmp1 As Single,tmp2 As Integer

  For i=1 To n-1

    For j=n To i+1 Step-1

      If  Then        ‘(1)

        tmp1=tall(j):tall(j)=tall(j-1):tall(j-1)=tmp1

        tmp2=id(j):id(j)=id(j-1):id(j-1)=tmp2

      End If

     Next j

    Next i

    If n Mod 2=0 Then     ‘根据总人数的奇偶性,确定队形的中间位置

       mid=n\2+1

    Else

       mid=(n+1)\2

    End If

    ‘身高第一位的同学,安排在队形的中间位置

    a(mid)=id(1)

    b(mid)=tall(1)

    t1=mid-1

    tr=mid+1

    For i=2 To n

      If  Then           ‘(2)

        a(tr)=id(i)

      b(tr)=tall(i)

      tr=tr+1

    Else

      a(t1)=id(i)

      b(t1)=tall(i)

      t1=t1-1

     End If

    Next i

    List2.AddItem“位置”+“学号 ”+“身高”

    For i=1 To n

      List2.Addltem Str(i)+”  ”+Str(a(i))+”  ”+Str(b(i))

    Next i

  End Sub

(1)、处加框代码应改为
(2)、处加框代码应改为
举一反三
小吴为了探究冒泡排序过程中数据的“移动”情况,编写了一个VB程序,功能如下:

在列表框List1中显示排序前数据(存储在数组a中),在文本框Text1中输入初始位置(即下标值),单击“排序”按钮Command1后,在标签Label1中显示指定初始位置的数据在排序过程中的位置变化情况,排序后的数据显示在列表框List2中。程序运行界面如图所示。

实现上述功能的VB程序如下,请在横线处填上合适的代码,改正加框处的代码。

Dim a(1 To 8) As Integer

Dim n  As Integer

Private Sub Form_Load()

   'n = 8,排序前的8个数据存储在数组a中,并在列表框List1中显示

   '代码略

End Sub

Private Sub Command1_Click()

Dim i As Integer, j As Integer, k As Integer

Dim pos As Integer      '变量pos存储指定数据的位置(既下标值)

Dim s As String         '变量s存储pos变化情况

s = Text1.Text

pos = Val(Text1.Text)

For i = 1 To n - 1

      For j =    ⑴            

          If a(j) < a(j - 1) Then

                 ⑵             

              a(j - 1) = a(j)

              a(j) = k

               '如果pos位置的数据参与交换,则更新pos值,记录pos变化情况

              If pos = j Then

                  pos = j - 1

                  s = s + "→" + Str(pos)

                                               '(3)

                  pos = j

                  s = s + "→" + Str(pos)

              End If

          End If

      Next j

Next i

Label1.Caption = "位置变化情况:" + s

For i = 1 To n

      List2.AddItem Str(a(i))

Next i

End Sub

⑴{#blank#}1{#/blank#} ⑵{#blank#}2{#/blank#} ⑶{#blank#}3{#/blank#} 

编写一个查找最接近的数的VB程序:程序运行时,在文本框Text1中输人产生随机数的个数(1到100之间),单击命令按钮“产生随机数并升序排列”后,在列表框List1中显示已经按升序排列后的随机整数,然后在文本框Text2中输入要查找的整数,单击命令按钮"查找"后,在标签Label3中显示随机整数序列中与待查找数最接近的整数(当最接近的数有2个时,输出较大的一个)。程序运行效果如图所示:

实现上述功能的VB代码如下,请在横线处填入合适代码。

Dim n As Integer          '存储随机数的个数

Dim f(1To100)As Boolean

'f(i)为True时表示随机整数i已经产生过

Dim a(1 To 100)As Integer

'依次存放升序排序后的n个随机数

Private Sub Command1_Click()

'命令按钮“产生随机数并升序排列”的单击事件

    Dim i As Integer

    Randomize

    For i=1 To 100

        f(i)=False

    Next i

    n=Val(Text1. Text)

    For i=1 To n

        t=Int(Rnd * 100+1)

        Do While f(t)=True

            t=Int(Rnd * 100+1)

        Loop

        {#blank#}1{#/blank#}

    Next i

    j=0

    For i=1 To 100        '实现排序并输出

        If f(i)=True Then

            {#blank#}2{#/blank#}

            a(j)=i

            List1.AddItem Str(i)

        End If

    Next i

End Sub

Private Sub Command2_Click()

'命令按钮“查找”的单击事件

    Dim key As Integer

    key=Val(Text2. Text)

    If key <=a(1) Then Label3. Caption=Str(a(1)): Exit Sub

    If key >=a(n) Then Label3. Caption=Str(a( n)): Exit Sub

    L=1: R=n

    Do While L<=R                '找到与 key 较为接近的两个数a(R)和a(L)

        m=(L+R)\2

        If key<=a(m)Then

            R=m-1

        Else

            L=m+1

        End If

    Loop

    If {#blank#}3{#/blank#}Then

    '在a(R)和 a(L)中选出更接近key的数

        Label3. Caption=Str(a(R))

    Else

        Label3. Caption=Str(a L))

    End If

End Sub

返回首页

试题篮