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

编写VB程序,实现如下功能:在文本框Text1中输入某一年份,单击“天干地支与生肖”按钮Command1,在列表框List1中输出该年份开始的12个年份及对应的“天干地支”与“生肖”,运行界面如图所示,程序代码如下。2

  1. (1) 代码“Private Sub Command1_Click()”中的Click是       。(单选,填字母)
    A . 对象名 B . 属性名 C . 事件名
  2. (2) 为实现上述功能,请在划线处填入合适的代码。

    Private Sub Command1_Click()

    Dim a As Integer, b As Integer

    Dim i As Integer, n As Integer

    Dim c1 As String, s1 As String

    Dim c2 As String, s2 As String

    Dim c3 As String, s3 As String

    List1.Clear

    s1 = "甲乙丙丁戊己庚辛壬癸"

    s2 = "子丑寅卯辰巳午未申酉戌亥"

    s3 = "鼠牛虎兔龙蛇马羊猴鸡狗猪"

    n = Val(Text1.Text)

    For i = n To

       a = (i + 6) Mod 10

       b = (i + 8) Mod 12

       c1 = Mid(s1, a + 1, 1)

       c2 = Mid(s2, b + 1, 1)

       c3 = Mid(s3, b + 1, 1)

       List1.AddItem + "年" + c1 + c2 + " " + c3

    Next i

    End Sub

  3. (3) 由上述算法可知,2024年对应的“天干地支”为
王五为学生们设计了学校食堂学生校园卡查询系统,在终端机上输入学生的校园卡卡号,可以查出该卡对应的学生姓名及相应的余额。

校园卡信息存储在一个综合的数据库“school.mdb”,其中的“Yue”数据表用来存储学生的校园卡基本信息,包括学号(num)、姓名(name)、余额(money),括号内的为对应字段名。下列VB程序用来实现根据学号查询并显示学生姓名及余额,运行界面如图所示:

数据库文件与应用程序在同一文件夹中,在文本框Text1中输入学生的学号,单击“查询”按钮,在标签Label4、Label5中分别显示学生姓名和余额。

Private Sub Command1_Click()

 Dim adocn As new connection

 Dim adors As new recordeset

 Dim str1 As string,str2 as string

 Str1=”driver=microsoft access driver(*.mdb);dbq=”&app.path&”\    ①      .mdb”

 Adon.open str1

 Str2=”select * from Yue where    ②     =’”+text1.text+”’”

 Adors.open str2,adocn,adOpenDynamic,adLockOptimistic

 If adors.eof then

  Msgbox”你输入的学号不存在!”

 Else

  Label4. caption =adors.Fields(“name”).value

       ③         =adors.Fields(“money”).value

 Endif

 Adors.close

 Adocn.close

End Sub

为了实现上述目标,在画线处填入合适的语句或表达式:

【加试题】有一组正整数,要求对其中的数据进行排列, 排列后奇数在前, 偶数在后。其中最后一个数据排到奇数与偶数交接处;自前到后的第一个偶数排到最后一个位置,空出的位置排列自后向前的第一个奇数,依此类推。排序示例如下。

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

Const n = 10

Dim a(1 To n) As Integer

Private Sub Command1_Click()

    Dim i As Integer, j As Integer

    Dim temp As Integer, flag As Boolean

    '读取一组正整数,存储在数组a中,代码略

    i = 1: j = n

    temp = a(j): flag = True

    Do While i < j

        If flag Then

            If a(i) Mod 2 = 0 Then

                a(j) = a(i)

                j=j-1

                flag=Not flag

            Else

                    '⑴

            End If

        Else

            If a(j) Mod 2 = 1 Then

                a(i)=a(j)

                flag=Not flag

            Else

                j=j-1

            End If

        End If

    Loop

         '⑵

    '依次输出排序后的数据,代码略。

End Sub

 ⑵

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

i = 1: j = 6: n = 0: f = False

Key = Val(Text1.Text)

Do While i <= j And Not f

  n = n + 1

  m = (i+j + 1) \ 2

  If Key = a(m) Then f = True

  If Key < a(m) Then j = m - 1 Else i = m + 1

Loop

数组元素a(1)到a(6)的值依次为“12,19,27,37,49,55”。若在文本框Text1中输入27,则以上程序段执行后,下列说法不正确的是(   )

A . 变量i的值为3 B . 变量j的值为3 C . 变量m的值为 3 D . 变量n的值为3
【加试题】有VB程序段如下:

num = 0

  For i = 1 To 3

    For j = 8 To i + 1 Step -1

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

         temp = a(j): a(j) = a(i): a(i) = temp

num = num +1

      End If

    Next j

  Next i

数组元素a(1)到a(8)的值依次为“25,44,16,34,57,25,34,60”,执行该程序段,变量num的值是(  )

A . 3 B . 5 C . 7 D . 10
【加试题】若数组元素d(1)到d(8)的值依次为“86,75,58,46,20,18,12,5”,查找某Key值的VB程序段如下:

n = 0 : i = 1 : j = 8

Key = Val(Text1.Text)

Do While i <= j

    m = (i + j) \ 2

        If Key = d(m) Then  Exit Do   'Exit Do表示退出循环

If Key > d(m) Then

j = m - 1 : n = n - 1

Else

i = m + 1 : n = n + 1

        End If

Loop

Label1.Caption = Str(n)

当输入不同的Key值,运行该程序段后,在标签Label1中显示的不同结果共有(  )

A . 5种 B . 6种 C . 7种 D . 8种
如图a所示,在excel中使用Rank函数可以快速地返回一个数字在数字列表中的排位,而且是同分同名次,非常方便。小明想用Vb编写一个程序来实现类似Rank排名次的功能,程序运行时,随机产生10个[60,100]之间的随机数,并显示在列表框List1中,单击“排名”按钮Command1,在列表框List2中输出数据及其排名,程序运行界面如图b所示。

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

Dim a(1 to 10) As Integer        ‘存储原始数据

Dim b(1 to 10)As Integer         ‘存放名次

Private Sub Command1_Click()

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

    For i=1 To 10

       n=0

       For j=1 To 10

         If    

         Then n=n+1      ‘①

                    ‘②

      Next j

Next i

For i= 1 to 10

    List2.Additem a(i)&”   ”&b(i)

Next i

End Sub

Private  Sub Form_Load()

    ‘随机产生10个[60,100]之间的随机数,并显示在List1中,代码略。

End Sub

①处代码应改为:

②处代码应改为:

有如下VB程序。

Function f(i As Integer)

    If i=1 Then

      f=2

    Else

      f=2 * 10 ^ (i-1)+f(i-1)

    End If

End Function

Private Sub Command1_Click()

    Dim n As Integer, s As Integer, i As Integer

    n=Val(Text1.Text)

    s=0

    For i=1 To n

      s=s+f(i)

    Next i

    Label1.Caption=Str(s)

End Sub

若在Text1中输入5,则Label1显示的内容为(  )

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

  1. (1) 如果输入的原数是3638132,删除3位数字,则输出的新数是
  2. (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

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

i = 1: j = 8: s = ""

key =Text1.Text

Do While i <= j

  m =(i + j) \ 2

  If key = a(m) Then

   s = s + "M"

   Exit Do

  ElseIf key > a(m) Then

   j = m - 1: s = s + "L"

  Else

   i = m + 1: s = s + "R"

  End If

Loop

Text1.Text = s

数组元素a(1)到a(8)的值依次为“4,22,27,32,35,44,56,59”,该程序段执行后,文本框Text1中显示的内容不可能是(  )

A . M B . LR C . RM D . LM
数组a中存储了n个学生的学号和成绩数据,其中奇数位置存储学号信息,偶数位置存储成绩信息,数组存储结构如图a所示:

图a排序前数组a存储结构

小迪同学使用选择排序思想对上述n个同学按成绩进行降序排序(成绩相同的按学号升序排列),并依据成绩插入各位同学的名次信息,处理结束的数组a结构如图b所示:

图b排序后数组a存储结构

小迪同学使用VB编写了成绩处理程序,程序运行界面如图c所示:

图 c

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

Const n = 20

Dim a(1 To 3 * n)As Integer

Private Sub Command1_Click()

'读取数据,存储在数组a中,并显示在列表框List1中

'代码略

End Sub

Private Sub Command 2_Click()

     ‘①改错

  k = i

  For j= 1 Toi-1

    If a(2 * j)<a(2 * k)Or  ②   Then

      k = j

    End If

  Next j

  a(3 * i)= a(2 * k)

  a(3 * i-1)= a(2 * k-1)

    ③ 

  a(2 * k- 1)= a(2 * i- 1)

Next i

Lisi2.Addltem"第1名:学号"+ CStr(a(2))+",分数"+Str(a(3))

a(1)=1

mc=1

For i=2 To n

  If   ④   Then mc = i

  List2.Addltem"第"+Str(me)+"名:学号"+CStr(a(3 * i-1))+",分数"+Str(a(3 *

  i))

  a(3 * i-2)= mc

Next i

End Sub

  1. (1) 已知窗体名称为Form1,要使程序加载时,窗体标题自动显示为“第15题程序”,则可在____(单选,填字母)事件过程中添加代码:Form1.Caption=“第15题程序”。
    A . Form_Click() B . Form_Load() C . Form1_Click() D . Form1_Load()
  2. (2) 程序加框处For循环语句有错,请改正。
  3. (3) 请将程序②③④划线处代码补充完整。

编号分别为1~n(n为偶数)的学生分成两组进行投篮比赛,奇数编号的为第一组,偶数编号的为第二组。对每个分组的成绩按从高到低排序,先比较处于分组第1位的两个队员成绩,成绩高的得1分,低的扣1分,相等均不得分,再依次比较处于分组相同位置的队员成绩,最后得到每组得分。

    如10名运动员1号到10号的成绩分别是“13,6,9,8,10,11,10,14,16,13”,从高到低排序后,第一组的成绩依次是“16,13,10,10,9”,第二组的成绩依次是“14,13,11,8,6”。第1位的成绩分别是16和14,则第一组获胜得1分,第二组扣1分,再比较两个分组第2位的成绩13和13,则两组均不得分。依次处理,比较完剩余队员的成绩,可得第一组得分为2,第二组得分为-2。

    编写一个VB程序,实现如下功能:在文本框Text1中依次输入成绩(偶数个整数,用逗号分隔并以逗号结尾),单击“确定”按钮Command1后,在列表框List1中显示对阵编号、对阵成绩及两个分组的最后得分。程序运行界面如图所示。

  1. (1) 下列对象不具有Caption属性的是(单选,填字母:A .Command1/B .Form1/C .Text1/D .Label1)
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

    Private Sub Command1_Click()

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

    Dim s As String, ch As String, sum1 As Integer, sum2 As Integer

    Dim bh (1 To 50) As Integer, cj(1 To 50) As Integer

    s= Text1.Text

    j= 1: k=0

      For i= 1 To   ①  

        ch = Mid(s, i, 1)

        If Not (ch>= "0" And ch <= "9") Then

            k=k+1

            bh(k)=k

            cj(k) = Val(Mid(s, j, i-j))

                ②   

        End If

      Next i

      For i= 1 To k-2 Step 2

        For j= k To   ③   Step -1

            If cj(j)> cj(j-2) Then

                t= cj(j): cj(j)=cj(j-2): cj(j-2)=t

                t= bh(j): bh(j)= bh(j-2): bh(j-2)=t

            End If

        Next j

      Next i

      sum1 = 0: sum2= 0

      List1 .AddItem "对阵编号  对阵成绩"

      For i=1 To k- 1 Step 2

        If cj(i)> cj(i+1) Then

            sum1 = sum1 + 1: sum2 = sum2- 1

       

            sum1=sum1-1: sum2=sum2+1

        End If

        List1.AddItem adj(bh(i)) + "<-->" + adj(bh(i+1)) + adj(cj(i)) + "<-->" + adj(cj(i+1)

      Next i

      List1.AddItem"第一组得分: "+ adj(sum1)

      List1.AddItem"第二组得分: " + adj(sum2)

    End Sub

    Function adj(x As Integer) As String

    ‘函数功能:将数值x转换成字符串,并在字符串的左侧添加若干空格。代码略

    End Function

     ② ③ 

  3. (3) 程序代码中的加框处代码有误,请改正。
某对分查找算法如下:

i=1:j=6:c=1

key=int(rnd*100+1)

do while i<=j

    m=(i+j)\2

    c=c+1

    if key<d(m) then j=m-1 else i=m+1

loop

数组 d(1)~d(6)的值分别为“17,21,29,32,39,75”,则程序运行结束后,下列说法错误的是(     )

A . i=j+1 是成立的 B . 若 key=21,则 i=1 C . 当 key=32 时, m=j 是成立的 D . 若 key 如果是 38,那么 m=4
假定一组记录为(46,79,56,64,38,40,84,43),在冒泡排序的过程中,进行第一趟排序结束时,元素40不可能在哪个元素之后(    )
A . 38 B . 46 C . 56 D . 64
(加试题) 有如下 VB 程序段:

Dim a(1 To 10) As Integer

Dim s As String, n, i As Integer

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

For i = 1 To n - 1

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

Next i

For i = 1 To n - 2

    k = i

    For j = i + 1 To n - 1

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

    Next j

    If k <> i Then

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

    End If

Next i

Text1.Text = Str(a(1))

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

A . 18 B . 54 C . 85 D . 8
采用选择排序算法对数据序列“8,9,6,1,3,0,-6,5”完成降序排序,则需要比较的次数为(   )
A . 4 次 B . 8 次 C . 28 次 D . 56 次
已知数组a中存储了n个无序的整数,通过引入数组b,数组b中存储了数组a中元素按降序排序时的下标,使得a(b(1))≥a(b(2)) ……≥a(b(n)),从而对数组a中的元素进行对分查找。部分代码如下:

i=1:j=8 :key=20

Do While i<=j   

     m=(i+j)\2

     t=b (m)

     If a(t)=key Then p=t:Exit Do

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

Loop

数组元素a(1)~a(8)的值分别为“30,9,8,15,20,6,29,11”,程序运行结束后变量m的值为(    )

A . 2 B . 3 C . 4 D . 5
以下适合使用解析算法求解的问题是(     )。
A . 求正整数n所有约数的和 B . 已知一元二次方程的三个系数,求方程的解 C . 已知两个整数a和b,求它们的最大公约数 D . 找出一筐乒乓球中质量不符合标准的球
有一组升序排列的数:5,17,21,25,33,49,58,67,如果用对分法查找数“58”,则依次访问的数据为(     )
A . 25,49,58 B . 25,33,58 C . 33,49,58 D . 25,33,58
二分查找实际上就是(       )的一种典型运用。
A . 动态规划法 B . 分治策略 C . 回溯法 D . 递推法