第4单元 计算与问题解决 知识点题库

某仓库货物查询系统,数组id保存货物编号(货物编号已经按照从小到大的顺序保存),数组n保存货物名称,数组c保存货物数量。数组中的数据信息一一对应。该系统提供3种查询方式,查询优先级最高的是按编号查询,其次是按名称查询,最低的是按数量查询(在输入多个查询条件的情况下,只按照优先级高的条件进行查询,其中按数量查询可以查询到所有货物数量小于输入值的结果)并将查询结果在list1中显示。程序界面如图2-1所示。

部分程序代码如下:

Public number As String  '货物编号

Public na As String  '货物名称

Public co As String  '货物数量

Private Sub Command1Click()

Dim flag As Integer  '查询结果标志

number = Text1.Text

na = Text2.Text

co = Text3.Text

If (number = "" And na = "" And co = "") Then MsgBox ("你还没有输入查询条件") ’第一种情况

If number <> ""Then ’第二种情况

flag = searchnum(1, n)  'n 表示总的货物种类数量

List1.AddItem id(flag) + n(flag) + c(flag)

  If flag = -1 Then MsgBox ("查询无结果,检查是否输入有误")

End If

If na <> "" Then  ‘第三种情况

flag = searchna(1, n)  'n 表示总的货物种类数量

List1.AddItem id(flag) + n(flag) + c(flag)

  If flag = -1 Then MsgBox ("查询无结果,检查是否输入有误")

End If

If co <> "" Then ‘第四种情况

flag = searchco(1, n)

If flag = 0 Then MsgBox ("查询无结果,检查是否输入有误")

End If

End Sub

Function searchnum(i, j) As Integer  '按编号查询函数

Dim m As Integer

Do While i <= j

m = Fix((i + j) / 2)

If id(m) = number Then

searchnum = m: Exit Function  '查询到结果返回值并结束该函数

End If

If id(m) > number Then         Else i = m + 1

Loop

searchnum = -1

End Function

Function searchna(i, j) As Integer  '按名称查询函数

For i = 1 To j Step 1

If n(i) = na Then searchna = i: Exit Function

Next i

searchna = -1

End Function

Function searchco(i, j) As Integer  '按货物数量函数

Dim f As Integer

f = 0

For i = 1 To j Step 1

If        Then

List1.AddItem id(i) + n(i) + c(i)

f = 1

End If

Next i

searchco (f)

End Function

回答下列问题:

  1. (1) 程序中划线处应填入的代码是:①
  2. (2) Sub Command1 Click()事件处理过程中,使用了4个IF语句区分四种情况分别进行查询。按照题目所给的程序代码能否实现只按照优先级高的条件进行查询?(填是/否)
信息的编程加工里面(  )是编程的核心,是解决问题的方法和步骤。
A . 算法设计 B . 界面设计 C . 代码编写 D . 调试运行
【加试题】某对分查找算法的VB程序段如下:

L = 1: R = 10: Key = 21

Do While L <= R

    m = (L + R) \ 2

    If a(m) <= Key Then

        L = m + 1

    Else

        R = m - 1

    End If

Loop

数组元素 a(1)到 a(10)的值依次为“ 3, 9, 21, 21, 21, 21, 27, 28, 39, 40”,执行该程序段,变量R、a(R)的值分别是(  )

A . 2, 9 B . 3, 21 C . 6, 21 D . 7, 27
【加试题】有如下程序段:

i = 1: j = 10: n = 0: flag = True

Key = Val(Text1.Text)

Do While i <= jAnd flag = True

    m = (i + j) \ 2

    If a(m) = Key Then

        flag = False

    ElseIf a(m) < Key Then

        i = m + 1

        n = n - 1

    Else

        j = m– 1

        n = n + 1

    End If

Loop

数组元素a(1)到a(10)的值依次是“5,16,22,28,35,43,52,67,78,89”,变量n的值最终是0,则文本框Text1输入的数值范围可能是(   )

A . (28,35) B . (43,52) C . [52,67] D . [78,89]
字符加密:用VB编写某字符串加密解密程序(仅针对ASCII码字符) ,其加密过程如下:

首先,分别求出特加密ASCII字符的ASCII码,然后用7位二进制来表示,比如“4”的ASCII码为十进制52,转换为7位二进制为“0110100”

其次,从左至右依次记为第1、2、3....7位,分别把第3、4、5位取反,即0变1, 1变0,至此“0110100”变为“0101000”,将此二进制转换为ASCII码为40,对应的字符为“(”,即“4”经过加密后得到加密字符左括号“(”。

在文本框Text1中输入ASCII字符,单击命令按钮Command,则在文本框Text2中显示经过加密的字符。VB代码如下,程序界面如图所示。

上述加密与解密过程实际上是可以互逆的,请完成下列问题。

  1. (1) 若在文本框Text1中输入字符“46785”,则文本框Text2中显示加密字符
  2. (2) 请在划线处填入合适的代码。

    Private Sub Command1_Click()

      Dim a(1 To 7) As Integer

      Dim i As Integer, j As Integer, n As Integer

      Dim ascl As String, s As String, s1 As String

      i=1

      S=Text1.Text

      Text2.Text=“”

      Do While i=Len(Text1.Text)

          s1= Mid(s, i, 1)

          ascl=Asc(s1)

          n=0

          For j=7 To 1 Step-1

              If j=3 Or i=4 Or j=5 Then

                  a(j)=

              Else

                  a(j) = asc1 Mod 2

              End If

              ascl=asc1\2

              n=

          Next j

          Text2.Text =Text2.Text+

          i=i+1

      Loop

    End Sub

某对分查找算法的VB程序段如下:

Key = Int(Rnd * 49) * 2 + 1

s = 0: i = 1: j = 10

Do While i <= j

m = (i + j) \ 2

If Key = a(m) Then Exit Do If Key < a(m) Then

j = m - 1: s = 2 * s

Else

i = m + 1: s = 2 * s + 1

End If Loop

数组a(1)到a(10)的值依次为“2,6,7,15,20,24,27,43,52,63”,执行该程序段后,s的值不可能为(  )

A . 2 B . 3 C . 5 D . 15
数组a为一组正整数,前部分为升序,后部分为降序。设计vb程序查找数组a中的最大值及其位置。实现该功能的程序段如下:

  i=1:j=n

flag=False

Do While i<=j And Not flag

  m=(i+j+1)\2

  If a(m) <a(m-1) And a(m) >a(m+1) Then

    

  ElseIf a(m) >a(m-1) And a(m) >a(m+1) Then

    

  ElseIf a(m) >a(m-1) And a(m) <a(m+1) Then

    

  End If

Loop

list1.Add Item Str(a(m) ) &Str(m)

上述程序方框出可选语句为:i=m+1②j=m-1③flag=true

则(1)、(2)、(3)处语句依次是(  )

A . ①②③ B . ①③② C . ③①② D . ②③①
某查找算法的VB 程序如下:

Private Sub Command1_Click()

Dim a(1 To 9) As Integer, key As Integer, i As Integer, j As Integer

Dim mid1 As Integer, mid2 As Integer

a(1)=4: a(2)=22: a(3)=27: a(4)=32: a(5)=35: a(6)=44: a(7)=56: a(8)=59: a(9)=78

key=Val(Text1.Text)

i=1: j=9

flag=False

Do While i<=j And Not flag

Mid1=i+(j-i)\3

mid2=j-(j-i)\3

If key=a(mid1) Then

flag=True

ElseIf key<a(mid1) Then

j=mid1-1

ElseIf key=a(mid2) Then

flag=True

ElseIf key>a(mid2) Then

i=mid2+1

Else

i=mid1+1

j=mid2-1

End If

Loop

If flag Then Label1.Caption=″查找成功!″Else Label1.Caption=″查找失败!″

End Sub

该程序段执行时,在文本框Text1中输入36,单击命令按钮Command1,程序运行结束后,i和j的值为(  )

A . 4,5 B . 6,5 C . 5,6 D . 6,4
Pygame自带了一个监听类循环,不断检查用户的操作,这个循环在程序运行过程期间持续工作。仔细阅读理解如下代码填写括号内容

while True:

  for event in pygame.event.get():          #(

    if event.type==pygame.QUIT:          #(

      sys.exit()                  #退出程序

    if event.type==pygame.MOUSEBUTTONDOWN: #(

调用模块不正确的(   )
A . os.system( ) B . random.sample( ) C . mymodule.match_num( ) D . sys.sleep( )
下列关于算法特征的叙述,正确的是(    )
A . 算法所包含的步骤可以是无穷的 B . 算法每一步骤必须确切地定义 C . 一个算法可以没有输出 D . 算法只能用Visual Basic来实现
有关算法描述,不正确的选项是(   )
A . 算法是解决问题的步骤集合 B . 算法就是解题的算式 C . 解题的步骤是有限的 D . 算法是可以被描述和实现的
有如下VB程序段:

i=1: j=63: n=0

Do While i<=j

    M=(i+j)\2

    If Key=a(m) Then

        Exit Do

    Elself Key<a(m) Then

        J=m-1:n=n-1

    Else

        I=m+1:n=n+1

    End if

Loop

数组元素a(1)到a(63)存放着递增的数据。若执行该程序段后n的值为6,则下列表达式成立的是(    )

A . key<a(1) B . key=a(1) C . key=a(63) D . key>a(63)
数组a中存储的是两个数列交替排序的n个正整数,下标为奇数的数组元素都是奇数且为升序排列,下标为偶数的数组元素都是偶数且为降序排列。排序示例如下。

a(1)

a(2)

a(3)

a(4)

a(5)

a(6)

a(7)

a(8)

a(9)

a(10)

1

10

3

8

5

6

7

4

9

2

依据对分查找思想,设计一个在数组a中查找数据key的程序,实现该功能的VB程序如下,请回答下列问题:

Private Sub Search_Click()

    Const n = 10

    Dim a(1 To n) As Integer

    Dim i As Integer, j As Integer, m As Integer, f As Boolean, key As Integer

    '读取一组正整数,按上述规则存入数组 a 中。代码略

    key = Val(Text1.Text)

    If key Mod 2 = 1 Then i = 1 Else i = 2

    j = n :f = False

    Do While i <= j And Not f

        If key Mod 2 = 0 Then

            m = (i + j) \ 2 - (i + j) \ 2 Mod 2

        Else

            m =     ①   

        End If

        If key = a(m) Then

            f = True

        ElseIf   Then

            j = m - 2

        Else

            i =     ②    

        End If

    Loop

    If f Then Label1.Caption = Str(m) Else Label1.Caption = "不存在"

End Sub

  1. (1) 观察程序代码,该事件处理过程名为
  2. (2) 程序加框处代码有错,请改正。
  3. (3) 请在划线处填入合适的代码。

     ② 

某对分查找算法的VB程序段如下:

i=1:j=25

n=0

Do While i<=j

    m=(i+j+1)\2

    n=n+1

    If key=a(m)Then Exit Do

    If key>a(m)Then i=m+1Elsej=m-1

Loop

Labe11.Caption=Str(n)

数组元素a(1)~a(25)的值依次为1~25,若查找键key为下列选项的值,程序段执行后,标签Label1中显示的内容与其他三项不同的是(    )

A . 7 B . 12 C . 19 D . 22
小明需要编写程序,用来计算1+2+3+……+∞的值,但是他程序编不出来,因为这不符合算法的特点(    )。
A . 可行性 B . 有穷性 C . 必须有输入 D . 必须有输出
下列关于算法的描述,不正确的有:()
A . 广义地讲,“算法”指的是解决问题或完成任务的一系列步骤 B . 算法有多种不同的描述方式 C . 通过算法让计算机解决问题时,数据、运算及控制转移成为算法的要素 D . 算法的第一个执行步骤必须是数据输入
大家期盼的校运会要来了,同学们踊跃报名,共有20人报了100米,30人报了200米。小明编写了一个VB程序,用于查询同时报名参加100米和200米比赛的学生,并统计学生数。具体功能如下:程序运行时,在列表框List1中显示报100米的学生学号和姓名,在列表框List2中显示报200米的学生学号和姓名,单击“排序”按钮Command1后,将List2中数据按“姓名”升序排序,并将排序后的数据重新显示在列表框List2中;单击“查询并统计”按钮Command2后,在列表框List3中显示同时报名参加100米和200米比赛的学生信息,并在该列表框的最后显示同时报名这两项比赛的学生数。程序运行界面如下图所示:

为实现上述功能的程序如下,请在划线处填入合适的语句或代码。

Dim xm1(1 To 20) As String, xh1(1 To 20) As String′数组xm1、xh1分别存储选报课程1的学生的姓名和学号

Dim xm2(1 To 30) As String, xh2(1 To 30) As String′数组xm2、xh2分别存储选报课程2的学生的姓名和学号

Const n = 20, m = 30

Private Sub Form_Load()

    '获取选报数据,并显示在列表框List1和List2中

    '代码略

End Sub

Private Sub Command1_Click()

    Dim i As Integer, j As Integer, tt As String

    List2.Clear

    For i = 1 To m - 1

        For j =Step -1

            If xm2(j) < xm2(j - 1) Then

                tt = xm2(j): xm2(j) = xm2(j - 1): xm2(j - 1) = tt

                tt = xh2(j): xh2(j) = xh2(j - 1): xh2(j - 1) = tt

            End If

        Next j

    Next i

    For i = 1 To m

        List2.AddItem xh2(i) + “  ” + xm2(i)

    Next i

End Sub

Private Sub Command2_Click()

    Dim i As Integer, j As Integer, w As Integer, tt As String, k As Integer

    For i = 1 To n

        p = 1

        

        Do While p <= q

            w = (p + q) \ 2

            If xm1(i) = xm2(w) Then

                List3.AddItem xh1(i) + “ ” + xm1(i)

                k = k + 1

            End If

            If Then

                q = w - 1

            Else

                p = w + 1

            End If

        Loop

    Next i

    List3.AddItem “共有” + Str(k) + “ 位同学”

End Sub

一个有序数列为{3,7,12,14,19,24,28,35,39,41,47,65},用二分查找值为12的结点时,查找成功需要比较的次数为(    )。
A . 4 B . 3 C . 2 D . 1
以下关于算法的描述正确的是(     )
A . 计算方法 B . 计算公式 C . 计算机程序 D . 解决问题的步骤序列