相关试卷

  • 1、小王编写了一个实现文字查找替换功能的VB程序,运行界面如图所示。文本框Text1显示原文内容,Text2中输入查找内容,Text中输入替换内容,单击“全部替换”按钮 Command1后,Text4显示查找替换的结果Text5中显示替换的次数,Text6显示“查找内容”在原文中的起始位置。

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

    Private Sub Command1_ Click ( )

      Dim s As String, result As String, pos As String

      Dim count As Integer, i As Integer

      i =1: count =0

      result = “”: pos =“”

      Do While i < = Len(Text1. Text)

        s = Mid(Text1.Text, i, Len(Text2. Text))

        If s = Text2. Text Then

          result = result + Text3. Text

          count = count + 1

          pos =           ‘ ①

          i = i + Len(Text2. Text)

        Else

                 ‘ ②

          i=i+1

        End if

      Loop

      Text4 Text result

      Text5. Text =Str(count)

      Text6 Text = pos

      End Sub

     ②

  • 2、【加密与解密问题】某数据加密方法描述如下:

    ⑴以字节为单位进行加密处理;

    ⑵将1个字节的8位二进制数分割成前4位与后4位两个二进制数;

    ⑶分别将上述两个4位二进制数转换为十进制数;

    ⑷将每个十进制数转换为1个加密字符,对应的“密码表”如下:

    值(十进制)

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    加密字符

    I

    l

    i

    k

    e

    C

    H

    N

    p

    o

    s

    t

    c

    a

    r

    d

    小明按照上述方法,设计了一个字符串(仅包含ASCⅡ字符)加密的VB程序,功能如下:单击“加密”按钮Command1,程序依次将文本框Text1中每个字符的ASCⅡ码值作为1个字节转换为两个加密字符,连接这些加密字符,最后在文本框Text2中输出加密结果。下表展示了字符串中一个字符的加密过程:

    实现上述功能的VB程序如下:

    程序运行效果如图所示。

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

    Private Sub Command1_Click ( )

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

    Dim a As Integer    ‘存储加密前字符的 ASCII码

    Dim b1 As Integer, b2 As Integer    ‘分别存储分割、转换后的两个十进制数

    s = Text1. Text

    n = Len (s)

    For i = 1 To n

      a =     ①     

      b1 = a\16

      b2 =a Mod 16

      ss= ss + Code2 Char(b1) + Code2 Char(b2)

      Text2. Text=ss

    Next i

    End Sub

    ‘十进制值转换为加密字符的函数

    Function Code 2 Char(c As Integer) As string

    Dim s As String

    s = “IlikeCHNpostcard”

    Code2Char =     ②     

    End Function

     ② 

    (2)、若将“密码表”中值为“0”对应的加密字符“I”改成“i”,加密后的密文可能无法解密,原因是
  • 3、【约瑟夫问题】猴子选大王。有n(n≤100)猴子举行选大王大会,由于大家谁也不服谁,因此有猴子提议使用玩游戏的方式来选出大王。首先将n只猴子进行随机编号(编号为1到n,猴子编号不重复),然后产生一个随机数k,游戏规则如下n只猴子按编号从小到大的顺序围成一圈,并从编号为1的猴子开始报数(1,2,3…),报到k的猴子出圈(出圈即被淘汰);接着再由出圈的猴子的下一只猴子重新开始报数(1,2,3…),报到k的猴子又出圈,如此继续,直到圈中只剩下一只猴子,它就是猴子大王。要求依次输出出圈的猴子的编号及猴子大王的编号。

    例如n=8,k=6,则依次出圈的猴子的编号为6、4、3、5、8、7、2,最后剩下的猴子的编号为1,即猴子大王的编号为1。

    程序运行时,在文本框Text1中输入猴子的总数n,单击“产生随机数k”按钮Command1将生成一个随机整数k(1≤k≤n),并在标签 Label3中显示k的值,单击“选大王”按钮Command2后,将在文本框Text2中显示依次出圈的猴子的编号,在标签Label6中显示猴子大王的编号。程序运行结果如图所示。

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

    Dim k As Integer, n As Integer

    Private Sub Command1_Click ( )

      Randomize

      n= Val(Text1. Text)

      k = Int (Rnd n) + 1

      Label3. Caption Str(k)

    End Sub

    Private Sub Command2_Click ( )

      Dim a (1 To 100) As Integer    ‘a(i) = 1 表示编号为i的猴子在圈上,a(i) = 0表示出圈

      Dim b (1 To 100) As Integer    ‘ 数组元素b(i)=x,表示第i只出圈的猴子的编号为x

      Dim i As Integer, st As String, j As Integer

      Dim p As Integer, sum As Integer    ‘ p表示出圈的猴子数,sum表示报数的数值

      For i = 1 To n

        a(i) = 1

      Next i

      p = 0

      j = 0

      Do While p <> n-1

              ①    

        Do While sum < k    ‘ 依次报数,直到报到k为止

          j=j+1

          If j > n Then j = 1    ‘ 报数至最后时,将重头继续报

          sum = sum + a(j)

        Loop

        a(j) = 0: p =p+1

              ②    

      Loop

      For i=1 To p

        st= st str(b(i)

      Next i

      Text2. Text = st

      i=1

      Do While a(i) <> 1

        i=i+1

      Loop

      Label16. Caption =     ③    

    End Sub

     ② ③ 

  • 4、【排名次问题】小王编写了一个依据成绩计算名次的VB程序,成绩为0到100之间的整数。算法的基本思想:先统计每个分数的个数,然后按照分数从高到低依次计算每个有效分数(该分数的个数不为0)对应的名次分数相同时名次并列。最高分为第1名,该分数的名次与个数之和为下一个有效分数的名次,以此类推。程序用数组A存放每个分数对应的个数,数组B存放每个分数对应的名次。例如,下表中最高分100有2个,并列第1名,则分数96的名次为分数100的名次加上分数100的个数,即第3名。

    分数

    100

    99

    98

    97

    96

    95

    94

    0

    个数

    (A数组)

    2

    0

    0

    0

    1

    0

    3

    0

    名次

    (B数组)

    1

    3

    4

    程序运行时,学生数据显示在列表框List1中,单击“计算”按钮Command1,计算结果显示在列表框List2中,程序运行界面如图所示。

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

    (1)、如表所示,若分数93的个数为2,则该分数对应的名次为
    (2)、请在划线处填入合适的代码

    Dim sName (1To50) As string    ‘ 存放学生姓名

    Dim sScore (1To50) As Integer    ‘ 存放学生分数

    Dim recCount As Integer    ‘ 存放学生人数

    Private Sub Form_Load ( )

    ‘ 本过程从数据库中读取学生数据,存储在相应的变量中,并在List1中显示

    ‘ 代码略

    End sub

    ‘ 整数转换成长度固定的字符串

    Function ads (x As Integer, n As Integer) As string

    Dim sx As String, nx As Integer, i As Integer

    sx = Str (x):nx = Len (sx)

    For i =1 To n-nx

      sx = “”+ sx

    Next i

          ①     

    End Function

    Private Sub Command1_Click ( )

    Dim A (0 To 100) As Integer    ‘存放每个分数的个数

    Dim B (0 To 100) As Integer    ‘存放每个分数的名次

    Dim mc As Integer, score As Integer, i As Integer

    For i = 0 To 100

      A(i) = 0

    Next i

    For i = 1 To recount ‘ 计算每个分数的个数

           ②      

    Next i

    mc = 1

    For i = 100 To 0 step -1    ‘ 计算每个分数的名次

      If A(i) <> 0 Then

        B(i) = mc

             ③      

      End If

    Next i

    List2. clear

    List2. AddItem “姓名  分数  名次  ”

    List2. Additem “------------------------------”

    For i = 1 To recCount

      score = sScore(i)

      mc = B (sScore(i))

      List2. AddItem sName(i) + ads ( score,5) + "第" + ads(mc,3) + "名”

    Next i

    End sub

     ② ③ 

  • 5、【最值,最值区间问题】进入2016年7月以来,浙江省气温连续高热,为了观察气温的变化情况,小明用VB编写了一个连续高温天数的统计软件。小明采集了杭州市7-8月的每日最高气温,并存放在 Access数据中。程序运行时,读取日期和最高气温并显示在列表框List1中,在文本框Text1中输入温度值,单击“统计”按钮Command1,程序自动统计在该温度值及以上的最长连续天数,并显示在Text3中,同时在Text2中显示日期区间,运行界面如图所示。

    实现上述功能的VB程序如下,在划线处填入合适的代码。

    Dim rq (1 To 100) As String    ‘ 存放日期

    Dim qw (1 To 100) As Integer    ‘ 存放最高气温值

    Dim n As Integer    ‘ 总天数

    Private Sub Form Load ( )

    ‘ 读取数据库内容,其中日期数据存放在数组rq中,最高气温数据存放在qw中,第i个日期保存在rq(i)中,对应的气温保存在qw(i)中,并显示在列表框List1中

    ‘代码略

    End sub

    Private Sub Command1_Click ( )

    Dim ntempend As Integer    ‘ 记录当前结束日期的下标

    Dim max As Integer    ‘ 记录最大连续天数

    Dim nend As Integer    ‘ 记录最大连续天数下的结束日期的下标

    Dim ncount As Integer    ‘ 统计连续天数

    Dim tjqw As Integer    ‘ 存放输入的温度

    tjqw = Val (Text1. Text)

    ncount = 0

    max =0

    For i = 1 To n

      If      ①      Then

        ncount = ncount + 1

        ntempend = i

      Else

        ncount = 0

      End If

      If max < ncount Then

        max = ncount

              ②    

      End If

    Next i

    If max <> 0 Then Text2. Text =       ③       &“-” rq(nend)

     ② ③ 

  • 6、【排序算法的应用3】某排序算法思想如下:若有1个桶,编号为0~10,随机产生多个整数,每产生一个整数时,就在以该整数为编号的桶中放一面小旗子,最后只要按顺序数每个桶中有几面小旗子,就能得到这几个整数的有序排列。例如2号桶中有1面小旗子,表示2出现了一次;3号桶中有1面小旗子,表示3出现了一次;5号桶中有2面小旗子,表示5出现了两次;8号桶中有1面小旗子,表示8出现了一次,按桶的编号顺序读出旗子数量,没有旗子的桶略过,得到有序整数“2,3,5,5,8”。

    为此,小李编写了一个VB程序,功能如下:运行程序,窗体加载时随机产生6个[0,9]内的随机整数,并在列表框List1中依次显示排序前数据,单击“排序”按钮Command1,在列表框List2中显示经过上述排序算法后的数据。运行结果如图所示。

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

    Dima (10) As Integer ‘数组a表示桶的编号,如a(0)表示第0号桶

    Private Sub Command1_Click ( )

    Dim i As Integer, j As Integer

    For i = 0 To 10

      For j = 1 To      ‘①

        List2. AddItem CStr(i)

      Next j

    Next i

    End Sub

    Private Sub Form_Load ( )

    Dim i As Integer

    Randomize

    For i = 0 To1 0    ‘将数组初始化为0

      a(i) = 0

    Next i

    For i = 1 To 6     ‘产生6个[0,9]内的随机数

      t = Int (Rnd*10)

      a(t) =          ‘② 第t号桶中小旗子数量加1

      List1. AddItem CStr(t)

    Next i

    End Sub

     ② 

  • 7、【排序算法的应用2】双关键字排序:在Excel中可采用双关键字排序,即先按主关键字排序,如主关键字相同再按次关键字排序。小王学习了冒泡排序后,编写了一个VB程序模拟该排序过程。功能如下:在列表框List1中显示排序前数据(存储在数组a、b中),单击“排序”按钮 Command1后,按主关键字数组a升序和次关键字数组b升序排序,排序后的数据在列表框Lis2中显示。程序运行界面如图所示。

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

    Const n = 10

    Dim a(l To n) As Integer, b(1 To n) As Integer

    Private Sub Form_Load

    ‘ 各产生10个随机整数存入数组a、b,并在列表框List1中显示

    ‘ 代码略

    End sub

    Private Sub Command1_Click ( )

    Dim i As Integer, j As Integer

    i = 1

    Do While i < = n-1

          ‘①

      Do While > = i+1

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

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

          temp = b(j): b(j) = b(j-1): b(j-1) = temp

           ‘②

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

          temp = b(j): b(j) = b(j-1): b(j-1) = temp

        End if

        j = j-1

      Loop

      i = i+1

    Loop

    For 1 =1 To n

      List2. AddItem Str(a(1)) + “” + str(b(i))

    Next i

    End sub

     ② 

  • 8、【排序算法的应用1】小明编写了一个数据插入程序。程序输入一个数字,将该数字插入一列有序数据:-5,3,4,12,20,45,70,并使数据序列保持有序。设计的算法是从前往后找位置插入。

    程序运行界面如图所示。

    实现上述算法的VB程序如下,在划线处填写恰当的语句。

    Private Sub Command1_ Click ( )

    Dim a (1 To 8) As Integer

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

    List1. Clear

    List2. Clear

    a(1) = -5: a(2) = 3: a(3)= 4: a(4) = 12: a(5) = 20: a(6) = 45

    a(7) = 70

    For j = 1 To 7

      List1.AddItem Str (a(j))

    Next j

    x = Val(Text1. Text)

    Do While x > a(i) And i < 8    ‘ 找x的插入位置

           ①    

    Loop

    For j = 8 To i + 1 step-1    ‘ 移动数据

           ②    

    Next j

    a(i) = x

    For j = 1 To 8

    List2. AddItem str (a(3))

    Next j

    Label1. Caption =“插入的位置是”str(i)

     ② 

  • 9、【游戏问题】在某打牌游戏中,一开始每个玩家各有17张牌,牌型从小到大分别为“3~10、J、Q、K、A、2”,每种牌最多4张,现在按指定规则的顺序打牌,打完为止。规则如下:

    ⑴先打顺子牌(顺子指连续的5个及以上牌型如45678,顺子最大到A),若有多个顺子,先长后短,长度相同按先小后大的顺序打出。

    ⑵然后按4张、3张、2张、1张的顺序出牌,同一个牌型从小到大。

    小刘依据上述算法设计了VB程序,其中牌型“1”用数字“0代替表示,运行界面如图所示,程序代码如下,请回答下列问题。

    (1)、若初始牌型为344445566790JQKA2,第2次出的牌为
    (2)、请在划线处填入合适代码,使程序完整。

    Private Sub Command1_ Click ( )

    Dim i As Integer, j As Integer

    Dim aa (1 To 13) As Integer, max As Integer

    Dim t As Integer, last As Integer

    Dim sa As String, stem As string

    Dim flag As Boolean

    Const s = “34567890JQKA2”     ‘为方便计算,牌10用0代替

    ‘ 在标签1abe11显示初始牌型,洗牌后数组a各元素分别存储牌型3~2的数量

    ‘ 代码略

    t=17    ‘刚开始牌有17张

    Do While t > 0    ‘打牌

      flag = True

      Do While flag     ‘寻找牌中有没有顺子牌

        max = 0:k = 1:flag False

        For i=1 To 11

          If     ①      Then

            k = k+1

            If k > max Then

              max = k

              last = i+1     ‘ 记录连续牌的最后一张

            End If

          Else

            k=1

          End If

        Next i

        If max > = 5 Then    ‘ 有顺子牌,把最长的这把顺子打出来

          flag = True: sa = “”

          For j =      ②        To last

            stem = Mid (s, j, 1)

            sa = sa + stem + “”

            aa(j)= aa(j)-1

          Next j

          List1. AddItemsa     ‘ 顺子在列表框显示

          t = t-max

          End If

      Loop

      For i = 1 To 13      ‘ 出4个一样的牌

        If aa(i) = 4 Then

          stem = Mid (s, i, 1)

          List1. AddItemstem + stem + stem + stem

          aa(i) = 0

                ③      

        End If

      Next i

       ‘ 3张、2张、单张出牌,具体代码略

    Loop

    End sub

     ② ③ 

  • 10、如图a所示的“学生信息”数据表中存储着全校学生的“7选3”选课信息杰克同学编写了一个VB程序,用于查询每个同学的选考科目,程序运行界面如图b所示。

    程序运行时,在文本框Text1中输入学号,单击“开始查询”按钮(Command1),在“查询结果”区域显示查询到的学生姓名和选考科目数据。

    学校共有n名学生,数组a、b分别保存了所有学生的学号和姓名信息。数据库数据按学号从小到大排列,第i个学生的学号保存在a(i),对应的姓名保存在b(i),该学生的选考科目保存在c(i)中。

    实现上述算法的VB程序如下,在程序划线处填入适当的代码,把程序补充完整。

    Dim n As Integer, a( 1000 ) As String

    Dim b ( 1000 ) As String

    Private Sub Command1_Click ( )

    Dim x As String, pos As Integer

    Dim conn As New ADODB Connection, rs As New ADODB. Recordset

    conn ConnectionString = “provider = Microsoft. ACE OLEDB. 12.0; data source = “ & App. Path &" \students. accdb”

    conn. Open

    Set rs. ActiveConnection = conn

    rs.Open “学生信息”

    n = 0    ‘考生数初始化

    Do While Not rs. EOF

      n=n+1

      a(n) = rs Fields (0): b(n) = rs Fields (1): c(n) = rs Fields(2)

           ①      

    Loop

    x= Text. Text

         ②     

    If pos > 0 Then

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

    Else

      Text2.Text= “找不到” : Text3.Text =“”

    End if

    End Sub

    Function Search(Key As string) As Integer

    Dim i As Integer, j As Integer, m As Integer

    i = 1: j = n: Search = 0

    Do While i < = j

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

      If Key = a(m) Then

             ③      

        Exit Function

      ElseIf a(m) > Key Then

        j = m-1

      Else

        i=m+1

      End If

    Loop

    End Function

     ② ③ 

  • 11、小张为了处理2015年中国主要城市的GDP数据,他把2015年中国主要城市的GDP数据存储在数据库文件gdp. accdb中。他设计了一个 Visual Basic程序,程序运行效果如图所示。

    在界面的左侧列表框List1中显示各城市GDP数值,单击“按人均GDP排序”按钮Command1,在右侧列表框List2中显示排序完成后的结果(按人均GDP值从高到低排序)。

    实现上述功能的VB代码如下:

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

    Dim conn As New ADODB Connection, rs As New ADODB. Recordset

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

    Dim ts As string

    Dim a (1 To 200) As Integer, c (1 To 200) As String

    Dim g (1 To 200) As Long, p (1 To 200) As Long

    Private Sub Form Load ( )

    conn ConnectionString = “Provider = Microsoft. ACE OLEDB.12.0; DataSource =“& App. Path &”\gdp. accdb”

    conn. Open

    Set rs ActiveConnection =     ①      

    rs. Open “SELECT * FROM dGDP”

    n = 0     ‘I处代码

    Do While Not rs EOF

      n = n+1

      a(n) = rs. Fields ("GDP排名"). Value

      c(n) = rs. Fields ("城市"). Value

      g(n) = rs Fields ("GDP"). Value

      p(n) = rs, Fields ("人均GDP"). Value

      List1 AddItem Str(a(n)) +“”+ c(n)+“”+Str(g(n)) +“”+Str(p(n))

      rs.MoveNext

    Loop

    rs. Close

    conn. Close

    Set rs = Nothing

    Set conn = Nothing

    End sub

    Private Sub Command1_Click ( )

      For i = 1 To n-1

        For j =   ②   To n

          If p(i) < p(j) Then

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

          ts = c(i): c(i) = c(j): c(j) = ts

          t = g(i): g(i) = g(j): g(j)=t

          t = p(i): p(i) = p(j): p(j)=t

        End If

      Next j

    Next i

    List2. Clear

    For i =1 To n

      List2 AddItem Str(a(1))+” ”+c(i)+” “+ Str(g(1))+” ”+str(p(i))

    Next i

    End Sub

     ② 

    (2)、若I处代码n=0改为n=1程序运行结果将不正确,其原因是
  • 12、某老师用VB设计了一个学生7选3的选课查询系统,学生选课信息存储在数据库文件“student. accdb”的“data”表中,数据表及选课查询系统程序运行界面如图所示。

    程序功能:在文本框Text1中输入课程名称,单击“查询”按钮Command1,在列表框List1中显示选择该科目的学生信息。如果没找到在列表框List1中显示“该科目没人选择!”。按此要求将程序补充完整。

    Private Sub Command1_Click ( )

    Dim conn As New ADODB Connection

    Dim rs As New ADODB. Recordset

    Dim h(1 To 40) As String, m(1 To 40) As String

    Dim n As Integer

    conn Connectionstring = "provider = microsoft. ACE OLEdB. 12.0; data source ="+ App. Path + “\       ①       “

    conn. Open

    Set rs, ActiveConnection conn

    strsql ="select xh, xm from       ②        where km = ‘ “ & Text1. Text &“ ‘ “

    rs Open strsql

    List1. Additem "学号" + "姓名”

    Do While Not rs EOF

      n = n+1

      h(n)= rs Fields ("xh")

      m(n) =      ③       

           ④     

    Loop

    If n=0 Then

      List1. AddItem “该科目没人选择!”

    Else

      For i =1 To n

        List1.AddItem h(i) &” ” & m (i)

      Next i

    End If

    rs Close

    conn. Close

    Set rs = Nothing

    Set conn = Nothing

    End Sub

     ② ③ ④ 

  • 13、以下VB代码片段用于从数据库中读取数据:

    Dim conn As New ADODB Connection

    Dim rs As New ADODB. Recordset

    conn ConnectionString =“Provider = Microsoft. ACE. OLEDB. 12.0; DATA Source =" & App. Path &"\ data accdb”

    Set rs.ActiveConnection = conn

    rs. Open “select * from table”

    n = 0

    Do While Not rs EOF

      n=n+1

      rs.MoveNext

    Loop

    下列对于以上代码的理解正确的有(  )

    ①连接的数据库文件名是“data”

    ②“ConnectionString”是conn对象的属性值

    ③查询的数据表名称是“table”

    ④程序运行后,变量n的值表示该数据表中记录的总数

    ⑤省略语句“rs. MoveNext”,程序也可以正常运行

    A、①②③④ B、②③④ C、③④⑤ D、③④
  • 14、通过ADO的 Recordset对象实例rs打开的记如图所示。当前是第3条记录,要使用 Fields集合返回第2个字段的值,以下代码正确的是(  )

    A、a(3) = rs.Fields (2) B、a(3) = rs. Fields (1) C、a(3)= rs. Fields(xh) D、a(3)= rs. Fields(“xm”)
  • 15、关于Visual Basic程序与数据库的连接,下列法正确的是(  )
    A、“Select * from info” 中的“info”是数据库文件名 B、rs.MoveNext中的MoveNext是记录集对象rs属性 C、rs. Fields (1)读取的是当前记录的第1个字段内容 D、若记录集为空,则该记录集的EOF属性值为true
  • 16、VB调Access用数据库一般使用如下程序代码:

    Dim conn As New ADODB Connection

    Dim rs As New ADODB. Recordset

    conn. ConnectionString ="Provider = Microsoft. ACE OLEDB. 12.0; DATA Source=" & App. Path &" \student. accdb"

    conn. Open

    rs ActiveConnection = conn

    rs Open "select * from score"

    n = 0

    Do While Not rs. EOF

      n = n+1

      a(n) = rs Fields("name")

      b(n) = rs Fields("score")

      rs.MoveNext

    Loop

    对以上代码的分析,不正确的是(  )

    A、student.accdb数据库中有一张数据表,名为ore B、ActiveConnection是conn对象的一个属性 C、b数组读取了数据表中的score字段的值 D、程序运行结束,变量n存储了数据表中的总录数
  • 17、在VB中连接并读取Access数据库文件通常使用以下代码:

    Dim conn As New ADODB Connection

    Dim rs As New ADODB. Recordset

    Dim n as Integer

    Private Sub Form_Load ( )

    conn. ConnectionString ="Provider= Microsoft. Ace. OLEDB. 12.0;

    data source =" + App. Path + " \data \data. accdb"    ‘ 此处内容在同一行中,因印刷排版限制而换行

    conn. Open

    sqI = “select * from student”

    Set rs. ActiveConnection = conn

    rs. Open sql

    n=0

    Do while Not rs. EOF

      Call read ( )

      n=n+1

      rs. MoveNext

    Loop

    End sub

    sub read ( )

      List1.AddItem rs ("name")

    End sub

    运行上述程序,以下说法不正确的是(  )

    A、当前读取的数据库文件为data目录下的data.acdb B、数据库中存在一个名为student的数据表 C、List1列表框中将显示所有name字段的值 D、当前读取的数据表中总记录数为n-1
  • 18、有100个大小、形状一样的玻璃球,其中有1个玻璃球的质量轻于其他99个玻璃球,如何用一台无砝码的天平,以最快的速度找出这颗轻玻璃球?运用“三分筛选”法来模拟“寻找”这个玻璃球的算法如下:

    步骤1:如果待筛选的玻璃球个数小于或等于,则认定已经找出了这颗玻璃球(认定方法参照步骤2中描述),停止筛选,并输出筛选总次数;否则,重复执行步骤2。

    步骤2:按编号依次将玻璃球均分成3份,如果有多余的则放入第3份中。比较第1、2份的玻璃球质量:

    ①如果第1份等于第2份的质量,则选取第3份的玻璃球作为下一次筛选的对象;

    ②如果第1份小于第2份的质量,则选取第1份的玻璃球作为下一次筛选的对象;

    ③如果第1份大于第2份的质量,则选取第2份的玻璃球作为下一次筛选的对象。

    重复执行步骤1。

    例如:第1次筛选的小球编号区间是1~100,均分成3份的待称重小球编号分别是1~33、34~66、67~100;第2次则选取以上3份的其中一份进行再筛选、再均分,……,直至找到。

    解决上述问题的VB程序功能如下:运行程序,在列表框List1中显示100组数据,每组数据分别代表每个编号及对应的小球质量(其中有且只有一个小球的质量与其他小球不同),单击“查找”按钮 Command1,在列表框List2中显每次筛选的编号区间和完成筛选的总次数。程序运行界面如图所示。

    (1)、如果编号为88的小球是较轻的,按照题中给定算法,到此小球需经历的筛选次数是
    (2)、实现上述功能的VB程序如下。请在划线处填入合适的代码。

    Const maxn = 100

    Dim a (1 To maxn) As Integer

    Dim w (1 To 2) As Integer     ‘ 数组w用来存储第1份和第2份小球的质量

    Private Sub Form Load ( )

    ‘ 此处代码用来模拟产生100个小球的质量,分别存储在数组元素a(1)~a(100)中

    ‘ 其中只有1个小球的质量为8,随机存储在数组a的某元素中,其余质量均为10

    ‘ 此处代码略

    End Sub

    Private Sub Command1_Click( )

    Din 1eft As Integer, right As Integer     ‘ left为起始编号, right为结束编号

    Dim s As Integer, C As Integer     ‘s 为每次查找的区间长度

    left = 1:right = maxn

    c = 1:s = right:i = 0

    List2 AddItem Str(i+1) +"---->” + Str(maxn)

    Do While right - left > =3

      w(1) = o:w(2) = 0:k =1

      i = left

      s =       ①    

      Do While i < = (s \3)*2 + left -1

    ‘Do语句用于将待筛选的数据进行区域划分

        w(k) = w(k)+a(i)

        If i = (s\3)*k+ left -1 Then k = k+1

        i = i+1

      Loop

      If w(1) = w(2) Then

        left = left + (s\3)*2

      ElseIf w(1) < w(2) Then

                ②     

      Else

        right = left+(s\3)

        left =s\3+ left

      End If

              ③     

      List2. AddItem Str (left) & ”---->” & str(right)

    Loop

    List2. AddItem "经过”+s tr(c) +" 次后找到”

    End sub

     ② ③ 

  • 19、数组a中存储的是左右交替上升的n个正整数,如下表所示:

    a(1)

    a(2)

    a(3)

    a(n-2)

    a(n-1)

    a(n)

    3

    25

    38

    55

    31

    12

    依据对分查找思想,设计一个在数组a中查找数据key的程序,实现该功能的VB程序如下,但加框处代码有错,请改正

    Private Sub Command1_Click( )

    Const n = 6

    Dim a (1 To n) As Integer, flag As Boolean

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

    ‘读取一组正整数,按上述规则存入数组a中

    ‘代码略

    key = Val(Text1. Text)

    i = 1

    j = (n+1) \2

    flag= False

    Do While     And Not flag     ‘①

      m = (i+j) \2

      If key = a(m) Then

        flag= True

      ElseIf key < a(m) Then

        j = m-1

      Else

        i = m+1

    Loop

    If Not flag And j > 0 Then

      m =       ‘②

      If key = a(m) Then flag = True

    End If

    If flag Then

      Text2.ext = str(m)

    Else

      Text2.Text= “找不到”

    End if

    End sub

    ①加框处应改为

    ②加框处应改为

  • 20、“轮转后有序数组(Rotated Sorted Array)”是取有序数组中某一个数为分割点,将分割点之前的所有数都轮转到数组的末尾所得的数组。比如7,11,13,17,2,3,5就是一个轮转后有序数组,原有序数组中的子串{2,3,5}被轮转到了数组的末尾处。对于一个轮转后有序数组arr也可以进行对分查找,算法思路如下(以升序为例):每次根据查找的左侧位置L和右侧位置R求出中间位置M,M左边[L,M]和右边[M+1,R]这两部分中至少有一个是有序的(可根据中间位置数据和边界数据的大小关系进行判断)。

    arr[M]和待查找数据key比较:

    ①arr[M]= key,返回M的值;

    ②若M位置的右侧有序,当待查找数据在右侧时则下次在右侧查找,否则在M左侧查找;

    ③若M位置的左侧有序,当待查找数据在左侧时,下次在左侧查找,否则在M右侧查找。

    (1)、对轮转后有序数组{7,1,13,1,2,3,5}使用函数Search( )查找key值3,则查找次数为
    (2)、以下VB程序实现了对轮转后有序数组arr进行分查找的过程,如果查询成功,返回M值,查询失败则返回-1。请补充程序中划线处的代码。

    Function Search (key As Integer, L As Integer, R As Integer) As Integer

        ①           ‘填写合适的代码

    Do While L < R And Search =-1

      M=(L+R)\2

      If arr(M) = key Then

        Search = M

      Else

        If     ②    Then      ‘填写合适的代码

          If arr(L) < = key And key arr(M)Then

            R=M-1

          Else

            L=M+1

          End If

        Else

          If        Then     ‘填写合适的代码

            L=M+1

          Else

            R = M-1

          End if

        End if

      End If

    Loop

    End Function

上一页 1380 1381 1382 1383 1384 下一页 跳转