分支结构语句及程序实现 知识点题库

有 VB 程序段如下:

flag = False: n = 0

s = " Good Luck To You!"

 For i = 1 To Len(s)

    ch = Mid(s, i, 1)

    If ch >= "a" And  ch <= "z" And flag Then

       n = n + 1: flag = False

    Else  

       flag = True

    End If

 Next i

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

A . 2 B . 3 C . 4 D . 6
有如下 VB 程序段:

Key = Val(Text1.Text)

i = 1: j = 10: c = 0

Do While i <= j

  m = (i + j) \ 2

  c = c + 1

If a(m) >= Key Then  j = m – 1  Else  i = m + 1

Loop

Text2.Text = Str(c) + Str(i) + Str(j) + Str(m)

数组元素a(1)至a(10)的值依次为“8,10,12,15,15,15,21,34,45,66”。在文本框Text1中输入数值15,执行该程序段后,文本框Text2中显示的内容是(         )

A .  3 3 2 3 B .   4 4 3 4 C .   4 7 6 7 D .   3 4 3 3
如果两个质数的差为2,则这两个质数称为孪生质数对;编写VB程序,实现如下功能:单击“显示孪生质数对”按钮Command1,在列表框List1中显示100以内的所有孪生质数对(运行效果如图所示)。

实现上述功能的VB代码如下。

Dim a(1 To 50) As Integer

Private Sub Command1_Click()

Dim i As Integer

k = 0:i = 3

Do While i <= 100

 If  Not prime(i) Then

k = k + 1

 End If

  i = i + 2

Loop

For i = 2 To k

  If      ①         Then

 List1.AddItem Str(a(i-1)) +“和” + Str(a(i))

 End If

Next i

End Sub

Function prime(x As Integer) As Boolean

prime = False

For i = 2 To Int(Sqr(x))

 If x Mod i = 0 Then

prime = True

Exit For

 End If

Next i

End Function

  1. (1) 语句“List1.AddItem Str(a(i-1))+“和”+Str(a(i))”中的AddItem是(单选,填字母:A . 对象名/B . 属性名/C . 事件名/D . 方法名)。
  2. (2) 程序代码中,加框处有错,请改正。
  3. (3) 程序代码中,将①处语句补充完整。
  4. (4) 在自定义函数中,函数返回值prime=Flase表示的含义是
将一组数据(共n*n个数),分别存放在a(1)…a(n*n)中,通过下面程序实现n段有序(升序),例如:当n=4时,排序结果如图所示:

有如下VB程序段:

For i = 1 To n

  For j = n * (i - 1) + 1 To ①

    For k = ②   To   ③

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

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

      End If

    Next k

  Next j

Next i

上述程序段划线处的表达式正确的是(   )

A . ① n * i – 1 ② n * (i - 1) + 1 ③ n * (2 * i - 1) – j B . ① n * (i - 1) ② n * i – 1 ③ n * i - j C . ① n * i – 1 ② n * i + j ③ n * (2 * i - 1) D . ① n * i ② n * (i - 1) + 1 ③ n * i - j
程序运行后,从键盘输入781,结果是

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

if x%2==0:

    print(x,"是偶数.")

else:

    print(x,"是奇数.")

有如下 VB 程序段:

For i = 1 To 6

  a(i) = Int(Rnd * 20) + 1: b(i) = i

Next i

For i = 1 To 5

  For j = i+1 To 6

    If a(b(i))>a(b(j)) Then

      t = b(j):   b(j) = b(i):   b(i) = t

    End If

  Next j

Next i

i = 1 : j = 6: s="" : Key = Val(Text1.Text)

Do While i <= j

  m = (i + j) \ 2

  If Key = a(b(m)) Then Exit Do

  If Key < a(b(m)) Then j = m - 1 Else i = m + 1

  s = s + Str(m)

Loop

Text2.Text = s

在文本框Text1中输入10,运行以上程序段后,文本框Text2中显示的内容为 3 5 4,则 a 数组中 a(1)到 a(6)各元素的值可能的是(    )

A . 11,6,4,13,18,15 B . 4,5,8,19,10,17 C . 2,11,7,6,3,18 D . 9,2,11,21,5,16
有如下VB程序段(数组a中各元素的初始值均为0):

n=Len(Text1.Text):c=1

For i=1 To n

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

    If s>="0"And s<="1"Then

        a(c)=a(c)*2+Val(s)

    Else

        If a(c)>0 Then c=c+1

    End If

Next i

在文本框Text1中输入“A:1010 C:1100 E:1110”。执行该程序后,数组a(2)中的元素值为(  )

A . 2 B . 12 C . 22 D . 2200
小王编写了一个实现文字查找及替换功能的VB程序,运行界面如图所示。文本框Text1中显示原文内容,在Text2中输入查找内容,Text3中输入替换内容,单击“全部替换”按钮Commiand1后,Text4中显示替换的结果,Text5中显示替换次数,Text6中显示“查找内容”在原文中的起始位置。

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

Private Sub Command1_Click( )

  Dim s As String,result As String,pos As String

  Dim count As Integer,i As Integer

  i=1:count=0

  result="":pos=""

  Do While i<=Len(Text1.Text)

    s=Mid(Text1.Text,i,Len(Text2.Text))

    If s=Text2.Text Then

      result=result+Text3.Text

      count=count+1

      pos=     ‘①

      i=i+Len(Text2.Text)

    Else

             ‘②

      i=i+1

    End If

  Loop

  Text4.Text=result

  Text5.Text=Str(count)

  Text6.Text=pos

End Sub

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

有如下VB程序段:

Private Sub Command1_Click()

    Dim i As Integer

    Dim x As Integer

    Dim s As String

    Randomize

    i = 1: s = "1"

    Do While i <= 6

        x = Int(Rnd * 9) + 1

        If x Mod 2 = i Mod 2 Then

            s = s + Str(x)

            i = i + 1

        End If

    Loop

    Label1.Caption = s

End Sub

运行程序后,标签Label1中可能出现的是(    )

A . 1 8 3 4 5 2 B . 1 9 4 3 7 5 6 C . 1 9 4 7 6 5 2 D . 1 8 1 2 7 6 1
目前部分手机的短信具有“提取详情”的功能,即针对一条短信,可以提取出短信中一些关键的信息。现编写VB程序实现如下功能:在文本框Text1中输入短信内容,点击“提取”按钮,将短信中的数字以“,”间隔输出到文本框Text2中。程序运行界面如图1所示。

  1. (1) 设计程序界面时,图 2 中控件(填数字)未在程序窗体中使用。
  2. (2) 请根据题意将下列程序补充完整

    Private Sub Command1_Click()

        Dim msg As String c As String, tmp As String, s As String, flag As Boolean msg = Text1.Text msg = msg + "/"          '标记字符串结束符

        tmp = "" :s = "" : flag = True

        For i = 1 To Len(msg)

            c = Mid(msg, i, 1)

            If  Then

                flag = False

                tmp = tmp + c

            ElseIf flag = False Then s = s + tmp + ","

            tmp = ""

           

            End If

        Next i

        Text2.Text = s

    End Sub

  3. (3) 若程序未加“msg = msg + "/"”语句,则示例图1中提取后的数字信息为
对称字符串的特征是从左到右读和从右到左读是完全一样的。如“abba”是对称的,“abcba”也是对称的。判断字符串是否对称的VB程序段如下, 请完善以下两处代码

s=Text1.Text

n=Len(s)                's是待判断的字符串

k=0: j=n

For i=1 to n\2

    c1=Mid(s, i, 1)

    c2=Mid(s, j, 1)

    If c1 <> c2 Then k = k+1: Exit For

        j=

    Next i

    If Then Label1.Caption="对称" Else Label1.Caption="不对称"

下列VB程序段的功能为:在字符串s中找出最长连续上升子串,显示在文本框Text2中,例如:s的值为“ACFBCCDEGKKMNPQ”时,运行程序段后,在Text2中显示子串“CDEGK”。

s = Text1. text

i=1: max1=1: maxi=i

j=2

Do While j <= Len(s)

    If  Then

        If j-i> max1 Then max1 =j-i: maxi = i

       

    End If

   

Loop

If j- i> max1 Then max1=j-i: maxi= i

If max1>1 Then Text2. Text = Mid(s, maxi, max1)

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

①j=j+1

②i = j

③Mid(s, j, 1)>= Mid(s, j - 1, 1)

④Mid(s, j, 1) <= Mid(s, j - 1, 1)

则(1)、(2)、(3)处语句依次为

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

i=1:j=10:k=1:key=Val(Text1.Text)

Do While I < =j

    m=(i+j+1)\2

    If key = a(m) Then

      Exit Do

    Else If key < a(m) Then

        i=m+1:k=k*2

    Else

        j=m-1:k=k/2

    End If

Loop

Text2.Text = Str(k)

数组元素a(1)到a(10)的值依次为“120,97,88,66,50,46,24,20,18,6”,在文本框Text1输入下列选项值,所得的输出结果与其他三项不同的是(    )

A . 96 B . 65 C . 50 D . 22
已知变量a、b、c、d数据类型为Integer, 变量flag数据类型为Boolean。 下列选项中与其他语句功能不相同的是(    )
A . If(a>b Or b>c)And flag=False Then d=a\2 B . If(a>b Or Not b<=c)And Not flag Then d=a\2 C . If Not(a<=b And b<=c)And flag=False Then d=a\2 D . If(a>b And b>c)Or Not flag Then d=a\2
出列顺序有10个人,编号分别为1,2,3……10按顺时针方向围坐成一圈,每次随机产生一个数m,m的范围为[3,7]的随机奇数,从第10个人开始逆时针报数,当报到m的人出列,圈内剩下的人,重新产生随机数m,重新开始报数,如此下去,直到所有人出列为止。如:若每次参数的随机数m都为5,从第10个开始报数,依次出列的为6-1-5-9-2-3-10-7-4-8

小李编写了如下程序求解10个人的出列顺序。程序运行界面如图15-1所示,点击求解按钮后,在Text1中输出出列顺序,在Text2中显示随机数据的值。

  1. (1) 在划线出填写正确的代码

    Private Sub Command1 _Click( )

        Dim ld(1 To 10) As Boolean, i As Integer, j As Integer

        Dim rs As Integer, C As Integer, m As Integer

        Randomize

        For i=1 To 10

            ld(i) = True     ‘数组元素为True表示第i人当前在队列中

        Next i

        c=0:rs=10

       

        m =Int(Rnd*3)*2+3

        Do While rs <> 0

            If ld(i) = True Then

               

                If c=m Then

                    ld(i) = False

                    Text1.Text = Text1.Text + Str(i)

                    

                    c=0

                   

                End If

            End If

            i =i-1

            If Then i=10

        Loop

    End Sub

  2. (2) 加框处两语句互换下顺序,会不会对出列顺序产生影响(选填:会/不会)。
Base64编码是计算机常见的一种编码方式,规则是把3个字节(24位)的数据按6位一组分成4组(24÷6=4),然后将每组数据分别转换为十进制,根据表15.1将这些十进制数所对应的字符连接,即为Base64编码。

表 15.1 Base64 编码表

索引

0

1

24

25

26

27

50

51

52

61

62

63

字符

A

B

Y

Z

a

b

y

Z

0

9

+

-

以编码字符“Web”为例,如表15.2所示,字符“Web”对应的ASCII编码分别是87,101,98,分别转换为8位二进制数,按6位二进制数分组后再转换成十进制,查找它们对应的字符,得到“Web”得Base64编码为“V2Vi”。

表15.2 Base编码方法

  1. (1) 编码字符“Wea”的Base64编码为:
  2. (2) 实现上述功能的 Python 代码如下,请在划线处填入合适的代码

    s1=input('请输入编码字符:')

    s=''

    tmp=0

    ans=''

    txt='ABCDEFGHIJKLMNOPQRSTUVWSXYabcdefghijklmnopqrstuvwxyz012345678+/'

    for c in s1:

      n=

      t=''

      for i in range(8):       # 将十进制 n 转换为 8 位二进制

        r=n%2

        t=+t

        n=n//2

      s=s+t

    for i in range(len(s)):       # 6 位二进制一组分组再转换成十进制,查找它们对应的字符

     

      if i%6==5:

        ans=ans+txt[tmp]

        tmp=0

    print('Base64 编码:',ans)

编写一个“人民币小写转大写”的程序,实现功能如下:从键盘输入待转换的小写金额(不得超过9位数),输出其大写金额。运行界面如图所示:

dx={"0":"零","1":"壹","2":"贰","3":"叁","4":"肆","5":"伍","6":"陆","7":"柒","8":"捌","9":"玖"}

dw="亿仟佰拾萬仟佰拾元"

money=input("请输入金额(整数,不得超过9位):")

zh=""

t=""

if    ①   :

    print("输入的数据超出所能转换的范围。")

else:

    for i in range(0,len(money)):

        t=   ②       #取出第i位小写对应的大写

        dwz=len(dw)-len(money)+i      # 计算该小写数字对应的单位在dw中的索引号  

            ③  

print(money,"的大写为:",zh, "整")

  1. (1) 为实现上述功能,请在划线处填入合适代码。

     ② ③ 

  2. (2) 若输入的金额为20,则输出的结果是
用VB编写字符串“密码破译”程序,其功能如下:在文本框Text1中输入任意一串字符串,字符串长度为n*n(n为自然数),单击“解密”按钮Command1,在文本框Text2中输出解锁密码。解锁密码破译步骤如下:将字符依次存储到数组a中,存储方式从左下向右上,平行于矩阵的对角线依次进行存储,以长度为36的字符串“Toleranceisthemental,YouSheng优胜一筹”为例,数组a元素对应的赋值情况如图a所示;将对角线字符从右上向左下依次相连即为解锁密码。程序运行效果如图b所示。

图 a

图 b

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

  1. (1) 若输入的字符串内容为“abcdefghijklmnopqrstuvwxy”,则破译后的解锁密码为
  2. (2) 请在划线处填写合适代码,使程序正常运行。

    Private Sub Command1_Click()

        Const n = 6

        Dim a(1 To n * n) As Integer

        Dim b(1 To n * n) As String

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

        Dim zf As Integer     '变量zf存储数组a元素的值

        Dim xb As Integer      '变量xb存储数组a的下标

        Dim p As Integer

        For i = 1 To Len(Text1.Text)

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

        Next i

        k = 1

        For i = 1 To n

            k = k + (i - 1)

            zf = k

           

            a(xb) = zf

            p = i + 1

            For j = 2 To n

                If j <= n - i + 1 Then

                    zf = zf + p

                    a(xb + j - 1) = zf

                    p = p + 1

                Else

                   

                    zf = zf + p

                    a(xb + j - 1) = zf

                End If

            Next j

        Next i

        For i = 1 To n

            s = s +

        Next i

        Text2.Text = s

    End Sub

小明设计了将明文字符(大、小写字母)转为密文字符的加密算法,加密方法如下:输入需要加密的字符,如果是小写字母,则后移3位,例:“a”→“d”,“b”→“e”,……,若超过“z”则重新从“a”开始,即“x”→“a”;如果是大写字母,则前移1位,例:“B”→“A”,“C”→“B”,……,若加密字符为“A”则加密结果为“Z”(提示:“a”的ASCⅡ码为97,“A”的ASCⅡ码为65)

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

c=input("请输入需要加密的字符(大写或小写字母):")

if "a"<=c<="z":

  x=

  if x>122:

    

else:

  x=ord(c)-1

  if :

     x=90

print(c+"的加密字符为:",chr(x))

已知数组a有n个元素,现编写VB程序,实现从第1个元素开始分割出m×m个元素组成方阵(约定n≥m×m),并随机对该方阵进行顺时针90度或逆时针90度旋转。例如:数组元素a(1)到a(18)的值依次为“5,2,3,1,9,4,7,6,0,8,5,3,8,3,7,0,5,1”,在文本框Text1中输入方阵规模4,单击“生成”按钮Command1,生成4×4个元素组成的方阵,并在列表框List1中显示。单击“旋转”按钮Command2,该方阵进行顺时针90度或逆时针90度旋转,并在列表框List2中显示。程序运行界面如图所示。

  1. (1) 对于如图所示的程序运行界面,将方阵规模改为3,单击“生成”按钮后再单击“旋转”按钮,若方阵进行逆时针旋转,则旋转后方阵的第1行数据为(数据之间用“,”隔开)。
  2. (2) 请在划线处填入合适的代码。

    Const n= 100

    Dim a(1 To n) As Integer

    Dim b(1 To n) As Integer

    Private Sub Command1_Click( )

    '根据方阵规模,分割元素组成方阵,并在列表框List1中显示,代码略

    End Sub

    Private Sub Command2_Click( )

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

      Dim s As String

      m= Val(Text1. Text)

      List2. Clear

      k= Int(Rnd * 2)

      If k=0 Then

        For i=1 To m

          For j=1 To m

             b((i- 1) * m+j)=

          Next j

        Next i

      Else

        For i=1 To m

          For j=1 To m

             b((i-1) * m+j)=a((j-1) * m+m-i+1)

          Next j

        Next i

      End If

      s=" "

      For i=1 To m * m

       

        If  Then

          List2. AddItem s

          s=""

        End If

      Next i

    End Sub