相关试卷

  • 1、采用如下选择排序算法对数组a中的5个数据“23,6,98,65,2”按从小到大的顺序进行排序。

    For i =1 To 4

      k=i

      For j = i+1 To 5

        If a(j) < a(k) Then k=j

      Next j

      If i <> k Then

        t=a(i):a(i) = a(k):a(k)=t

      End If

    Next i

    整个排序过程中,数组中的数据比较次数和交换次数分别是(  )

    A、10,3 B、10,4 C、15,3 D、15,10
  • 2、小刘在研究n个数的冒泡排序算法,发现可以从两个方面进行优化:

    1)在每遍冒泡过程中,若最后一次交换的是last与last-1位置的数,则last位置之前的相邻数据均已有序。进行下一遍冒泡,无序区域设置为[last,n],每一遍排序均可能使当前的无序区域缩小。

    2)若在某一遍排序中没有数据交换,说明待排序数据都已经有序,冒泡排序过程可在此遍排序后结束。因此可以引入一个变量lag,记录在每遍排序过程中是否发生了交换。

    小刘按上述方法设计了一个冒泡优化VB程序功能如下:单击“生成数据”按钮 Command1后,随机生成一组无重复的两位整数存入数组a,并显示在列表框List1中。单击“排序”按钮Command2后,将数组a中的数据进行降序排序,排序后的数据显示在列表框List2中,排序过程中实际的冒泡遍数显示在Label3中。程序运行界面如图所示。实现上述功能的VB程序如下,回答下列问题。

    (1)、若按优化后的冒泡排序算法,数据28,15,10,8,12进行降序排序,冒泡的遍数是(填数字)。
    (2)、在划线处填入合适的代码。

    Dim a (1 To 20) As Integer

    Private sub command1_Click ( )    ‘ 随机生成不重复的两位数

    Dim i As Integer, j As Integer

    List1, Clear : List2. Clear

    Randomize

    For i = 1 To 20

      a(i) = Int (Rnd*90) + 10

      For j = 1 To i-1

        If     ①       Then i =i-1:Exit For

      Next j

    Next i

    For i=1 To 20

      List1.AddItem Str(a(i))

    Next i

    End Sub

    Private Sub Command2_ Click ( )

    Dim flag As Boolean, i As Integer, j As Integer

    Dim temp As Integer, num As Integer, last As Integer

    num = 0 : last = 1

    flag= True

    Do While flag=True

             ②     

      For j = 20 To last +1   Step -1

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

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

                 ③      

          flag = True ' 有交换发生

        End if

      Next j

      num = num +1

    Loop

    For i =1 To 20

      List2 AddItem Str(a(1)

    Next i

    Label13. Caption = "本次排序的冒泡遍数为:" & str(num)

    End sub

     ② ③ 

  • 3、小吴为了探究冒泡排序过程中数据的“移动”情况,编写了一个VB程序,功能如下:在列表框List1中显示排序前数据(存储在数组a中),在文本框Text1中输入初始位置(即下标值),单击“排序”按钮 Command1后,标签 Label1中显示指定初始位置的数据在排序过程中的位置变化情况,排序后的数据显示在列表框List2中程序运行界面如图所示。

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

    Dim(1 To 8) As Integer

    Dim As Integer

    Private Sub Form Load ( )

    ‘ n=8,排序前的8个数据存储在数组a中,并在列表框List1中显示

    ‘ 代码略

    End Sub

    Private Sub Command1_Click ( )

      Dim i As Integer, As Integer, k As Integer

      Dim pos As Integer    ‘变量pos存储指定数据的位置(即下标值)

      Dims As String     ‘变量s存储pos变化情况

      s = Text1.Text

      pos = Val (Text1. Text)

      For i =1 To n-1

      For j = n To i + 1 Step -1

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

               ‘(1)

          a(1)=k

           ‘如果pos位置的数据参与交换,则更新pos值,记录pos变化情况

          If pos = j Then

            pos = j-1

            s = s + “→" + Str (pos)

                    ‘(2)

           pos = j

           s=s+"→"+ Str (pos)

            End if

          End if

        Next j

      Next i

      Label1, Caption= "位置变化情况:" +s

      For i= 1 To n

        List2 AddItem Str(a(i))

      Next i

    End Sub

    加框(1)处代码应改为

    加框(2)处代码应改为

  • 4、n个数据的冒泡排序需要经过n-1遍加工,每一遍加工自下而上比较相邻两个数据,把较大者交换到上面。小刘发现:当某一遍加工程中没有数据交换时,说明数据已经有序,无需进一步加工。为此,小刘对算法进行优化,编写了一个VB程序,功能如下:运行程序时,在列表框 List1中显示排序前数据,单击“排序”按钮Command1,在列表框List2中显示这些数据按降序排序后的结果,在标签 Label3中显示排序过程的加工遍数,在标签 Label4中显示排序过程的数据交换次数。运行效果如图所示。

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

    Dim a (1 To 8) As Integer

    Dim n As integer

    Private Sub Form_ Load ( )

    ‘ n=8,排序前数据存储在数组a中,并在列表框List1中显示

    ‘ 代码略

    End Sub

    Private Sub Command1_Click ( )

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

      Dim flag As Boolean

      For i = 1 To n

        List1 AddItem Str(a(i))

      Next 1

      i=1

      flag= False

      Do While       ‘①

        flag = True

      For j = n To i +1 Step-1

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

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

          c=c+1

          flag = False

        End If

      Next j

      i = i+1

    Loop

    Label3. Caption = “排序过程的加工遍数为” +             ‘②

    Label4. Caption= “排序过程数据交换次数为” + str(c)

    For i = 1 To n

      List2. AddItem Str((i))

    Next i

    End Sub

    加框①处代码应改为

    加框②处代码应改为

  • 5、现有包含10个元素的数组d,使用冒泡排序算法对此数组元素进行升序排序,部分VB代码如下:

    For i = 1 To 9

      For j =    ①    

        If     ②    Then

          k=d(j) : d(j) = d(+1) : d(+1)=k

        End If

      Next j

    Next i

    ①②处应填写的正确语句是(  )

    A、①i+1 To n,②d(j) > d(j+1) B、①i+1 To n,②d(j) < d(j+1) C、①1 To n -i,②d(j) < d(j+1) D、①1 To n -i,②d(j) >d (j+1)
  • 6、采用冒泡排序算法对数组a中的6个数据25,4,1,16,9,36进行排序,部分程序如下:

    For i = 1 To 3

      For j = 6 To i + 1 Step-1

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

         

        End If

      Next j

    Next i

    下列说法正确的是(  )

    A、程序为升序排序,实线框中的语句共执行了9次 B、程序为升序排序,实线框中的语句共执行了8次 C、程序为降序排序,实线框中的语句共执行了9次 D、程序为降序排序,实线框中的语句共执行了8次
  • 7、有VB程序段如下:

    exchange = 0

    last_change = 8

    Do While last_ change > 1

      current = 1

      For j = 1 To last_ change-1

        If a(3) < a(j+ 1) Then

          exchange = exchange +1

          tmp = a(0): a(3) = a(j+1): a(j+1) = tmp

          current j

        End If

      Next j

      last_change = current

    LooP

    数组元素a(1)到a(8)的值依次为15,13,0,14,12,9,5,1,执行该程序段,则exchange的值为(  )

    A、2 B、3 C、4 D、5
  • 8、有一个数组,采用冒泡排序,第一遍排序后的结果为4,10,5,32,6,7,9,17,24,那么该数组的原始顺序不可能是(  )
    A、10,5,32,6,7,9,17,24,4 B、10,5,32,6,7,9,4,17,24 C、10,5,32,4,6,7,9,17,24 D、4,10,5,32,17,9,24,6,7
  • 9、在某次校园合唱比赛中,6个参赛队的得分分别为95,87,93,85,91,若采用冒泡排序算法对其进行从小到大的排序,如表所示,则第二趟排序结果是(  )

    原始数据

    95

    87

    93

    85

    91

    第一趟

    85

    95

    87

    93

    91

    第二趟

    A、85  87  95  91  93 B、85  95  87  91  93 C、85  87  93  95  91 D、85  91  87  93  95
  • 10、某书店在5所学校的流动售书量(单位:本分别是88、110、48、64、35。采用冒泡排序对其进行排序,若完成第一遍冒泡的结果是35、88、110、48、64,则完成第二遍冒泡的结果是(  )
    A、35、88、110、48、64 B、35、48、88、64、110 C、35、48、88、110、64 D、35、48、64、88、110
  • 11、有如下程序段:

    s = “”

    For i=1 To 3

      For j = 7 To i + 1 Step-1

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

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

        End if

      Next j

      s= s+ Str(a(i))

    Next i

    Text1. Text = s

    数组元素a(1)到a(7)的数据依次为3,9,1,5,8,6,,经过该程序段“加工”后,文本框Text1中显示的内容是(  )

    A、1,2,3 B、9,8,6 C、3,9,1 D、8,6,2
  • 12、对下列数据序列进行冒泡升序排序,在排序过程中效率最低的序列是(  )
    A、31,29,24,20,15,10 B、10,15,20,24,29,31 C、29,10,31,15,20,24 D、24,29,31,20,15,10
  • 13、使用冒泡排序算法对97、89、111、70、90进行排序,已知第一趟冒泡后的序列为70、97、89、11190,则在整个排序过程中,数据97被交换的次数是(  )
    A、1 B、2 C、3 D、4
  • 14、在数组元素a(1)至a(8)中存储了8个数据,如表所示:

    a(1)

    a(2)

    a(3)

    a(4)

    a(5)

    a(6)

    a(7)

    a(8)

    100

    50

    20

    30

    60

    80

    90

    70

    若采用冒泡排序算法对这些数据进行升序排列,在完成第一遍排序时需交换数据的次数为(  )

    A、2 B、3 C、4 D、5
  • 15、数组指针的应用:小明编写了一个二进制的消消乐程序,实现功能如下:二进制数中相邻重复的数字个数大于或等于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

     ② ③ 

  • 16、高精度乘法:两个正整数进行高精度乘法计算的一般算法如下:

    ⑴将第一个整数各位上的数字按照从低位到高位的顺序依次存入数组a(1)、a(2)、…a(La)中,将另一个整数各位上的数字按照从低位到高位的顺序依次存入数组b(1)、b(2)、…、b(Lb)中。其中,La表示第一个整数的位数,Lb表示第二个整数的位数;

    ⑵按照从低位到高位的顺序,将两个整数各位数值进行逐位乘法计算(第一轮先让b(1)依次乘以a(1)、a(2)、…、a(La),第二轮再让b(2)依次乘以a(1)、a(2)、…a(La),依次进行),每位的乘法结果也按照低位到高位的顺序依次存入数组ans(1)、ans(2)、ans(3)…中;

    ⑶对数组ans中的计算结果进行从低位到高位的进位处理;

    ⑷统计数组ans中实际计算结果的有效数值位数,并将位数值存入变量 length;

    ⑸按照高位到低位的顺序输出数组ans中的计算结果。

    张老师设计了两个正整数进行高精度乘法计算的VB程序,功能如下:在文本框 Text1和Text2中依次输入两个整数,单击“计算”按钮 Command1,程序进行高精度乘法计算,并在标签 Label4中输出计算结果。下面信息显示了进行高精度乘法计算的主要过程(假设输入的两个整数分别为“123”和“45”):

    程序运行效果如图所示。

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

    Dim a(1 To 30) As Integer, b(1 To 30)As Integer

    Dim ans(1 To 60) As Integer

    Dim La As Integer, Lb As Integer, length As Integer

    Private Sub Command1_Click ( )

    Dim i As Integer, j As Integer, t As Integer, temp As String

    ‘将两个乘数(正整数)各数位上的数字按照上述算法依次存入数组a和b,每个正整数位数分别保存到变量La和Lb;将保存结果的数组ans(i)值初始化为零(该部分程序代码略)

    For i = 1 To Lb    ‘按低位到高位的顺序进行列竖式的逐位乘法

      For j=1 To La

        ans(1+j-1)=       ①      +b(i)*a(j)

      Next j

    Next i

    For i = 1 To La + Lb ' 对计算结果进行进位处理

      ans(i +1) = ans(i+1) + ans(1)\10

      ans(i)=      ②    

    Next i

    Length = La + Lb

    Do While ans (length) = 0

      length = length-1

    Loop

    For i =     ③      To 1 step-1

      Label4. Caption = Label4 Caption & str (ans(i))

      Next i

    End sub

     ② ③ 

    (2)、根据本题算法,若输入的两个整数分别为5125和18,则在输出乘法计算结果时,变量length的值为
  • 17、高精度加法:张老师设计了一个“大数据加法运算器”,在Text1和Text2中输入两个大数据,单击 Command1按钮,可实现两个数的相加,并将运算结果输出到Text3中程序运行界面如图所示。

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

    Private sub Command1_Click ( )

    Dim sl As String, s2 As String

    Dim a(1 To 50)As Integer

    Dim b(1 To 50) As Integer

    Dim c(1 To 51) As Integer

    Dim 11 As Integer, 12 As Integer

    s1=Text. Text

    s2= Text2 Text

    l1=Len(s1)

    l2=Len(s2)

    For i=1 To 50     ‘数组初始化

      a(i)=0: b(i)=0

    Next i

    For i = 1 To l1

      a(i) = Val (Mid(s1, l1-i+1, 1))

    For j=1 To l2

      b(j)=Val(Mid(s2, l2-j+1, 1))

    Next j

    If l1 > l2 Then Max= l1 Else Max= l2

    For k =1 To Max

         ①   

      If c(k)> =10 Then

        c(k) = c(k)-10

        t=1

      Else

            ②   

      End If

    Next k

    For m= 1 To

      Text3.Text= Trim(c(m))+Text3.Text

      ‘Trim( )的作用是去除字符串中的空格符

    Next m

    End Sub

     ② 

    (2)、试说明加框处代码的作用
  • 18、数组整段移动:将一个长度为n的有序序列a(1)、a(2)…以整数t(1≤t≤n)为界划分为两段,并将序列a的前t个数移动到n位之后,保持这两段(t个数和n-t个数)之间的相对位置不变(即t个数和n-t个数各自有序)。

    例如,长度为6的有序序列:38、42、59、61、69、78,当t=2时重排结果为:59、61、69、78、38、42。

    小红编写了VB程序功能如下:程序运行时产生n个整数存储在数组a中,在文本框Text1中输入t,单击“对调”按钮Command1在列表框List2中输出t个数与n-t个数对调后的数字序列。程序运行界面如图所示。

    为了实现上述功能,请在划线处填入合适的代码。

    Const n = 10

    Dim a (1 To 10) As Integer

    Private Sub Form Load ( )

    ‘生成n个有序数 ,显示在List1中

    ‘代码略

    End Sub

    Private Sub Command1_ Click ( )

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

    Dim temp As Integer

        ①      

    For i=t+1 To n

      Temp = a(i)

      For j = i To i+1-t step -1

            ②      

      Next j

      a(j)=    ③      

    Next i

    For i=1 To n

      List2 AddItem Str(a(i))

    Next i

    End Sub

     ② ③ 

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

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

    Private Sub Command1_Click ( )

    Dim a (1 To 8) As Integer

    Dim n, i, j, 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(3))

    Next j

    x= Val(Text1. Text)

    i=1

    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

    Label11. Caption ="插入的位置是" &       ③      

    End sub

     ② ③ 

  • 20、已知数组a中存储了某次考试某一指定科目的相关数据,数组a各元素的含义如表所示:

    数组元素

    数组元素的含义

    a(1)

    存储班级数n

    a(2)

    从a(2)到a(n+1)依次存储1、2、…、n班学生的人数

    a(n+1)

    a(n+2)

    从a(n+2)开始依次存储1班每个学生的单科成绩,2班每个学生的单科成绩、……、n班每个学生的单科成绩

    张老师依据数组a中的相关数据编写了VB程序来统计各班平均分。

    程序功能如下:在文本框Text1中输入科目名称,单击“读取数据库”按钮Command1程序从数据库读取数据;单击“开始统计”按钮Command2程序进行统计处理,结果输出在列表框List1中。程序运行界面如图所示。

    (1)、根据程序运行界面中的数据及数组a各元素的含义,数组元素a(5)的值为(填写数值)。
    (2)、请在划线处填入合适的代码。

    Dim a (1 To 600) As Integer数组大小满足处理要求 Private Sub Command1_Click ( )

    ‘本过程从数据库读取指定科目的各相关数据,存储在数组a中

    ‘本过程语句略

    End Sub

    Private Sub Command2_Click ( )

    ‘依据数组a中的相关数据统计各班级平均分

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

      Dim p As Integer, sum As Integer, aver As Single

            ①     

      p=n+2

      For i =1 To n

        sum= 0

        For j=1 To a (i+1)

                ②     

          p=p+1

        Next j

        aver= sum/a (i +1)

        List1 AddItem Str(i)+ “” n+ str(a(i+1)) + “” + Str(aver)

      Next i

    End Sub

     ② 

上一页 1382 1383 1384 1385 1386 下一页 跳转