4.1 算法及其特征 知识点题库

大约1500年前,《孙子算经》中记载了"鸡兔同笼"问题.原文大意是:如果若干只鸡和兔在同一个笼子里,从上面数有35个头,从下面数有94只脚,求笼中鸡和兔子各有几只?
现在我们用VB6.0软件设计一个程序,可以解答上述问题,通过界面输入鸡和兔头数和,鸡、兔脚数和。在输入数据合理的情况下,求出鸡、兔各有多少只。程序运行界面图、输出界面图和程序的代码如下所示。
         
程序运行界面图                      输出结果界面图
程序代码如下:
Private  Sub Command1_Click(  )
Dim x As Integer, y As Integer   ’x是鸡的数量,y是兔的数量
Dim a As Integer, b As Integer   ’a是鸡兔的头数,b是鸡兔的脚数和
a = Val(Text1.Text)
b = Val(Text2.Text)
If b < 2 * a Or b > 4 * a Then   ’对数据合理性做出判断
MsgBox "您的输入数据不合理,请重新输入!", , "错误提示"
Text1.Text = ""
Text2.Text = ""
   ①          
x = 0
Do While x     ②    a
y = a - x
If (2 * x + 4 * y = b) Then
MsgBox "鸡有:" & x & "只   兔有:" & y & "只", , "运行结果"
End If
   ③    
Loop
End Sub
Private  Sub Command2_Click(  )
Text1.Text = ""
Text2.Text = ""
End Sub
请分析任务,完成下面试题。
  1. (1) 程序设计的“灵魂”是(选填“代码”或“算法”)。
  2. (2) 流程图用图框及流程线来表示算法。流程图中的“    ”(菱形框) 用来表示(选填“数据处理”或“选择分支”)。
  3. (3) 程序中的语句“Dim a As Integer”,是将变量a的数据类型定义为
  4. (4) 程序中的语句用到了Msgbox函数,此函数的作用是(选填“输入数据”,“输出数据”或“数据转换”
  5. (5) 程序中①所在的横线处应填写的语句是
  6. (6) 程序中②所在的横线处应填写的语句是
  7. (7) 程序中③所在的横线处应填写的语句是
  8. (8) 如题图一所示的程序运行界面,要改变窗体的标题,使其显示为“鸡兔同笼”应修改窗体控件的(选填“Caption”,“Name”,“Text”)属性。
  9. (9) 本程序中求解问题所用到的算法属于(选填“解析法”、“穷举法”或“递归法”)。
  10. (10) 本程序“鸡兔同笼”窗体中(如程序运行界面图)使用的控件类型有

                                    。

用计算机程序解决问题过程,正确设计顺序是(   )
A . 分析问题→编写代码→设计算法→调试运行 B . 分析问题→设计算法→编写代码→调试运行 C . 设计算法→分析问题→编写代码→调试运行 D . 调试运行→设计算法→编写代码→分析问题
下列关于算法的特征描述不正确的是(   )。
A . 有穷性:算法必须在有限步之内结束 B . 确定性:算法的每一步 C . 输入:算法必须至少有一个输入 D . 输出:算法必须至少有一个输出
信息的编程加工里面(  )是编程的核心,是解决问题的方法和步骤。
A . 算法设计 B . 界面设计 C . 代码编写 D . 调试运行
火柴算术游戏,给定n(n<=24)根火柴,恰好用尽n根火柴拼凑出A+B=C形式的算式,问一共有多少种可行方案,请输出方案的总数,已知0~9每个数字所需的火柴根数如下表所示:

注意:⑴其中A+B=C 等式中的“+”“=”需要用去4根火柴。

⑵0+4=4与4+0=4算作一种方案。

例如n=18,符合条件的算式共有5个:0+4=4,0+11=11,1+10=11,2+2=4,2+7=9。

小明设计了一个程序,在Text1中输入火柴数量,单击“计算”按钮,在Label1中输出总的可行方案数,并在List1中输出所有可行的算式。

程序代码如下,加框处代码有误,请修改。

Dim s(0 To 9) As Integer

Private Sub Command1_Click()

 Dim n As Integer, a As Integer, b As Integer, count As Integer

  count=0

  n=Val(Text1.Text)

  For a=0 To 999 Step 1

    For b=a To 999 Step 1

       If   Then   '①

        List1.AddItem Str(a)+"+"+Str(b)+"="+Str(a+b)

        count=count+1

      End If

    Next b

  Next a

  Label2.Caption="共"+Str(count)+"种方案"

End Sub

Function gs(ByVal x As Integer) As Integer

  Dim tmp As Integer

  tmp=0

  If x=0 Then tmp=s(0)

  Do While x > 0

         '②

    x=x \ 10

  Loop

  gs=tmp

End Function

Private Sub Form_Load()

  s(0)=6: s(1)=2: s(2)=5: s(3)=5: s(4)=4

  s(5)=5: s(6)=6: s(7)=3: s(8)=7: s(9)=6

End Sub

一个算法可以用多种程序设计语言来实现。
无法用算法来解决“输出所有的素数”的问题,这是因为它不符合算法的哪项特征?(  )
A . 有穷性 B . 确定性 C . 可行性 D . 一定有输出
七灯游戏是一款经典的益智类游戏。游戏中,有七盏灯排成一圈,如图a所示,初始时灯的开关状态随机生成,操作其中某一盏灯,则可以切换该灯的“开/关”状态,同时,这盏灯对面的两盏灯也会切换“开/关”状态,如图b所示:

图a为初始状态,操作圈中的灯,则该灯与对面的两盏灯都会切换“开/关”状态,如图b所示。假设这些灯的编号为0到6号,“开/关”状态随机产生,并输出到列表框List1中,接着需要从中选出数盏灯进行操作,使得最后所有灯都打开(已证明方案-一定存在且唯一), 并在列表框List2中输出灯的编号。

程序采用枚举策略,一一尝试对每盏灯状态进行“切换”操作,“1”表示对当前灯进行切换,“0”表示不操作。

程序运行界面如图c所示。

  1. (1) 0-6号灯的初始状态为“关  关  关  开  关  关  开”,如对1号灯进行切换操作,对面随之切换灯的编号是:
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Dim a(0 To 6)As Integer,b(0 To 6) As Integer

    Private Sub Command1_Click()

      Dim i As Integer, x As Integer, pos As Integer

      Dim flag As Boolean

      List2.Clear

      For i = 0 To

        x = i:pos = 0:flag = True

        For j = 0 To 6

            b(j)= a(j)

        Next j

        Do While x > 0

            If x Mod 2 = 1 Then

                b(pos)= 1 - b(pos)

                b((pos + 3) Mod 7) = 1 – b((pos + 3) Mod 7)

               

            End If

            pos = pos + 1

            x = x \ 2

         Loop

         For j = 0 To 6

             IfThen flag = False:Exit For

         Next j

         If flag Then

            pos = 0

            Do While i > 0

               If i Mod 2 = 1 Then List2.AddItem “第” + CStr(pos)+ “号”

               i = i \ 2

               pos = pos + 1

            Loop

            Exit For

         End If

       Next i

    End Sub

    Private Sub Form_Load()     ‘随机生成初始数据

        Dim i As Integer

        Randomize

        List1.Clear

        For i = 0 To 6

            a(i)= Int(Rnd * 2)

            If a(i)= 1 Then

                List1.AddItem “第” + CStr(i) + “号:”+ “开”

            Else

                List1.AddItem “第” + CStr(i) + “号:” + “关”

            End If

         Next i

    End Sub

算法就是用计算机求解某一问题的方法,是能被机械地执行的动作或指令的无穷集合。
在求一元二次方程实数根的算法中, 当方程不存在实数根,也要求输出“方程无实数根”。这一要求主要体现了算法特征中的(    )
A . 有穷性 B . 确定性 C . 有1个或多个输出 D . 有0个或多个输入
下列关于算法的概念及描述,说法正确的是(    )
A . 算法就是数学运算方法 B . 算法的第一个执行步骤必须是数据输入 C . 算法的一个步骤可以被执行多次 D . 算法只能用自然语言进行描述
列出所有可能的情况,逐个判断有哪些符合问题所要求的条件,从而解决问题,这是(   )思路
A . 递归算法 B . 顺序查找算法 C . 穷举法 D . 解析法
如果两个质数的差为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(sar(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=x/0”,调试过程中提示错误,该代码违反了算法特征中的(    )。
A . 有穷性 B . 可行性 C . 确定性 D . 二义性
假设在“烧水泡茶”这一过程中要经历5道工序,分别是①烧开水壶1分钟,②烧开水10分钟,③洗茶壶茶杯2分钟,④取茶叶1分钟,⑤泡茶1分钟,若合理安排这5到工序执行的先后顺序,可以使“烧水泡茶”整个过程所有的总时间最短为(    )
A . 12分钟 B . 10分钟 C . 11分钟 D . 15分钟
算法必须具备有穷性和确定性,在经历有穷步后得到一个或多个数据输出结果。
如图是小李同学设计的算法流程图,根据算法的特征,请指出其中存在的问题是(     )。

A . 该算法没有数据输入 B . 该算法没有数据输出 C . 该算法不符合有穷性特征 D . 该算法不符合确定性特征
某算法用伪代码描述如下:

输入两个互不相等的正整数A和B

10:If A<B then

C←A,A←B,B←C)

输出A和B

Else

返回到标号10的行继续执行

下列有关上述算的法说法,正确的是(    )

A . 该算法违反了算法有穷性原则 B . 该算法实现了找出A和B中的最大值 A C . 该算法属于分支结构 D . 该算法无法使用流程图来描述
给定12个不同的正整数,任务是计算这些数里面有多少个数对满足:数对中一个数是另一个数的两倍。比如给定8 13 21 28 19 33 10 17 42 5 38 7,得到的答案是3,因为10是5的两倍,42是21的两倍,38是19的两倍。下列VB代码段能实现上述功能,请将划线处代码补充完整:

Private Sub Command2_Click()

    Const n=12

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

    Dim i As Integer, j As Integer

    Randomize

    For i=1 To n

        a(i)=Int(Rnd * 50)+1

        For j=1 To i- 1

            If a(i)=a(j) Then

        Next j

        If j <i Then

    Next i

    For i=1 To n

        For j=1 To n

            If  Then

                s=s+1

                List1. AddItem Str(s)+":"+ Str(a(i)) + Str(a(j))

                Exit For跳出内层循环

            End If

        Next j

    Next i

End Sub