常见数据类型、数组 知识点题库

下列关于VB中数组的叙述,错误的是(   )
A . 数组是一种基本数据类型 B . 数组是一组相同类型的变量集合 C . 数组中的元素的个数可以计算出来 D . 数组元素的引用形式为“数组名(下标)”
用变量存储诗朗诵比赛中选手的平均得分(保留2位小数),则变量的数据类型应说明为(  )
A . Integer B . Long C . Single D . Date
当计算机程序中无法用普通数据类型表示位数较多的乘数和计算结果时,就需要采用高精度乘法。如,当两个各有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中输出计算结果。

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

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

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

    Dim ans(1 To 60) As Integer

    Dim La As Integer, Lb As Integer

    Dim 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) = + b(i) * a(j) 

     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的值为
下列各项是常量的有(  )
A . ABC B . “ABC” C . 5+A D . 1/2
变量名的长度不超过个字符。
有如下VB程序段:

Dim a(1 To 100) As Integer

Dim b(1 To 100) As Integer

Dim c As Integer

a(1) = 0: a(2) = 2: b(1) = 1: b(2) = 2: c = 0

For i = 2 To 6

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

  b(i + 1) = b(i) ^ 2 / b(i - 1)

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

Next i

Label1.Caption = Str(c)

该程序运行后,Label1中显示的内容是(  )

A . 46 B . 88 C . 164 D . 76
有如下VB程序段:

Dim a(1 To 5) As Integer

i =1: n=5

Randomize

Do While i<=n

    x= Int(Rnd*9) +1

    If x Mod 3=0 Then

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

    Else

        a(n)=x: n=n-1

    End If

Loop

数组元素的初值均为0,执行该程序段后,a(1)至a(5)的值不可能是(  )

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

例如有这样三组数据:

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

在用VB编程时,变量的命名要符合规则,下列变量名称合法的是(  )。
A . 1he B . he_1 C . he+1 D . print
有一批货物,已知每件货物的重量和货架号,机器人在可承受的载量范围内,每趟按货物顺序连续装载尽量多的货物,并将各货物送到其货架号相应的货架上。如图a所示,货架构成是环形结构,货架是按顺时针方向从1到10进行编号,第10号货架(即图中A处)不装货物,机器人在A处装载货物。每趟装载货物后,机器人按所装载货物的倒序配送货物,配送过程中尽可能走更短的路线,例如:某趟机器人所装载货物的货架号依次为:3,1,7,9,则机器人按倒序配送货物的路线如图a中带箭头虚线所示,配送完成后回到A处继续下一趟配送任务。现要求在限定配送趟数内完成任务时,计算机器人所能承受装载的最大重量至少为多少?机器人完成所有趟数的配送任务并回到A点的总行程是多少?

图 a

小李编写VB程序实现上述功能:在列表框List1中按货物顺序显示其重量和货架号,在文本框Text1中输入机器人送货趟数,单击“结果”按钮Command1后,标签Label3和Label4中分别显示要求机器人可承受的最大载重最小值和送货总行程。程序运行界面如图b所示。

图 b

请回答下列问题:

  1. (1) 如图b所示,机器人最大载量达到20时,机器人第3趟配送的货物数量是件。
  2. (2) 实现机器人送货功能的VB程序如下,请在划线处填入合适的代码。

    Const num = 8     '货物数量

    Const shelf = 10     '货架数量,1-9号货架可供存储货物,第10号货架用作机器人装货点

    Dim g(1 To num) As Integer      '各货物的重量

    Dim s(1 To num) As Integer       '各货物的货架号

    Private Sub Form_Load()

    '从数据库中读入num件物品的重量、货架号,分别存储在数组g、s中

    '将各物品数据显示在list1中,代码略。

    End Sub

    Private Sub Command1_Click()

    Dim i As Integer, j As Integer, n As Integer, max As Integer, total As Integer

    Dim head As Integer, tail As Integer, dis As Integer, part As Integer

    total = g(1)

    For i = 2 To num

    If g(i) > max Then max = g(i)

    total = total + g(i)

    Next i

    n = 0

    For i = max To total

    part = 0: n = 0: head = 1: dis = 0

    For j = 1 To num

    part = part + g(j)

    If part > i Then

        n = n + 1: j = j - 1: tail = j

        dis = dis + tran(head, tail)

        part = 0: head = tail + 1

    End If

        Next j

    If part > 0 Then

    n = n + 1

    dis = dis + tran(head, tail)

    End If

    If n <= Val(Text1.Text) Then Exit For

    Next i

    Label3.Caption = "机器人可承受的最大载量至少为:" + Str(i)

    Label4.Caption = "机器人完成各趟任务的总行程为:" + Str(dis)

    End Sub

    Function tran(p As Integer, q As Integer) As Integer '计算机器人每趟按装货倒序配送并回到A 处的行程

    Dim temp As Integer, t1 As Integer, t2 As Integer, k As Integer

    temp = 0: t2 = shelf

    For i = q To p Step -1

    t1 = t2: t2 = s(i)

    k = 

    If k > (shelf + 1) \ 2 Then k = shelf - k

    temp = temp + k

    Next i

    If t2 <= shelf \ 2 Then temp = temp + t2 Else temp = temp + shelf - t2

    tran = temp

    End Function

统计连续小写字母最长的个数,编写VB代码如下:

s=Text1.Text

              

ans=0

For i=1 To Len(s)

  t=Mid(s,i,1)

  If t>="a" And t<="z" Then

    c=c+1

                    

  Else

                       

  End If

Next i

Text2.Text=Str(ans)

填空处的代码可由以下部分组成:

①c=0

②c=1

③If c>ans Then ans=c

④If c<ans Then c=ans

⑤ans=ans+1

正确的代码顺序是(    )

A . ①③① B . ①④⑤ C . ②④② D . ②③①
有如下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(1)~a(6)各元素可能的值是(  )

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
平面上有n(3≤n≤100)个房间围成一圈,编号分别为1~n,相邻的两个房间之间均有一扇门,第i个房间最多居住的人数为a(i)。初始时选择一个房间,将所有人都聚集在该房间,接着每个人都可以按顺时针方向走到相邻的房间,直到找到居住的房间。最后各个房间刚好都住满。一个人每经过一扇门花费1个单位的能量,请确定初始房间及每个人找房间的方案,使得所有人花费的能量的和最小。例如:n=5,a(1)=4,a(2)=7,a(3)=8,a(4)=6,a(5)=4。

最佳方案为初始时所有人聚集在2号房间,此时花费的最小能量为7×0+8×1+6×2+4×3+4×4=48。

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

Dim a(1 To 100)As Integer       ‘依次存储编号为1到100的房间的最多居住人数

Private Sub Form_Load( )

    ‘产生n的值

    ‘本过程从数据库中依次读取编号为1到n的房间的最多居住人数,并存储在数组a中

    ‘代码略

End Sub

Private Sub Command1_Click( )

  Dim i As Integer,j As Integer,w As Integer

  Dim t As Long,ans As Long

  ans=32767

  For i=1To n

    t=0

    For j=0 To n-1

                      ‘①

      If w=0 Then w=n

                    ‘②

    Next j

    If t<ans Then ans=t

  Next i

  Text2.Text=Str(ans)

End Sub

以上程序段运行时,为了实现上述功能,加框处代码应改正为:①;②

下列表示中是字符串常量的是(    )。
A . a b B . “你好” C . 2006 D . 1235
运行下列程序

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
下列数据中,属于字符串类型的常量是(    )。
A . 123 B . 2E3 C . True D . ”456”
有以下VB程序段

Dim c(-10 To 10) As Integer, a(1 To 10) As Integer, b(1 To 10) As Integer

a(1)=58:a(2)=88:a(3)=66:a(4)=60:a(5)=78

a(6)=32:a(7)=54:a(8)=75:a(9)=99:a(10)=69

Label1. Caption =

For i=1 To 9

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

     c(b(i)\10)=c(b(i)\10)+1

Next i

For i=0 To 10

     If c(i) > 0 Then Label1.Caption = Label1.Caption + Str(c(i))

Next i

已知数组c各元素初值为0,执行该程序段,标签Label1上显示的内容是(    )

A . 131 B . 1421 C . 1131 D . 11421
完善以下程序代码完成下列小题。

程序描述:计算两个浮点数a和b的相除的余数,a和b都是正数。这里余数(r)的定义是:a = k * b + r,其中k是整数, 0 <= r < b。代码如下:

a=                    ①     (input("请输入:"))

b=                    ①     (input("请输入:"))

k=                    ② 

r=                    ③

print(r)

①处的语句是,②处的语句是,③处的语句是

①A.int              B.float            C.a%b           D.a/b

②A.a**b              B.a//b            C.a%b           D.a/b

③A.a//b              B.a-kb            C.a-k*b            D.a+kb

有如下VB程序段:

For i=1 To 6

    If i Mod 2<>0 Then

        If a(i) Mod 10>5 Then

            a(i)=a(i) \ 10

        Else

            a(i)=a(i) Mod 10 

        End If

    Else

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

    End If

Next i

程序运行后a(1)到a(6)的值分别是2,3,4,5,0,1,则a(1)到a(6)各元素的初始值可能是(     )

A . 26,1,4,2,8,3 B . 12,1,14,2,11,3 C . 15,1,2,3,4,5 D . 29,1,40,2,3,30
有如下Python程序段:

a=[]

b=[1,5,4,1,5]

c={1:3,2:4,3:5,4:1,5:2}

for i in b:

  if i not in a:

    a.append(c[i])

print(a)

运行该程序段后,列表a的值是(    )

A . [1,5,4] B . [3,2,1] C . [3,2,1,2] D . [3,2,1,3]
最近更新