相关试卷

  • 1、小杜编写VB解决上述问题的程序,其功能如下:程序运行时在文本框Text1中输入整数序列(输入的数据保证存在符合条件的子序列),在Text2中输入整数s。单击按钮Command1后在标签Label1上输出总和不小于s的连续子序列,程序运行如图所示。

    (1)、给定整数序列为{5,1,3,5,10,7,4,9,2,8},整数s=15,符合条件的长度最小的子序列为
    (2)、实现上述功能的VB程序如下,请在划线处填入合适代码。

    Dim a(1 To 100) As Integer

    Dim sum(0 To 100) As Integer ’sum(i)存储 a(1)+a(2)+…+a(i)的值

    Dim n As Integer, s As Integer

    Private Sub Form_Load()

    ‘读取整数序列依次存储在数组a中

    ‘读取整数序列长度存储在变量n中

    ‘本过程代码略

    End Sub

    Private Sub Command1_Click()

    Dim i As Integer, ans As String

    Dim Min As Integer     ‘存储符合条件的最小长度

    Dim iMin As Integer     ‘存储符合条件子序列的起始位置

    s=val(Text2.text)

    For i = 0 To n

     sum(i) = 0

    Next i

    For i = 2 To n

     sum(i) = a(i) + sum(i-1)

    Next i

    Min = n

    iMin = 1

    For i = 1 To n

     j=i

     Do WhileAnd j<= n

      j = j + 1

     Loop

     If j <= n And j - i + 1 < Min Then

      Min = j - i + 1

      iMin = i

     End If

    Next i

    ans =“”

    For i = iMin To

     ans = ans + Str(a(i))

    Next i

    Label1.Caption = “符合条件的子序列为” + ans

    End Sub

  • 2、要求从某一字符串中删除指定的字符(假设所含的英文字母均为小写字母),并将处理后的字符串重新输出。

    程序界面如图所示,在文本框Text_1中输入原始字符串,在文本框Text_2中输入需要删除的字符,单击“删除此字符”按钮(Command1)后,在文本框Text_3中输出处理后的结果。

    解决此问题的算法流程图如图所示,相应的Visual Basic程序如下:

    Dim p As String,k As String

    Private Sub Command1_Click()

    Dim s As Integer,result As String,flag As Boolean

    result=“”

    p=Text_1.Text

    k=Text_2.Text

    For s=1 To Len(p)

      flag=f(s)

      If Not flag Then

       result=result+①   

      End If

    Next s

       

    End Sub

    Function f(s As Integer)As Boolean

      If Mid(p,s,1)=k Then f=True

    End Function

    (1)、解决此问题的算法是。(选填:顺序查找或对分查找)
    (2)、在程序①和②划线处,填入适当的语句或表达式,把程序补充完整。

    程序中①划线处应填入

    程序中②划线处应填入

  • 3、小明在玩一个数字游戏,给定一个n位正整数(n<=20),根据设定的保留位数,删除k个数字,剩下的数字按原次序组成一个最大的新数。例如原数36351328,删除5个数,最大数为658。算法如下:先确定最高位的数字,在第1位至最后2位数字前的363513中找到最大的数6,从而确定最高位是6,再确定次高位的数字,从6后面的数开始到最后1位数字前的35132中找到最大数5,确定次高位是5,依次找下去得到最大新数。他设计了一个VB程序来进行验证,在文本框Text1中输入一个n位正整数,在文本框Text2中输入删除位数k,点击“确定”按钮,在文本框Text3中输出保留的最大新数。程序运行界面如图所示。

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

    Private Sub Command1_Click()

    Dim a(1 To 20) As String

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

    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 n-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、删数问题。输入一个数字串s,删去其中k个数字(k<数字串中数字的个数),使剩余数字在保持相对位置不变的情况下构成一个值最小的整数。例如,s=“19990608”,k=4,处理结果:608。

    删数的算法如下:

    ⑴如果k>0,则从前往后检测相邻字符,否则,转(3);

    ⑵①若所有相邻字符都已非降序,则将串尾k个字符删去,k值置0,转(1);②若相邻两数存在逆序(即前一个数>后一个数),则将前一个数删除,k值变化,然后回到(1);

    ⑶去掉串首的0,输出结果。

    按照上述算法思路,编写了VB程序,功能如下:在文本框Text1中输入数字串,在文本框Text2中输入删除的个数,单击“处理”按钮Command1,在文本框Text3中显示最小的整数。程序运行界面如下图所示。

    (1)、如果输入的数字串为“20160125”,删除个数为4,则结果是
    (2)、实现上述功能的VB程序如下,请在划线处填入合适代码。

    delete函数说明:(delete st,x,y)为自定义函数,功能为在字符串st中删除x位置开始的y长度的子串。

    Private Sub Command1_Click ()

    Dim s As String, k As Integer

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

    s = Text1.Text

    k = Val(Text2.Text)

    n = Len(s)

    Do While k>0

      i=1

      Do While i<n And

      i=i+1

      Loop

      If i=n Then

    n=n-k

    k = 0

      Else

    s = delete(s, i, 1)

    n=n-1

      End If

    Loop

    i= 1

    Do While n>1 And Mid(s,1,1)= “0”

      s = delete(s,1 ,1)

      i = i+1

      n = n-1

    Loop

    Text3.Text = s

    End Sub

    Function delete(st As String,x As Integer,y As Integer) As String

    delete=Mid(st,1,x-1)+Mid(st,x+y)

    ‘Mid函数第3个参数省略,则截去从开始位置向右到字符串结尾的所有字符

    End Function

  • 5、物品装袋问题。现有n个物品(不超过20个),及一个容量不超过v的袋子,分别给出各物品的体积及价值,求装入袋子里的物品价值总和的最大值。请编写VB程序,实现如下功能:在文本框Text1中输入袋子的体积,单击“计算”按钮Command1,在文本框Text2中输出装入袋子里的物品价值总和的最大值,运行效果如图所示。

    算法设计:为了使装入袋子的价值总和最大,首先应该把单位价值(该物品的价值+体积)最大的物品全部放入袋子(如果袋子当前剩余的容量不小于该物品的体积),然后放单位价值第二的物品,如此重复。当袋子剩余的容量装不下一个完整的物品时,可以将这个物品的部分(若干个单位体积)装入袋子,直到袋子装满。

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

    (1)、根据题意,现有4个物品,其对应的体积和价值如表所示,若袋子的体积为30,则装入袋子的最大价值为(四舍五入保留1位小数)。

    物品编号

    体积

    价值

    1

    26

    19

    2

    7

    14

    3

    22

    11

    4

    10

    22

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

    Dim v(1 To 20) As Integer      ‘依次存储每个物品的体积

    Dim w(1 To 20) As Integer      ‘依次存储每个物品的价值

    Dim pw(1 To 20) As Double      ‘依次存储每个物品的单位价值

    Dim n As Integer     ‘存储物品的总个数

    Private Sub Form_Load()

    ‘初始化操作,并将每个物品的体积和价值依次显示在列表框List1中(代码略)

    ‘将物品的个数存入变量n中,将每个物品的体积和价值分别依次存入数组v(1)到v(n)中、w(1)到w(n)中

    End Sub

    Sub Sort ( )      ‘根据每个物品的单位价值进行降序排序

    For i = 1 To n -1

      k=i

      For j = i + 1 To n

    If pw(k) < pw(j) Then

      Next j

      If k <> i Then

    t = v(i): v(i) = v(k): v(k) = t

    t = w(i): w(i) = w(k): w(k) = t

    p = pw(i): pw(i) = pw(k): pw(k) = p

      End If

    Next i

    End Sub

    Private Sub  Command1_Click()

    Dim i As Integer, k As Integer, t As Integer

    Dim p As Double, bw As Integer, tot As Double

    bw = Val(Text1.Text)

    For i = 1 To n

      pw(i) = w(i) / v(i)

    Next i

    For i = 1 To n

      If bw >= v(i) Then

    tot = tot + w(i)

    bw = bw -v(i)

      Else

    Exit For

      End If

    Next i

    Text2.Text = Str(tot)

    End Sub

  • 6、摘苹果游戏。游戏中的苹果树结了n个苹果,每个苹果有一个地面高度和摘它所需要的力气,要摘到苹果,必须具备高度和力气两个条件,每摘一个苹果都要用掉一定的力气。小林的可用力气是个有限值s,小林手伸直后能摘的最大高度为b,她可以借助的梯子的高度为a。游戏中苹果的高度和所需力气分别存储在数组 h和数组c中。程序运行界面如图所示。运行程序后,输入梯子高度a、手伸直高度b、可用力气s的值, 单击“计算”按钮(Command1),在文本框Text4中输出小林最多能摘得的苹果数ans。

    相应程序如下,在划线处填入适当的语句和代码,把程序补充完整。

    Dim c(1 To 100) As Integer, h(1 To 100) As Integer, d(1 To 100) As Integer

    Dim n As Integer

    Private Sub Form_Load()

         ‘从数据库中读取n个苹果的摘取所需力气和高度存放在数组c和h中,并显示在List1中,代码略

    End Sub

    Private Sub Command1_Click()

    Dim a As Integer, b As Integer, s As Integer, i As Integer, j As Integer, m As Integer

    a = Val(Text1.Text)     ‘梯子高度

    b = Val(Text2.Text)     ‘手伸直高度

    s = Val(Text3.Text)     ‘可用力气

    m = 0

    For i = 1 To n     ‘将所有能够摘得的苹果所需力气存储到数组d中

      IfThen

    m = m + 1

    d(m) = c(i)

      End If

    Next

    For i = 1 To m - 1

      k = i

      For j = i + 1 To m

    IfThen k = j

      Next

      If k <> i Then

    t = d(k): d(k) = d(i): d(i) = t

      End If

    Next

    ans = 0     ‘用剩余的力气去摘最多的苹果

    For i = 1 To m

      If s >= d(i) Then

    ans = ans + 1

      End If

    Next

    Text4.Text = Str(ans)
    End Sub

  • 7、有N堆纸牌,编号分别为①,②,…。每堆上有若干张,但纸牌总数必为N的倍数。可以在任一堆上取若干张纸牌,然后移动。

    移牌规则:在编号为①的堆上取的纸牌,只能移到编号为②的堆上;在编号为N(N≥2)的堆上取的纸牌,只能移到编号为N-1的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。

    现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。

    例如N=4,4堆纸牌数分别为:

    9

    8

    17

    6

    移动3次可达到目的:从③取4张牌放到④(9 8 13 10)→从③取3张牌放到②(9 11 10 10)→从②取1张牌放到①(10 10 10 10)。

    现编写如下代码解决4堆任意张数牌的移动问题,请按提示补充划线句的代码:

    Private Sub Command1_Click()

    Dim aver As Single

    Dim st As Integer     ‘统计移动的步数

    Dim ssum, i, j As Integer

    Dim a( 1 To 100) As Integer

    a(1) = Val(Text1.Text)     ‘读取各堆牌张数,求总张数aver

    a(2) = Val(Text2.Text)

    a(3) = Val(Text3.Text)

    a(4) = Val(Text4.Text)

    ssum =a(1) + a(2) + a(3) + a(4)

    aver=ssum \ 4     ‘求牌的平均张数aver

    For i=1 To 4

      ① 

    Next i

    i=1     ‘过滤初端和末端的0

    j = 4

    Do While a(i) = 0 And i < 4

     i=i+1

    Loop

    Do While a(j) = 0 And j > 1

     j = j-1

    Loop

    st = 0

    Do While i < j      ‘开始移动牌使数组a元素值均为0并过滤掉

      ② 

     a(i) = 0

     st = st + 1

     i=i+1

     Do While a(i) = 0 And i<j      ‘过滤掉数组a元素值均为0

       ③ 

     Loop

    Loop

    Print st      ‘输出移动次数

    End Sub

    (1)、划线①处;划线②处;划线③处
    (2)、若现有6堆牌,分别编号①②③④⑤⑥,各堆张数分别为15、2、4、7、8、6,按上述算法的思路,要使用最少的移动次数使每堆上纸牌数都一样多,则最少次数为
  • 8、问题描述:有n个互不重复的数字,值的范围是[1,n],分别保存在数组元素a(1)到a(n)中,若数字i保存在a(i),则认为数字i在正确的位置上。若干个相互占用了位置的数字称为一组,一个在正确位置上的数字单独为一组,比如6个数字2,3,1,4,6,5分别保存在数组元素a(1)到a(6)中,则2、3、1为一组,4为一组,6、5为一组。该程序的功能为输出每组的情况。运行界面如图:

    (1)、数组元素a(1)到a(5)的值分别为2、5、3、1、4,这5个元素总共有组。
    (2)、请补充代码。

    Const n = 10

    Dim a(1 To n) As Integer     ‘保存原始数据

    Dim b(1 To n) As Boolean     ‘数组b用来标记相应的位置有没有找过

    Private Sub Command1_Click()

    Dim i As Integer, sum As Integer, total As Integer

    sum = 0: total = 1     ‘total表示第几组

    i = 1

    List2.AddItem“第” + Str (total) + “组”

    Do While sum < n

      Do While Not b(i)

        List2.AddItem a(i)

        b(i) = True

       

        sum = sum + 1

          Loop

          If sum < n Then

       

        List2.AddItem “第”+ Str(total)+“组”

        i = 1

        Do While b(i)     ‘该循环用来查找下一组的开始位置

          i = i+ 1

        Loop

          End If

    Loop

    End Sub

    Private Sub Form_Load()

    Dim i As Integer

    Randomize

    For i = 1 To n     ‘产生n个不一样的整数,范围为[1,n]

      a(i) = Int(Rnd * n)+1

      Do While

        a(i)= Int(Rnd * n) + 1

      Loop

    Next i

    For i = 1 To n

      List1.AddItem a(i)

      b(i) = False

    Next i

    End Sub

    Function f(x As Integer, y As Integer) As Boolean

    ‘该函数的功能:判断x和数组a中前y个数有没有重复

    Dim j As Integer

    f = False

    For j = 1 To y

      If a(j) = x Then f = True:Exit For

    Next j

    End Function

  • 9、某游戏规则如下:将2*n位队员按2人一组分成n个队(n<10),地面上有一排格子,共2*n个,每个格子都对应一个小于10的随机正整数。游戏开始后,所有队员都选择站到一个空的格子里,等他们站满格子后,开始为每位队员进行记分。记分规则:每组甲乙两个队员,甲队员的分数是从自己所站的格子开始,按照格子序号递减,将这些格子中的数字一直累加到第1个格子。乙队员的分数是从自己所站的格子开始,按照格子序号递增,一直将格子中的数字累加到第2*n个格子。如果同一队的两名队员得到的分数相同,则该组参赛队获胜。

    例如:如图所示,有4个队8位队员,地上一排格子的数字依次为2、1、1、7、9、2、5、6。若某队甲队员站在第4个格子,则其分数为2+1+1+7=11;乙队员站在第7个格子,则其分数为5+6=11。两者相等,则该队获胜。

    gz(1)

    gz(2)

    gz(3)

    gz(4)

    gz(5)

    gz(6)

    gz(7)

    gz(8)

    ←→

    2

    1

    1

    7

    9

    2

    5

    6

    甲                                             乙

    (1)、假设有3队队员,地上一排格子的数字依次为6、7、3、4、3、9。若某队甲队员站在第3个格子上,那么该队乙队员站在第个格子上才能获胜。

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

    Dim n As Integer

    Dim gz(1 To 20) As Integer

    Private Sub Command1_Click()

    Dim dfa As Integer, dfb As Integer

    Dim ta As Integer, tb As Integer

    Randomize

    For i = 1 To 2 * n

     gz(i) = Int(Rnd* 9 + 1)

     List1.AddItem “gz(“ & i & ”)” & gz(i)

    Next i

    num = 1

    For j = 1 To 2 * n

     ta = j

     dfa = zwdf(ta, True)

     For k = 1 To 2 * n

        tb = k

       

        If dfa = dfb Then

         List2.AddItem num & “甲队员(“ & j &”)得分=” & dfa & “乙队员(“ & k & ”)得分=” & dfb

         num = num + 1

        End If

     Next k

    Next j

    List2.AddItem “获胜的站法共有:”++ “种”

    End Sub

    Function zwdf(p As Integer, r As Boolean) As Integer

    Dim fs As Integer

    If r = True Then

      

        fs = fs + gz(i)

      Next i

    Else

      For i = p To 2 * n

      fs = fs + gz (i)

      Next i

    End If

    zwdf = fs

    End Function

  • 10、小吴编写了一个查找数组中不重复数据的VB程序,功能如下:程序运行时在列表框List1中显示原始数据(存储在数组a中),单击“查找”按钮Command1后,在列表框List1中显示数组中元素值只出现一次的数据。程序运行界面如图所示。

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

    Const n = 10    ‘数组元素的总数

    Dim a(1 To n) As Integer

    Private Sub Form_Load()

    ‘该过程对数组a进行赋值,并在列表框List1中显示,代码略

    End Sub

    Private Sub Command1_Click()

    Dim i As Integer, j As Integer,flag(1 To n) As Boolean

    ‘flag(i)记录第i个元素是否重复出现

    For i = 1 To n      ‘flag(i)=true开始假设都只出现1次

     flag(i) = True

    Next i

    For i = 1 To n

     If flag(i) Then

      For j = i + 1 To n

        If Then flag(i) = False: flag(j) = False    ‘①

      Next j

     End If

    Next i

    For i = 1 To n

      If Then List2.AddItem Str(a(i))    ‘②

    Next i

    End Sub

     ② 

  • 11、有如下VB程序段:

    n = Len(Text1.Text)

    For i = 1 To n

     a(i) = Mid(Text1.Text, i, 1)

    Next i

    Do While n > 1

     If Asc(a(n)) >= Asc(a(n - 1)) Then

        m = 1

     Else

        m = 2

     End If

     b(m) = b(m) + 1

     n = n-1

    Loop

    数组b各元素的初始值都为0,文本框Text1的内容为“2018Python”。执行程序后,变量b(1)的值为(  )

    A、10 B、6 C、5 D、4
  • 12、某VB程序段如下:

    For i = 1 To 5

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

    Next i

    pa = 0

    For j = 1 To 10

     For k = 1 To b(j)

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

     Next k

    Next j

    a(1)到a(5)的初值依次是7、5、9、4、3,程序段运行后,数组a值依次是(  )

    A、7, 9, 5, 4, 3 B、3, 4, 5, 7, 9 C、4, 5, 7, 9, 3 D、9, 7, 5, 4, 3
  • 13、有VB编写的程序如下:

    Dim a(0 To 9) As Integer, t as Long

    t=Val(Text1.Text)

    Do While t<>0

     a(t Mod 10) = 1

     t = t \ 10

    Loop

    For i = 0 To 9

     x = x + a(i)

    Next i

    Text1中输入10242048,则程序执行后x的值为(  )

    A、1 B、2 C、5 D、10
  • 14、有以下VB程序段:

    a(1)=68: a(2)=88: a(3)=76: a(4)=60: a(5)=98: a(6)=100: a(7)=64: a(8)=85: a(9)=99:a(10)=59

    For i = 1 To 9

     b(i) = Abs(a(i + 1) - a(i))

     c(b(i) \ 10) = c(b(i) \ 10) + 1

    Next i

    For i = 0 To 10

     If c(i) > 0 Then Label1.Caption = Label1.Caption + “” + Str(c(i))

    Next i

    数组c各元素初值为0,执行该程序段,标签Label1上显示的内容是(  )

    A、23211 B、13221 C、23221 D、13
  • 15、尼克斯彻定理:任何一个大于等于1的整数的立方等于一串连续奇数之和,如:13=1,23=3+5, 33=7+9+11。编写一个VB程序验证尼克斯彻定理,程序运行时,在文本框Text1中输入一个大于等于1的整数,单击“验证”按钮Command1,在文本框Text2中显示验证结果,运行界面如图所示。

    实现上述功能的VB代码如下,请完善代码:

    Private Sub Command1_Click()

    Dim n As Integer, i As Integer, t As Integer,sum As Long,s As String

    n=Val(Text1.Text)

    For i = 1 To n^3 Step 2     ‘变量i表示连续奇数的首个整数

     sum=0:t = i:flag = False

     Do While sum <= n^3 And flag = False

      sum =

      t = t +2

      IfThen flag = True

     Loop

     If flag = True Then Exit For

    Next i

    s = Str(n) + “^”+ Str(3) + “=”

    Do While sum >0

     If sum = 0 Then

      s = s + Str(i)

     Else

      s = s + Str(i) +“+”

     End If

     i = i + 2

    Loop

    Text2.Text = s

    End Sub

  • 16、如果一个自然数的每个质因数都至少是二重的(即每个质因数乘方次数都大于或等于2),如整数72=2^3*3^2(即72=2*2*2*3*3),判断2~72所有数中全部质因子的乘方次数,找出质因子“2”乘方次数为3;质因子“3”乘方次数为2,不是72的质因子,那么这个自然数称为“漂亮数”。小李编写了一个验证“漂亮数”的VB程序。在文本框输入小于1 000的正整数,单击“检查”按钮在列表框中显示该数的质因子及该因子乘方数,在标签Label1中显示判断结果,在标签Label4中显示所有质因数的分解过程。程序运行界面如下图所示。

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

    Private Sub Command1_Click()

    Dim a(1 To 999) As Integer

    Dim n As Integer

    Dim s As String

    For i=1 To 999

     a(i)=0

    Next i

    n=Val(Text1.Text)

    s =“”

    Do While n<>1     ‘分解质因子过程并统计质因子出现次数

    For i = 2 To n

     Do While n Mod i = 0

      s = s&“  ”&i

      a(i)= a(i)+1

           ‘①

     Loop

    Next i

    Loop

    Label4.Caption =“质因子分解过程:” +s

    For j = 2 To 999     ‘判断是不是漂亮数

     If Then      ‘②

      Label1.Caption = “不是漂亮数”

      Exit For

     Else

      Label1.Caption =“漂亮数”

      End If

    Next j

    For j = 2 To 999     ‘在列表框输出质因数及对应的乘方数

     If a(j)>0 Then

      List1.Additem Str(j)+“ ”+Str(a(j))

     End If

    Next j

    End Sub

     ② 

  • 17、随机数中的完全平方数。若一个数能表示成某个整数平方的形式,则称这个数为完全平方数,如1(1*1)、9(3*3)、16(4*4)等都是完全平方数。编写程序,单击命令按钮Command1依次产生1 000个1到1 000范围内(包含1,也包含1 000 )的随机整数,并判断产生的每个随机整数是不是完全平方数,如果是完全平方数,则将其显示在列表框List1中。程序运行效果如图所示。

    (1)、代码“List1.Additem”中的“Additem”是列表框List1的。(填字母:A .对象名/B .属性名/ C .属性值/D .事件名/E .方法名/F .事件处理过程名)
    (2)、解决此问题相应的VB程序如下:

    Private Sub Command1_Click()

    Dim i As Integer, t As Integer

    For i = 1 To 1 000

      x =

      t = Int(Sqr(x))

      If x =Then List1.Additem

    Next i

    End Sub

  • 18、编写一个VB程序,实现程序功能如下:随机产生10个1~20之间的整数存放在数组a,在列表框List1中显示,单击“排序”按钮Command1后,在列表框List2中显示升序排序后的结果。具体算法描述如下:引入数组index,index(i)存储i位置应放置的数组元素的下标。排序完毕,a(index(i))成为升序序列,即a(index(1))≤a(index(2))≤a(index(3))≤……≤a(index(i))。在数组a的所有元素中找出最小元素,将其所在位罝存放在数组元素index(1)中,然后在余下的元素中找出最小元素,将其所在位置存放在数组元素index(2)中,以此类推,直到完成所有元素排序。如n=5时,数组a排序后各变量值如下表所示。

    i

    1

    2

    3

    4

    5

    a(i)

    17

    19

    9

    13

    6

    index(i)

    5

    3

    4

    1

    2

    a(index(i))

    6

    9

    13

    17

    19

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

    Const n = 10

    Const maxn = 20

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

    Private Sub Form_Load()

    Dim i As Integer

    Randomize

    For i = 1 To n

     flag(i) = False

     a(i) = Int(Rnd() * maxn) + 1

     List1.AddItem Str(a(i))

    Next i

    End Sub

    Private Sub Command1_Click()

    Dim i As Integer, j As Integer

    Dim k As Integer

    For i = 1 To n

     For j = 1 To n

      If flag(j) = False Then k = j: Exit For

     Next j

     For m = k + 1 To n

      If Then k = m     ‘⑴

     Next m

     index(i) = k

     flag(k) = True

    Next i

    For i = 1 To n

     List2.AddItem      ‘⑵

    Next i

    End sub

     ⑵ 

  • 19、某公司面试程序题如下:公司有10000名员工,请设计一个算法对该公司员工的年龄做递增排序输出。小刘设计了一个算法:利用数组b记录每个数据出现的次数,数组b下标范围为年龄范围,然后根据每个年龄值的个数进行排序。

    例如,有如下年龄存在数组a中:

    a(1)

    a(2)

    a(3)

    a(4)

    a(5)

    a(6)

    a(7)

    a(8)

    a(9)

    a(10)

    20

    19

    18

    19

    15

    12

    15

    20

    17

    19

    利用一个数组b(b(10 To 20))记录每个数出现的次数:

    b(10)

    b(11)

    b(12)

    b(13)

    b(14)

    b(15)

    b(16)

    b(17)

    b(18)

    b(19)

    b(20)

    0

    0

    1

    0

    0

    2

    0

    1

    1

    3

    2

    根据数组b对数组a进行排序:

    a(1)

    a(2)

    a(3)

    a(4)

    a(5)

    a(6)

    a(7)

    a(8)

    a(9)

    a(10)

    12

    15

    15

    17

    18

    19

    19

    19

    20

    20

    Dim a(10000) As Integer      ‘存放读入的年龄数据

    Dim b(100) As Integer      ‘存放各个年龄出现的个数

    Private Sub Command1_Click()

    ‘从数据库读入年龄数据放入数组a中

    End Sub

    Private Sub Command2_Click()

     For i = 1 To 100

     b(i) = 0

     Next i

     For i = 1 To 10000      ‘统计每个年龄数据的个数

        ①    

     Next i

     End Sub

    Private Sub Command3_Click()

     j = 0

     For i = 1 To 100

      If b(i) <> 0 Then

       Do While b(i) <> 0

          ②       

        a(j) = i

         ‘③

      Loop

     End If

    Next i

     For i = 1 To 10000

     List2.AddItem Str(a(i))

    Next i

    End Sub

    (1)、为实现程序功能,请在划线①②处填入合适的代码。

    ①处填入的代码为

    ②处填入的代码为

    (2)、加框处③代码有错,请修正。

    ③处的代码修改为

  • 20、小明最近学习了一种插入排序的算法。算法的基本思想如下:每次将一个待排序的记录,按其关键字大小插入前面已经排好序的记录集中,使记录依然有序,直到所有待排序记录全部插入完成。

    如数据25 54 8 54 21 排序过程如下(n=5):

    待排序数据:【25】 54 8 54 21

    i=2:【25 54】 8 54 21

    i=3:【8 25 54】 54 21

    i=4:【8 25 54 54】 21

    i=5:【8 21 25 54 54】

    程序产生10个-100~100之间的整数,从小到大排序后输出,运行结果如图所示:

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

    Dim a(0 To 10) As Integer

    Private Sub Command1_Click()’产生10个随机数放在数组a中

     Dim i As Integer

     For i = 1 To 10

        ‘①

      List1.AddItem Str(a(i))

     Next i

     End Sub

    Private Sub Command2_Click()

     Dim i As Integer, j As Integer

     For i = 2 To 10

      a(0) = a(i)

      j = i - 1

      Do While a(0) < a(j)

        ‘②

       j = j - 1

      Loop

      a(j + 1) = a(0)

     Next i

     For i = 1 To 10

      List2.AddItem Str(a(i))

     Next i

    End Sub

    ①处的代码修改为

    ②处的代码修改为

上一页 1484 1485 1486 1487 1488 下一页 跳转