第二章 算法与问题解决 知识点题库

【加试题】运行下列VB程序,在文本框Text1中输入30,界面如图所示。

单击“计算”按钮Command1后,则在文本框Text2中显示的内容是,在文本框Text3中显示的内容是

  Private Sub Command1Click()

Dim s As Integer, t As Integer, n As Integer

n = Val(Text1.Text)

t = 0

s = 0

For i = 1 To n

     If Int(Sqr(i)) = Sqr(i) Then

        s = s + i

        t = t + 1

     End If

Next i

Text2.Text = Str(t)

Text3.Text = Str(s)

End Sub

计算机能直接识别和处理的语言是(   )   
A . 机器语言 B . 汇编语言 C . 高级语言 D . 英语
语句  “ i=3:s=1/(i-3)”  无法执行,原因是它违反了算法特征中的(   )
A . 有穷性 B . 唯一性 C . 可行性 D . 确定性
某算法流程图如图所示,若输入k的值为11,执行这部分流程后,最终输出的s,i的值分别为(  )

A . 18,12 B . 18,11 C . 19,12 D . 19,11
在一次晚会上,一位魔术师掏出一叠扑克牌,取出其中13张黑桃,预先洗好牌,把牌面朝下,对观众说:“我不看牌,只数一数就能知道每张牌是什么?”魔术师口中念1,将第一张牌翻过来看正好是A;魔术师将黑桃A放到桌子上,继续数手里的余牌,第二次数1,2将第一张牌放到这叠牌的下面,将第二张牌翻开,正好是黑桃2,也把它放在桌子上。第三次数1,2,3,前面两张牌放到这叠牌的下面,取出第三张牌,正好是黑桃3,这样依次将13张牌翻出,准确无误。现在的问题是,魔术师手里牌的原始顺序是怎么样的呢?运行结果如下图所示。

代码如下:

Private Sub Command1_Click()

Dim a(1 To 13) As Integer, i As Integer, j As Integer, n As Integer

For i=1 To 13

  a(i)=0

Next i

i=1:n=0:j=1

Do While i<=13

Do While True

If j>13 Then

If a(j)=0 Then n=n+1

If n=i Then

n=0

Exit Do

End If

j=j+1

Loop

Loop

Label1.Caption="原来牌的顺序是:"

For k=1 To 13

   Label2.Caption =

End Sub

RGB颜色模式是用8位二进制数表示红色、8位二进制数表示绿色、8位二进制数表示蓝色即使用24位二进制数表示一种颜色的模式。若将每位二进制数取反,即(0改为1、1改为0)就会变为另一种颜色,我们称这种方式为颜色反相。小明编写了一个VB程序实现上述功能,在名称为o_c_txt的文本框中输入原始颜色如#000000,点击命令按钮fx_cmd后,在名称为f_c_lab的标签中输出反相后的颜色如#FFFFFF。运行效果如图所示。实现上述功能的算法如下:

  数组dzb_h的16个元素分别存放16进制数的16个基本数码。

  依次取出原始颜色代码中每一位对应的16进制数码,例如原始颜色代码为#123456,第1次取出1,第2次取出2……

  在数组dzb_h各元素中找到对应16进制数码的元素

  运用规律:0+F=1+E…=7+8取得反相色并累加,例如:数组dzb_h第1个元素值的反相色的值是数组dzb_h第16个元素值。

  输出得到的反相色。

  实现上述功能的VB程序代码段如下,请完善相关程序代码。

Private Sub fx_cmd_Click()

Dim dzb_h(1 To 16) As String

Dim o_c As String, f_c As String, i As Integer, xbxh As Integer, c As String

dzb_h(1)="0":dzb_h(2)="1":dzb_h(3)="2":dzb_h(4)="3":dzb_h(5)="4":dzb_h(6)="5":dzb_h(7)="6"

dzb_h(8)="7":dzb_h(9)="8":dzb_h(10)="9":dzb_h(11)="A":dzb_h(12)="B":dzb_h(13)="C"

dzb_h(14)="D":dzb_h(15)="E":dzb_h(16)="F"

o_c=o_c_txt.Text     

 

f_c="#"

  Do While i<=Len(o_c)

    c=Mid(o_c,i,1)

    If Asc(c)>96 Then

    xbxh=1

    Do While xbxh<17

      If  Then

        f_c= 

        Exit Do

      End If

      xbxh=xbxh+1

    Loop

    i=i+1

  Loop

  f_c_lab.Caption=f_c

End Sub

DO 循环中当型循环的关键字是,直到型循环的关键字是
有如下 VB 程序段:

a(1) = 23: a(2) = 32: a(3) = 46: a(4) = 38: a(5) = 15: a(6) = 55: a(7) = 39

For i = 1 To 5

  For j = 2 To 7-i

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

      t = a(j): a(j) = a(j + 1): a(j + 1) = t
      c = c + 1

    End If

  Next j

Next i

c 的初值是0,程序执行完后,c的值是(     )

A . 8 B . 7 C . 6 D . 5
下列程序执行后,变量s的值是(  )

s=1

For i=1 To 20

  If i Mod 5=0 Then

  s=s+i

  End If

Next i

A . 50 B . 51 C . 31 D . 30
有如下VB程序段:

n=20:s=""

Do While n<>0

    r=n Mod 2

    s=Str(r)+s

    n=n\2

Loop

Label1.Caption=s

该程序段运行后,标签Label1上显示的内容是(  )

A . 10010 B . 00101 C . 10100 D . 01001
结构化程序设计由三种基本结构组成,下面哪个不属于这三种基本结构之一(   )
A . 顺序结构 B . 环形结构 C . 选择结构 D . 循环结构
有如下 VB 程序段:

s = "python2021": t = "": i = 1

Do While i < Len(s)

    c = Mid(s, i, 1): d = Mid(s, i + 1, 1)

    If c < d Then t = t + c Else t = t + d

    i = i + 2

Loop

Label1.Caption = t

执行该程序段后,标签Label1上显示的内容是(    )

A . phn01 B . pto22 C . yhn01 D . yto22
在VB程序中,假定有以下循环结构,则正确的描述是(  )。

Do While条件

    循环体

Loop

A . 如果“条件”是一个为0的常数,则一次循环体也不执行 B . 如果“条件”是一个为0的常数,则执行无穷次循环体 C . 如果“条件”是一个为0的常数,则至少执行一次循环体 D . 不论“条件”是否为“真”,至少执行一次循环体
下列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 . ③①②
操作说明:编写一个程序实现以下功能,将程序以“Y:/3/3.py”作为文件名保存。

题目:设计100以内的数中能同时被3或5整除的个数。

汉诺塔问题中,现在要将塔座A上的所有圆盘移到塔座B上;并仍按同样顺序叠放。移动圆盘时,需遵守汉诺塔问题的移动规则。可设计出解汉诺塔问题的递归算法为(   )。
A . B . C . D .
出列顺序有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) 加框处两语句互换下顺序,会不会对出列顺序产生影响(选填:会/不会)。
有如下VB程序段:

k = 0

For i = 1 To 10

    If b(a(i)) = 0 Then k = k + 1

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

Next i

For i = 1 To k

    p = 1

    For j = 2 To 10

       If b(j) > b(p) Then p = j

    Next j

    b(p) = 0

    s = s + Str(p)

Next i

数组a(1)~a(10)的元素分别为2,5,3,8,8,5,8,9,5,3。数组b(1)~b(10)的元素初始值均为0,执行程序后,变量s的值为(   )

A . " 5 8 3 2 9" B . " 2 3 5 8 9" C . " 8 5 3 9 2" D . " 2 9 3 5 8"
执行下面的程序段后,i的值为(    )

X=5

For i = 1 TO 20 STEP 2

    x=x+i^2

Next i

A .  21 B .   22 C .   1335 D .   50
下列算法流程图描述的算法运行结果是(      )。

Din i As Integer, j As Integer

For i=1 To 5

    For j=1 To 5-i

        Print "";     '输出一个空格

    Next j

    For j=1 To i

        Print **;

    Next j

    Print

Next i

A . B . C . D .