3.2 数据与结构 知识点题库

某监狱人满为患,由于牢房太小,而囚犯太多,大家只能站着睡觉。因此囚犯们只好采取抓阄的策略来改善自身的生存环境:n个囚犯(n<=50)围成一圈,按顺序从1到n编好号。从第1个人开始报数,报到3的人自杀,下一个人从1开始报数,报到3的人自杀。如此下去,直到留下最后一个人。请按退出顺序输出自杀的人的编号。程序运行时,单击“抓阄”按钮,结果显示在列表框List1中,程序运行界面如图所示。

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

  1. (1) 当总人数为7时,对应的自杀序列编号为
  2. (2) 请在划线处填入合适的代码。

    Private Sub Command1_Click()

    Dim i As Integer, n As Integer

    Dim num As Integer, t As Integer

    Dim a(1 To 50) As Boolean

    List1.Clear

    n = Val(Text1.Text)

    For i = 1 To n

     a(i) = True

    Next i

    t = n

    Do While

     For i = 1 To n

    If a(i) Then

     

    End If

    If num = 3 Then

     a(i) = False

     t = t - 1

     

     List1.AddItem Str(i)

    End If

     Next i

    Loop

    End Sub

有如下VB程序段:

For i= 1 To 49

  j=1:a(j)=a(j)+1

  Do While a(j)=5

    a(j)=0

    j = j + 1

    a(j) = a(j) + 1

  Loop

Next i

数组a中各元素初始值均为0,该程序执行后,数组a中各元素之和为(  )

A . 9 B . 0 C . 3 D . 49
三个好朋友玩游戏:三人分别在纸上写出一组升序数据(个数不限),从三组数据中分别取一个数字,谁能最快找到三个数字之间差值最小(即最小距离)的组合情况,谁就赢。有一个人每次都是最快找到的,她用一个样例分享了寻找技巧。

例如有这样三组数据:

a数组{3,4,5,7,15}

b数组{10,12,14,16,17}

c数组{20,21,23,24,37,40}寻找技巧步骤图所下所示:

此时,组合中最小的数15已是a数组的最后一个元素,所以最佳组合为15,16,20,最小距离为5。

  1. (1) 有这样的三组数据{2,5,8,10,15},{3,7,16,20),{8,12,18,21,24,30},最小距离为
  2. (2) 请在划线处填入合适的代码。

    Private Sub Ce_Click()

    Dim a(1 To 100) As Integer, b(1 To 100) As Integer, c(1 To 100) As Integer

    Dim s1 As String, ch As String, flag As Boolean

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

    Dim k1 As Integer, k2 As Integer, k3 As Integer

    Dim md As Integer, cd As Integer

    ‘获取数组元素值分别存入三个数组中,其中b和c数组的存储过程略

        s1 = Text1. Text

        k1=0: flag=True

        For i = 1 To Len(s1)

            ch = Mid(s1, i, 1)

            If ch <> ",”Then

                  ① 

                a(k1) = a(k1) * 10 + Val (ch)

                flag = False

            Else

                flag = True

            End If

        Next i

        i=1: j=1: k=1: md=32767

        Do While i<=k1 And j<=k2 And k<=k3     ‘k2,k3变量功能同k1

              ② 

            If cd<nd Then md=cd

            m= min(a(i), b(j),c(k))

            If m= a(i) Then

                i=i+1

            ElseIf m = b(j) Then

                j=j+1

            Else

                  ③ 

            End If

        Loop

        Label4. Caption = Label4. Caption + Str (md)

    End Sub

    Function min(x As Integer, y As Integer, z As Integer) As Integer

        If x<y Then min=x Else min=y

        If min>z Then min=z

    End Function

    Function max(x As Integer, y As Integer, z As Integer) As Integer

        If x>y Then max=x Else max=y

        If max<z Then max=z

    End Function

求数组a 中非降序数列的方法,算法描述如下:

⑴用数组依次存储每个非降序数列中最大的元素(查找过程中的最大值),初始时b(1)为数组a第1个元素。

⑵加入方法:将a(i)与数组b中的每个元素依次逐个比较:

若a(i)不比b(j)小就用a(i)替换b(j)中的值;将a(i)添加到第j个非降序数列中,并连接到c数组的c(j)中。

若a(i)比b(j)都小,则在数组b最后添加新的元素值为a(i),即将a(i)添加到第j+1个下降数列中,并连接到c数组的c(j+1)中。

⑶若数组a各元素的值为:12,36,16,36,27,18时,则3个非降序数列分别为:“12,36,36”,“16,27”,“18”。

程序运行界面如下图所示:

小明依据上述描述设计了如下VB程序。请回答下列问题:

  1. (1) 代码"List1.Clear"中的 Clear 是 。(单选,填字母: A .对象名 /B .事件名 /C .属性名 /D .方法名)
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Const m=15

    Dim a(1 To m) As Integer Private Sub Form_Load()

    ‘读取m个数据,依次存储到 a(1)、a(2)、……a(m)中,代码略End Sub

    Private Sub Command1_Click()

    Dim b(1 To m) As Integer '存储数列最大的值Dim c(1 To m) As String     ‘存储非降序数列Dim i As Integer

    Dim bottom As Integer Dim j As Integer

    Dim bn As Integer      ‘存储非降序数列的个数List1.clear

      b(1) = a(1)

          ①  

      c(1) = Str(a(1))

      For i = 2 To m 

         For j = 1 To bn

             If   ②   Then

                b(j) = a(i)

                

                Exit For

             End If

        Next j

        If j > bn Then

           bn = bn + 1

                ③       

           c(b(n)) = Str(a(i))

        End If

      Next i

    For i = 1 To bn

         List1.AddItem c(i)

    Next i

    Text2.Text = "数列中共有" + Str(bn) + "个非降序序列"

    End Sub

     ② ③ 

  3. (3) 程序中加框处代码有错,请改正。
给定m个区间和1个数组(有n个元素),现要求根据各区间限定的取值范围,将数组依次分割成m+1个段。具体分割方法如下:

•第1段是从数组首个元素开始,元素值都属于第1区间的最长连续元素段,如果首个元素不属于第1区间,则第1段元素个数为0;

•第1段分割后的剩余元素,用同样的方法来依次分割第2段、第3段、…、第m段;

•第m段分割后的剩余元素分割到第m+1段(剩余段)。

若第p(1≤p≤m-1)段末尾连续元素的值也同时属于第p+1区间,则这块连续元素称为第p段“重叠块”,该段其余部分称为第p段“非重叠块”。由于不存在第m+1区间,这里特别规定:第m段的全部元素都分割到m段“非重叠块”,第m段“重叠块”的元素个数为0。一个数组分段示例如图。图中数组第1个元素10不属于第1区间[0,5],因此第1段的元素个数为0。10和20属于第2区间,而33不属于第2区间,因此第2段只包含10和20两个元素。第3段末尾连续3个元素的值也同时属于第4区间,因此,第3段“非重叠块”包含33,58,46,第3段“重叠块”包含55,62,69。

  1. (1) 给定2个区间,数组各元素为“12,44,34,45,66,50,45,70”,第1段“重叠块”中的元素个数为3个,第1个区间为[10,50],则第2个区间可能为(单选,填字母A .[30,80] /B .[9,45] /C .[60,90])。
  2. (2) 小李根据上述描述,设计了一个统计各段“非重叠块”“重叠块”和剩余段中元素个数的算法。算法的 VB 程序如下,请在划线处填入合适的代码。

    Const n = 18: m = 6

    Dim a(1 To n) As Integer

    Dim b(1 To 2 ∗ m) As Integer

    'b(1)、b(2)为第 1 区间的下限和上限,b(3)、b(4)为第2区间的下限和上限,…

    Dim c(1 To 2 ∗ m + 1) As Integer

    '数组c用于保存统计结果:

    'c(1)、c(2)分别存储第1段"非重叠块"和"重叠块"的元素个数,

    'c(3)、c(4)分别存储第2段"非重叠块"和"重叠块"的元素个数,…

    'c(2m-1)存储第m段"非重叠块"元素个数,c(2m)存储

    第m段"重叠块"的元素个数(值为0)

    'c(2 m+1)存储剩余段元素个数

    Private Sub Command1_Click()

    Dim i As Integer, p As Integer, L As Integer, LL

    As Integer

    '读取n个数据并保存在数组a中,代码略

    '读取m个区间的下限和上限并保存在数组b中,代码略

    For i = 1 To 2 ∗ m + 1

     c(i) = 0

    Next i

    i = 1: p = 1

    L = 0: LL = 0

    Do While i <= n And p <= m

     If IsIn(i, p) Then

     If Then

     LL = LL + 1

     Else

     L = L + LL + 1

     LL = 0

     End If

     i = i + 1

     Else

     c(2 ∗ p - 1) = L

     c(2 ∗ p) = LL

     L = 0

     p = p + 1

     End If

    Loop

    If i <= n Then

    Else

     c(2 ∗ p - 1) = L

     c(2 ∗ p) = LL

    End If

    '输出统计结果,代码略

    End Sub

    '函数IsIn用来判断a(i)值是否属于第p区间

    Function IsIn ( i As Integer, p As Integer )

    As Boolean

    If a(i) >= b(2 ∗ p - 1) And a(i) <= b(2 ∗ p)

    And p <= m Then

     IsIn = True

    Else

     IsIn = False

    End If

    End Function

已知单精度实数型变量sum,文本框Text1上已经输入“126.85”,将Text1上的内容存储在变量sum中,则下列语句正确的是(  )
A . Text1.Text=Str(sum) B . sum=Val(Textl.Text) C . Str(sum)=Text1.Text D . sum=Str(Textl.Text)
小张编写程序,实现把数据temp插入到升序序列中,得到一个新的升序序列,原升序序列各元素已依次存放在数组元素a(1),a(2),a(3),……,a(n)中。他编写的VB程序段如下:

If temp>=a(n) Then

    a(n+1)=temp

Else

    j=n

    Do While j>=1 And temp<a(j)

       

        j=j-1

    Loop

   

End If

要使程序实现上述功能,则方框①②中的语句分别是(   )

A . a(j+1)=a(j)   a(j+1)=temp B . a(j)=a(j-1)   a(j+1)=temp C . a(j+1)=a(j)   a(j)=temp D . a(j)=a(j-1)   a(j)=temp
下列数据中,属于字符串类型的常量是(    )。
A . 123 B . 2E3 C . True D . ”456”
有如下VB程序段:

n = 7

d(1) = 123: d(2) = 35: d(3) = 43: d(4) = 23: d(5) = 56: d(6) = 78: d(7) = 132

k = 1

For i =2 To n

    For j =    ⑴   

        If    ⑵     Then

            tmp = d(j): d(j) = d(j + 2): d(j + 2) = tmp

        End If

    Next j

    k = -k

Next i

执行该程序段后,d 数组各元素为“132,23,123,35,56,78,43”,上述程序段中方框处可选语句为:

①i -1 To n - 2

②1 To n - i

③d(j) * k > d(j + 2) * k

④d(j) * (-k) > d(j + 2) * (-k)

则(1)(2)处语句依次可为(   )

A . ①③ B . ②③ C . ①④ D . ②④
已知year2021=(1:["建党",100,"周年"],2:["建国",72,"周年"],3:["辛亥革命爆发",110,"周年"]},则year2021[2][1]的值为(    )
A . ”辛亥革命爆发" B . 72 C . 110 D . "建国”
关于程序中的常量、变量,以下说法中正确的是(    )
A . 将数据存入某变量后,读取该变量中的值,不会改变该变量的值 B . 将数据存入某变量以后就不能将新的数据存入该变量 C . 常量只能是固定的数值 D . 为了增加程序的可读性.在变量命名的时候可以考虑用能代表一定含义的单词作为变量名比如命名为string
阅读程序。分析代码并回答问题。

list=['a','b','c','d','e','f','g']

list1=[]

list2=[]

for i in range(7):

  if i%2==0:

    list1.append(list[i])

  else:

    list2.append(list[i])

  print(list1)

print(list1)

 

  1. (1) list 的数据类型是
  2. (2) list中的元素的数据类型
  3. (3) list1=[]的作用是
  4. (4) for i in range(7)语句中,i 的实际数据范围是从
  5. (5) append(list[i])的作用是
下面属于不合法的整数常数的是。(      )
A . 100 B . &O100 C . &H100 D . %100
“幸运儿”属于哪种数据类型(     )
A . 数值型 B . 日期型 C . 字符型 D . 字节型
(     )数据有两个值:True,false。
A . 布尔型 B . 字符型 C . 数值型 D . 日期型
设一棵二叉树的中序遍历序列:becfad,后序遍历序列:efcbda,则二叉树前序遍历序列为(     )
A . abcdef B . bdaefc C . abcefd D . abcfed
在VB中,数据3.14属于整型常量。
某餐厅辅助配餐程序提供给用户基于预算的点菜功能,该程序主要由“菜单显示”及“订单管理”两大基本模块组成,具体如下:

◆菜单显示功能:输出菜价小于等于预算经费余额且在售的菜品;

◆订单管理功能:包括输出订单中的菜品信息,订单菜品的删除和添加等。

  1. (1) 菜品数据相对稳定,为了便于查找菜品,采用(   )结构较为合理,订单数据涉及频繁的增加或删除,采用(   )结构较为合理。

    上述可填的内容为:(单选,填字母A .数组、链表/B .链表、数组)

  2. (2) 餐厅菜品数据表如下所示,每道菜由4个数据项组成,第一项为菜品编号,第二项为菜品名称,第三项的菜品单价(以“分”为单位,该数据项为0.表示菜品已下架),第四项为当月销量。实现菜单显示和输出订单菜品信息的程序如下,餐厅菜单保存在menu中,格式为:menu=[[0,"太湖三宝",18800,535], [1,"湖羊肉",11800,446],…]。

    编号

    菜品名称

    菜品价格(单位:分)

    当月销量

    0

    太湖三宝

    18800

    535

    1

    湖羊肉

    11800

    446

    n-1

    白果芦笋

    0

    2

    程序运行结果如图所示,请在划线处填入合适的代码。

    #读取餐馆全部菜品数据保存到menu中,数据类型及格式见题干描述,代码略。

    sal=int(input("☆ 请输入你的消费预算(单位:分):"))

    print("☆ 可供选择的菜品:")

    for i in range(len(menu)):

      if  and menu[i][2]<=sal:

        print(' ',menu[i])

        n=input("☆ 请输入预选择的菜品编号,以逗号分隔:").split(',')

        x=len(n)

        lis=[[int(n[i]),i+1] for i in range(x)]

        lis[x-1][1]=-1

        p=0

        while p!=-1:

          bh=lis[p][0]

      if menu[bh][2]<=sal:

       

        y=p

      else:

        lis[y][1]=lis[p][1]

        p=lis[p][1]

        p=0;s=''

    while p!=-1:

      s+=menu[lis[p][0]][1]+' '

     

      print('☆ 点单成功的菜品:'+s)

    print("☆ 剩余金额:"+str(sal))

在Python中可以使用列表模拟单向链表,如链表中的节点p,a[p] [0]存储p节点的数据,a[p][1]存储p指向后继节点的指针。若要在p节点之后插入新的节点x(x作为p的新后继节点),需要执行的语句是(    )
A . a[p][1]=x; a[x][1]=a[p][1] B . a[x][1]=a[p][1]; a[p][1]=x C . a[p][0]=x; a[x][0]=a[p][0] D . a[x][0]=a[p][0]; a[p][0]=x
有一棵二叉树如图所示,该二叉树的后序遍历结果正确的是(    )

A . XBCDAYEF B . FEYADCBX C . DBEAFXCY D . DEFABYCX
最近更新