试题

试题 试卷

logo

题型:单选题 题类:模拟题 难易度:普通

浙江省湖州市2021-2022学年高三上学期信息技术12月选考模拟(一)试卷

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

i = 1: j = 20

m = (i + j + 1) \2

Do While i < j And Key <> a(m)

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

    m = (i + j + 1) \2'①

Loop

数组元素a(1)到a(20)各不相同且按降序排列,若查找键key与a(4)相等,执行该程序段,①处语句的执行次数有(    )

A、5 B、4 C、3 D、2
举一反三
用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

在文本框Text1中输入待加密的n个字符(仅由ASCII码字符构成,最多支持960个字符),输入后单击加密按钮,在文本框Text2中产生密文。加密方式如下:

①定义一个数组a(1 to 961)。产生一个3到6之间的随机整数k,将十进制数960均分成k份,字符在字符串中的位置除以k的余数决定该字符存放在第几份数据中(余数为1保存在第一份数据中,余数为2保存在第二份数据中……,余数为0保存在第k份数据中);

②用十进制数127减去每个字符的ASCII码值,得到的差作为该字符的密文,并保存在数组a中,同一段内的密文依次存放;

③将随机产生的数k加64后保存在数组元素a(961)中,并一起参与加密;

④将数组a中所有有密文值的数组元素从后往前依次存放到数组b中;

⑤将数组b中的每个密文用3位数字保存,不足3位的前面用0补足,然后依次连接保存在变量sc中;

⑥在文本框Text2中输出sc。

例如:

①若现有待加密的字符串为“zp123”,产生的随机数k=3,则960分成3份,每份可存放320个值,分别为a(1)至a(320),a(321)至a(640),a(641)至a(960);

②由于Asc(“z”) =122,则127-122=5。字符“z”在待加密字符串中的位置是1,除以k的余数为1,因此数字“5”放在第一份数据的第一个位置,即a(1)=5;同理可得,第一份数据为a(1)=5,a(2)=77;第二份数据为a(321)=15,a(322)=76;第三份数据为a(641)=78;

③将随机产生的k与十进制数64的和保存到a数组的最后一个值中,即a(961)=64+3=67;

④将数组a中所有有密文值的数组元素从后往前依次存放到数组b中,得到b(1)=67,b(2)=78,b(3)=76,b(4)=15,b(5)=77,b(6)=5;

⑤将数组b中的每个元素用0补足3位后依次连接并保存在sc中,得到sc=“067078076015077005”;

⑥输出sc。

注:(asc(“0”)=48,asc(“A”)=65,asc(“a”)=97)

Private Sub command1_Click()

    Dim a(1 To 961) As Integer

    Dim sr, sc As String

    Dim i, j, k, m, n, t As Integer

    Dim b(1 To 961) As Integer

    Randomize

    k = Int(Rnd * 4 + 3)

    sr = text1.Text

    For i = 1 To 961

        a(i) = -1

    Next i

    a(961) = k + 64

    t = 960 / k

    For i = 1 To Len(sr)

        m = i Mod k - 1

        n = i \ k + 1

        If i Mod k = 0 then n = n - 1: m = m + k

           ①     = 127 - Asc(Mid(sr, i, 1))      ‘将密文存储到数组a中

    Next i

    For i = 1 To Len(sr) + 1

        j = j + 1

        Do While a(j) = -1

            j = j + 1

        Loop

        b(Len(sr) + 2 - i) = a(j)      ‘将有密文值的a数组元素存储到数组b中

    Next i

    For i = 1 To Len(sr) + 1

        sc =   ②         ‘连接密文并保存到sc中

    Next i

    text2.Text = sc

End Sub

Function space(x As Integer) As String

    For i = 1 To    ③  

        space = space & "0"

    Next i

End Function

返回首页

试题篮