相关试卷

  • 1、有如下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= botton-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
  • 2、对某数组a中的n个元素随机赋0、1或2这三种值之,现按如下算法对数组a从小到大升序排序,设置两个变量:Left记录第一个1的位置,其左侧全是0,Right记录第一个2的前一位置,其右侧全是2。使用i从头到尾查询一遍,根据a(i)的值决定其是否与a(Left)或a(Right)交换,直至i与 Right相遇。

    left=1: right =n: i=1

    Do While i <=right

    If a(i)=0 Then

    tmp= a(left): a(left)=a(i): a(i)= tmp

    left=left+1

    i=i+1

    ElseIf a(i)= 1 Then

    i=i+1

    Else

        ①   

    End If

    Loop

    要实现上述排序算法思想,则横线处代码应该是(  )。

    A、tmp=a(i): a(i)=a(right): a(right)=tmp: right=right -1 B、tmp=a(i): a(i)=a(right): a(right)=tmp: right=right-1: i=i+1 C、i=i-1 D、right=right-1: i=1-1
  • 3、小刘在玩一个数字游戏,给定一个n位正整数(n<=20),根据设定的保留位数,舍去一部分数字,剩下的数字按原次序组成一个最大的新数。例如原数38265083,保留4位,最大数为8683。算法如下:

    ⑴在左边第1位至最后第n个数(从右向左的第n个数)之间,找出最大值,确定新数的最高位;

    ⑵从最大值的下个位置到第n-1个数之间查找最大值,确定新数的第二位。

    ⑶依次类推,确定最终的最大数。

    设计了一个VB程序,在文本框Text1中输入一个n位正整数,在文本框Text2中输入保留的位数,点击“确定”按钮,在文本框Text3中输出保留的最大新数。程序运行界面如图所示。

    (1)、如果输入的原数是3635132,保留4位数字,则输出的新数是
    (2)、实现上述功能的VB代码如下,请在划线处填入合适代码。

    Private Sub Command1_Click()

    Dim a(1 To 20)As String

    Dim ys As String, xs As String        'xs 记录最大的新数

    Dim k As Integer, h As Integer, n As Integer

    Dim i As Integer,j As Integer

    Dim F as Boolean

    xs=" "

    ys=Text1. Text

    n=Len(ys)

    k=Val(Text2. Text)

    F=True

    If ys=" " Or n>20 Or k=0 Or k>n Then

    Label4. Caption="输入的原数或保留位数不符,请重输!"

    F=False

    End If

    For i=1 To n

       ①  

    If a(i)<0" Or a(i)>9" Then

    Label4. Caption="输人的原数不是数字,请重输!"

    Text1. Text=" "

    F= False

    End If

    Next i

    If F= True Then

    h=1

    For i= 1 To k

    For j= h To   ②  

    If a(j)>a(h)Then h=j

    Next j

       ③  

    h=h+1

    Next i

    Text3. Text=xs

    End If

    End Sub

     ② ③ 

  • 4、把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。

    数组元素a(1)至a(5)依次为5,22,28,42,55,在a(3)处分成两段,交换位置后为:

    a(1)

    a(2)

    a(3)

    a(4)

    a(5)

    28

    42

    55

    5

    22

    旋转数组a的最小元素是5。

    数组d(1)至d(5)依次为0,1,1,1,1,在d(5)处分成两段,交换位置后为:

    d(1)

    d(2)

    d(3)

    d(4)

    d(5)

    1

    0

    1

    1

    1

    旋转数组d的最小元素是0。

    小明依据查找算法思想,设计一个查找旋转数组d最小元素的程序,功能如下:运行程序时,利用“添加”按钮Command1和文本框Text1依次输入旋转数组d的值,在列表List1中显示旋转数组,单击“求解”按钮Command2,在标签Label2中显示旋转数组d最小元素值。运行效果图所示,实现该功能的VB程序如下。

    (1)、要使程序运行时,文本框Text1无显示内容,下列方法不能实现该要求的是(单选,填字母:A .在Form_Load事件处理过程中添加语句“Text1.Text="" ”/B .在Command1_Click事件处理过程中添加语句“Text1.Text=""”/C .设计程序界面时,在属性面板设置文本框Text1的Text属性值为空)
    (2)、程序代码中,加框处有错,请改正。

    Dim n As Integer

    Dim d(1 To 100) As Integer     '数组d存储待排序数据

    Private Sub Command1_Click()

    '按旋转数组规则将数据存入数组d中,代码略

    End Sub

    Private Sub Command2_Click()

     Dim mid As Integer, L As Integer, R As Integer

     L = 1: R = n

     mid = L

     Do While d(L) >= d(R)

     If L=R Then'改错

     mid = R

     Exit Do

     End If

     mid = (L + R) \ 2

     If d(L)=d(R) And d(mid)=d(R) Then

    mid =   ⑶         '填空

     Exit Do

     End If

     If d(L) < d(mid) Then

     L = mid

    ElseIf d(mid) < d(R) Then

     R = mid

     End If

     Loop

    Label2.Caption = "最小值为" + Str(d(mid))

    End Sub

     End If

     Next i

    End Function

    (3)、程序代码中,将划线处代码补充完整。
    (4)、程序代码中,虚线框内自定义函数中主要采用的算法是(单选,填字母:A .冒泡排序/B .选择排序/C .顺序查找/D .对分查找)。
  • 5、“旋转数组”过程是指将数组中的元素向右移动k个位置,其中k是非负数。以数组a向右移动3个位置为例,其移动过程有如下两种方法:

    原始数据:

    a(1)

    a(2)

    a(3)

    a(4)

    1

    2

    3

    4

    方法一:

    ①向右旋转1步:

    a(1)

    a(2)

    a(3)

    a(4)

    4

    1

    2

    3

    ②向右旋转2步:

    a(1)

    a(2)

    a(3)

    a(4)

    3

    4

    1

    2

    ③向右旋转3步:

    a(1)

    a(2)

    a(3)

    a(4)

    2

    3

    4

    1

    方法二:

    ①将a(1)值放至旋转3个位置后位置a(4):

    a(1)

    a(2)

    a(3)

    a(4)

    1

    2

    3

    1

    ②将原a(4)值放至旋转3个位置后位置a(3):

    a(1)

    a(2)

    a(3)

    a(4)

    1

    2

    4

    1

    ③将原a(3)值放至旋转3个位置后位置a(2):

    a(1)

    a(2)

    a(3)

    a(4)

    1

    3

    4

    1

    ④将原a(2)值放至旋转3个位置后位置a(1):

    a(1)

    a(2)

    a(3)

    a(4)

    2

    3

    4

    1

    有n个数存储在数组a中,给定一个整数p(1≤p≤n),将数组a的前p个数与后n-p个数分别向右旋转k次。例如数组a的各个数值分别是1,2,3,4,5,6,7,当p=4,k=1时,旋转后的结果为4,1,2,3,7,5,6。小明为此编写了VB程序,功能如下:在文本框Text2、Text3中依次输入p和k的值,单击“旋转数组”按钮Command1后,数组旋转后结果显示在Text4中。程序运行界面如下图所示,请回答下列问题:

    (1)、当文本框Text3中输入内容修改为3时,执行该程序后,a(3)的值为
    (2)、请在划线处填入合适的代码。

    Dim a(20) As Integer

    Const n = 20

    Private Sub Form_Load()

    '随机产生n个[1,100]之间的随机整数,依次存储到a(1)、a(2)、…a(n)中,并在文本框Text1显示,代码略

    End Sub

    Private Sub Command1_Click()

     Dim i As Integer, p As Integer, k As Integer, cnt As Integer, c As Integer, t As Integer

     p = Val(Text2.Text)

     k = Val(Text3.Text)

    i = 1: start = 1:c = a(i): cnt = 1

     Do While cnt<= p      '方法二

    i =    ①  

     t = a(i)

     a(i) = c

     If     ②    Then

     start = start + 1

    i = i + 1

     c = a(i)

     Else

     c = t

     End If

    cnt = cnt + 1

     Loop

     For i = 1 To k      '方法一

     temp = a(n)

     For j =    ③   

     a(j) = a(j - 1)

     Next j

    a(p + 1) = temp

     Next i

     For i = 1 To n

     s = s + Str(a(i))

     Next i

    Text4.Text = s

    End Sub

     ② ③ 

  • 6、(加试题)数字个数统计。编写VB程序,实现如下功能:在文本框Text1中输入仅由ASCII码字符组成的字符串(长度不超过100),单击“数字统计”按钮Command1,在列表框List1中输出字符串中包含的不同数字及其相应的个数,程序运行效果如下图所示。

    (1)、为方便调试,要让程序每次运行时文本框Text1中的初始内容为“ab12*{}78ab12()778ab34”,应修改文本框Text1的属性。
    (2)、实现上述功能的VB程序如下,请在划线处填入合适代码。

    Private sub command1_click()

    Dim a(0 to 9) as integer       ‘数组元素a(i)中存放数字i的个数

    Dim s as string, ch as string

    Dim t as integer

    For i=0 to 9

     a(i)=0

    next i

    s=text1.text

    for i=1 to len(s)

        ①  

    if ch>=“0”and ch<=“9” then

    t=    ②  

     a(t)= a(t)+1

    end if

    next i

    list1.clear

    for i=1 to 9

    if a(i)<>0 then

     list1.additem “数字:”+str(i)+ “,共有”+ str(a(i))+ “个”

    end if

    next i

    end sub

     ② 

    (3)、与上述程序中加框处代码运行效果等价的条件表达式可以是
  • 7、(加试题)编写一个成绩查询程序,输入要查找的分数,输出该分数的名次及同分人数,其算法是:用数组a存放不同的分值,数组m存储相同分数的人数,数组mc存储不同分数的名次。例如,数据库中有一组成绩(已按降序排列):98,95,95,92,90,90,87,按该算法,各数组值如下表所示:

    i

    1

    2

    3

    4

    5

    a

    98

    95

    92

    90

    87

    m

    1

    2

    1

    2

    1

    mc

    1

    2

    4

    5

    7

    程序界面如下图所示,在文本框Text1中输入查询成绩,点击“查找”按钮,若找到,则输出该分数的名次和同分数的人数,若找不到,则输出“查无此分”。

    程序代码如下,请在划线处填入合适的代码。

    Dim n As Integer

    Dim a(1 To 1000) As Integer     ‘存放不同的分数值

    Dim m(0 To 1000) As Integer     ‘存放相同分数的人数

    Dim mc (0 To 1000) As Integer     ‘存放此分数的名次

    Private Sub Form_Load()

    Dim conn As New ADODB. Connection

    Dim rs As New ADODB. Recordset

    Dim tmp As Integer

    Dim s As Integer

    tmp = -1: n = 0

    conn. Connectionstring = “provider=Microsoft. ACE.OLEDB. 12. 0; data source=”& App. Path  & “\mydb. accdb”

    conn. Open

    Set rs. ActiveConnection = conn

    rs.Open "Select * from score"

    mc(0) = 1: m(0) = 0

    Do While Not rs. EOF

    s = rs. Fields (“成绩”)

    If s = tmp Then       ‘当前读入分数与上一个分数相同

    m(n) =    ①    

    Else

    n = n + 1

    a(n) = s

    m(n) = 1

    mc(n) =     ②   

    End If

        ③   

    rs. MoveNext

    Loop

    End Sub

    Private Sub Command1_Click0

    Dim key As Integer, i As Integer, j As Integer, mid As Integer

    key = Val (Text1.Text)

    i = 1: j = n

    mid = (i + j) \ 2

    Do While i <= j And    ④    

    mid = (i + j) \ 2

    If a(mid) < key Then

    j = mid – 1

    Else

    i = mid + 1

    End If

    Loop

    If a(mid) = key Then

    Label2. Caption = “名次: ”+ Str(mc (mid)) + “同分人数: ”+ Str(m(mid))

    Else

    Label2. Caption =“查无此分”

    End If

    End Sub

     ② ③  ④

  • 8、数组d中存放了一组数据如表所示,采用对分查找数组元素值86。第一次查找的数组元素是d[4],第二组查找的数组元素是(  )

    d[1]

    d[2]

    d[3]

    d[4]

    d[5]

    d[6]

    d[7]

    65

    73

    75

    82

    85

    91

    95

    A、d[2] B、d[3] C、d[5] D、d[6]
  • 9、某对分查找算法的部分VB程序如下:

    i=1: j=12: k=0: S=""

    key=Val(Text1.Text) : c= "N" : flag= False

    Do While i <= j And flag = False

      m=(i+j+1)\2: k=k+1

      If key = a(m) Then c= "Y" : flag= True

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

        s=s & Str(a(m))

    Loop

    Text2.Text = s : Text3.Text = c

    数组a(1)到a(12)的值依次为“99,91,85,76,68,61,53,42,34,27,20,13”,执行该程序段后,下列说法正确的是(  )

    A、该程序段只能进行两位正整数的查找 B、在文本框Text1中输入两位任意正整数,则k的值介于1和3之间 C、在文本根Text1中输入76,程序执行后变量i和j的值分别为1和6 D、若文本框Text2中显示了两个正整数,则文本框Text3中显示的内容一定是Y
  • 10、关于对分查找,下列说法正确的是(  )
    A、对分查找的数据必须是有序排列的 B、对分查找的数据类型必须是数值型的 C、顺序查找比对分查找的查找速度快 D、使用对分查找对未排序数据查找时速度较慢
  • 11、某学籍管理系统软件有2万个学生的电子档案(已按学籍号排序),假设从中取出一条记录并与待查项进行比较所花时间为10毫秒,则用对分法在该系统中查找任意一位学生档案最多花费的时间约(  )
    A、10万毫秒 B、20万毫秒 C、130毫秒 D、150毫秒
  • 12、酒店房间管理问题:某酒店房间(房间数小于1000)编号按1、2、3……连续编号,客房经理对没有入住的房间使用如下方法来登记管理。连续的空房间,登记第一个房间的编号和连续的空房间数,比如空房间1,2,6,7,8,10,则登记3条记录,分别为1_2,6_3,10_1。某旅客如果退房,需要把这个房间号也登记进去,共有4中情况需要处理:

    ⑴上靠:若退的房间号为3,则原来登记的记录变为1_3,6_3,10_1;

    ⑵下靠:若退的房间号为5,则原来登记的记录变为1_2,5_4,10_1;

    ⑶上下靠:若退的房间号为9,则原来登记的记录变为1_2,6_5;

    ⑷上下都不靠:若退的房间号为4,则原来登记的记录变为1_2,4_1,6_3,10_1

    根据上述规则,小明编写了相应的VB程序,程序启动时读入空房间数据,并在列表框List1中显示,在文本框Text1中输入退房号,单击“退房”按钮后更新列表框List1中的数据。

    程序界面如下图所示,请回答下列问题:

    (1)、当前登记的记录有3条,分别为2_3,6_2,9_4。某旅客退掉8号房间,则登记的记录将变为
    (2)、实现上述功能的VB程序如下,请将划线处的代码补充完整。

    Const n=1000

    Dim a(0 To n)As Integer     ‘a(i)保存第i条记录的开始房间号

    Dim b(0 To n)As Integer     ‘b(i)保存第i条记录的房间数

    Dim c As Integer, k As Integer, sp As Integer      ‘k为原始记录数

    Private Sub Form_Load()

    ‘程序启动时从数据库中读取原始k条记录,依次存入a(1),b(1),a(2),b(2),…,a(k),b(k),代码略

    ‘为了程序处理方便,虚设下面两条记录

    A(0)=0: b(0)=0: sp=k+1: a(sp )=1000: b(sp)=0

    End Sub

    Private Sub Command1_Click()

    Dim i As Integer, j As Integer

    c=Val(Text1.Text)

    i=1

    Do While a(i)<c

    i=i+1

    Loop

    i=i-1

    ‘以下处理退房登记问题

    If a(i)+b(i)=c Then

    If a(i+1)=c+1Then    ‘处理第3种情况

        ①   

    For j=i+1 To sp-1

    a(j)=a(j+1):b(j)=b(j+1)

    Next j

    sp = sp-1

    Else     ‘处理第1种情况

    b(i)=b(i)+1

    End If

    ElseIf c+1=a(i+1)Then      ‘处理第2种情况

    a(i+1)=c: b(i+1)=b(i+1)+1

    Else     ‘处理第4种情况

    For j=    ②   

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

    Next j

    a(i+1)=c: b(i+1)=1:    ③   

    End If

    List1.Clear

    For i=1 To sp-1

    List1.Addltem"第" & CStr(i)  & "条记录" & CStr(a(i)) & "_" & CStr(b(i))

    ‘CStr函数的作用是将数字转成字符串

    Next i

    End Sub

     ② ③ 

  • 13、二分查找又称折半查找,是一种应用于有序数列的高效查找算法。下列数列中适合二分查找算法的是(  )

    ⑴11 99 5 17 2 39

    ⑵30 52 63 71 78 81

    ⑶67 62 68 6 15 15

    ⑷85 78 59 53 19 18

    A、(3)(4) B、(2)(3) C、(1)(2) D、(2)(4)
  • 14、有如下程序段:

    For i =2 To 3

      For j= 10 To i +1 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

    数组元素a(1)到a(10)的值依次为“66,34,12,59,21,26,18,45,20,16”,经过该程序段“加工”后,数组元素a(1)到a(10)的值依次为(  )

    A、66,12,16,34,18,59,21,26,20,45 B、12,16,18,20,21,26,34,45,59,66 C、66,59,45,34,12,26,21,20,18,16 D、12,16,18,66,34,20,59,21,26,45
  • 15、某查找算法的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
  • 16、下列关于程序设计中查找算法的描述,正确的是(  )
    A、顺序查找和二分法查找都是常用的查找算法 B、二分法查找一定优于顺序查找 C、顺序查找一定优于二分法查找 D、当数据有序时,不适用二分法查找
  • 17、有如下VB程序段:

    Dim a(1 To 10)As Integer

    Private Sub Form_Load()

    a(1)=2: a(2)=3: a(3)=3: a(4)=3: a(5)=3

    a(6)=6: a(7)=7: a(8)=7: a(9)=8: a(10)=9

    End Sub

    Private Sub Command1_Click()

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

    Dim m As Integer, p As Integer

    key=Val(Text1.Text)

    i=1: j=10

    Do While i<=j

    m=(i+j)\2

    If a(m)= key Then

    p=m

    j=m-1

    ElseIf key<a(m)Then

    j=m-1

    Else

    i=m+1

    End If

    Loop

    Text2.Text=Str(p)

    End Sub

    程序运行时,在文本框 Text1中输入3,单击按钮,文本框Text2中显示的内容是(  )

    A、2 B、3 C、4 D、5
  • 18、有如下VB程序段:

    a(1)=2: a(2)=6: a(3)=8: a(4)=9: a(5)=12

    a(6)=15: a(7)=17: a(8)=18: a(9)=22: a(10)=30

    k=Val(Text1.Text)

    i=1: j=10

    Do While i<=j

    m=(i+j)\2

    If a(m)<=k Then

    i=m+1

    Else

    j=m-1

    End If

    Loop

    Text2.Text=Str(a(i))+"←→"+Str(a(j))

    程序运行时,若在文本框Text1中输入5,则文本框Text2中显示的内容是(  )

    A、2←→1 B、6←→8 C、2←→6 D、6←→2
  • 19、有序(非降序)数组A有n个元素,用对分查找算法在数组A中查找key值所在的位置,如果有重复的元素,则显示最早出现该key值的位置。相应的VB程序段如下:

    key = Val(Text1.Text)

    i = 1: j = n

    Do While i <= j

     m = (i + j) \ 2

     If a(m) > key Then

     j = m - 1

     ElseIf a(m) < key Then

     i = m + 1

     Else

     If  Then

     j = m - 1

     Else

     Label2.Caption = Str(key) + "的起始位置是" + Str(m)

     Exit Do

     End If

     End If

    Loop

    If i > j Then

     Label2.Caption = "找不到" + Str(key)

    End If

    要使程序实现上述算法思想,则方框中的语句是(  )

    A、a(m - 1) = key B、a(m) = key C、m - 1 >= 0 And a(m - 1) = key D、m - 1 >= 0 And a(m) = key
  • 20、(加试题)有1个升序排列的数组a(a(1)~a(n),n≥3),从左到右相邻两个元素的差值(后一个元素值减去前一个元素值)先由小到大、再由大到小,且相邻两个差值不相等,为了查找相邻两个元素的最大差值,小李编写的VB程序段如下:

    i = 1 :j = n

    Do While i + 1 < j

    m = (i + j) \ 2

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

    Else

    End if

    Loop

    Label1.Caption="相邻两个元素的最大差值是" + Str(a(j) - a(i))

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

    A、① i = m ② j = m B、① i = m② j = m - 1 C、① i = m + 1② j = m – 1 D、① i = m + 1② j = m
上一页 1300 1301 1302 1303 1304 下一页 跳转