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

【加试题】有如下VB程序段:

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

  i=1.j=6:flag=False:key=56

  Do While i<=i

    m=i+(j-i)\2

    If a(m)<=key Then

       i=m+1

    Else

       j=m-1:flag=True

    End If

  Loop

  If flag Then t=i Else t=-1

数组元素a(1)到a(6)的值依次为10,18,25,30,45,56。该段程序运行后,t的值是(  )

A . -1 B . 1 C . 5 D . 6
【加试题】某同学用VB编写如下程序:

  Private Sub Command1_Click()

    Dim k As Integer,a As Integer,b As Integer

    a=Val(Text1.Text)

    b=Val(Text2.Text)

    Label1.Caption=trans(a,b)

  End Sub

  Function trans(m As Integer,n As Integer)As String

    If m<>0 Then

       r=m Mod n

       trans=trans(m\n,n)+Str(r)

    Else

      trans=0

     End If

    End Function

程序运行时,在文本框Text1和Text2中分别输入11和2,则Label1中的输出结果是(  )

A . 01011 B . 1011 C . 01101 D . 11010
编写一个删除数字字符串s中的最大和次大数字字符的程序。具体功能如下:在文本框Text1中输入一个数字字符串,单击“删数”按钮Command1,将删除后的结果显示在文本框Text2中。程序运行界面如下图所示:

  1. (1) 要使程序运行时,按钮Command1上显示的标题为“删数”,可在Form_Load事件处理过程中添加语句(单选,填字母:A .Caption.Command1=″删数″/B .Command1.Caption=″删数″/C .Caption=″删数″)。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Private Sub Command1_Click()

    Dim s As String,ch As String

    Dim i As Integer,n As Integer

    Dim max1 As Integer,max2 As Integer

    s=Text1.Text:n=Len(Text1.Text)

    If Mid(s,1,1)>Mid(s,2,1) Then

    max1=1:max2=2

    Else

    max1=2:max2=1

    End If

    For i=3 To n

    ch=Mid(s,i,1)

    If ch>Mid(s,max1,1) Then

    max1=i

    ElseIf ch>=Mid(s,max2,1) Then

    max2=i

    End If

    Next i

    For i=1 To n

    If Then Text2.Text=Text2.Text & Mid(s,i,1)

    Next i

    End Sub

  3. (3) 若在文本框Text1中输入的内容为“82176736”,单击按钮Command1,文本框Text2中显示的内容是
有一组数,依次为3、2、8、5、9,若采用选择排序算法对其进行从大到小排序,其中排序方向为从前向后,则第二趟的排序结果是:(   )

图片_x0020_100003

A . 9  2  8  5  3 B . 9  5  8  2  3 C . 9  8  2  5  3 D . 9  2  8  3  5
下列VB程序功能可以找出1000以内的完全数,并在标签中一一列出来。

Private Sub Command1_Click()

 Dim i As Integer, m As Integer, n As Integer

    Label1.Caption = "1000以内的完全数如下:"

    For i = 1 To 1000

        n = 0

        For m = 1 To i \ 2

            If i Mod m = 0 Then n = n + m

        Next

        If n = i Then Label2.Caption = Label2.Caption & "" & Str(i)

    Next

End Sub

该过程采用的算法是(    )

A . 枚举 B . 查找 C . 排序 D . 解析
某查找算法的部分VB程序代码如下:

i=1:j=8:k=0

key=95

Do While i<=j

k=k+1

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

If key=a(m) Then Exit Do

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

Loop

数组元素a(1)到a(8)的数据依次为“12,28,49,56,57,88,95,100”,该程序运行过程中,当变量k的值为2时,对应查找的a(m)值是(  )

A . 28 B . 56 C . 88 D . 95
   二分查找又叫,该方法主要将数列排列,采用的方式查找数据。二分查找是一种高效的查找方法。它可以明显减少比较次数,提高查找效率。
用Python访问Access数据库一般可分为个步骤:

第一步:建立与的连接;第二步:根据需要

第三步:访问记录集,

第四步:根据需要把处理好的数据中;

第五步:与数据库的连接。

有如下VB程序段:

For i = 1 To Len(Text1.Text)

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

  If c >= "0" And c <= "9" Then

    x = Val(c)

    a((x + 1) Mod 10) = a((x + 1) Mod 10) + 1

  End If

Next i

s = ""

For i = 0 To 9

  s = s & a(i)

Next i

Text2.Text = s

数组元素a(0)到a(9)的值均为0,执行该程序段后,文本框Text2显示的内容为“1302000100”。则文本框Text1中输入的内容可能是(   )

A . 2020-6-09 B . 2020-02-28 C . 2020-6-01 D . 2019-01-07
阅读程序,回答问题。
  1. (1) 将程序中的空白处补充完整。

    Private Sub Form_Click()

        Dim y, s, n As Integer

        n = InputBox("输入n")

        y = 0:

        Do While n \ 10 <> 0

            y = n Mod 10

            s = s + y

            n = n \ 10

        Loop

       

        Print s

    End Sub

  2. (2) 将流程图中的空白处补充完整。

    ①处应填写:;②处应填写:

  3. (3) 若输入n的值为62,程序执行完毕,s的值是,该程序采用类型的算法。(解析法/穷举法)
数学中的“自守数”:如果一个数的平方数的末几位等于该数本身,这个数就是自守数。例如:

5*5=25

6*6=36

25*25=625

76*76=5776

……

那么,5、6、25、76 等数被称为自守数。小袁编写一个 VB 程序,实现如下功能:找出 10000 以内所有可能的自守数,单击“统计”按钮 Command1,将符合要求的自守数显示在列表框 List1 中,统计个数显示在标签 Label1 中,运行界面如图所示。

  1. (1) 程序运行时要在按钮上显示“统计”,应设置该按钮的属性。
  2. (2) 为实现上述功能,请在划线处填入合适的代码。

    Private Sub Command1_Click()

        Dim n As Single, k As Integer, t As Integer, c As Integer

        List1.Clear c=0

        For n = 5 To 10000

            k = Len(Trim(n))               'Trim()函数用于删除字符串前后的空格

            t = (n * n) Mod     ①     

            If t = n Then

                List1.AddItem Str(n)

                  ② 

            End If

        Next n

        Label1.Caption = "自守个数为:" + Str(c)

    End Sub

    为实现上述功能,划线处应填入的代码分别为

  3. (3) 解决该问题采用了(选填:枚举/解析)算法。
火柴棒等式。用火柴棒可以摆出0-9的数字,摆放规则如下图所示:

有一种火柴棒游戏,将火柴棒摆成形如“A+B=C”的火柴棒等式。用n根火柴棒摆放数学等式的规则约定如下:

⑴A、B都是不大于1000的正整数,若数值非零,则最高位不能是0;

⑵摆放“+”与“=”各使用两根火柴棒;

⑶A+B=C 与B+A=C视为相同的等式;

⑷n根火柴棒必须全部用上。

小明依据上述规则使用VB编写程序,研究“使用n根火柴棒,可以摆放出哪些不同的等式”,代码如下所示。请回答下列问题。

Dim sz(0 To 9) As Integer     ‘数组元素sz(i)用于存储数字i所使用的火柴棒的数量

Private Sub Form_Load()

    sz(0) = 6 : sz(1) = 2 : sz(2) = 5 : sz(3) = 5 : sz(4) = 4

    sz(5) = 5 : sz(6) = 6 : sz(7) = 3 : sz(8) = 7 : sz(9) = 6

End Sub

‘自定义函数hcs用于求解摆放数字x需要使用的火柴棒数量

Function hcs(ByVal x As Integer) As Integer

    Dim s As Integer, k as integer

    s = 0

    Do While     ①    

        k = x Mod 10

        s=s+sz(k)

        x = x \ 10

    Loop

    hcs = s + sz(x)

End Function

Private Sub Command1_Click()

    Dim n As Integer

    Dim a As Integer, b As Integer, c As Integer

    n = Val(Text1.Text)

    ans = 0

    List1.Clear

    For a = 0 To 999

        For b =    ②     To 999

            c = a + b

            If     ③    Then

                List1.AddItem (Str(a) + "+" + Str(b) + "=" + Str(c))

                ans = ans + 1

            End If

        Next b

    Next a

    List1.AddItem ("共有" + Str(ans) + "种等式")

End Sub

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

     ② ③ 

  2. (2) 某次运行程序时,显示的等式中包含“7+17=24”,根据程序分析,输入的n的值为:
有如下VB程序段:

For i=1 To 2

    For j=6 To i+1 Step -1

        If a(j) Mod 10 > a(i) Mod 10 Then

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

        End If

    Next j

Next i

执行上述程序段后,下列选项中,a(1)到 a(6)各元素值不可能的是(      )

A . 74,83,41,1,70,10 B . 79,46,4,64,53,71 C . 16,75,35,60,54,91 D . 49,56,19,25,82,32
采用冒泡排序算法对某数据进行降序排列,经过第一轮排序后的结果是“2,3,4,1,5,0”,那么原数据序列不可能的是(    )
A . 2,3,0,4,5,1 B . 0,2,3,4,1,5 C . 1,2,3,4,0,5 D . 2,0,3,4,1,5
某算法的VB程序段如下:

i=1: flag=True

Do While i<6 And flag=True

    flag=False

    For j =6 To i+1 step -1

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

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

            flag=True

        End If

    Next j

    f(i)=1          'f 数组初值均为 0

    i=i+1

Loop

For i=1 To 6

    s=s+f(i)

Next i

数组元素a(1)到a(6)的值依次为“17,79,93,55,15,13”,执行该程序段后,s的值是(     )

A . 3 B . 4 C . 5 D . 6
有如下VB程序段:

s ="ghi jabcdef"

key = Chr(97 + 3 * Int(Rnd * 4))

i =1:j=Len(s)

Do While i< = j

    m=(i+j+1)\2

    ans=ans+Str(m)

    c = Mid(s,m,1)

    If c=key Then Exit Do

    If Mid(s,i,1) < c Then

       If key>=Mid(s,i,1) And key<c Then j=m-1 Else i=m+1

    Else

       If key>c And key <= Mid(s,j,1) Then i =m+1 Else j=m- 1

    End If

Loop

运行程序后,变量ans的值不可能是(    )

A . 632 B . 6354 C . 635 D . 698
某种字符加密方法描述如下:

①将明文字符串s中的每个字母字符根据它所在该字符串的位置,往后移动相应的位置,并转化为对应的小写或大写字母(例如:大写字母A往后移动5位变成F,转化成小写字母得到f;小写字母y往后移动8位得到g,转化成大写字母得到G),非字母字符不处理,得到新串ss。

②将①得到的新串ss平均切割成两部分,若ss的长度n为奇数,则第一部分长度为n//2+1,第二部分长度为n//2。再将后面一段字母依次逐个插入前一段字符后边,组成一段密文。

例如“Good.Luck!”生成密文过程如下:

①明文字符串s移位和大小写转换过程:

下标位置

1

2

3

4

5

6

7

8

9

10

原始字符

G

o

o

d

.

L

u

c

k

向后移动i位

H

q

r

h

.

R

b

k

t

大小写转换

h

Q

R

H

.

r

B

K

T

②将①得到的密文ss平均切割成两部分。

例如将上述①得到的字符串中6~10位置的字符依次逐个连接在1~5字符后面,生成密文如图a所示:

图a

  1. (1) 若有一个待加密字符为“Python!”,根据上述加密规则,加密后的密文是
  2. (2) 已知采用上述加密方法得到的密文是“iTCDS!”,反推出明文是

    下标位置

    1

    2

    3

    4

    5

    6

    密文字符

    i

    T

    C

    D

    S

    !

    位置交换

    大小写转换

    向前移动i位

某选考技术的班级组织班会活动,想把全班所有同学分配到若干个小组进行答题比赛。每个同学都有一个能力值(且能力值为大于0的整数),同个小组的同学能力值必须连续,并且同个小组成员能力值不能重复。例如:[1,2,3]是合法的分组方案,因为能力值连续:[1,2,5]不是合法的分组方案,因为能力值不连续:[1,1,2]同样不是合法的分组方案,因为出现了两个能力值为1的选手。如果有小组内人数太大少,就会因为时间不够而无法获得高分,给出一个合理的分组方案,满足所有人都恰好只分到一个小组,并且使得人数最少的组人数最多。

例如能力值分别为“1,2,2,3,4,5”进行分组,分成两种方案:

方案一,可以分(2)和(1,2,3,4,5)两组:

方案二,可以分(1,2)和(2,3,4,5)两组:

可见,方案二分组中人数最少的组人数更多,因此该方案更优。根据上述要求编写VB程序,程序运行界面如16题图所示。

  1. (1) 若班级里有6名同学,能力值分别为1,2,2,3,3,4,则分组后最少的组人数为
  2. (2) 编写VB程序实现上述功能,代码如下,请在划线处填入合适的代码。

    Private Sub Command1 Click()

      Dim a(1000) As Integer, q(1000) As Integer

      Dim top As Integer '表示分组数量

      Dim sum(000 As Integer '存储每组的人数

      ‘初始化得到n位同学的能力值,分别存储在a(1)-a(n)中,并升序排序,代码略

      top=0

      For k= 1To n

        i=0:j =top

        Do While i< j

           m=(i+j+1)\2

            If q(m)<=a(k) Then

              

           Else

              j=m-1

            End If

        Loop

        If q(i) <> a(k) Then

            top=top+1

            sum(top) = 1

           

        Else

             sum(i) = sum(i) + 1

          

        End If

      Next k

      ans = sum(1)

      For k= 2 To top

            If sum(k) < ans Then ans = sum(k)

      Next k

      Label1. Caption = “人数最少的一组人数最多为” + Str (ans)

    End Sub

有如下程序段:

i=1 : j=10 : key= 20

Do While i<=j

     m=(i+j)\2

     If a(m)> key Then

         j=m- 1

     Else

         i=m+1

     End If

Loop

如a数组中的元素依次为2,9,10,12,15,20,20,20,21,25,下列各变量值正确的是(    )

A . i=9 B . j=9 C . i=6 D . j=6
某超市管理人员需要对一周以来商品交易的部分流水账单进行分析,以找出销售额排在前3名(同金额同名次)的商品信息。

编写VB程序,实现上述功能。运行程序,在列表框List1中显示每笔交易流水记录的商品货号与销售金额,单击“分析”按钮Command1,汇总同类商品的销售额并在列表框List2中显示销售额前3名的商品货号与销售金额。程序运行界面如图所示。

  1. (1) 在列表框中显示结果时,使用到的“AddItem” 是

    (单选,填字母: A .类名/B .属性名/C .方法名/D .事件名)

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

    'n是交易流水的记录总数,ng是商品种类,代码略

    Dim goods(1 To n) As String      '每笔交易的商品货号

    Dim money(1 To n) As Single      '每笔交易的销售金额

    Dim g(1 To ng) As String

    Dim c(1 To ng) As Single

    Private Sub Form_ Load ()

        '读取每笔交易流水,分别将商品货号存入数组goods、销售金额存入数组money

        'g(1)~g (ng)分别存储ng种商品的货号,在List1中显示交易记录信息,代码略

    End Sub

    Private Sub Command1_Click ()

        Dim i As Integer, j As Integer, tc As Single, tg As String

        For i=1 To n

            For j=1 To ng

                 If goods(i) = g(j) Then

            Next j

        Next i

        i =1

        Do While i <= ng

            Fo rj=ng To i+1 Step-1

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

                    tc=c(j) : c(j)=c(j-1) : c(j-1)=tc

                    tg=g(j) : g(j)=g(j-1) : g(j-1)=tg

                 End If

            Next j

            If  Then Exit Do

            i =i+1

        Loop

        For j=1 To

            List2.AddItem g(j) +“”+ Str(c(j))

        Next i

    End Sub

  3. (3) 程序中加框处代码有误,请改正。