试题

试题 试卷

logo

题型:单选题 题类:常考题 难易度:普通

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

下列VB程序段功能为:在降序排序数组a中(a(1)≥a(2),≥……≥a(n))查找文本框Text1中输入的数据,若能找到,则输出该数在数组a中第一次出现的位置,否则输出“找不到”。

key = Val(Text1.Text)

i=1:j=n

Do While i<j

    m=(i+j)\2

    If  Then

        i=m+1

    Else

       

    End If

Loop

If a(i)=key Then Label1.Caption =Str(i) Else Label1.Caption ="找不到"

上述程序段两个方框处的语句分别为(  )

A、①key<a(m)   ②j=m-1 B、①key<a(m)  ②j=m C、①key<=a(m)  ②j=m-1 D、①key<=a(m)  ②j=m
举一反三
小朋友拍照:有来自K(1<=K<=20)个不同国家的N(1<=N<=100)个小朋友排成一行准备拍照。国籍用数字1,2,3……K表示,每个小朋友的国籍依次存入数组a(1)到a(N)。由于小朋友太多,没有办法全部被拍入。摄像师决定拍摄一段连续区间内的小朋友,这个区间内每种国籍的小朋友至少要有1个,求满足要求的最小区间长度。

例如有10个小朋友,5种国籍,从左到右排列,国籍编号依次是2,1,2,4,3,3,5,5,3,5,则最小的一段包含所有5种国籍的区间是从第2个到第7个小朋友,区间长度为6。

算法解析:区间的长度至少为K(国籍的数量),最大为N(小朋友的数量)。我们可以通过二分K到N之间的求得最小区间长度。

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

Dim a(1 To 100) As Integer   '依次存储为1到100的小朋友的国籍编号

Dim K As Integer

Dim N As Integer

Private Sub Form_Load()   '窗体加载,生成数据

'产生N的值,表示人数

'产生K的值,表示国籍种数

'产生编号为1到N的小朋友的国籍编号,并存储在数组a中

'代码略

End Sub

Private Sub Command1_Click()    '使用二分的思想计算最小区间

Dim M As Integer

i = K: j = N       '答案的范围为K到N,即最少K,最多N个小朋友

Do While i <= j   

    M = (i + j) \ 2     '二分,求中间值

    If pd(M) = True Then   '调用Pd函数,判断区间长度为M时,是否包含所有国籍

      j = M – 1 

      ans = M        '若以M为区间长度可包含所有国籍,更新答案

    Else

      i =           '第①处错误

    End If

Loop

Text1.Text = Str(ans)

End Sub

Function pd(M As Integer) As Boolean

Dim f(1 To 20) As Integer  'f(i)表示国籍为i的小朋友是否包含

Dim t As Integer           't用于统计当前区间包含的国籍数量

pd = False

For i = 1 To N - M + 1     '枚举以i为起点的M个小朋友中,各个国籍是否包含

    For j = i To i + M - 1

      f(a(j)) = 1            '等于1,表示国籍为a(j)的小朋友已包含,0表示不包含

    Next j

    t = 0

    For j = 1 To K      '统计已包含的国籍的数量

      t =          '第②处错误

    Next j

    If t = K Then pd = True: Exit Function           '若包含K个国籍,返回True

    For j = 1 To K     'f数组元素重新初始化为0

      f(j) = 0

    Next j

Next i

End Function

下列VB程序实现数字字母混合序列分离后分别排序,最后又合并输出。具体算法如下:在文本框Text1输入若干组混合序列,每组序列中仅包含一组字母和一个多位数字,序列之间用逗号隔开,以逗号结束。单击“排序”按钮command1,把每组序列中的字母和数字分开,并分别排序,最后在列表框list1输出。排序规则如下:所有数字按从小到大升序排序,字母序列按长度升序排序,若长度相同,直接按字母序列大小升序排序(按字母的ASCII码排序,“A”<“Z”<“a”<“z”)。实现算法的部分程序界面如图所示,VB程序代码如下,回答下列问题:

Private Sub Command1_Click()

Dim a(1 To 6) As Integer, b(1 To 6) As String, i as integer, j as integer

Dim c As String, k As Integer, tmp1 As Integer, tmp2 As String

s=text1.text

i = 1: k = 1: tmp1 = 0: tmp2 = ""

Do While i <= Len(s)

      c = Mid(s, i, 1)

      If c = "," Then

         a(k) = tmp1: b(k) = tmp2

         tmp1 = 0: tmp2 = ""

              ①    

      Else

        If  Then 

           tmp2 = tmp2 + c

        Else

         tmp1=tmp1*10+val(c)

        End If

      End If

      i = i + 1

    Loop

    For i = 1 To 5

      For j = 1 To 6 - i

        If a(j) > a(j + 1) Then tmp1 = a(j): a(j) = a(j + 1): a(j + 1) = tmp1

    If Len(b(j)) > Len(b(j + 1)) Or      ②       Then

          tmp2 = b(j): b(j) = b(j + 1): b(j + 1) = tmp2

        End If

      Next j

    Next i

    For i = 1 To 6

      List1.AddItem Str(a(i)) + b(i)

    Next i

    End Sub

返回首页

试题篮