2.2 算法的控制结构 知识点题库

某流程图如图所示。执行该算法,下面说法错误的是(   )

 

A . s 的值最终为-5 B . 语句“k=k+1”共执行了 4 次 C . 语句“s≤0”共判断了 5 次 D . 该算法转成 VB 代码时能用 Do 循环语句实现
某算法的部分流程图如图所示,执行这部分流程后,变量a,b的值分别是(  )

 

A . 3,3 B . 3,4 C . 6,6 D . 7,11
某算法的部分流程图如图所示。输入n的值为100执行这部分流程后,输出的值为(  )

A . 2,2,5,5 B . 1,2,2,5,5 C . 1,4,5,5 D . 1,2,5,10
火柴游戏:有n根火柴,第1次取1根,第2次取2根,第i次取i根,当剩余火柴数为0时,不用添加火柴(即k=0),游戏结束。如果剩余火柴数不为0,但不够下一次取,此时添加k(k≥1)根火柴,在剩余火柴中再从1根开始取,直到能取完为止,求k的最小值。

例如:n=3时,第1次取1根,第2次取2根,此时正好取完,无须添加火柴,k=0;

例如:n=8时,第1次取1根,第2次取2根,第3次取3根,第4次要取4根,但剩余2根不够取。则加上1根,剩余3根,再从1根开始取,即第4次取1根,第5次取2根,剩余火柴为0,游戏结束,得k=1。

又如:n=4时,第1次取1根,第2次取2根,第3次不够取,若加上1根,剩余2根,再从1根开始取,第3次取1根,剩余1根不够第4次取,再加1根,又是剩余2根,显然加1根永远不可能取完。所以改用每次加2根,第1次取1根,第2次取2根,第3次不够取,添加2根,第3次取1根,第4次取2根,恰好能取完,得k=2。

编写一个VB程序可实现上述功能:在文本框Text1中输入火柴数量,单击“计算”按钮,在文本框Text2中显示最少添加数量,程序运行界面如下图所示:

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

Private Sub ok_Click()

Dim a(1 To 100) As Boolean, n As Integer, k As Integer, i As Integer

n = Val(Text1.Text)

For i = 1 To 100

    a(i) = False

Next i

a(n) = True

Do While n <> 0

    i = 1

    Do While i <= n

             ①      

        i = i + 1

    Loop

    If n = 0 Then

        Text2.Text = Str(k)

    Else

        If k = 0 Then k = 1

        n = n + k

        If       ②      Then

            k = k + 1

            n = Val(Text1.Text)

        Else

            a(n) = True

        End If

    End If

Loop

End Sub

  1. (1) 由代码可知,“计算”按钮的对象名是
  2. (2) 程序加框处代码有错,请改正。
  3. (3) 请在划线处填入合适的代码。

     ② 

有10个数据: 83、90、96、46、44、36、45、47、55、72依次存放在数组元素a(1)到a(10)中,部分VB程序段如下所示:

m = 1:k = 1

For i= 1 To 9

If a(i) < a(i+1) Then

k = k + 1

If k > m Then m = k

Else

k = 1

End If

Next i

Text1. Text = Str (m)

执行该程序段,文本框Text1中显示的是(  )

A . 2 B . 3 C . 4 D . 5
在VB程序中,当变量H的值等于8时,执行“IF H>8 then R=10 else R=20”语句后,R值为(     )
A . 5 B . 10 C . 20 D . 10或20
某地驾照考试规定,考试成绩不低于80分为合格,下图是根据成绩判断是否合格的部分流程图,如果输入的成绩为85,则该流程的执行顺序为:(    )

A . ①→②→③ B . ①→②→④ C . ①→②→④→③ D . ①→②→③→④
有如下VB程序段: s = "PYTHON5678" For i = 1 To Len(s)

ch = Mid(s, i, 1)

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

  k = (Val(ch) - 1) Mod (Len(s) - 4) + 1

  s1 = Mid(s, k, 1) + s1

End If

Next i

Text1.Text = s1

程序执行完后,Text1 中显示的内容是(     )

A . ONPY B . YPNO C . PNOH D . HONP
有如下程序段:

Dim i As Integer, t As Integer, s As Integer

s = 0: t = 0

For i = 0 To 10

  If i Mod 5 = 0 then s = s + 1

  t = t + i

Next i

Text1.Text = Str(s)

执行该程序段后,变量s和t的值分别是(   )

A . 3  55 B . 3  15 C . 2  15 D . 2  55
高精度除法常用于计算两个数位较大的数之间的除法运算,设被除数为s1,除数为s2,保存在字符串中。除法的基本思想是反复做减法,s1能够被s2减多少次,商就是多少。但是这样做显然比较慢。如下算法做了部分优化,以48695除以324为例:

①将324扩大100倍,32400只能被48695减去1次,则百位上的商是1;

②将324扩大10倍,3240能被前一次余的16295减去5次,则十位上的商就是5;

③对于324,不能被最后剩余的95减去,则个位上的商为0。所以最后的商的整数部分为150。

程序运行界面如图所示。

  1. (1) 根据该算法计算5731423除以23345,十位上的商是
  2. (2) 阅读以下程序,在画线处填入合适的代码。

    Dim s1, s2, s3, s, ans As String

    Dim tot As Integer, t As Integer

    Private Sub Command1_Click( )

      Dim a, b, i, j, length As Integer

      s1=Text1.Text:s2=Text2.Text:s3=""

      Length=Len(s1)-Len(s2)

      For i=1 To length

          s2=s2+"0"

      Next i

      For i=0 To length

          s=Mid(s2, 1, Len(s2)-1):tot=0

          Do While   ①   or(Len(s1)=Len(s)And s1>=s)

              tot=tot+1

              ans="":flag=False

              a=Len(s1):b=Len(s)

              For j=a To 1 Step-1

                  t=0

                  If flag Then

                    t=-1:flag=False

                  End If

              If b>0 Then

                  t=t+Val(Mid(s1, j, 1))-Val(Mid(s, b, 1))

              Else

                  t=    ②   

              End If

              If t<0 Then

                     ③  

                  flag=True

              End If

              ans=t&ans:b=b-1

            Next j

            s1=Val(ans)

        Loop

        s3=s3&tot

      Next i

      i=1

      Do While Mid(s3,i,1)="0"

            i=i+1

      Loop

      Text3.Text=Mid(s3,i,Len(s3))

    End Sub

    以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②;③

在python中,运行下列程序,正确的结果是(   )

x=1

while x>0:

    x=x+1

print(x)

A . 1 B . 1 2 3 4 5 6 7 8 9………………… C . 无输出 D . 100
若一个数是某个整数的平方,则该数被称为完全平方数。下列程序段用于找出字符串中用逗号分割的完全平方数。部分程序代码如下:

Dim tmp As Single ,s As String ,ch As String ,i As Integer s = "1,20,36,29,3,"

tmp = 0

For i = 1 To Len(s)

    ch = Mid(s, i, 1)

    If ch <> "," Then

              

    Else

        If       Then

            List1.AddItem Str(tmp)

        End If

        tmp = 0

    End If

Next i

上述程序段中横线处可选语句为:

① tmp = tmp * 10 + Val(ch)

② tmp = tmp + ch 

③ Sqr(tmp) ^ 2 = tmp

④ Int(Sqr(tmp)) = Sqr(tmp)

则方框处处语句依次为: (  )

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

Dim a(1 To 5) As Integer, i As Integer

a(1) = 1: a(2) = 1

For i = 3 To 5

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

Next i

Text1 Text = Str(a(i - 1))

该程序段运行后,文本框Text1中显示的内容是(     )

A . 2 B . 3 C . 5 D . 8
有如下 VB 程序段:

a(1) = 68: a(2) = 88: a(3) = 76: a(4) = 60: a(5) = 98

a(6) = 100: a(7) = 64: a(8) = 85: a(9) = 99: a(10) = 59

For i = 1 To 9

    b(i) = Abs(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 .  2 3 2 1 1 B . 1 3 2 2 1 C . 2 3 2 2 1 D . 1 3 2 1 2
水仙花数是指一个三位数,它的每个位上的数字的3次方之和就等于它本身,例如:1**3+5**3+3**3 = 153。这类三位数也被叫做自恋数、自幂数或者阿姆斯特朗数。

(问题求解)设这个数存放于变量x中,变量g、s、b分别存放个位、十位、百位上的数。需得分离数字得到每位上的数,即将变量g、s、b表示为x的形式。请阅读如下python程序,在空白处填写适当的表达式或语句,使程序完整。print ("三位数之内的水仙花是:")

for x in :

    b=x//100

    s=

    g=

    if x==(b**3 + s**3 + g**3):

       

有如下VB程序段:

Dim i As Integer, t As Integer

Dim enc As String, dec As String

enc = " 6Z9FBQ3VX4": dec =" "

i =1:t=0

Do While t <4

    c = Mid(enc, i,1)

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

        i = Val(c)

    Else

        dec=dec+c

        t=t+1

    End If

    i =i+1

Loop

Text1.Text=dec

运行该程序段,文本框Text1中的内容是(    )

A . QXFB B . 6Q9X C . QBQV D . FBQF
编写“二进制数转换为十六进制数”程序,实现如下功能:在文本框 Text1 输入一个二进制数,单击“转换”按钮 Command1,将二进制数转换为十六进制数并在文本框 Text2 中显示。程序运行界面如下图所示。

  1. (1) 设计如图所示的程序界面,至少要使用个类(填数字)。
  2. (2) 实现上述功能的 VB 程序如下,请在划线处填入合适的代码。

    Private Sub Command1_Click()

        Dim s1 As String, s2 As String

        Dim i As Integer, x As Integer

        Const code="0123456789ABCDEF"

        s1=Text1.Text

        s2=""

        Do While Len(s1) Mod 4<>0 

            s1="0"+s1

        Loop

        x=0

        i=1

        Do While i<=Len(s1)

            x=x*2+Val(Mid(s1,i,1))  

            i=i+1

            If   Then      ‘①

                s2=s2+Mid(code,x+1,1)

                ‘②

            End If

        Loop

        Text2.Text=s2

    End Sub

  3. (3) 若文本框 Text1 中输入的内容为“101101”,单击“转换”按钮后,文本框Text2中显示的内容是
阅读程序。分析代码并回答问题。

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])的作用是
计算斐波那契数列的前n项。该数列从第 3 项开始,每一项都等于前两项之和,其中第1项为1,第2项也为1。计算前第 n项的 VB程序段如下所示:

Private Sub Command1_Click()

    Dim n As Integer,i As Integer,a As Long,b As Long,c As Long

    a = 1

    b = 1

    n = Val(Text1.Text)

    List1.AddItem Str(a)

    List1.AddItem Str(b)

    For i = 3 To n

       

       

       

        List1.AddItem Str(c)

    Next i

End Sub

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

①a=b ②c=a+b ③b=c

A . ①、②、③ B . ①、③、② C . ③、①、② D . ②、①、③
仓库管理员对每一件物品都进行了编码,并按升序排列,每个用户在领取物品时需要提供物品的后几位编码,如果用户提供的编码在仓库中有多件物品符合,则给他编码较小的物品。如果仓库中没有符合用户需要的物品,

则输出 none。请你编程帮管理员找出每一位用户应该领取的物品编码,物品不能被重复领取。例如,仓库有5 件物品,分别为134,1123,1234, 2112,5123 ,有 3 个用户提出领取物品的需求:

2233456212,第1个数就是第1个用户要求的物品编码后几位的长度(1到9之间),例如是2,则向后读取2位数,23就是第一个用户要求的编码尾号,依次类推,第2个用户要求后3位编码为456,第3个用户要求后2位编码为12。则他们应该领取的物品为 1123,none,2112。

  1. (1) 根据题目中的物品编码,如果用户的需求数据是:143123223,领取的物品编码分别是
  2. (2) 实现上述功能的程序如下,请在划线处填入合适的代码。

    Const num = 5

    Dim a(1 To 10) As String     '物品编码

    Dim s As String, req(1 To 10) As Integer     '每位用户需求的后几位编码

    Dim n As Integer     '用户数

    Dim g(1 To 10) As String

    Dim b(1 To 10) As Integer     '每位用户需求的后几位编码长度

    Dim flag(1 To 10) As Boolean     '标记物品是否被领取

    Private Sub Form_Load()

    '仓库物品编码数据初始化,并在List1中列举,代码略

    End Sub

    Private Sub Command1_Click()

    s = Text1.Text

    k = 1: i = 1: n = 0

    Do While i <= Len(s)

    t = Val(Mid(s, i, 1))

    n = n + 1

    b(n) = t

    req(n) = Val(Mid(s, i + 1, t))

    Loop

    For i = 1 To n

       

    List2.AddItem g(i)

    Next i

    End Sub

    Function search(need As Integer, needlen As Integer) As String

    j = 1

    For j = 1 To num

    IfAnd flag(j) = False Then Exit

    For Next

    If j > num Then search = "none"

    Else

    flag(j) = True search = a(j)

    End If

    End Function

最近更新