3.3 简单算法及其程序实现 知识点题库

大约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) 本程序“鸡兔同笼”窗体中(如程序运行界面图)使用的控件类型有

                                    。

以下VB程序段的功能是用DO语句求1~1000之间满足“用3除余2,用5除余3,用7除余2”的数。并将结果在list1中列出,并在label1处显示符合条件的数的个数。

Private Sub Command1Click()

Dim i As Integer

Dim j As Integer

i = 1: j = 0

list1.clear

Do While i <= 1000

If (i Mod 3 = 2 And i Mod 5 = 3 And i Mod 7 = 2) Then

List1.AddItem i

    ①    

j = j + 1

End If

i = i + 1

Loop

Label1.Caption = Str(j)

End Sub

  1. (1) 程序中①处应填入的代码是
  2. (2) 程序运行结束后,变量i的值为
现要求编写VB程序实现如下功能:在文本框Text1中输入正整数n(n为奇数),单击“生成”命令按钮后,如下图所示,在文本框Text2中会显示一个有规律的对称数字串,形式为“1 3 … n-2 n n-2 3 1”。 例如n=9时,显示的数字串为“1 3 5 7 9 7 5 3 1”。

 

  1. (1) 根据代码可知,命令按钮“生成”的对象名是
  2. (2) 实现上述功能的VB程序如下。请在划线处填入合适代码。

    Private Sub Com1Click()

       Dim n As Integer, i As Integer, s As String

      

       s = ""

       For i = 1 To n

         If i <= n \ 2 + 1 Then

            s = s + Str(2 * i - 1)

         Else

           s = s +

         End If

       Next i

       Text2.Text = s

    End Sub

  3. (3) 当n=9时,在实现程序功能的情况下,如果将程序中加框处的代码换成“s = Str(2 * i - 1) + s”,单击“生成”按钮,其输出结果为
小张设计了一个“加减运算练习”VB程序。界面如下图所示。单击“出题”Command1按钮显示两个运算数和运算符号,并计数。在文本框Text1中输入计算结果后单击“判断”按钮Command2,如果计算结果正确,则得分加10分,直至完成10题测试。VB程序如下,但加下划线处代码有错,请改正。

Dim n,s As Integer    'n为试题计数器,s为得分

Dim a, b As Integer  'a,b 为两个运算数

Dim c As String 'c为运算符:"+ "表示加法,"-"表示减法

Private Sub Form_Load()

n = 0:

s = 0

End Sub

Private Sub Command1_Click()   ‘出题按钮

Randomize

n = n + 1

If n < 11 Then

      Label1.Caption = "No:" + Str(n)

      a = Int(Rnd * 100)  'a,b为运算数,且要求a不小于b

      b = Int(Rnd * 100)

      If   Then t = a: a = b: b = t                '(1)

      If  Rnd > 0.5  Then c = "+" Else        '(2)

      Label5.Caption = Str(a) + c + Str(b) + "="

      Text1.Text = ""

Else

   Command1.Caption = "完成测试"

End If

End Sub

Private Sub Command2_Click()   ‘判断按钮

If c = "+" Then

             If   a + b = Val(Text1.Text) Then  s = s + 10

           Else

             If  Then  s = s + 10    '(3)

End If

Label3.Caption = "得分:" + Str(s)

End Sub

编写VB程序,实现如下功能:在文本框Textl和Text2中分别输入一个整数,单击命令按钮Command1,在列表框List1中显示结果,运行效果如图1所示。结果包含两列数据,第1列为两数之间的摄氏温度值(间隔1度、升序),第2列为对应的华氏温度值。

  1. (1) 要使命令按钮Command1上显示的文本改为“转换”,可在其属性窗口(图2)中将属性的属性值修改为“转换”。
  2. (2) 为实现上述功能,请在划线处填入合适代码或选项。

    Private Sub Command1_Click()

    Dim t1 As Integer, t2 As Integer

    Dim i As Integer, t As Integer

    Dim f As Single

    List1.Clear

    t1 = Val(Text1.Text)

    t2 = Val(Text2.Text)

    If ① Then  '(选填字母,从下列A、B、C、D四个选项中选取一项)

      t = t1: t1 = t2: t2 = t

    End If

    i = t1

    Do While ②  '(选填字母,从下列A、B、C、D四个选项中选取一项)

    f = i * 9 / 5 + 32    '摄氏温度转换为华氏温度

    List1.AddItem Str(i) + "          " + Str(f)

      '(填程序代码)

    Loop

    End Sub

    划线①、②处的选项: A. i <= t2    B.f <= t2    C.t1 > t2    D. i < f

删除重复字符的VB程序,程序功能如下:在文本框Text1中输入字符串,单击“删除重复字符”按钮,在文本框Text2中输出处理后的结果。程序运行效果如图所示,实现上述功能的VB代码如下,但加框处代码有错,请改正。

Private Sub Command1_Click()

x = Text1.Text

n = Len(x)

s=s+Mid(x,1,1)

For i = 2 To n

flag =0

For j = 1 To Len(s)

If  Then '

flag = 1: Exit For

End If

Next j

If  Then '

s = s + Mid(x, i, 1)

End If

Next i

Text2.Text = s

End Sub

简易加法器:小王用VB编写了一个简易加法器,其功能如下:在文本框Text1中输入数字,中间用“,”隔开,单击“计算”命令按钮后,将这几个数字的和输出在标签Label1中。运行界面如图所示,VB程序代码如下,请回答以下问题。

  1. (1) Cmd1对象属于类。(单选,填字母:A .Label / B .TextBox / C .CommandButton)。
  2. (2) 请在划线处填入合适代码。

    Private Sub Cmd1_Click()

      Dim i As Integer, j As Integer, ans As Integer

      Dim ch As String, s As String

      s = Text1.Text

      ans = 0

      j = 1

      For i = 1 To Len(s)

       

          If ch = "," Then

            ans =

            j = i + 1

          End If

       Next i

       Label1.Caption = "计算结果是:" +Str(ans)

    End Sub

  3. (3) 运行该程序,在文本框中输入“21,5,3”(不包含双引号),则计算结果是
【加试题】某程序功能如下:数组a中存放了n*n个两位随机正整数,按n行n列在列表框List1 中显示(即第一行自左向右依次显示a(1)~a(n),第二行自左向右依次显示a(n+1) ~a(2*n),……)。按(行号,列号)的形式在文本框Text1 中输入某矩形区域的左上角位置(x1,y1),在文本框Text2 中输入右下角位置(x2,y2),单击“水平翻转”按钮Command1,对以(x1,y1)和(x2,y2)为对角顶点的矩形区域中的数据进行水平翻转,并将变换后的n*n个数据保存到数组b中,最后在列表框list2 中按照List1的格式显示数组b中的数据。程序运行界面如图所示。

  1. (1) 对于有8*8个元素构成的数组a,如果输入左上角位置是(2,3),右下角位置是(7,5),水平翻转后,则元素a(27)的值在新数组保存在元素b()(填写下标)中。
  2. (2) 依据上述描述设计的VB 程序如下,请在划线处填入合适代码。

    Const n = 6

    Dim a(1 To n ^ 2) As Integer, b(1 To n ^ 2) As Integer

    Private Sub Form_Load()

        '产生n*n个两位随机正整数,保存数组a,显示在List1中,代码略。

    End Sub

    Private Sub Command1_Click()

    Dim i As Integer, j As Integer, xy(1 To 4) As Integer

    Dim s As String, tmp As String, c As String

    s = Text1.Text + "," + Text2.Text + ","

    tmp = "": j = 0

    For i = 1 To Len(s)

        c = Mid(s, i, 1)

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

            tmp = tmp + c

        Else

            j = j + 1

           

            tmp = ""

        End If

    Next i

    For i = 1 To n

        For j = 1 To n

            If i>= xy(1) And i<= xy(3) And j >= xy(2) And j <= xy(4) Then

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

            Else

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

            End If

        Next j

    Next i

    List2.Clear: c = ""

    For i = 1 To n * n

        c = c + Str(b(i))

        If  Then

            List2.AddItem c

            c = ""

        End If

    Next i

    End Sub

编写VB程序,实现如下功能:在文本框Text1中输入一个小于10的正整数n,单击“计算”按钮Command1,在标签Label2中输出计算结果。界面设计如图1所示。

图1

  1. (1) 图2为VB控件工具箱的部分截图。参照图1,若要在图3中完成界面设计,则需要添加“计算”按钮Command1,那么应该选择图2中的。(填序号)

              图2                                         图3

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

    Private Sub Command1_Click()

    Dim n As Integer,k As Integer,s As Long

    If n>=10 Or n<=0 Then

    Label2.Caption=“请输入一个小于10的正整数”

    Else

    s=0

    For k=1 To n  

             s=s+k*k

    Label2.Caption=Str(s)

    End If

    End Sub

  3. (3) 上述程序运行时,若在Text1中输入11,则Label2中显示的内容为
目前部分手机的短信具有“提取详情”的功能,即针对一条短信,可以提取出短信中一些关 键的信息。现编写 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中提取后的数字信息为
在n个连续的方格内填字母A或B,但相邻两格都不能填B,求所有可能方案。可以用枚举算法解决,此题可以采用进制转换来解决。考虑到只包含了A与B两个字母,我们可以用二进制的0和1来代替。

程序部分代码如下:

Private Sub Command1_Click()

Dim n, m, s, i, j, count As Long

Dim flag As Boolean

Dim a(1 To 100) As Integer

n = Val(Text1.Text)

count = 0

  ①  

For i = 0 to s-1

 m = i

 For j = 1 To n

 a(j) = m Mod 2

 m = m \ 2

Next j

flag = True

For j = 1 To n - 1

 If  ②  Then flag = false: exit For

Next j

If flag = True Then  ③  

Next i

Label1.Caption =“可行方案共”+ Str(count) + “种”

End Sub

  1. (1) 将代码补充完整:① ② ③ 
  2. (2) 若Text1中输入5,则可行方案共种。
有如下VB程序段:

For i = 1 To 20

  a(i) = 0

Next i

For i = 1 To 20

If i Mod 3 = 0 Then a(i) = 1-a(i)

Next i

For i = 1 To 20

  If a(i) = 1 Then n = n + 1

Next i

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

A . 6 B . 13 C . 14 D . 15
若参与运算的数范围大大超出了标准数据类型能表示的范围的运算,就要用到高精度算法。小明编写了如下的高精度乘法程序,文本框Text 1和Text 2中分别输入两个乘数,单击命令按钮Command 1,在文本框Text 3中输出两个数的乘积, 运行界面如图所示。

  1. (1) 请在划线处填入合适的代码。

    Private SubCommand1_Click()

    Dim a( 1 To 100) As Integer, b( 1 To 100) As Integer, c( 1 To 1000) As Integer

    Dim t As Integer, k As Integer, i As Integer, jAs Integer

    Dims1As String, s2As String, output As String

    s 1=Text 1.Text:s2=Text2.Text:Text3.Text=“”

    For i=1 To Len(s1)

        a(i)=  ①     ‘将文本框Text 1中的自然数按从低位到高位的顺序依次存放在数组a(1),a(2) ……a(len(s1))中

    Next i

    ‘将文本框Text2中的自然数按从低位到高位的顺序依次存放在数组b(1),b(2) …… b(len(s2))中,代码略

        len c=Len(s1) +Len(s2) -1

        For i=1 To Len(s1)

            For j=1 To Len(s2)

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

           c(i+j)=  ② 

           c(i+j-1) =c(i+j-1) Mod 10

        Next j

      Next i

      If c(len c+1) > 0 Then   ③ 

      Do While c(len c) =0Andlenc> 1 (2)

           len c=len c-1

      Loop

      output=“”

      For i=len c To 1 Step-1

          output=output+Mid(Str(c(i)),2,1)

      Next i

      Text 3.Text=output

    End Sub

  2. (2) 若将方框内代码“And len c>1”删除,在文本框Text 1中输入122134,在文本框Text 2中输入0,单击命令按钮Command 1,则程序提示
已知在一直角三角形中,直角边a,b为整数,斜边C为不大于50的整数,输入直边a,输出所有满足条件的直角三角形三边a,b,c。
  1. (1) 解题思路为在斜边C的范围内,检验直角边b是否满足条件。这种算法是(     )
    A .   解析算法 B .   枚举算法 C .   查找算法 D .   排序算法
  2. (2) 斜边C的范围的下列FOR语句表达正确的是:(     )
    A .   for C=0  to  50 B .   for C=0  to   a     C .   for C=a  to 50  D .   for C=a+1 to 50
在平面坐标系中,给定任意个点,求出这些点中与点(1,1)距离最远的点。小李编写出了相应功能的程序:在文本框Text1中输入这些点的坐标值(数据都用逗号分隔并以逗号结尾),单击“计算”按钮Cmd后,程序计算这些点到(1,1)的距离后,结果显示在列表框List1中,并且输出最大距离的点。程序运行界面如图所示。

  1. (1) 由图可知,窗体中的对象共有类;
  2. (2) 实现上述功能的VB程序如下,请在画线处填入合适的代码。

    Private Sub Command1_Click()

        Dim i, k As Integer

        Dim x1, y1, x2, y2 As Single

        Dim v As Singie, maxd As Single

        Dim s As String, pos zb As String

        List1.Clear

        s=Text1.Text

        x1=1: y1=1

        t="": k=1: j=1

        List1.AddItem"坐标点" & "距离"

        For i=1 To Len(s)

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

                v=Val(Mid(s,j,i-j))

                j=

                If k Mod 2=1 Then

                    x2=v

                Else

                    y2=v

                    d=Sqr((x2-x1)^2+(y2-y1)^2)

                    If Then

                        maxd=d

                        pos="(" & Str(x2)& "," & Str(y2)& ")"

                    End If

                    List1.AddItem"(" & Str(x2)& "," & Str(y2)& ")" & Str(d)

                End If

                k=k+1

            End If

        Next i

        Label1.Caption="距离(1, 1)最远的点为"& pos &"距离为"& Str(maxd)

    End Sub

  3. (3) 若文本框Text1中输入的内容为“31,41,26,51,1,56”,程序运行结束后,距离(1,1)最远的坐标点是
珠心算是在大脑中以算珠表象作为载体,运用珠算法则所进行的计算。某学校的珠心算老师采用一种快速考查珠心算加法能力的测验方法,他随机给出一个正整数集合,集合中的数各不相同,然后要求学生回答:其中共有多少个数恰好等于集合中另外两个(不同的)数之和,例如集合{1,2,3,4},一共有2个数等于集合中另外两个数之和,它们是3、4(4=3+1,3=2+1)。将上述算法编写成程序,其功能如下:程序运行时产生n个范围在[1,100]内的不同的随机整数存储在数组a中,并在列表框List1中显示,单击按钮Command1后,在标签Label1上输出结果,如图所示。

  1. (1) 集合{1,2,3,4,5,6}中一共有个数等于集合中另外两个数之和。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

    Const n=12

    Dim a(1 To n) As Integer

    Dim flag(1 To 100) As Boolean

    Private Sub Form_Load()

        Dim i As Integer, t As Integer

        For i=1 To 100

            flag(i)=False

        Next i

        i=1

        Do While i <=n

            t=Int(Rnd * 100)+1

            If Not flag(t) Then

               

                List1.AddItem Str(t)

                flag(t)=True

                i=i+1

            End If

        Loop

    End Sub

    Private Sub Command1_Click()

        Dim i As Integer, j As Integer, ans As Integer

        ans=0

        For i=1 To n

            For j=i+1 To n

                If a(i)+a(j)<=100 Then

                    If Then

                        ans=ans+1

                        flag(a(i)+a(j))= False

                    End If

               

            Next j

        Next i

        Label1.Caption="共有"+Str(ans)+"个数!"

    End Sub

现有n根棍子,第i根棍子的长度为a<sub>1</sub>,现设计了以下VB程序段,想要从中选出三根棍子组成周长尽可能长的三角形,输出最大的周长;若无法组成三角形,则输出0。如当n=5,a={2,3,4,5,10}时,输出12,即选择了3、4、5。当n=4,a={4,5,10,20}时,无法组成三角形,输出0。实现上述功能的VB程序代码如下,但加框处代码有误,请改正。

Dim a(1 To 1000) As Integer

Dim n As Integer

Private Sub Form_Load()

'确定n的值和数组a的各个元素值,即每根棍子的长度值,代码略

End Sub

Function max (x As Integer, y As Integer) As Integer

    If x>y Then

        max=x

    Else

        max=y

    End If

End Function

Private Sub Command1_Click()

    Dim i As Integer, J As Integer, K As Integer

    Dim ans As Integer, c As Integer, longest As Integer,

    rest As Integer

    ans=0

    '让i<j<k,保证棍子不会被重复选中

    For i=1 To n

        For j=i+1 To n

            For k=j+1 To n

                c=a(i)+a(j)+a(k)

                longest=      '①

                rest=c-longest        'rest 保存最短的两条边的和

                If Then      '②

                    ans=max(ans, c)

                End If

            Next k

        Next j

    Next i

    Print ans

End Sub

  1. (1) ①处应改为
  2. (2) ②处应改为
在n个(1≤n≤15)一连串的方格内填写字母A或B,但相邻两格内不能都填B,求所有可能的填写方案数。例如当n=3,可能的方案有AAA、AAB、ABA、BAA、BAB等5种。

丽华设计如下算法:考虑到方案中只包含了A与B两个字母,可以用二进制的0和1来代替(0表示A,1表示B)。当全部是0时最小,此数0;当全部是1时此数最大。枚举0到最大数的每一种情况,逐一判断是否包含B相连(二进制数1相连)情况,符合条件的0、1转为A、B后输出。

根据以上算法思想,丽华使用VB程序编写了一个程序来解决这个问题。在文本框Text1中输入n的值,点击“寻找方案”按钮Command1后,在列表框List1中输出所有的方案,在标签Label3中显示方案总数。

  1. (1) 如果输入的n值等于4,那么所有可能的方案有 种。
  2. (2) 实现上述功能的VB程序如下,运行结果如图所示,请在划线处填入合适的代码。

    Private Sub Command1_Click()

        Dim i As Integer, j As Integer, n As Integer, t As Integer, k As Integer

        Dim flag as Boolean, ans As Integer

        Dim a(1 To 15) As Integer

        n = Val(Text1.Text)

        For i = 0 To 2^n-1

            t = i

            For j = 1 To n

                a(j) = t Mod 2

                t = t \ 2

            Next j

            flag = True

            For k = 1 To n-1

                If  Then flag = False

            Next k

            If flag Then  : ans = ans + 1

        Next i

        Label3.Caption = "可能方案共" + Str(ans) + "种"

    End Sub

    Function GetStr(x As Integer, n As Integer) As String

        Dim m As Integer, i As Integer

        GetStr = ""

        m = x

        For i = 1 To n

            If m Mod 2 = 0 Then

                GetStr = "A" + GetStr

            Else

                GetStr = "B" + GetStr

            End If

           

        Next i

    End Function

下列选项中,适合用穷举法编程解决的问题是(     )
A . 找出100以内所直的素数 B . 画出100个同心圖 C . 算50个学生成绩的平均分 D . 比较两个同学的成绩
现要找出200以内的能被4或5或6整除的正整数,用计算机解决该问题时应采用的算法是
最近更新