3.2 数据与结构 知识点题库

下面变量名命名正确的是(   )
A . 6Sf B . int C . b_4 D . b-4
以下不合法的常量是(   )。 
A . 10^2 B . 100 C . 100.0 D . 10E+01
数组的维数由的个数决定,数组的最小下标从1开始,要在声明段中用语句说明。
下列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

  1. (1) 代码“list1.AddItem”中的AddItem是(单选,填字母:A .属性名   B .对象名   C .方法   D .事件名)
  2. (2) 在程序划线处填入合适代码,使程序完整

     ② 

  3. (3) 加框处代码有错,请改正
  4. (4) 若输入的字符串为“21ckk,gho63,TCP43,23Yes,no62,phy46,”,则程序运行后第3组字符是
小明用VB编写了查找第二小的数的程序界面如图所示,程序随机产生50个范围在1~1000之间的随机整数,单击“查找”按钮能够在标签 Label1中显示第二小的数字。

Private Sub Command1_ Click( )

  Dim n As Integer, i As Integer

  Dim a(1 To 50) As Integer

  Randomize

  For i=1 To 5

        ①      

    List1 AddItem Str(a(i))

  Next i

  If a(1) < a(2) Then

    firstmin=a(1)

    secondmin =a(2)

  Else

    firstmin=a(2)

    secondmin=a(1)

  End if

  For i=3 To 50

    If a(i) < secondmin Then

      If        ②        then

        Secondmin = firstmin

        firstmin = a (i)

      Else

                 ③         

      End If

    End If

  Next i

  Label1. Caption = "第二小的数是" str(secondmin)

End Sub

  1. (1) 为了在列表框List1中加入随机产生的数字,小明在程序中写了语句 “List1. AddItem Str(a(i))”,其中Addltem是List1对象的。(填字母:A .属性/B .事件/C .方法)
  2. (2) 为实现上述功能,请在划线处填入合适的代码。

     ② ③ 

数组指针的应用:小明编写了一个二进制的消消乐程序,实现功能如下:二进制数中相邻重复的数字个数大于或等于2就消除掉,例如:二进制数1110前面连续3个1消除掉后该二进制数变成0,二进制数1001消除3个重复0后变成11,消除后的结果不继续消除。

程序功能如下:在文本框Text1中输入一个二进制数据,单击“消除”按钮 Command1,将二进制数据中相邻重复的数据大于或等于2的消除掉,并将结果在标签 Label1中显示。程序运行界面如图所示。

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

Private Sub Command1_Click ( )

Dim a (100) As String, b (100) As String

Dim n As Integer

Dim pa As Integer

Dim pb As Integer

s = Text1, Text

n = Len (Text1. Text)

For i= 1 To n

  a(i) = Mid(s, i, 1)

Next i

pa =1 : pb = 1

Do While pa < =  n-1

  If  Then   ‘①

    b(pb) = a(pa)

    pa= pa + 1: pb = pb + 1

  Else

    j = pa+1

    Do While j < = n

      If  Then    ‘②

        j=j+1

      Else

        Exit Do

      End if

    Loop

    pa = j

  End if

Loop

If pa =n Then b (pb) = a(pa): pb = pb + 1

ans = “”

For i= 1 To pb-1

      ‘③

Next i

Label1. Caption = "消除后的结果为:" + ans

End Sub

 ② ③ 

运行下列程序

Dim a(1 To 5) As Integer

  a(1) = 1

  For i = 2 To 5

    a(i) = Int(Rnd * 5) + 1

    If a(i) Mod 2 = 0 Then

      a(i) = a(i) + i

    Else

      a(i) = a(i) + a(i - 1)

    End If

 Next i

a(1)~a(5)的值不可能的是:(  )

A . 1,2,3,8,9 B . 1,6,2,10,11 C . 1,6,11,16,17 D . 1,4,5,10,7
某编码由4个信息位和3个校验位组成,通过对编码信息进行验算,能够检测并纠正一位错误代码。该7位编码中b1~b4为信息位,p1~p3为校验位,位置如表所示:

编码中位

1

2

3

4

5

6

7

对位信息

p1

p2

b1

p3

b2

b3

b4

校验的方式如下,求校验值g1、g2、g3:

g1 = p1 Xor b1 Xor b2 Xor b4

g2 = p2 Xor b1 Xor b3 Xor b4

g3 = p3 Xor b2 Xor b3 Xor b4

其中Xor 为异或运算,规则是:0 Xor 0 =0,0 Xor 1 =1,1 Xor 0 =1,1 Xor 1 =0,p1 Xor b1 是将p1、b1 转换为二进制后按位进行异或运算,如7 Xor 12 的结果为11。

a.若计算得到的校验值g1、g2、g3 均为0,说明校验正确,数据无错误。例如:若7 位编码为1101001,计算校验值g1、g2、g3 值均为0,验证正确。

b.若校验值g1、g2、g3 不全为0,说明数据有错,出错位置为g3g2g1(二进制数表示),纠错的方法是对错误的位进行取反,即“0”变“1”,“1”变“0”。例如:若7 位编码为1111001,计算校验值g1=1、g2=1、g3=0,不全为0,说明数据有错,错误位置在011(二进制数)位,即第3位,原位置上“1”应为“0”,正确编码为1101001。

小明为此编写了VB 程序,程序运行时,在文本框Text1 中输入编码值,单击“校验”按钮Command1 后,在文本框Text2 中输出运行结果,如图所示。

实现上述功能的 VB 程序如下,请回答下列问题:

  1. (1) 若按上述规则的7位编码为1001000,其中一位有错,则正确的编码应为
  2. (2) 请在划线处填入合适的代码并对加框处改正

    Function check(s As String) As Integer

    Dim i As Integer, g1 As Integer, g2 As Integer, g3 As Integer

    Dim c(1 To 7) As Integer

    For i = 1 To 7

     c(i) = Val(Mid(s, i, 1))

    Next i

    g1 = c(1) Xor c(3) Xor c(5) Xor c(7)

    g2 = c(2) Xor c(3) Xor c(6) Xor c(7)

    g3 = c(4) Xor c(5) Xor c(6) Xor c(7)

    If g1 + g2 + g3 = 0 Then check=0 Else check=

    End Function

    Private Sub Command1_Click()

    Dim i As Integer, m As Integer, Outs As String

    m=  ② 

    If m = 0 Then

      Text2.Text = “验证正确,数据无错误”

    Else

      For i = 1 To 7

     If i = m Then

       Outs=Outs+   ③  

     Else

       Outs = Outs + Mid(Text1.Text, i, 1)

     End If

      Next i

      Text2.Text = “第” + Str(m) + “位上数据有错误,正确编码应为:” + Outs

    End If

    End Sub

     ② ③ 

    加框处改正:

现有n项先后出现的任务,每项任务需要一定的时间完成,且每个时刻只能执行某一项任务。任务的执行规则如下:

每项任务有一个紧急程度,用数字表示,数字越大紧急程度越高。紧急程度最高的任务优先执行,紧急程度相同先出现先执行。若某项任务在执行过程中出现了一个紧急程度更高的任务,则正在执行的任务将被暂停,执行该紧急程度更高的任务。

编写VB程序,功能如下:程序运行时,各项任务数据按出现时刻升序显示在列表框List1中,单击“开始”按钮Command1,按照任务完成的先后顺序,在列表框List2显示每项任务的编号以及完成时刻。程序运行界面如图所示:请回答下列问题:

  1. (1) 若有3个任务需要完成,数据如下:

    1号任务:时刻1出现,完成所需时长4,紧急程度1

    2号任务:时刻2出现,完成所需时长2,紧急程度2

    3号任务:时刻7出现,完成所需时长1,紧急程度3

    则这3个任务的完成的顺序为(单选,填字母:A . 1号、2号、3号 /B . 2号、3号、1号 / C . 2号、1号、3号)。

  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Dim id(0 To 100) As Integer    '任务编号

    Dim t(0 To 100) As Integer     '出现时刻

    Dim L(0 To 100) As Integer     '完成所需时长

    Dim v(0 To 100) As Integer     '紧急程度

    Dim n As Integer      '总任务数

    Private Sub Form_Load()

     '本过程读取任务编号、出现时刻、完成所需时长和紧急程度的数据分别存储在数组 id,t,L和v中,并在List1中显示,代码略

    End Sub

    Private Sub Command1_Click()

    Dim q(0 To 100) As Integer            'q 数组按优先顺序存储已出现的任务编号

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

    cur = 0: k = 0             'cur 记录当前时刻

    For i = 1 To n

      Do While k > 0 And t(i) >= cur + L(q(k))            '新的任务出现时,计算并输出已经完成的任务编号

        List2.AddItem adj(2, (id(q(k)))) + adj(6, cur + L(q(k)))

        cur = cur + L(q(k))

        k = k - 1

      Loop

      If k > 0 Then L(q(k)) =        '更新正在执行的任务的完成所需时长

        k = k + 1

        j = k

      Do While v(q(j - 1)) >= v(i)

        q(j) = q(j - 1)

        j = j - 1

      Loop

      q(j) = i

       

    Next i

    Do While  

      List2.AddItem adj(2, id(q(k))) + adj(6, cur + L(q(k)))

      cur = cur + L(q(k))

      k = k - 1

    Loop

    End Sub

    Function adj(x As Integer, v As Integer) As String

     'adj可以通过添加前置空格将v转化为x位长度的字符串,便于输出对齐,代码略

    End Function

有如下VB程序段,该程序段运行后,在文本框中显示的内容是(  )

Dim a(1 To 10)As Integer

Dim i As Integer, j As Integer

a(1)=1:a(2)=1

For i=3 To 5

    a(i)=1

    For j=i-1 To 2 Step-1

        a(j)=a(j)+a(j-1)

    Next j

Next i

Text1.Text=Str(a(3))

A . 1 B . 3 C . 4 D . 6
下列属于常用的数据模型的是(  )

①网状模型     ②层次模型  ③关系模型   ④面向对象模型

A . ①②④ B . ②③④ C . ①③④ D . ①②③④
Python语句fruits=['apple', 'banana', 'pear'];
  1. (1) print('Apple' in fruits)的结果是
  2. (2) Python表达式eval("5/2+5%2+5//2")的结果是
以下程序段实现将数组中比a(1)大的数据都排在后面,不大于a(1)的数据都排在前面,a(1)在两者之间,例a(1)~a(6)中的数为:6,7,2,4,8,9,则处理后a(1)~a(6)依次为2,4,6,8,9,7,数组变量a(1)~a(6)中随机存入6个正整数,代码略

L=2: R=6

Do While L = R

    If  Then

        t = a(L): a(L) = a(R): a(R)= t

       

    Else

       

    End If

Loop

t = a(R): a(R) =a(1): a(1)=t

上述程序段中方框处可选语句为:(    )

① a(L) > a(1)    ② a(L) > a(R)    ③R = R - 1     ④L = L + 1

A . ①③④ B . ②③④ C . ①④③ D . ②④③
有如下 VB 程序段:

Const n = 7

Dim a(1 To 7) As Integer

Dim flag(1 To 7) As Integer       'flag 数组初始值均为 0 Dim k As Integer, t As Integer

a(1) = 18: a(2) = 34: a(3) = 56: a(4) = 23: a(5) = 29: a(6) = 39: a(7) = 72 k = (1 + 7) / 2

For i = 1 To n

    For j = 1 To n

        If a(j) > a(k) And flag(j) = 0 Then t = a(j): a(j) = a(k): a(k) = t

    Next j

    flag(k) = 1

    k = (k + 5) Mod 7 + 1

Next i

执行该段程序后,数组元素a(1)到a(7)的值为(    )

A . 29,23,18,72,56,39,34 B . 39,56,72,18,23,29,34 C . 34,39,56,72,18,23,29 D . 34,29,23,18,72,56,39
某同学网购的书,三本书是三个不同的物流公司派送的,将图中每个节点进行编号,作为根节点的“家”编号为“H”,其3个子节点(快递门店A,快递门店B,快递门店C)分别编号为“A” “B” “C”,图中两结点的连接线表示“权”,值为用时,详见下图。依次列出所有可能走法的分析树,求出取书用时最短时的路径,下列选择正确的是(      )

A . H-A-C-B-H B . H-C-B-A-H C . H-A-B-C-H D . H-B-A-C-H
在列表listaue中添加订单号”y5617”,正确的是(    )
A . listaue[]=“y5617” B . append(“y5617”) C . listaue[“y5617”] D . listque.append(“y5617”)
有如下VB程序段:

Dim a(1 To 6) As Long, i As Integer, x As Long, y As Long

x = 654321

For i = 1 To 6

    a(i) = x Mod 10

    x = x \ 10

    y = y + a(i) * 10 ^ (6 - i + 1)

Next i

执行该程序段后,变量y的值为(  )

A . 123456 B . 1234560 C . 6543210 D . 654321
有如下VB程序段:

n = 0

For i = 1 To Len(Text1.Text)

    c = Mid(Text1.Text, i, 1)

    If c >= “0” And c <= “9” Then m = 1 Else m = 2

    a(m) = a(m) + 1

    If a(m) = 1 Then n = n + 1

Next i

数组a各元素的初始值都为0,文本框Text1的内容为“Happy2018”。执行程序后,变量n的值为(  )

A . 1 B . C . 4 D . 9
张老师在筹备一次班级活动,活动的场地可以看成由m*n个小方格组成的矩阵(m,n<=100),由于活动需要,计划给这个场地铺上红地毯。当前的地毯都是矩形的,但是大小不一每块地毯铺设位置由左上角(x1,y1)和右下角(x2,y2)两个坐标确定,且刚好铺满该矩形区域。

张老师想了解每个小方格被多少块地毯覆盖,以便更好地调整地毯铺设位置,他编写了VB程序,实现以下功能:在文本框Text1中输人行数m,在文本框Text2中输入列数n,在Text3中输入每块地毯铺设的坐标x1,y1,x2,y2……坐标之间逗号分隔,地毯数量不超过100),单击计算按钮Commmand1,在列表框List1中显示每个小方格被多少块地毯覆盖。程序运行界面如图所示。

  1. (1) 文本框Text1中输人行数为5,在文本框Text2中输人列数5,在Text3中输人的地毯铺设的坐标为s=1,1,2,2,1,2,3,3则最后输出矩阵a(7)的值为。 (填数字)
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

    Dim m As Integer

    Dim n As Integer

    Dim a, b, C, d As Integer

    Dim flag(0 To 10000) As Integer

    Dim sum(0 To 10000) As Integer

    Dim pos(0 To 100) As Integer

    Private Sub Command1_Click()

        List1. Clear

        m = Val(Text1. Text)

        n = Val(Text2. Text)

        s = Text3. Text

        '读取每块地毯坐标,并按顺序存储在pos数组中

        '地毯总数量存储在变量k中

        For i=1 To k

            a= pos(i * 4- 3):b= pos(i * 4- 2):c= pos(i * 4- 1):d= pos(i * 4)

            

        Next i

        For i=1 To m

            

            For j=1 To n

                sum((i- 1) *n+ j) = sum((i- 1) * n+ j- 1) + flag((i- 1)*n+ j)

                s=s+Str(sum((i-1)*n+j))

            Next j

            List1. AddItem s

        Next i

    End Sub

    Sub add (ByVal x1 As Integer, ByVal y1 As Integer, ByVal x2 As Integer, ByVal y2 As Integer)

        '按行标记地毯铺设情况

        For i=x1 To x2

            flag((i - 1) * n + y1) = flag((i- 1)*n+y1) + 1

           

        Next i

    End Sub

数组元素a(1)到a(n*2)为互不相等的正整数(n≥1),要在其中找到最大值和次大值,并分别存储到变量m1和m2中。实现该功能的VB程序段如下:

m1=0:m2=0

For i=1 To n * 2 Step 2

    If a(i)>a(i+1)Then

        t1=a(i):t2=a(i+1)

    Else

        t1=a(i+1):t2=a(i)

    End If

    If  Then

        m1=t1:m2=t2

    ElseIf  Then

        m2=m1:m1=t1

    ElseIf  Then

        m2=t1

    End If

Next i

上述程序段中方框处可选代码为:①t1>m1     ②t1>m2     ③t2>m1

则(1)(2)(3)处代码依次为(    )

A . ①②③ B . ②③① C . ③①② D . ③②①