算法的程序实现 知识点题库

下列程序段实现对num数组进行排序,并将排序结果输出。

Private Sub Command1Click()

Dim num(0 To 5) As Integer

Dim i As Integer, j As Integer

Dim t As Integer

num(0) = 4: num(1) = 7: num(2) = 2: num(3) = 0: num(4) = 3: num(5) = 9

i = 0: j = 1: t = 0

For i = 1 To 5 Step 1

  For j = i + 1 To 4 Step 1

  If num(i) > num(j) Then

  t = num(i)

  num(i) = num(j)

  num(j) = t

  End If

  Next j

Next i

For i = 1 To 5

List1.AddItem num(i)

Next i

End Sub

  1. (1) 程序段中使用的排序算法是
  2. (2) 经过第一轮排序后num(2)的值是
某地区公共自行车收费信息如下:“60分钟内免费;60分钟以上至120分钟(含),收费1元;120分钟以上至180分钟(含),收费2元;租用超过180分钟(含)以上的时间,按每小时3元计费(不足一小时的按一小时计)”。现按要求编写VB程序,界面如图1所示,程序功能如下:在文本框Text1中输入租车时间,单击“计费”按钮Command1,在标签Label5中输出对应的租车费用。

  1. (1) 在应用程序界面设计时,为添加“计费”按钮,应使用图2所示的“控件工具箱”中的(请填写相应编号),并在图3所示的“属性窗口”中,将属性值设置为“计费”。
  2. (2) 请根据题意将下列程序补充完整。

    Private Sub Command1_Click()

      Dim zysj As Single, zyfy As Single  ‘zysj:租用时间,zyfy:租用费用

      zysj = Val(Text1.Text)

      If zysj <= 60 Then

        zyfy = 0

      ElseIf zysj <= 120 Then

        zyfy = 1

      ElseIf zysj <= 180 Then

       

      ElseIf zysj Mod 60 = 0 Then

        zyfy = (zysj - 180) / 60 * 3 + 3

      Else

        zyfy = (Int((zysj - 180) / 60) + 1) * 3 + 3

      End If

      Label5.Caption = Str(zyfy)

    End Sub

两个10进制大整数相加可以用数组的方法逐位相加来实现,小王同学制作了如图的VB程序,以实现求2个50位以内的10进制整数的和。

  1. (1) 根据程序代码,该事件过程名为
  2. (2) 把代码补充完整。

    Private Sub Command1_Click()

    Dim a(1 To 51) As Integer, b(1 To 51) As Integer, c(1 To 51) As Integer Dim lens1 As String, lens2 As String

    lens1 = Len(Text1.Text) :lens2 = Len(Text2.Text)

    For i = Len(Text1.Text) To 1 Step -1    ‘读取数据,逐位保存在数组中

        a(i) = Mid(Text1.Text, lens1 - i + 1, 1) Next i

    For i = Len(Text2.Text) To 1 Step -1

        b(i) = Mid(Text2.Text, lens2 - i + 1, 1) Next i

    For i = 1 To 51     ‘从个位到高位逐位求和

        c(i) = 

        If c(i) > 9 Then

            c(i) = c(i) - 10

            c(i + 1)= 

        End If Next i

    f = False  '从左到右输出第一个不为 0 的元素开始从高位到低位输出和

    For i = 51 To 1 Step -1

        If c(i) <> 0 Then f = True

        If f Then Text3.Text = Text3.Text & c(i) Next i

    End Sub

  3. (3) 图中,为了使Text1和Text2文本框在Form1界面上能够左对齐,需要更改Text1的Left属性,则可以在Form_Load()中添加代码Text1.Left= 
【加试题】数组元素a(1)到a(10)中存储有10个整数,依次为2,5,7,7,9,11,12,13,13,17,使用两种算法查找特定的整数,部分程序如下:

'顺序查找代码,查找次数用变量p表示

For i = 1 To 10

 If a(i) = Key Then

p = i

 End If

Next i

'二分查找代码,查找次数用变量q表示

i=1 :j=10 :find=Fasle

Do While i<=j And find=fasle

x =(i+j)\2

q = q+1

If a(x)=Key Then find=True

If a(x)>Key Then j=x-1

If a(x)<Key Then i=x+1

Loop

若变量key的值为13,程序运行后,则变量p和q的值分别是(  )

A . 8和2 B . 9和2 C . 8和3 D . 9和3
质数又称为素数,除了1和它本身以外不再有其他因数的数成为素数。找到100到999以内的素数,并依次在列表框List1上输出的VB程序段如下:

For i = 100 To 999 lag = True: j = 2

Do While j < i And flag

   

Loop

If flag Then List1.AddItem Str(i) Next i

方框中的代码由以下四部分组成:①End If   ②If i Mod j = 0 Then   ③j = j + 1

④flag = False。代码顺序正确的是(  )

A . ②③④① B . ②④③① C . ③②④① D . ②④①③
有8阶楼梯,从第0阶开始往上走,每次可以走一步或者两步,自定义函数fg可以计算走完n阶楼梯有多少种走法:

Function fg(n as Integer)As Integer

 If n=1 fg=1

 If n=2 fg=2

 If n>=3 fg=fg(n-1)+fg(n-2)

End Function

请问走完这8阶楼梯的走法有(  )

A . 34种 B . 35种 C . 36种 D . 37种
【加试题】某人编写了一个VB程序对一组随机数进行排名。程序运行时,产生10个随机整数存数组d中,并在列表框List 1中显示,单击按钮Command 1,在列表框List1 2中显示降序排序后数据及名次,若数值相同则名次相同。实现上述功能的VB 代码如下,但加框处代码有错,请改正。

Const n = 10

    Dim d(1 To n) As Integer, pm(1 To n) As Integer

    Private Sub Form_Load()

    '代码略,本过程功能:产生10个随机整数存数组d中,并在列表框list1 中显示。

    End Sub

    Private Sub Command1_Click()

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

    i = 1

    Do While i <= n - 1

    k = i

    For j = i + 1 To n

    If  Then k = j     ‘①

    Next j

    If i <> k Then t = d(i): d(i) = d(k): d(k) = t

    i = i + 1

    Loop

    pm(1) = 1

    For i = 2 To n

    If  Then     ‘②

    pm(i) = i

    Else

    pm(i) = pm(i - 1)

    End If

    Next i

    For i = 1 To n

    List2.AddItem Str(i) +" " +Str(d(i)) + " " + "第" + Str(pm(i)) + "名"

    Next I 

    End Sub

 ② 

有如下VB程序段,其中数组元素a(1)到a(5)的值依次为“41,66,70,83,31”

For i = 5 To 4 Step -1

  k=i

  For j = 6-1 To 1 Step-1

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

  Next j

  If k <>i Then

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

  End if

Next i

则该程序段运行后,数组元素a(1)到a(5)的值依次为(  )

A . 31,41,66,83,70 B . 83,70,66,41,31 C . 83,66,70,41,31 D . 31,41,66,70,83
某老师用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

 ② ③ ④ 

某对分查找算法的VB程序段如下:

Key = Val(Text1.Text): s = ""

i = 1: j = 10

Do While i <= j

    m = (i + j) \ 2

    If a(m) <= Key Then

        i = m + 1

        s = s + "R"

    Else

        j = m - 1

        s = s + "L"

    End If

Loop

Text2.Text = s

数组元素 a(1)到 a(10)的值依次为“1,4,6,10,16,16,16,18,21,33”。在文本框 Text1中输入 16 后,该程序段的输出结果与输入下列值的输出结果相同的是(    )。

A . 10 B . 12 C . 17 D . 18
某排序算法的VB程序段如下:

For i=1 To 4

  k=i

  For j=5 To i+1 Step-1

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

  Next j

  If k<> i Then

     tmp=a(k) : a(k)=a(i) : a(i)=tmp

    f(i)=True

 End If

Next i

当数组元素a(1)到a(5)的值依次为“8,2,1,21,3”数组f的初值均为 False,执行该程序段,f数组中元素值为True的个数有(    )

A . 1个 B . 2个 C . 3个 D . 4个
数列1,4,7,10,13,…的递推公式为(  )
A . f(1)=1:f(n)=n+3 B . f(1)=1:f(n)=n*2-1 C . f(1)=1:f(n)=n*2+1 D . f(1)=1:f(n)=f(n-1)+3
某算法部分流程如图1所示,执行此部分流程后,下列说法正确的是(  )

A . 此流程使用枚举算法(枚举i的值),虚线框部分是分支结构 B . 流程中sum←sum+i与i←i+1调换下位置,输出的sum,c,i的值都不变 C . 最终i的值是401,i←i+1执行数是200次 D . 将流程图修改为如图2所示,程序运行结果会发生变化。
编写VB程序,实现把数据key插入到升序序列中,得到一个新的升序序列,原升序序列各元素已依次存放在数组元素a(1),a(2),a(3),……,a(10)中,VB程序段如下:

i=1: j=10

Do While i<=j

    m=(i+j)\2

    If key <= a(m)Then

          ①   

    Else

          ② 

    End If

Loop

For k=10 To i Step-1

      ③ 

Next k

a(i)=key

要使程序实现上述功能,则划线处①②③中的语句分别是(    )

A . j=m-1    i=m+1      a(k+1)=a(k) B . j=m-1    i=m+1      a(k)=a(k-1) C . i=m+1    j=m-1      a(k+1)=a(k) D . i=m+1    j=m-1       a(k)=a(k-1)
有如下VB程序段:

Dim a(1 To 10) As Integer

s = "7218634594": n = Len(s)

t = 0

For i = 1 To n - 1

    a(i) = Val(Mid(s, i, 2))

Next i

For i = 1 To n - 2 Step 2

    k = i

    For j = i + 2 To n - 1 Step 2

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

    Next j

    If k <> i Then

        temp = a(i): a(i) = a(k): a(k) = temp: t = t + 1

    End If

Next i

Text1.Text = Str(t)

该程序段运行后,文本框Text1中显示的内容是(   )

A . 1 B . 2 C . 3 D . 4
某自主选车牌号系统,可以实现采用个性车牌选号码。当机动车所有人通过自编自排方式输入车牌号码,系统会进行号牌查询,如果还没有被使用,则提出信息“选车牌号码成功!”否则提示信息“车牌号码已被使用!”假设已使用车牌号码(数量小于30000个)的数据存放在数据库文件的chepai 数据表num-ber字段,选号程序的VB代码如下,程序运行时界面如图所示。机动车所有人在文本框Text1中输入自编自排车牌号码后,单击“检索”按钮Command1,在标签框Label3中显示结果。

解决此问题的算法流程图如下图所示:

相应的VB程序如下,在程序①和②划线处,填入适当的语句或表达式,把程序补充完整。

Dim cp(1 To 30000) As String

'存放已使用的车牌号码

Dim plate As String

'输入的自主编制车牌号码

Dim num As Integer

'已使用车牌号码的数量

Private Sub Command1_Click()

    Dim f As Boolean, i As Integer, j As Integer, m As Integer

    Label3. Caption=“”

    i= 1:j= num

    plate=“浙A”& Text1. Text

    f= False

    Do While (i <=j) And Not f

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

        If plate= cp(m) Then

            f= True

        Else

            If plate<cp(m) Then

                j=m-1

            Else

                    ①   

            End If

        End If

    Loop

    If f Then

        Label3. Caption=“车牌号码已被使用!”

    Else

        Label3. Caption=“选车牌号码成功!”

    End if

End Sub

Private Sub Form_ Load( )

    Dim conn As New ADODB. Connection,rs

    As New ADODB. Recordset

    Dim strSQL As String

    conn. ConnectionString =“Provider = Mi-crosoft. ACE. OLEDB.12. 0;Data Source=” +App. Path+“\chepai. accdb”

    conn. ( )pen

    '设置查询的SQL语句,从数据表chepai 中选取number列数据,并按升序排序。

    strSQL=“SELECT number FROM chepai order by number asc'

    Set rs. ActiveConnection= conn

    rs. Open strSQL

    num=0

    Do While     ②    

        num= num+1

        cp( num) = rs. Fields(“number”)

        rs. MoveNext

    Loop

    rs. Close

    conn. Close

End Sub

  1. (1) 程序查找的数据库文件名称是
  2. (2) 在程序划线处填入适当的语句或表达式,把程序补充完整。

某排序算法思想如下:若有11个桶,编号从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代码如下,但加框处代码有错,请改正。

Dim a(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 To 10    '将数组初始化为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

双调序列:指的是有n个整数进行排序,在序列中第一个数是n个数当中最大数,第二个数是n个数中最小数,第三个数是n个数中的第二大数,第四个是n个数中的第二小数……取过的数字不能再取,依次类推,直到结束。

小明根据上述思想编写了VB程序,功能如下:程序运行后,点击“生成”按钮Command1随机生成10个不重复的[0,99]内的整数,列表框List1中显示排序之前数据;单击“排序”按钮Command2,在列表框List2中显示这些数据的双调序列结果。其程序界面如图所示。

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

Const n= 10

Dim a(1 To n) As Integer

Dim b(0 To 99) As Integer

Private Sub Command1_Click()

    '随机生成10个不重复的[0,99]之间的整数,存储在a数组中,代码略。

End Sub

Private Sub Command2_Click()

    Dim i As Integer, j As Integer, k As Integer

    k=0

    For i=1 To n

              '

    Next i

    For j=0 To 99

        If b(j)=1 Then

            k=k+1

            a(k)=j

        End If

    Next j

    For i=1 To n\2

        List2. AddItem     '

        List2. AddItem Str(a(i))

    Next i

End Sub

小李编写VB程序,功能如下:单击“生成数组”按钮Command1,则随机生成13个取值范围是1~13的正整数,分别存储到数组a中,对数组的元素进行升序排列,并在标签label1中显示;再单击“连续数”按钮Command2,则在排序后的数组a中查找连续个数最多(忽略重复数值)的一组数值(即连续数),若有两组连续数个数一样多,则取数值小的一组,将连续数显示在标签label2中。运行界面如图所示。

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

Dim a(1 To 13) As Integer

Dim n As Integer

Private Sub Command1_ Click( )

    Dim i As Integer, s As String, j As String

    Randomize

    n=13

    For i=1 To n

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

    Next i

    For i=1 To n-1

        For j=i+1 To n

            If a(j) < a(i) Then

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

            End If

        Next j

    Next i

    s=“”

    For i=1 To n

        s = s+ Str(a(i))

        If  Then s=s+“,”

    Next i

    Label1. Caption =s

End Sub

Private Sub Command2_ Click( )

    Dim i As Integer, j As Integer

    Dim t As Integer, k As Integer

    Dim max As Integer    '存储连续数个数最大值

    Dim begin As Integer     '存储连续数开始的数值

    k= 1

    max=1

    For i=2 To 13

        If a(i)=a(i-1)+1 Or a(i)=a(i-1) Then

            If  Then k=k+1

            If k > max Then

                max= k

                begin =

            End If

        Else

            k=1

        End If

    Next i

    s=" "

    For j=begin To begin+max-1

        s =s+ Str(j)

    Next j

    Label2. Caption = s

End Sub

小明基于Flask Web框架编写了“最喜欢诗人评选”的程序,“评选结果”页面如图a所示,“参加评选”页面如图b所示。评选规则:当推选的诗人已经存在时,将其热度值增加1;否则添加该诗人的记录,并将其热度值设为1。

图a

图b

采用SQLite3设计数据库data.db,其中info表包括两个字段:

段名

数据类刑

poet

text

heat

integer

  1. (1) 根据题意,数据库“data.db”的“info”表中“poet”字段用于存放 (单选,填字母:A .诗人的姓名 / B .诗人的热度值)。
  2. (2) 实现上述功能的Python程序部分代码如下,请选择▲处的代码 (单选,填字母:A .CREATE TABLE info / B .INSERT INTO info / C .SELECT * FROM info)。

    @app.route('/')

    def view( ):

    #按热度值降序查询info表中记录,并渲染“view.htm”网页模板显示结果,代码略

    @app.route('  ①   ', methods=['GET','POST'])

    def selectpoet():

    if request.method=='POST':

    x=request.form['xm'] #获取图b所示文本框中输入的内容

    conn=sqlite3.connect('data.db')

    cur=conn.cursor()

    cur.execute("  ▲   where poet='%s'" %x) #查询当前诗人记录

    data=cur.fetchall()

    if data:        #当data非空时,则表示所推选的诗人已经存在,将其热度值增1 y=data[0][1]+1

      cur.execute("update info set heat=%d where poet='%s'" %(y,x))

    else:

      cur.execute("insert into info(poet,heat) values('%s',%d)" %(    ②    ))

      conn.commit( )

      cur.close( )

      conn.close( )

    return '评选成功!'

    else:

      return render_template('select.htm')

    if __name__=='__main__':

      app.run()

  3. (3) 请在划线处填入合适的代码。