试题

试题 试卷

logo

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

浙江省台州市2020届高三上学期信息技术11月选考科目教学质量评估试卷

给定一个数组(有n个元素),小李通过边分段、边合并的方式将n个数据处理成一个非降序数据段(a(1)≤a(2)≤a(3)≤……≤a(n)),每一轮数据处理方法如下:

⑴查找相邻两个非降序数据段在未处理的数据区域中,从前往后找出第一个最长非降序数据段。若该数据段后而没有元素,则本轮处理完毕;否则在第1个数据段的后面,从前往后找出数组中第二个最长非降序数据段。

⑵合并两个数据段

借助数组tmp,将查找到的两个相邻数据段合并成一个非降序数据段,然后将合并后的数据依次存回到原数组中。

⑶若数组中还有未处理的数据,则重复⑴⑵步骤。

每一轮数据处理完毕后,重新从数组第1个数据开始进行下一轮处理。若检测到某一轮没有合并处理,则说明n个数据己构成非降序数据段,数据处理结束。

(1)、根据上述描述,若数组各元素为“3,9,7,6,8,2,1,5,7,4”,则第一轮合并处理完成后,数组中的数据依次是: (用“,”间隔)。
(2)、实现上述功能的VB程序如下,请在划线处填入合适代码。

Const n As Integer = 10

Dim a(1 To n+5) As Integer

Dim tmp(1 To n + 5) As Integer

Private Sub Form_Load())

‘读取n个整数保存到数组a中,并在文本框Textl中显示,代码略。

End Sub

Function Position(low As Integer) As Integer

    Dim i As Integer

    For i=low To n-1

        If   ①     Then Exit For

    Next i

    Position=i

End Function

Then Exit For

Function Merge() As Boolean

    Dim i As Integer, flag As Boolean, p1 As Integer, p2 As Integer

    Dim low1 As Integer, high1 As Integer, high2 As Integer

    flag=False:low1=1

    Do While lowl1<n

        High1=Position(low1)

        If high1=n Then Exit Do Else flag=True

        high2=Position(high1+1)

        p1=low1:p2=high1+1

        i=low1

        Do While   ② 

            If p2>high2 Or p1<=high1 And a(p1)<a(p2) Then

                tmp(i)=a(p1):p1=p1+1

            Else

                tmp(i)=a(p2):p2=p2+1

            End If

            i=i+1

        Loop

        For i=low1 To high2

            a(i)=tmp(i)

        Nexti

           ③  

    Loop

    Merge=flag

End Function

Private Sub Command1_Click()

    Do While True

        If Not Merge() Then Exit Do

        ‘’在列表框List1中输出这一轮合并后的数据,代码略。

    Loop

End Sub

 ② ③ 

举一反三
【加试题】某省学生信息技术学习平台使用情况数据存储在数据库中,利用VB编写一个程序,实现功能:输入一个积分的范围,显示该范围内的学生编号和对应的积分。程序运行界面如图所示:

程序代码如下,为实现上述功能,请在画线处填写合适的代码。

Dim bh(10 000)As String        ‘存储学生编号

Dim jf(10 000)As Integer       ‘存储学生获得的积分值

Dim n As Integer               ‘存储学生总人数

Function Search(x As Integer)As Integer

    Search=0

    i=1:j=n:flag=True

    Do While i<=j And flag=True

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

      If x=jf(m) Then

         flag=False

             ①  

      Elself    ②     Then

        i=m+1

      Else

        j=m-1

      EndIf

    Loop

End Function

Private Sub Form_Load()

    ‘从数据库中读取学生编号和积分,分别存储到bh数组和jf数组中,并按积分值从小到大排序,显示在列表框List1中

End Sub

Private Sub Command1_Click()

    Dim Top As Integer,Bottom As Integer,Topxb As Integer,Bottomxb

As Integer

    List2.Clear

    Top=Val(Text1.Text)

    Bottom=Val(Text2.Text)

    If Top>Bottom Then t=Top:Top=Bottom:Bottom=t

    If Top>jf(n)Or Bottom<jf(1)Then Exit Sub

    Do While Search(Top)=0

      Top=Top+1

    Loop

    Do While Search(Bottom)=0

      Bottom=Bottom-1

    Loop

    Topxb=Search(Top)

    Do While jf(Topxb)=jf(Topxb-1)And Topxb>l

      Topxb=Topxb-1

    Loop

    Bottomxb=Search(Bottom)

    Do While jf(Bottomxb)=jf(Bottomxb+1)And Bottomxb<n

      Bottomxb=Bottomxb+1

    Loop

    For i=    ③    

       List2.AddItem bh(i)&"    "&jf(i)

    Next i

End Sub

①{#blank#}1{#/blank#} ②{#blank#}2{#/blank#} ③{#blank#}3{#/blank#} 

返回首页

试题篮