试题

试题 试卷

logo

题型:单选题 题类:常考题 难易度:困难

浙江省杭州地区重点中学2018-2019学年高二下学期信息技术期中考试试卷

某对分查找算法的VB程序段如下

i = 1: j = 6: n = 0: f = False

Key = Val(Text1.Text)

Do While i <= j And Not f

  n = n + 1

  m = (i+j + 1) \ 2

  If Key = a(m) Then f = True

  If Key < a(m) Then j = m - 1 Else i = m + 1

Loop

数组元素a(1)到a(6)的值依次为“12,19,27,37,49,55”。若在文本框Text1中输入27,则以上程序段执行后,下列说法不正确的是(   )

A、变量i的值为3 B、变量j的值为3 C、变量m的值为 3 D、变量n的值为3
举一反三
【加试题】RGB颜色模式是用8位二进制数表示红色、8位二进制数表示绿色、8位二进制数表示蓝色即使用24位二进制数表示一种颜色的模式。若将每位二进制数取反,即(0改为1、1改为0)就会变为另一种颜色,我们称这种方式为颜色反相。


小明编写了一个VB程序实现上述功能,在名称为o_c_txt的文本框中输入原始颜色如#000000,点击命令按钮fx_cmd后,在名称为f_c_lab的标签中输出反相后的颜色如#FFFFFF。运行效果如图所示。

 实现上述功能的算法如下:

 数组dzb_h的16个元素分别存放16进制数的16个基本数码。

 依次取出原始颜色代码中每一位对应的16进制数码,例如原始颜色代码为#123456,第1次取出1,第2次取出2……

 在数组dzb_h各元素中找到对应16进制数码的元素

 运用规律:0+F=1+E…=7+8取得反相色并累加,例如:数组dzb_h第1个元素值的反相色的值是数组dzb_h第16个元素值。

 输出得到的反相色。

 实现上述功能的VB程序代码段如下,请完善相关程序代码。

Private Sub fx_cmd_Click()

  Dim dzb_h(1 To 16) As String

  Dim o_c As String, f_c As String, i As Integer, xbxh As Integer, c As String

  dzb_h(1) = "0": dzb_h(2) = "1": dzb_h(3) = "2": dzb_h(4) = "3"

  dzb_h(5) = "4": dzb_h(6) = "5": dzb_h(7) = "6": dzb_h(8) = "7"

  dzb_h(9) = "8": dzb_h(10) = "9": dzb_h(11) = "A": dzb_h(12) = "B"

  dzb_h(13) = "C": dzb_h(14) = "D": dzb_h(15) = "E": dzb_h(16) = "F"

  o_c = o_c_txt.Text  '存储原始色

  i = 2

  f_c = "#"     '存储反相色

  Do While i <= Len(o_c)

    c = Mid(o_c, i, 1)

    If Asc(c) > 96 Then c = Chr(Asc(c) - 32) '小写字母变大写字母

    xbxh = 1

    Do While xbxh < 17

      If {#blank#}1{#/blank#} Then    '在数组中找到对应16进制数码的元素

        f_c = {#blank#}2{#/blank#}    '累加反相色对应的16进制代码

        Exit Do

      End If

      xbxh = xbxh + 1

    Loop

    i = i + 1

  Loop

  f_c_lab.Caption = f_c

End Sub

用VB编写一个模拟在900个观众中产生10个中奖号码的程序,每位观众用三位数字进行编号,要求产生的10个号码不能重复,并且升序排列输出。

①检查产生号码是否重复:把产生的中奖号码放在数组a中,新产生的号码与已经产生的号码进行一一对比,如果找到相等的数,则重新产生新号码。

②找到新产生号码存放的数组下标:从下标为1的数组元素开始,新号码(第i个号码)分别与他们进行一一比较,找到第一个比新号码大的数,该数所在的下标就是新号码应存放的下标。如果在已经产生的数中没有找到比新号码大的数,则新号码应存放在下标为i的数组元素中。下表以产生第5个号码为例,如果产生的号码是150,第一个比他大的数是a(2),下标为2的数组元素应存放新号码;如果产生的号码是300,则新号码应存放在下标为5的数组元素中。

数组元素

a(1)

a(2)

a(3)

a(4)

数组元素的值

120

188

211

278

③移动数组元素到新的位置:如果在已经产生的号码中找到比新号码大的数,从上一个产生的号码开始,到新号码应存放的数组元素,依次把他们向后面移动。以②中产生150为例,从a(4)开始,让a(5)的值等于a(4),a(4)的值等于a(3),依次类推,直到新号码应存放的数组元素a(2)为止。

④将新产生的号码放在相应的数组元素中。

程序运行的界面如图所示,实现上述功能的VB程序代码如下:

Dim a(10) As Single

Private Sub Command1_Click()

Dim i As Integer, j As Integer

Dim temp As Single, k As Integer ‘temp产生随机数,k随机数存放数组元素的下标

    Randomize

    a(1) = Int(Rnd() * 900 + 100)

    For i = 2 To 10

        temp = Int(Rnd() * 900 + 100)

        If  seach(temp, i - 1)= True  Then

            i = i – 1

        Else

k = i                  

For j = 1 To i - 1

    If temp < a(j) Then k = j: Exit For

Next j

            For j = i - 1 To k Step -1

               a(j + 1) = a(j)

            Next j

                     ①        

      End If

    Next i

    List1.Clear

    For i = 1 To 10

       List1.AddItem Str(a(i))

    Next i

End Sub

‘函数实现在数组a中,从下标为1的数组元素到下标为t数组元素,查找有无pp的数值

Function seach(pp As Single, t As Integer) As Boolean

    Dim i As Integer

    seach = False

    For i = 1 To t

        If       ②          Then seach = True : Exit For

    Next i

End Function

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

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

Dim f(1 To 100) 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(i)=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

下列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

返回首页

试题篮