第2单元 编程计算 知识点题库

某VB程序段代码如下:

Private Sub Command1_Click()

a = Text1

For i = 1 To Len(a)

    b = Mid(a, i, 1)

    c = Chr(Asc(b) )

    d = d + c

Next i

Text2 = d

End Sub

如果在文本框text1中输入字符"316100",则文本框text2中显示的值是:(   )

A . 16100 B . 6131 C . 001613 D . 3161
某对分查找算法的VB程序段如下:

Dim a(1 To 10) As Integer

Key = Int(Rnd * 32) * 3 + 3

s = 0: i = 1: j = 10

Do While i <= j

    m = (i + j) \ 2

    If Key = a(m) Then Exit Do

    If Key > a(m) Then

        i = m + 1: s = 3 * s + 2

    Else

        j = m - 1: s = 3 * s

    End If

Loop

数组a(1)到a(10)的值依次为“4,7,9,15,24,32,37,54,75,90”,执行该程序段后,s的值不可能为(  )

A . 20 B . 80 C . 62 D . 18
编写“字符串生成”程序,实现如下功能:在文本框Text1中(字符位置)输入多个正整数(以“,”为分隔符和结束符),单击“生成”按钮Command1,程序以这些整数为位置信息,依次从文本框Text2中(字典内容)提取字符并连接成字符串,最后将字符串显示在标签Label1中(生成内容)。程序运行界面如图所示。

  1. (1) 要使程序运行时,窗体Form1标题显示“字符串生成”,可在Form_Load事件过程中添加语句(单选,填字母:A .Form 1="字符串生成"/ B .Form 1.Text="字符串生成"/C .Form 1.Caption="字符串生成").
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Private Sub Command 1_Click()

    Dim s As String,t As String,c As String

    Dim i As Integer,p As Integer

    s="":t=""

    For i=1 To Len(Text 1.Text)

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

        If c="," Then

            p=Val(t)

            s=s+Mid(Text2.Text,p,1)

            t=""

        Else

            t=    ①   

        End If

    Next i

    Label1.Caption=    ②    

    End Sub

  3. (3) 若文本框Text1中输入内容的结束符缺失(即输入内容为1,18,9,9),单击“生成”按钮后,标签Label1中显示的内容是
在某打游戏中,一开始每个玩家各有17张牌,牌型从小到大分别为“3~10、J、Q、K、A、2”,每种牌最多4张,现在按指定规则的顺序打牌:打完为止,规则如下:

先打顺子牌(顺子指连续的5个及以牌型,如45678,顺子最大到A),若有多个顺子,先长后短长度和同按先小后大的顺序打出然后按4张、3张、2张、1张的顺序出牌,同一个牌型从小到大。

小刘依据上述算法设计了VB程序,其中牌型“10”用数字“0”代替表示,如图所示,请回答下列问题。

  1. (1) 若初始牌型为344445566790JQKA2,第2次出的牌为
  2. (2) 请在划线处填入合适代码。

    Private Sub Command1_Click()

    Dim i As Integer, j As Integer

    Dim a (1 To 13) As Integer, max As Integer, t As Integer, last As Integer

    Dim sa As String, stem As String, flag As Boolean

    Const s="34567890JQKA2"       '用0代替牌10

    '发牌和洗牌代码略,在标签Label1显示初始牌型,洗牌后数组a各元素分别存储牌型3~2的数量

    t=17      '刚开始牌有17张

    Do While t>0      '打牌

    flag=True

    Do While flag   '寻找牌中有没有顺子牌

    max =0: k =1: flag=False

    For i=1 To 13

    If   ①   Then

    k=k+1

    If k > Max Then

     Max = k

    Last = i+1     '记录连续牌的最后一张

    End If

    Else

    k=1

    End If

    Next i

    If Max >= 5 Then '有顺子牌,把最长的这把顺子打出来

    flag=True: sa= ""

    For j =    ②    To last

    Stem=Mid(s, j, 1)

    sa=sa +stem+ ""

    a(j)=a(j)-1

    Next j

    List1.AddItem sa     '顺子在列表框显示

    t=t-max

    End If

    Loop

    For i= 1 To 13     '出4个一样的牌

    If a(i)=4 Then

    stem=Mid(s, j, 1)

    List1.AddItem stem+stem+stem+stem

    a(i)=0

       ③  

    End If

    Next i

    '3张、2张、单张出牌,具体代码略

    Loop

    End Sub

     ② ③ 

请编写程序,实现输入一个人的出生年份(>=1900),输出他的生肖,直到输入0结束,运行结果如下:

请输入出生年份,输入0结束:2004

你的生肖是:猴

请输入出生年份,输入0结束:

完善下列代码,实现上述功能。

def shengxiao(year):

#求生肖

    zodiac=["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"]

        

       

#以下为主程序    

myyear=int(input("请输入出生年份,输入0结束:"))

while myyear!=0:

    print(“你的生肖是:”, )

myyear=int(input("请输入出生年份,输入0结束:"))

下面(    )是Python合法的变量名
A . int32 B . 40XL C . self D . name
有如下VB程序段:

Dim s As String

s="浙江杭州市"

If Len(s)>=5 Then

  s=Mid(s,3,2)

Else

  s=Mid(s,1,2)

EndIf

该程序段运行后,s的值为(  )

A . "浙江杭州" B . "浙江" C . "杭州" D . "州市"
完善以下程序代码。

程序描述: 所谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1。如,假定初始整数为5,计算过程分别为16、8、4、2、1。
程序要求输入一个正整数(不为1),将经过处理得到1的过程输出来。代码如下:

x=int(input('输入一个正整数:'))

while    ①    

    if     ②  

        x=x/2

           ③  

    else:

            ④  

            ③  

        if x==1:

                ⑤  

  1. (1) ①处的语句是(    )
    A . x>1 B . x>2 C . x!=1: D . x!=0:
  2. (2) ②处的语句是(   )
    A . x%3=0: B . x%2=0: C . x%3==0: D . x%2==0:
  3. (3) ③处的语句是(    )
    A . print(‘x/2’) B . print(‘x’) C . print(x) D . print(x/2)
  4. (4) ④处的语句是(   )
    A . x= x/2 B . x= x/2+1 C . x=x*3+1 D . x=3x+1
  5. (5) ⑤处的语句是(   )
    A . pass B . exit C . continue D . break
在python语言中,以下哪个选项a数据类型为整型(    )
A . a=5 B . a=input( ) C . a='5' D . a=5.0
在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan),以获得更好的压缩比。给定一个n×n的矩阵,Z字形扫描的过程如下图所示:

经过扫描后得到的数据结果为:

57

45

0

23

0

0

0

0

0

0

0

0

0

0

0

0

0

-30

1

0

0

0

0

0

-16

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

“57,45,0,0,0,0,23,0,-30,-16,0,0,1,0,0,0,0,…,0,0”,数据元素个数为64个。进一步经过压缩后,最终得到行程编码:“57, 1, 45, 1, 0, 4, 23, 1, 0, 1,-30, 1,-16, 1, 0, 2, 1, 1, 0, 51”,数据元素个数为20个。

  1. (1) 行程编码压缩最坏情况下,数据压缩后数据元素的数量将是原来的倍。
  2. (2) 根据上述扫描算法,其 VB 代码实现如下,请在划线处填入合适的代码。

    Dim a(0 To 1000) As Integer     '存储原矩阵数据,按行优先存储

    Dim b(0 To 1000) As Integer     '存储Z形扫描后数据

    Dim c(0 To 1000) As Integer     '存储行程编码压缩后数据

    Dim n As Integer

    ‘矩阵导入代码略,以行优先存储在a数组中,如例子中数据存储顺序为“57,45,0,23,0,0…”

    Private Sub Command2_Click()

        Dim choice As Integer     ' 1:向右移动 ;2:向右上移动;3向下移动 4向左下移动

        Dim row As Integer, col As Integer, i As Integer, j As Integer

        Dim pre As Integer, count As Integer

        choice = 1: row = 0: col = 0: i = 0

        Do While (row <> n - 1 Or col <> n - 1)

            b(i) = a(row * n + col):i = i + 1     

            If choice = 1 Then

                

                If row = 0 Then choice = 4 Else choice = 2

            ElseIf choice = 2 Then

                row = row - 1: col = col + 1

                If  Then

                    choice = 1

                ElseIf col = n - 1 Then

                    choice = 3

                End If

            ElseIf choice = 3 Then

                row = row + 1

                If col = 0 Then choice = 2 Else choice = 4

                ElseIf choice = 4 Then

                    row = row + 1: col = col - 1

                If row = n - 1 Then

                    choice = 1

                ElseIf col = 0 Then

                    choice = 3

                End If

            End If

        Loop

        b(i) = a(n * n - 1):j = 0: pre = b(0): count = 0

        For i = 0 To n * n - 1                 '输出Z形序列,并进行行程压缩

            If pre = b(i) Then

                count = count + 1

            Else

                c(j) = pre: c(j + 1) = count

                

                pre = b(i):j = j + 2

            End If

        Next i

        c(j) = pre: c(j + 1) = count

        Text1.Text = ""

        For i = 0 To j + 1

            Text1.Text = Text1.Text + Str(c(i)) + ","

        Next i

    End Sub

在VB中,计算表达式“15\6”得到的值是(   )。
A . 2 B . 2.5 C . 3 D . 6
小明设计了某社团积分系统,当输入用户ID和积分增值后可以更新积分和排名。具体功能如下:单击“读取"按钮Command1后,将n个用户的ID (依次为1到n)、积分和积分排名显示在列表框List1中。在Text1中输入ID和积分增值,用逗号作为分隔符和结束符,奇数位置整数表示ID,偶数位置整数表示积分增值。如输入“2,1,3,5,”表示ID为2的用户增加1积分,ID为3的用户增加5积分。单击“更新"按钮Command2,在列表框List2中显示更新后的积分和排名。程序运行界面如图所示。

请回答下列问题:

  1. (1) 若要清空列表框List1,下列代码正确的是(单选,填字母:A .List1.Clear /B .List1.Caption / C .List1.Text")。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Const n= 12

    Dim a(1 To n) As Integer, mc(1 To n) As Integer

    Private Sub Command1_Click()

    'n个用户的ID依次为1到n,读取n个用户的积分和排名数据分别存储到数组a和数组mc中,并在列表框Listl中显示ID、积分、积分排名,代码略

    End Sub

    Private Sub Command2_Click()

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

        Dim s As String, flag As Boolean, x As Integer, y As Integer

        Dim p(1To20) As Integer    '存储输入的ID和积分增值,每次输入不超过10组

        For i=1 To 20

            p(i)=0

        Next i

        s= Text1.Text

        

        d=0:k=0

        For i= 1 To Len(s)

            If Mid(s, i, 1)= "," Then

                If flag Then

                    x = Val(Mid(s, i-d, d))

                    For j= 1 To k Step 2

                        If p(j) =x Then Exit For

                    Next j

                    If j> k Then

                        p(j)=x:k=k+2

                    End If

                Else

                    y = Val(Mid(s, i-d, d))

                    p(i+1)=p(j+ 1)+y

                End If

                flag= Not flag: d= 0

            Else

                

            End If

        Next i

        For i=1 To k\2

            x=p(2*i-1):y=p(2*i)

            me(x)= 1

            For j= 1 Ton

                If j<> x Then

                    If a(j)<a(x)+y And a(j)>=a(x) Then

                End If

                If a(j)> a(x) +y Then mc(x)= m(x)+ 1

            Next j

           

        Next i

        '在列表框List2中显示ID,积分、排名,代码略

    End Sub

  3. (3) 程序中加框处代码有错,请改正
在流程图中表示判断的框图是(     )
A . 矩形框 B . 菱形框 C . 圆形框 D . 椭圆形框
列表的数据项不需要具有相同的类型,与字符串的索引一样,列表索引从0开始。
某算法的部分流程图如图所示,执行这部分流程后,下列说法正确的是(    )

图片_x0020_100005

A . 输出的 a,b 值分别为 5,11 B . 输出的 a,b 值分别为 5,14 C . 条件 b<10 被判断了 6 次 D . 语句 b←3*a-1 被执行了 4 次
已知某数据加密方法如下:将字符的内码以字节为单位进行加密。将每个字节的后5位转换为十进制数,后面跟上“,”和该字节的前3个二进制位转换为十进制数,形成该字节的加密形式。例如:

内码(十六进制)

CA

B1

二进制

11001010

10110001

后5位十进制

10

17

前3位十进制

6

5

加密结果

10,6,17,5

按照上述规则,小明设计了一个解密的VB程序,功能如下:单击“解密”按钮,程序依次将文本框Text1中的字符提取,进行解密处理,并输出在文本框Text2中,程序效果如图a所示,请回答下列问题

  1. (1) 要改变Command1对象上的字体颜色,可以改变Command1对象的属性的属性值。(单选,填字母:A . Caption/B . Font/C . Forecolor/ D . Additem)。
  2. (2) 实现上述功能的VB程序段如下,请在划线处填入合适的代码。

    Private Sub Command1_Click()

        Const n = 100

        Dim s As String, ch As String, nm As String

        Dim p As Integer, i As Integer, k As Integer, t As Integer Dim a(1 To n) As Integer

        s = Text1.Text p = 0: k = 0

        For i = 1 To Len(s)

            ch = Mid(s, i, 1)

            If ch >= "0" And ch <= "9" Then

               

            Else

                If k Mod 2 = 1 Then

                   

                Else

                    a(k+1) = p

                End If

                k = k + 1:p = 0

            End If

        Next i

        a(k + 1) = p * 32 + a(k)

        For i =

            nm = nm + dtoh(a(i))

        Next i

        Text2.Text = nm

    End Sub

    Function dtoh(x As Integer) As String Const

        st1 = "0123456789ABCDEF"

        Do While x > 0

           

            x = x \ 16

        Loop

    End Function

  3. (3) 程序中加框处代码有错,请改正。
Visual basic的数据类型中,占内存最大的是(    )
A . Byte B . Inter C . Single D . Double
有如下VB程序段:

Private Sub Command1_Click()

    Dim n As Integer, ans As Integer

    n = 5

    Dim x(1 To 5) As Integer

    x(1) = -30: x(2) = 26: x(3) = -18: x(4) = 60: x(5) = 22

    ans = 60

    For i = 1 To n

        If x(i) < 0 Then x(i) = -x(i)

        ans = ans + gcd(ans, x(i))

    Next i

    Text1.Text = Str(ans)

End Sub

Function gcd(a As Integer, b As Integer)

    If b = 0 Then

        gcd = a

    Else

        gcd = gcd(b, a Mod b)

    End If

End Function

执行该程序段后,Text1. Text中显示的值为(      )

A . 1 B . 2 C . 90 D . 98
下列表达式的值为2123的是(      )
A . Val("123asd")&2000 B . Val("123asd")+2000 C . Str(123)&"2000" D . Str(123)+"2000"
某会务组根据参会者到达指定上车点时间和每位参会者可以等待的时间信息,安排车辆接送参会者去宾馆(不考虑车子座位数量)。参会者到达上车点的时间和可以等待的时间用长度为7的字符串表示,例如“08:12 2”表示参会者当天8点12分到达上车点,最多等待2分钟(每个人的等待时间都小于10),那么该参会者最晚8点14分出发去宾馆。

编写VB程序,统计接送n个参会者所需的最少车辆数。运行程序,列表框List1中显示所有参会者提交的信息,按到达时间先后排列。单击“统计”按钮Command1,在文本框Text1 中显示所需的最少车辆数。程序运行界面如图所示。

  1. (1) 如图所示,接送所有参会者最少需要辆车
  2. (2) 实现上述功能的部分VB程序如下,请在划线处填入合适的代码。

    Dim n As Integer

    Dim a(1 To 100) As String

    Dim b(1 To 100) As Integer

    Dim c(1 To 100) As Integer

    Dim fg(1 To 100) As Boolean

    Private Sub Form_Load()

        '读取n个参会者提交的信息,依次存入a(1)~a(n)

        '将a(1)~a (n)按参会者到达时间排序,并在List1中显示,代码略

    End Sub

    Private Sub Command1_Click()

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

        Dim sum As Integer, q As Integer

        For i=1 To n

            b(i) = T(Mid(a(i), 1, 5))

            c(i) = b(i) + Int Mid(a(i), 7, 1))

            For j=1 To 2 Step-1

                k=

                If c(k) > c(j) Then

                    q=b(k):b(k)=b(j):b(j)=q

                    q=c(k):c(k)=c(j):c(j)=q

                Else

                    Exit For

                End If

            Next j

        Next i

        sum=0

        For i=1 To n

            If fg(i) = False Then

                For j=1 To n

                    If  Then

                        fg(j) = True

                    End If

                Next j

                

            End If

        Next i

        Text1.Text = str (sum)

    End Sub

    Function T(str1 As String) As Integer

        T = Int(Mid(str1,1, 2)) * 60 + Int(Mid(str1, 4, 2))

    End Function