4.1.2 Python的数据类型 知识点题库

【加试题】小明为班会设计了一个抽奖程序,将所有同学的编号和对应的姓名分别保存在数组a(全班共50个同学,编号为1到50)和数组b中,点击抽奖按钮后,程序会随机产生一个1到50的正整数(同时包括1和50),作为中奖编号。
效果如图所示,左边列表框List1中显示同学的编号和姓名,单击"抽奖"按钮(Command1),在标签Label3中显示抽中的编号,同时在标签Label4中显示"恭喜***同学",其中具体同学的姓名从数组b中获取。
解决此问题的程序段如下:
Dim a(1 To 50) As Integer,b(1 To 50) As String
Private Sub Command1_Click()
Dim c As String, t as Integer    ①
Randomize
c=Int(Rnd()*50+1)
Label3.Caption = Str(c)
t = search(c)
    If  t < 0 Then    ②
       Label4.Caption = "恭喜" + b(c) + "同学"
    End If
 End Sub
Function search(m As Integer) As Integer
search = 0
For i = 1 To 50
    If  m = a(i) Then
       search = a(i)
    End If
Next i
End Function
Private Sub Form_Load()    ' 此过程用于对数组a和数组b进行初始赋值,代码略
End Sub
上面代码中有错误请改正。
下列可作为VB变量名的是:(   )
A . a\b B . False C . cos D . sum1
在Visual Basic中,语句x="123"所定义的变量x属于(  )
A . 整数型 B . 单精度实数型 C . 字符串型 D . 长整数型
某游戏规则如下:将2*n位队员按2人一组分成n个队(n<10),地面上有一排格子,共2*n个,每个格子都对应一个小于10的随机正整数。游戏开始后,所有队员都选择站到一个空的格子里,等他们站满格子后,开始为每位队员进行记分。记分规则:每组甲乙两个队员,甲队员的分数是从自己所站的格子开始,按照格子序号递减,将这些格子中的数字一直累加到第1个格子。乙队员的分数是从自己所站的格子开始,按照格子序号递增,一直将格子中的数字累加到第2*n个格子。如果同一队的两名队员得到的分数相同,则该组参赛队获胜。

例如:如图所示,有4个队8位队员,地上一排格子的数字依次为2、1、1、7、9、2、5、6。若某队甲队员站在第4个格子,则其分数为2+1+1+7=11;乙队员站在第7个格子,则其分数为5+6=11。两者相等,则该队获胜。

gz(1)

gz(2)

gz(3)

gz(4)

gz(5)

gz(6)

gz(7)

gz(8)

←→

2

1

1

7

9

2

5

6

甲                                             乙

  1. (1) 假设有3队队员,地上一排格子的数字依次为6、7、3、4、3、9。若某队甲队员站在第3个格子上,那么该队乙队员站在第个格子上才能获胜。

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

    Dim n As Integer

    Dim gz(1 To 20) As Integer

    Private Sub Command1_Click()

    Dim dfa As Integer, dfb As Integer

    Dim ta As Integer, tb As Integer

    Randomize

    For i = 1 To 2 * n

     gz(i) = Int(Rnd* 9 + 1)

     List1.AddItem “gz(“ & i & ”)” & gz(i)

    Next i

    num = 1

    For j = 1 To 2 * n

     ta = j

     dfa = zwdf(ta, True)

     For k = 1 To 2 * n

        tb = k

       

        If dfa = dfb Then

         List2.AddItem num & “甲队员(“ & j &”)得分=” & dfa & “乙队员(“ & k & ”)得分=” & dfb

         num = num + 1

        End If

     Next k

    Next j

    List2.AddItem “获胜的站法共有:”++ “种”

    End Sub

    Function zwdf(p As Integer, r As Boolean) As Integer

    Dim fs As Integer

    If r = True Then

      

        fs = fs + gz(i)

      Next i

    Else

      For i = p To 2 * n

      fs = fs + gz (i)

      Next i

    End If

    zwdf = fs

    End Function

当计算机程序中无法用普通数据类型表示位数较多的乘数和计算结果时,就需要采用高精度乘法。如:当两个各有20位数字的整数相乘时,就无法用长整型(Long)数据类型来表示。高精度乘法运算就是运用数组,用程序模拟列竖式计算的过程。两个正整数进行高精度乘法计算的一般算法如下:

⑴将第一个整数各位上的数字按照从低位到高位的顺序依次存入数组a(1)、a(2)、…、a(La)中,将另一个整数各位上的数字按照从低位到高位的顺序依次存入数组b(1)、b(2)、…、b(Lb)中。其中,La表示第一个整数的位数,Lb表示第二个整数的位数;

⑵按照从低位到高位的顺序,将两个整数各位数值进行逐位乘法计算(第一轮先让b(1)依次乘以a(1)、a(2)、…、a(La),第二轮再让b(2)依次乘以a(1)、a(2)、…、a(La),依次进行),每位的乘法结果也按照低位到高位的顺序依次存入数组ans(1)、ans(2)、ans(3)…中;

⑶对数组ans中的计算结果进行从低位到高位的进位处理;

⑷统计数组ans中实际计算结果的有效数值位数,并将位数值存入变量length;

⑸按照高位到低位的顺序输出数组ans中的计算结果。

小强按照上述方法设计了一个两数进行高精度乘法计算的VB程序,功能如下:在文本框Text1和Text2中依次输入两个整数,单击“计算”按钮Command1,程序进行高精度乘法计算,并在标签Label4中输出计算结果。下面信息显示了进行高精度乘法计算的主要过程(假设输入的两个整数分别为“123”和“45”):

图a

图b

程序运行效果如图所示。

图c

实现上述功能的VB程序如下:

  1. (1) 请在划线处填入合适代码。

    Dim a(1 To 30)As Integer, b(1 To 30) As Integer, ans (1 To 60) As Integer

    Dim La As Integer, Lb As Integer, length As Integer

    Private Sub Command1_Click()

    Dim i As Integer, j As Integer, t As Integer, temp As String

    '将两个乘数(正整数)各数位上的数字按照上述算法依次存入数组a和b,每个正整数位数分别保存到变量La和Lb;将保存结果的数组ans(i)值初始化为零(该部分程序代码略)

    For i=1 To Lb   

    For j=1 To La

    ans(i+j-1) =

    Next j

    Next i

    For i=1 To La+Lb  

    ans(i+1)=ans(i+1)+ans(i)\10

    ans(i)=

    Next i

    length=La+Lb

    Do While ans(length)=0

    length=length-1

    Loop

    For i= To 1 Step -1

    Label4.Caption=Label4.Caption&Str(ans(i))

    Next i

    End Sub

  2. (2) 根据本题算法,若输入的两个整数分别为5125和18,则在输出乘法计算结果时,变量length的值为
变量名的长度不超过个字符。
有如下VB程序段:

For i=1 To 6

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

Next i

For i=1 To 5

   If i Mod 2=1 And a(i)>a(i+1)Then

      t=a(i):a(i)=a(i+1):a(i+1)=t

   Else

      a(i)=a(i)+1

   End If

Next i

执行程序后,a数组各元素可能是(  )

A . 11,11,7,9,3,9 B . 6,2,8,10,5,9 C . 6,9,3,7,8,12 D . 3,9,0,8,2,7
小明设计了一种纸牌游戏,每张纸牌上都有一个100以内的数字,每个数字对应的纸牌只有一张。初始时所有的纸牌从上到下按数字大小顺序叠成一堆,如果从中抽走一张,小明就按抽走的纸牌位置分成两堆,对于每堆纸牌,小明采用记忆最顶端牌的数字和这堆牌张数的方法来记录。如剩余的牌为1,2,3,5,6,11,牌分成3堆,记录为(1,3),(5,2),(11,1)。现在有些牌采用如下规则要放回牌堆,有4种情况:

①上靠,例如放回的牌数字为7,可以把牌放在第2堆的最下面,则原来登记的记录变成(1,3),(5,3),(11,1),牌还是3堆。

②下靠,例如放回的牌数字为10,可以把牌放在第3堆的最上面,则原来登记的记录变成(1,3),(5,2),(10,2),牌还是3堆。

③上下不靠,例如放回的牌数字为9,则单独放一堆,登记的记录变成(1,3),(5,2),(9,1),(11,1),牌变成4堆。

④上下靠,例如放回的牌数字为4,则合并第1堆和第2堆,登记的记录变成(1,6),(11,1),牌变成2堆。

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

  1. (1) 现在有3堆牌,分别记录为(1,5),(7,3),(11,20),要把牌10放回牌堆,则登记的记录变成
  2. (2) 请在划线处填入合适的代码。

    Const n=5000

    Dim a(0 To n)As Integer   'a(i)保存第i条记录的最顶端的牌

    Dim b(0 To n)As Integer   'b(i)保存第i堆牌的张数

    Dim c As Integer,k As Integer,sp As Integer   'k为原始记录数

    '读取原始k条记录的数据,依次存入a(1),b(1),a(2),b(2)…a(k),b(k),代码略

    a(0)= 0:b(0)=0:sp=k +1:a(sp)=10000:b(sp)=0

    Private Sub Command1_Click()

    Dim i As Integer

    c=Val(Text1.Text)    'c 为放回的牌号

    i=1

    Do While a(i)<c     '查找牌c放的位置

        i=i+1

    Loop

    i=i-1

    '下面为放牌过程

    If a(i)+ b(i)=c Then

        If     ①   Then  '第4种情况,上下靠

            b(i)=b(i)+1+ b(i+1)

            For j=i+1 To sp-1

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

            Next j

            sp=sp - 1

        Else           '第1种情况,上靠

            b(i)=b(i)+1

        End If

    Elself c+ 1=a(i+1)Then'第2种情况,下靠

        a(i + 1)=c:b(i+1)= b(i+1)+1

    Else           '第3种情况,上下不靠

        For j=    ②  

            a(j)=a(j-1):b(j)=b(j-1)

        Next j

        a(i+1)=c:b(i+1)=1:sp=sp+1

    End If

    '下面为输出登记的记录,不包括虚设的两条记录

    For i=1 To   ③     

        List3.Addltem“第”&Str(i)&“记录(”&Str(a(i))&“,”&Str(b(i))&“)”

    Next i

    End Sub

若要对实数型变量x四舍五入保留两位小数,下列VB表达式中能实现的是(  )
A . Int(x*100+0.5) / 10 B . Int(x*10+0.5) / 10 C . Int(x*100) / 100 D . Int(x*100+0.5) / 100
VB中,下列选项是合法变量名的是(  )。
A . 3sum B . int C . sum3 D . sum+3
下列可以作为Visual Basic变量名的是(  )
A . 5AD B . A+C C . Ab_3 D . B&C
在程序运行过程中值始终保持不变的量称为
有如下VB程序段:

i=1:j=8:k=0

Key=Int(Rnd*50)*2+3

Do While i<=j

  m=(i+j+1)\2

  If Key=a(m)Then

    Exit Do

  ElseIf Key <a(m)Then

    i=m+1:k=k+1

  Else

    j=m-1:k=k-1

  End If

Loop

Text1.Text=Str(k)

数组元素a(1)到a(8)的值依次为“88,66,50,46,24,20,18,6”,执行该程序段后,k的值不可能是(   )

A . -1或-2 B . 1或-1 C . -3或2 D . -2或3
有如下VB程序段:

n=10

For i=1 Ton-1

    For j=i+1 To n

        If a(i)=a(j)Then

          a(j)=a(n)

          n=n-1

        End If

    Next j

Next i

若数组a中的元素为“3,3,7,7,11,11,15,15,19,19”,则该程序执行后,数组a中的n个元素值依次为(  )

A . 3,19,7,15,11 B . 3,7,11,15,19 C . 3,3,7,7,11 D . 3,19,7,19,11
采集某市某辆出租车2007年2月20日全天行驶轨迹的数据集,如图所示。该数据集特征包括:出租车ID、时间、经度、纬度、夹角角度、出租车的瞬时速度和出租车载客状态。

  1. (1) 图所示数据集文件名为,出租车ID、时间、经度、纬度、夹角角度、出租车的瞬时速度和出租车载客状态数据的间隔符为,经度、纬度的数据类型为
  2. (2) 绘制该数据集中出租车行驶轨迹的Python程序如下,请在方框中填写合适的代码,完善程序。

    import matplotib. pyplot as plt

    def track(file):     #绘制GPS坐标轨迹

         jd=[ ]      #经度

         wd=[ ]       #纬度

         for line in open(file):

             #切分行数据生成列表

             line_data=line. split(',')

             #取轨迹坐标

            

             jd. append(x)

             wd. append(y)

         plt. plot(jd, wd)

    filename='Taxi_ 105. txt'

    track(filename)

    plt. show( )

  3. (3) 运行程序,绘制的图形如图所示。说说你从图中发现了什么。

  4. (4) 尝试编写Python程序,从该数据集中挖掘其他你感兴趣的信息。
凡是加上了双引号的字符、数字等都是字符串。
下列不属于浮点数类型的是?(       )
A . 36.0 B . 96e4 C . -77 D . 9.6E-5
在python计数循环中,列表正确的输写方式是(      )。
A . (1,2,3) B . (1,2.3) C . [1,2.3 ] D . [1,2,3]
已知字符串a="python",则a[-1]的值为(    )
A . "p" B . "n" C . "y" D . "o"
有n个从小到大排列的正整数依次存储在数组a中,另有m(m<n)个正整数存储在数组b中。现要求只保留上述n+m个数据中从小到大排列的前n个数据,并依次存入数组a中,其余数据被剔除。

小李为了解决该问题,首先结合数组a的有序性,找出a,b两个数组中要剔除的m个数据,再将数组b中保留的数据插入到数组a中。示例如下:

n=10,数组a:2,4,6,8,10,12,14,16,18,20

m=5,数组b:41 , 11,17 , 29,9

处理后的数组a:2,4,6,8,9 , 10,11 , 12,14,16

  1. (1) 若n=8,m=4,数组a的元素依次为“3,4,6,10,13,14,21,25”,数组b的元素依次为“3,18,7,15”,按上述要求剔除m个数据后,数组b中保留的数据个数为个。
  2. (2) 实现上述功能的部分VB程序如下,请在划线处填入合适的代码。

    Const n=1000,m=50

    Dim a(1 To n)As Integer, b(1 To m)As Integer

    Function getImax(k As Integer)As Integer

        ‘在数组元素b(1)~b(k)中找出值最大的元素,返回其下标,代码略

    End Function

    Private Sub Commandl_Click( )

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

        Dim na As Integer, nb As Integer, imax As Integer, mean As Integer

         ‘读取数据分别存入数组a、b,代码略

        na=n : nb=m

        imax=getImax(nb)

        For i=1 To m

            If a(na)<= Then

                b(imax)=b(nb)

                nb=nb-1

                If nb>0 Then imax=getImax(nb)

            Else

                na=na-1

            End If

        Next i

        Do While nb>0

            i=1 : j=na

            imax= getImax(nb)

        Do While i<=j

            mean =(i+j)\2

            If a(mean)<b(imax) Then i= mean +1 Else j=mean-1

        Loop

            For k=na To 1 Step-1

                

            Next k

            a(i+nb-1)=b(imax)

            b(imax)=b(nb)

            

            nb=nb-1

        Loop

        '输出数组a,代码略

    End Sub

最近更新