算法与程序设计 知识点题库

工资问题:某古老的工作和工资计算方式比较奇特,其工作要求如下:必须从1月1日当天开始工作,且连续工作n(n<=365)天才一次性结算得到工资。某年(假设当年为平年)其工资计算细则是:第1天获得1枚金币,接下来的2天(第2天和第3天)每天获

得2枚金币,再接下来的3天(第4、5、6 天)每天获得3枚金币……,依次类推,即当连续n天每天获得n枚金币后,会在之后的连续n+1天里,每天获得n+1枚金币。

小王用VB编写了工资计算程序,当输入连续工作的最后一天的日期后,单击“计算”按钮 Command1,程序自动计算工资总额,其运行界面如图所示。

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

  1. (1) 下列选项中,属于鼠标“单击”事件的是。(单选,填字母:A .DblClick / B .Load / C .Click)
  2. (2) 请在划线处填入合适的代码。
    Private Sub Command1_Click()

    Dim i As Integer, j As Integer, k As Integer Dim m As Integer, d As Integer, n As Integer Dim md As String, sum As Integer

    md = "312831303130313130313031"

    n = 0

    m = Val(Text1.Text) d = Val(Text2.Text)

    For i = 1 To m - 1 n =   ①  

    Next i

    n = n + d

    i = 0: j = 0

    sum = 0: k = 1 Do While i < n   sum =

    j = j + 1

    If      Then j = 0

    k = k + 1

    End If

    i = i + 1 Loop

    Text3.Text = Str(sum) End Sub

  3. (3) 加框处的代码有错误,请改正。
某VB程序段如下:

s=“491053”

For i=1 To 3

n=Len(s)

k=1

For j=2 To n

If Mid(s, k, 1) >=Mid(s, j, 1) Then

K=j

Else

Exit For .Exit For表示退出循环

End If

Next j

s= Mid(s, 1, k-1) + Mid(s, k+ 1,n-k)

Next i

Label1.Caption =s

执行该程序段后,标签Label1中显示的值是(  )

A . 053 B . 953 C . 913 D . 103
下列VB程序段功能为:在降序排序数组a中(a(1)≥a(2),≥……≥a(n))查找文本框Text1中输入的数据,若能找到,则输出该数在数组a中第一次出现的位置,否则输出“找不到”。

key = Val(Text1.Text)

i=1:j=n

Do While i<j

    m=(i+j)\2

    If  Then

        i=m+1

    Else

       

    End If

Loop

If a(i)=key Then Label1.Caption =Str(i) Else Label1.Caption ="找不到"

上述程序段两个方框处的语句分别为(  )

A . ①key<a(m)   ②j=m-1 B . ①key<a(m)  ②j=m C . ①key<=a(m)  ②j=m-1 D . ①key<=a(m)  ②j=m
观察下面流程图,n的初值为5,最后s输出的值为(  )

A . 5 B . 6 C . 7 D . 8
数组指针的应用:小明编写了一个二进制的消消乐程序,实现功能如下:二进制数中相邻重复的数字个数大于或等于2就消除掉,例如:二进制数1110前面连续3个1消除掉后该二进制数变成0,二进制数1001消除3个重复0后变成11,消除后的结果不继续消除。

程序功能如下:在文本框Text1中输入一个二进制数据,单击“消除”按钮 Command1,将二进制数据中相邻重复的数据大于或等于2的消除掉,并将结果在标签 Label1中显示。程序运行界面如图所示。

实现上述功能的VB程序如下,但加框处代码有错,请改正。

Private Sub Command1_Click ( )

Dim a (100) As String, b (100) As String

Dim n As Integer

Dim pa As Integer

Dim pb As Integer

s = Text1, Text

n = Len (Text1. Text)

For i= 1 To n

  a(i) = Mid(s, i, 1)

Next i

pa =1 : pb = 1

Do While pa < =  n-1

  If  Then   ‘①

    b(pb) = a(pa)

    pa= pa + 1: pb = pb + 1

  Else

    j = pa+1

    Do While j < = n

      If  Then    ‘②

        j=j+1

      Else

        Exit Do

      End if

    Loop

    pa = j

  End if

Loop

If pa =n Then b (pb) = a(pa): pb = pb + 1

ans = “”

For i= 1 To pb-1

      ‘③

Next i

Label1. Caption = "消除后的结果为:" + ans

End Sub

 ② ③ 

十进制整数换成二进制整数采用“除2倒取余”法。十进制小数转换成二进制小数采用“乘2顺取整”法,具体做法是:用2乘十进制数的小数部分,得到一个积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。小刘根据以上方法编写了VB程序,运行界面如图所示。程序运行时,在文本框Text1中输入一个带小数的正十进制数(小于32767),点击“转换”按钮Command1,在文本框Text2中输出转化后的带小数的二进制数,精确到3位小数。实现上述功能的VB程序如下,请回答下列问题:

  1. (1) 按照本程序的功能,在Text1中输入数据9.78,点击“转换”按钮Command1,在Text2中输出
  2. (2) 请在划线处填入合适的代码.

    Private Sub Command1_Click()

      Dim i As Integer,pos As Integer

      Dim s As String,c As String,result As String

      Dim s1 As Single,s2 As Single

      result=" ": i=1

      s=Text 1.Text

      c=Mid(s,i,1)

      Do While c<>"."

        i=i+1

        c=Mid(s,i,1)

      Loop

      pos=i

          ①    

      s2 = Val("0."+Mid(s,pos +1))

      result=convert(s1)&"." & convert(s2)

      Text2.Text=result

    End Sub

    Function convert(x As Single)As String

      Dim temp As Integer,k As lnteger

      If x>=1 Then '整数转化为二进制

        temp=x Mod 2

        result=temp & result

        x=x\2

        Do While x <>0

          temp=x Mod 2

          result=temp & result

          x=x\2

        Loop

      Else  '小数转化为二进制,保留3位小数

        k=1

        Do While   ②   

          temp=Int(x*2)

          result=result & temp

                   ③     

              k=k +1

            Loop

        End If

        convert=result

      End Function

(加试题)在学校操场的一边摆放着m堆石子。现在校学生志愿队接到一项任务,要将石子有次序地合并成一堆。每堆石头的重量为a(1)、a(2)、…、a(m)。规定每次只能选相邻的2堆石子合并成新的一堆。由于每次合并都需要搬运石头,非常考验体能。假设合并石子堆消耗的体能值为两堆石头的重量之和。例如将重量为8、8、5的三堆石头合并时,先将8和5的两堆合并,消耗体力13,再将13和8两堆合并,消耗体力21,于是总的体力消耗值为34。经过志愿队队长的分析,每次将最轻的两堆石子合并,可以使消耗的总体能最小。现编写一段VB了程序用于求解这n堆石子合并后需要消耗的体能总和的最小值。
  1. (1) 要使得程序的按钮上中显示“石子合并”,可修改窗体的属性(单选,填字母:A .Text/B .Form/C .Caption)。
  2. (2) 实现上述功能的VB程序如下,请在①②③划线处填入合适的代码。

    '读入m的值和m堆石子的重量依次存入a(1)……a(m),数据结构的定义略

    Private Sub Command1_Click()

    For i=1 To m

      For j=i To 2 Step-1

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

            t=a(j):a(j)=a(j-1):a(j-1)=t

         End If

       Next j

    Next i

    sum= 0

    Do While   ① 

        a(m-1)=a(m-1)+a(m)

        m=m-1

        sum=sum+  ② 

        For i=  ③   To 2 Step-1

            If a(i)>a(i-1) Then

          t=a(i):a(i)=a(i-1):a(i-1)=t

        End If

      Next i

    Loop

    Label 1.Caption=sum

    End Sub

     ② ③ 

已知数组元素a(1)到a(8)的值依次为89,78,57,56,45,34,23,12,若在Text1中输入12,然后执行以下程序段:

Key=Val(Text1.text)

Text2.Text= ""

i=1: j=8: f=False

Do While i <=j And Not f

m=(i+j)\2

If a(m)\10+a(m) mod 10 =Key Then

search =m: f=True

ElseIf a(m)\10+a(m) mod 10> Key Then

i=m+1

Else

j=m+1

End If

Text2.Text=Text2.Text+Str(m)

Loop

则在执行该程序段后,Text2中显示的内容是(  )

A . 56 78 67 B . 4 6 5 C . 4 2 3 D . 56 34 45
下列选项中,执行程序段后变量s的值不相同的一项是(   )。
A . B . C . D .
某书店在5所学校流动售书量(单位:本)分别是82、113、46、69、35。采用选择排序对其进行排序,若完成第一遍时的结果是82、113、46、69、35,则完成第二遍时的结果是(    )
A .   35、82、113、46、69 B .   113、82、46、69、35 C .   35、46、82、113、69 D .   82、113、69、46、35
有如下 VB 程序段:

bottom = 7

i = 2

Do While i <= bottom - 1

  If i Mod 2=0 And a(i)=a(i-1)+a(i+1) Then

    For j = i To bottom - 1

      a(j) = a(j + 1)

    Next j

    bottom = bottom - 1

  End If

  i = i + 1

Loop

For i = 1 To bottom

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

Next i

数组元素a(1)到a(7)的值依次为“26,94,68,42,69,27,132”。若该程序段执行后,文本框Text1中显示的内容是(  )

A . 26 42 27 132 B . 26 68 42 27 132 C . 26 42 69 27 132 D . 26 68 42 69 27 132
某算法的部分流程图如图所示。执行这部分流程,若输入 i 的值为5,则输出 r 的值为(    )

A . 11 B . 9 C . 7 D . 5
某校秋季运动会共有n名运动员参赛,小明编写了根据号码牌查询学生信息的程序,输入号码牌就能查询该号码牌所属的班级和选手姓名。数组a,b,c分别保存了本次运动会所有选手的号码牌、班级、姓名信息。第i个选手的号码牌保存在a(i)中,对应的班级和姓名保存在b(i)和c(i)中。程序界面如图所示,在文本框Text1中输入号码牌,单击“查询”按钮(Command1),如果找到对应的信息,就显示所属班级和选手姓名;如果没有找到,则显示“未找到”。

  1. (1) 分析程序,可知数据库的文件名为,当前数据表的名称为
  2. (2) 填入适当的代码,把程序补充完整。

    Dim n As Integer     ‘用于存储运动员总人数

    Dim a(1000)As Integer, b(1000)As String, c(1000)As String

    Private Sub Form_Load( )

      Dim conn As New ADODB. Connection

      Dim rs As New ADODB. Recordset

      conn. ConnectionString ="Provider =Microsoft. Jet. OLEDB. 4.0;DATA Source=" &App. Path & "\sport.accdb"

        conn.Open

        Set rs. ActiveConnection=conn

        rs.Open"Select*from号码牌"

        Do While Not rs. EOF  ‘到记录集rs的最后一条记录后退出循环

          n=n+1

          a(n)=rs. Fields("号码牌")    ‘读取当前记录“号码牌”字段值

          b(n)=     ①                ‘读取当前记录“班级”字段值

          c(n)=rs. Fields("姓名")      ‘读取当前记录“姓名”字段值

              ②                        ‘移动到下一条记录

        Loop

    ‘号码牌按升序排序后,显示在列表框List1中,其他代码略

    End Sub

    Private Sub Command1_Click( )

        Dim x As Integer

        x=Val(Text1.Text)

        pos=        ③         

        If pos>0 Then

          Text2.Text=b(pos):Text3.Text=c(pos)

        Else

          Text2.Text="未找到"

        End If

    End Sub

      Function Search(Key As Integer)As Integer

        Dim i As Integer,j As Integer

        i=1:j=n:Search=0

        Do While i<=j

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

            If Key=a(m)Then

                Search=m:Exit Function

            ElseIf   ④   Then

                j=m-1

            Else

                i=m+1

            End If

        Loop

    End Function

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

采用冒泡排序算法对某数据序列进行排序,经过第一轮排序后的结果是“2,8,3,6,7,5,9”,那么原数据序列不可能的是(   )
A . 8,3,6,7,5,2,9 B . 8,3,6,7,2,5,9 C . 2,8,3,9,6,7,5 D . 8,3,6,7,2,9,5
利用 VB 设计一个十进制转换为二进制的程序,界面如下图所示:

在文本框 Text1 中输入十进制数,单击转换按钮 Command1,在文本框Text2中显示对应的二进制数。

程序采用“除二取余”法进行转换,即对十进制数除以2,余数作为二进制数的一位数字,商则重复上述步骤继续除2,直到商为0结束转换。

  1. (1) 设置程序界面的时候,把Text1中的内容清空,通过修改其属性来实现的。(填字母:A . Caption/ B . Text/ C . Name)
  2. (2) 程序中共有个对象;窗体上共有个对象。
  3. (3) 程序如下所示,请在划线处填入合适代码。

    Private Sub Command1_Click()

        Dim s2 As String                          's2存放二进制数

        Dim s10 As Integer                      's10存放十进制数

        Dim x As Integer                          'x存储余数

        s10 = Val(Text1.Text)

        s2 = " "

        Do While

            x =

            s2 = Str(x) + s2 s10 = s10 \ 2

        Loop

                              '输出运行结果

    End Sub

  4. (4) 执行该程序,在文本框Text1中输20,则Text2中输出
  5. (5) 程序调试完成,通过“工程另存为”保存文件,其中窗体文件为。(填字母:A . /B . /C .
有如下VB程序段:

s1 = "BGR": s2= "VBPROGRAM"

i = 1:j = 1:s3 = ""

Do While i < = Len(s1) And j < = Len(s2)

    If Mid(s1,i,1) = Mid(s2,j,1)Then

        i = i + 1

    Else

        s3 = s3 + Mid(s2,j,1)

    End If

    j = j + 1

Loop

执行该程序段后,变量s3的值是(    )

A . "VPO" B . "VPRO" C . "VPOAM" D . "VPROAM"
小杨同学在编写程序过程中给不同的变量取了名字,下列哪个变量名会导致程序行出错(     )
A . kk360 B . Yao C . 51study D . xy_tt
火车调度台是实现火车车厢整理的平台,当相邻2节车厢序号不符合整理要求时,可以对调2节车厢,实现序号顺序调整。相邻2个进行符合目标的交换,和我们学习的冒泡排序思想一致,所以这个调度过程可以用冒泡排序实现。为了提高效率,对冒泡排序做了优化,请完善下列代码:

nums = [3, 1, 2, 4, 5, 6]

k = n - 1

for i in range(n - 1):

   

    for j in range(k):

        if (nums[j] > nums[j + 1]):

            nums[j], nums[j + 1] = nums[j + 1], nums[j]

           

            ex_flag = True

    if (ex_flag):

        break

print(nums)

执行这部分流程,输入a,b 的值分别为60,27,则输出的值为(    )

A . 1 B . 3 C . 6 D . 9
在我们身边有很多信息管理系统如:学生学籍管理系统、选课管理系统等。从问题提出开始,经过开发、使用、维护、修订,直到废掉的过程称为信息系统的生命周期。信息系统的生命周期模

型包括瀑布模型、快速原型模型、螺旋模型、增量模型和送代模型等,其中瀑布模型是从时间角度对软件开发和维护进行分解。该模型规定了一个自上而下,相互衔接的固定次序,如同瀑布流水,逐级下落。(如下图所示)

  1. (1) 请选择合适的选项完善以上的瀑布模型,其中的①②③分别是

    A、编码   B.可行性研究  C.概要设计

  2. (2) 下列属于瀑布模型特点的是(   )(多选)
    A . 定义清楚,应用广泛 B . 随时适应用户需求的变化 C . 相邻两个阶段具有因果关系,紧密相连 D . 方便计划与管理
  3. (3) 以下是王华同学为开发一个小型的社团选课管理系统而绘制的功能层次图,对于瀑布模型,当前属于(   )阶段。

    A . 可行性分析 B . 需求分析 C . 概要设计 D . 详细设计
  4. (4) 请协助王华同学完善题(3)中的“社团选课管理系统”功能层次图,图中的①②③分别是

    A.课程选择  B.课程信息发布 C.学生管理

  5. (5) 以下是王华同学完成的“学生登录”功能界面及功能描述,对于瀑布模型,当前属于(   )阶段。

    A . 编码 B . 需求分析 C . 概要设计 D . 详细设计
  6. (6) 为了实现上述“学生登录”功能模块中的三次试错功能,在编码阶段,王华同学应该优先采用(   )来实现。
    A . 顺序结构 B . 分支结构 C . 循环结构 D . 混合结构