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

下列关于算法的叙述不正确的是(   )   
A . 算法是解决问题的方法和步骤 B . 算法具有确定性、可行性、有限性等基本特征 C . 一个问题的算法都只有一种 D . 常见的算法描述方法有自然语言、流程图、计算机语言等
有如下VB 程序段:

S = 0

i = 5

Do While i < 12

  If s <6  Then s = s+i  else  s = s-3

  i = i+1

Loop

执行以上程序后,变量i和s的值分别为(  )

A . 11  5 B . 11  8 C . 12  8 D . 12  5
有如下程序段,运行时程序出现如下错误提示,出错语句的位置是 (  )

Private Sub Command1_Click()

 Dim i As Integer

 Dim a(10)As Integer    ‘①

 For i=1 To 10    ‘②

  a(i)=Rnd* 100    ‘③

 Next i

 Label1.Caption=Str(a(i))    ‘④

End Sub

A . B . C . D .
现要求刚好输出1至100内所有能被7整除的数字,下列哪段程序不能实现(  )
A . For i = 1 To 100 If i Mod 7 = 0 Then   List1.AddItem i Next i B . For i = 7 To 100 Step 7   List1.AddItem i Next i C . i = 1: s = 7 Do While s <= 100   List1.AddItem s   i = i + 1   s = i * 7 Loop D . s = 0 Do While s <= 100   s = s + 7   List1.AddItem s Loop
有如下程序段:

Const n=6

Dim a(1 To n)As Integer

Dim i As Integer,j As Integer,t As Integer

Do While True

  For i=1 To n-1

      If a(i)>a(i+1)Then Exit For

  Next i

  If i < n Then

      For i=1 To n

        j=Int(Rnd * 6)+1

        t=a(j):a(j)=a(i):a(i)=t

      Next i

  Else

      Exit Do

  End If

Loop

数组中a(1)到a(6)的值依次为“56,34,48,87,65,96”,上述程序段执行后a(1)到a(6)的值依次为(  )

A . 96 87 65 56 48 34 B . 344856658796 C . 选项A和B都有可能 D . 选项A和B都不可能
设计算法,求同时满足以下条件的所有四位正整数之和s。

①不大于n(n的值是由键盘输入);

②能被9整除;

③十位数是2。

算法流程图如图所示:

  1. (1) 解决上述问题的算法属于(  )
    A . 枚举法 B . 擂台法 C . 解析法 D . 对分法
  2. (2) 判断x能被9整除的设计思路是(  );取x十位上数字的设计思路是(  )。
    A . x除以9的余数为0:先求x除以10的余数,再求该余数除以10的商 B . x除以9的商为0;先求x除以10的余数,再求该余数除以100的商 C . x除以9的商为0;先求x除以100的余数,再求该余数除以100的商 D . x除以9的余数为0;先求x除以100的余数,再求该余数除以10的商
  3. (3) 请完善划线处内容,完成上述功能。

    Dim n as Integer, x as Integer, s as long

    s=0

    n=InputBox(“输入四位数上限值”)

    For    ⑴   

        If   ⑵   and   ⑶   Then

          S=s+x

        End If

    Next

      ⑷ 

     ⑵ ⑶ ⑷ 

小王编写统计工厂中生产某种零件的工人数量的VB程序,运行程序后,从数据库中获取每个工人生产的零件数量,并存储在数组xs中:在文本框Text1中输入达标零件数da,单击“开始统计”按钮Command1,筛选数组xs中大于等于所输入零件数da的数据,并依次存储在数组bf中。最后统计数组bf中生产相同零件数量的人数,存储在数组tj后,将统计结果输出在列表框List1中,数组tj中各元素的含义如下表所示,程序运行界面如图所示。

数组元素

数组元素的含义

tj(1)

存储查找到第1个大于da的零件数

tj(2)

存储生产了tj(1)个零件的工人数量

tj(2*i-1)

存储查找到第i个大于da的零件数

tj(2*i)

存储生产了tj(i)个零件的工人数量

例如:tj(1)=1948,tj(2)=12。这对数据的含义为:共有12个工人生产了1948个零件。

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

  1. (1) 根据程序运行界面的数据及数组tj中各元素的含义进行分析,数组元素tj(8)的值是(填数值)。
  2. (2) 请在画线处填入合适的代码。

    Private Sub Command1_Click( )

      Dim bf(1 To 1000)As Integer

      Dim maxn, d, k, sa As Integer

      Dim I, j, flag As Integer

      da=Val(Text1.Text):maxn=0:k=1

      For j=1 To n

        If xs(j)>=da Then maxn=maxn+1

        bf(maxn)=xs(j)

      Next j

      For i=1 To maxn

        flag=0

        For j=1 To i-1

            If bf(i)=bf(j) Then flag=1

        Next j

        If flag=0 Then

             ①   

          d=1

            For j=i+1 To maxn

              If bf(i)=bf(j) Then   ②   

            Next j

            tj(2*k)=d

            k=k+1

          End If

        Next i

        k=k-1

        For j=1 To   ③   

          List1. Addltem Str(tj(j))+"     "+Str(tj(j+1))

        Next j

    End Sub

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

小明设计了某社团积分系统,当输入用户ID和积分增值后可以更新积分和排名。具体功能如下:单击“读取"按钮Command1后,将n个用户的ID (依次为1到n)、积分和积分排名显示在列表框List1中。在Text1中输入ID和积分增值,用逗号作为分隔符和结束符,奇数位置整数表示ID,偶数位置整数表示积分增值。如输入“2,1,3,5,”表示ID为2的用户增加1积分,ID为3的用户增加5积分。单击“更新"按钮Command2,在列表框List2中显示更新后的积分和排名。程序运行界面如图所示。

请回答下列问题:

  1. (1) 若要清空列表框List1,下列代码正确的是(单选,填字母:A .List1.Clear /B .List1.Caption / C .List1.Text")。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Const n= 12

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

    Private Sub Command1_Click()

    'n个用户的ID依次为1到n,读取n个用户的积分和排名数据分别存储到数组a和数组mc中,并在列表框Listl中显示ID、积分、积分排名,代码略

    End Sub

    Private Sub Command2_Click()

        Dim i As Integer, j As Integer, k As Integer, d As Integer

        Dim s As String, flag As Boolean, x As Integer, y As Integer

        Dim p(1To20) As Integer    '存储输入的ID和积分增值,每次输入不超过10组

        For i=1 To 20

            p(i)=0

        Next i

        s= Text1.Text

        

        d=0:k=0

        For i= 1 To Len(s)

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

                If flag Then

                    x = Val(Mid(s, i-d, d))

                    For j= 1 To k Step 2

                        If p(j) =x Then Exit For

                    Next j

                    If j> k Then

                        p(j)=x:k=k+2

                    End If

                Else

                    y = Val(Mid(s, i-d, d))

                    p(i+1)=p(j+ 1)+y

                End If

                flag= Not flag: d= 0

            Else

                

            End If

        Next i

        For i=1 To k\2

            x=p(2*i-1):y=p(2*i)

            me(x)= 1

            For j= 1 Ton

                If j<> x Then

                    If a(j)<a(x)+y And a(j)>=a(x) Then

                End If

                If a(j)> a(x) +y Then mc(x)= m(x)+ 1

            Next j

           

        Next i

        '在列表框List2中显示ID,积分、排名,代码略

    End Sub

  3. (3) 程序中加框处代码有错,请改正
 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
下列选项中,适合用计算机编程来解决的是(    )
A . 测量学校操场的面积 B . 计算100的阶乘 C . 视频剪辑 D . 制作一份电子报刊
数学上把2,4,8,16等数称为2的幂次方。编写程序,实现如下功能: 在文本框Text1中输入一个正整数n,单击“查找”按钮,找到一个2的幂次方,使其与n之差的绝对值最小,并在标签框 Label1中输出。如果找到两个同时满足条件的幂次方,则输出较小的。程序运行界面如图所示。

  1. (1) 要使程序运行时,标签框Labell的ForeColor属性值为vbRed,可在Form_Load事件处理过程中添加语句(单选,填字母: A . Label1. ForeColor= vbRed/ B . Label1. vbRed= ForeColor/C . Fore Color. Label1=vbRed)。
  2. (2) 实现上述功能的VB程序如下,请在画线处填入合适的代码。

    Private Sub Command 1_ Click()

        Dim n As Long, sum As Long, ans As Long

        n= Val(Text1. Text)

        sum=1

        Do While sum <n

            

        Loop

        If n =sum Then

            ans=sum

        ElseIf Then

            ans=sum/2

        Else

            ans =sum

        End If

        Label 1. Caption = Str(ans)

    End Sub

  3. (3) 若文本框Text1中输入的内容为“24”,单击“查找”按钮,标签框 Label1中显示的内容是
如下Python程序段

x = 2

print (x+1)

print (x+2)

运行后,变量x的值是(    )

A . 2 B . 3 C . 5 D .
下面关于用算法来解决问题的4个步骤,正确的顺序为(   )。

①建立数学模型;②设计算法;③分析问题;④描述算法。

A . ③②①④ B . ③①②④ C . ①③②④ D . ①②③④
在窗体上添加1个列表框、1个命令按钮和1个标签,其名称分别为List1,Command1和Label1,通过属性窗口把列表框中的项目设置为“第一个项目”,“第二个项目”,“第三个项目”,“第四个项目”。程序运行后,在列表框中选择一个项目,然后单击命令按钮 ,将所选择的项目删除,并在标签中显示列表框当前的项目数。将程序补充完整。

Private Sub Command1_Click()

    If List1.ListIndex >=  Then

        List1.RemoveItem

        Label1.Caption =

    Else

    MsgBox "请选择要删除的项目"

   

End Sub

下列关于计算1×3×5×7×9×…×99值的算法描述中,错误的是( )
A . B . C . D .
小王编写了出租车收费的Python程序,代码如下:

s = eval(input("请输入行驶路程(公里):")) 

if s <= 3:

f = 10

elif s <= 10:

f = 10 + 2.5 * ( s - 3 )

else:

f = 27.5 + 3.5 * ( s - 10 )

print(f)

要测试所有分支程序代码是否正确,以下测试数据中,最恰当的一组是(    )

A . 3,8 B . -1,5,12 C . 1,6,20 D . 3,12,20
在一个整数序列中找第k小的字母,若有相同的字母,则位置靠前的字母名次靠前,如有字母序列为“A,B,A,D,C”则第1小的字母为A在第1个位置,第2小的字母为A在第3个位置,笫3小的字母是B,在第2个位置,第4小的字母是C,在笫5个位置,笫5小的字母是D,在第4个位置。编写一个VB程序实现如下功能,程序启动时随机产生n个A-G之间的随机大写字母,在文本框Text2中输入整数k(k<=n),单击“查找第k小的字母”按钮Commandl后,在文本框Text3上显示笫k小的字母位置。程序运行界面如下图所示。

  1. (1) 若要清空文本框 Text1 中的内容,能实现该功能的语句是 (单选,填字母:A .Text1.Caption=""/B . Text1.Text=""/C . Text1.Clear)
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Const n = 20

    Dim i As Integer

    Dim a(1 To n) As String

    Private Sub Form_Load()

        Randomize

        For i = 1 To n

            a(i) =

            Text1.Text = Text1.Text + " " + a(i)

        Next i

    End Sub

    Private Sub Command1_Click()

        Dim k As Integer, count As Integer

        Dim b(0 To 7) As Integer

        k = Val(Text2.Text)

        For i = 1 To n

           

        Next i

        i = 1

        Do While i < 7 And b(i) < k

           

            i = i + 1

        Loop

        Key = i

        count = 0

        For i = 1 To n

            If a(i) = Chr(Key + 64) Then count = count + 1

            If count = Then Exit For

        Next i

        Text3.Text = "第" + Str(k) + "小的字母是:" + Chr(Key + 64) + ";位置是:" + Str(i) End Sub

  3. (3) 程序中加框处有错,请改正。
有如下VB程序段:

Dim a(1 To 6) As Long, i As Integer, x As Long, y As Long

x = 654321

For i = 1 To 6

    a(i) = x Mod 10

    x = x \ 10

    y = y + a(i) * 10 ^ (6 - i + 1)

Next i

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

A . 123456 B . 1234560 C . 6543210 D . 654321
在BXY中编辑有这样一段程序:

from microbit import *

while True:

    if button_a.is_pressed():

        display.show(Image.HAPPY)

    elif button_b.is_pressed():

        break

    else:

        display.show(Image.SAD)

sleep(1000)

在micro:bit硬件支持下,以下说法正确的是 (    )

A . 开始运行,不按开发板上的任何按钮,开发板显示“笑脸” B . 开始运行,按开发板上的B按钮后,开发板上的LED灯全部关闭 C . 开始运行,不按开发板上的任何按钮,开发板进入死循环,无法正常运行 D . 开始运行,按开发板上的A按钮后,开发板显示“笑脸”,一秒钟后显示“哭脸”
有如下程序:

a = input('输入小写字母组成的字符:')

for i in a:

  n = ord(i)+1                           #(字符a的ASCII码为97)

  h = ''

  for j in range(8):

    h = str(abs(n%2- 1))+h

    n = n//2

print(h, end=' ')

若输入小写字母“ab ”得到的结果是 (    )

A . 0011101 0011100 B . 1100010 0011100 C . 10011101 10011100 D . 00011101 00011100