• 1、小明编写了一个字符串加密程序,功能如下:在文本框Text1中输人明码,单击“加密”按钮Command1后,在文本框Text2 中显示加密后的密文,运行界面如图所示。加密算法如下:

    ①将明码中每个字符的八位二进制ASCII码(不足八位的左端补0,凑足八位)分成两段(左4位一段,右4位为另一段),如字符“C”的二进制ASCI值为01000011,分段后为0100,0011 ;

    ②将高位段(左边4位)左移一位,并将原第一位数码移到第4位(如0100转化为1000),再转化为十六进制数(如1000 化为8);

    ③对另一段(右4位)执行2)所示算法,如0011→0110→6;

    ④顺次连接两位十六进制数,得到该字符的暗码,如“C”的暗码为“86”;

    ⑤将每个字符的暗码按照明码的顺序连接。

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

    Private Sub Command1_Click()

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

        Dim c As String, x As Integer, y As Integer

        Dim d(1 To 8)As Integer    '数组d存储字符ASCII码二进制从左到右的各位数码

        Dim mw As String    'mw存储暗码

        mw = " "

        For i=1 To Len(Text1. Text)

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

            For j=1 To 8

                d(j)=0

            Next j

            m= Asc(c)

                ①    

            Do While m>0

                d(k)=m Mod 2

                m=m\2

                k=k-1

            Loop

            x=d(1) : y=d(5)

            For j=1 To 3

                d(j)=d(j+1)

                    ②   

            Next j

            d(4)= x:d(8)=y

            mw= mw十btoh(d)

        Next i

        Text2. Text= mw

    End Sub

    '以下函数是将数组元素中的二进制数转换成对应的十六进制数

    Function btoh(m() As Integer) As String

    '将数组m作为函数的参数

        Dim s As Integer, i As Integer

        Dim str As String, ch As String

        str=" "

        s=0 : ch=" "

        For i=1 To 8

            s=s * 2+m(i)

            If i=4 Then

                ch= Mid(str, s+1, 1)

                s= 0

            End If

        Next i

            ③    

    End Function

    (1)、按照加密算法,字符“J”的密文是
    (2)、请在划线处填入合适代码。

     ② ③ 

  • 2、用英文字母A~D对数字字符0~9进行编码,规则如下表所示:

    数字字符

    0

     

    ……

    7

    8

    9

    二进制值

    0

    0

    0

    0

    0

    0

    0

    1

    ……

    0

    1

    1

    1

    1

    0

    0

    0

    1

    0

    0

    1

     

    十进制值

    0

    0

    0

    1

    ……

    1

    3

    2

    0

    2

    1

    对应编码

    A

    A

    A

    B

    ……

    B

    D

    C

    A

    C

    B

                                                 

    例如,数字字符串“709”的编码为“BDAACB”

    用VB程序实现上述编码,功能如下:在文本框Text1中输入编码的一串数字字符,单击“编码”命令按钮Command1,在文本框Text2中显示编码结果。程序运行界面如图所示。

    (1)、下列属于VB窗体文件的是          (单选,填字母)。
    A、szbm. vbp B、szbm. frm C、szbm. exe
    (2)、实现_上述功能的VB程序如下,请在划线处填入合适的代码。

    Private Sub Command1_ Click( )

        Dim code As String, s As String, ch As String, result As String

        Dim i As Integer, numL As Integer, numR As Integer

        Dim flag As Boolean

        code= "ABCD"

        s= Text1. Text

        flag= True

        result=“”

        For i= 1 To Len(s)

            ch= Mid(s, i, 1)

            If ch<"0" Or ch>"9" Then

                

                Exit For     '退出循环

            Else

                numL= Val(ch) \ 4

                numR=

                result = result +Mid ( code, numL+1, 1)+Mid(code, numR+1, 1)

            End If

        Next i

        If flag Then

            Text2. Text= result

        Else

           Text2. Text="输入错误"

        End If

    End Sub

    (3)、运行该程序,若在文本框Text1中输入“A5”,单击“编码”命令按钮Command1,在文本框Text2中显示编码结果为 。
  • 3、双调序列:指的是有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

  • 4、某学校采用校分制对教师实行分星级考核,每位教师的校分数据存储在数据库中。教师的校分与其星级对照如下表:

    校分

    1~20

    21~40

    41·60

    61~80

    81~100

    星级

    一星

    二星

    三星

    四星

    五星

    现要求依据上表统计出各个星级的教师人数占总人数的比例。小李编写VB程序实现该功能。程序运行时,每位教师的校分数据存储到数组a中,并在列表框List1中显示,单击命令按钮Command1后,在列表框List2中显示各个星级的教师人数占总人数的比例。程序运行界面如下。

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

    Const n=220     '常量n 用于存储教师总人数

    Dim a(1 To n)As Integer     '数组a用于存储每位教师的校分数据

    Dim b(0 To 4)As Integer     '数组b用于存储每个星级的总人数

    Private Sub Form_ Load()

        '本过程用于将每位教师的校分数据存储到数组a中,并在列表框List1中显示

        '代码略

    End Sub

    Private Sub Command1_ Click()

        Dim xj As String

        Dim con As Single

        xi=“一星二星三星四星五星”

        For i=0 To 4

            b(i)=0

        Next i

        For i=1 To n

                 '

        Next i

        For i=0 To 4

            con=Int(b(i)/ n * 100+0. 5)

            List2. Addltem  +Str(con)+“%”    '

        Next i

    End Sub

  • 5、小王通过抽样调查的方式,获得了96人的信用分值(整数,大于349且小于950)。要求对其各个分段进行统计,并输出分布最广的3个分段及其个数和百分比,但不包含650~ 699这一段(此段为系统默认,属于第7段)。分段说明:350~399分为第1段,400~449为第2段,450~499为第3段,以此类推,共分为12段。

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

    Const n= 96

    Dim d(1 To n) As Integer

    Private Sub Command1_ Click()

        Dim fd(1 To 12) As Integer      '存储每个分段内人数

        Dima(1 To 12)AsInteger      '存储每个分段内人数的副本

        Dim b(1 To 12) As Integer      '存储每个分段编号的副本

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

        Dim p As Single, templ As Integer, temp2 As Integer

        For i=1 To n

            t=    '

            fd(t)=fd(t)+ 1

        Next i

        For i=1 To 12

            a(i)= fd(i) : b(i)=i

        Next i

        For i=1 To 3     '排序时第7段数据不参与排序

            k=i

            For j=i+1 To 12

                If a(j)>a(k) Then k=j     '

            Next j

            If k<>i Then

                temp1=a(i): a(i)=a(k): a(k)= temp1

                temp2=b(i): b(i)=b(k): b(k) = temp2

            End If

        Next i

        For i=1 To 3

            p= Int(a(i),n* 1000+0. 5)/10      ' 百分比,保留一位小数

            List1. Additem“分数段”+Str(b(i))+“个数”+str(a(i))+“百分比”+Str(p)+“%”

        Next i

    End Sub

    Private Sub Form_ Load()

        '获取n个人的“信用分”,并存储在数组d中

        '代码略

    End Sub

  • 6、编写一个VB程序,功能如下:随机产生100个0到99之间的整数,在列表框list1中显示,单击“统计”按钮Command1,统计落入各范围的整数个数,在列表框List2中按从高到低的顺序显示各范围的整数个数。程序运行界面如图所示。

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

    Const n= 100

    Dim a(1 To n) As Integer

    Private Sub Form_ Load()

        '随机产生100个0到99之间的整数存数组a中,并在列表框list1中显示。

    End Sub

    Private Sub Command1_ Click()

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

        Dim b(0 To 9) As Integer, c(0 To 9) As Integer

        For i=1 To n

                  '

        Next i

        For i=0 To 9

            b(i)=i

        Next i

        i=0

        Do While i <=8

            For j=i+1 To 9

                If  Then     '

                    t=b(i) : b(i)=b(j) : b(j)=t

                    t=c(i) : c(i)=c(j) : c(j)=t

                End If

            Next j

            i=i+ 1

        Loop

        List2. AddItem“范围元素个数”

        For i=0 To 9

            List2. AddItem Str(b(i) * 10)+ “~”+Str(b(i) * 10+9)+“:”+Str(c(i))+“个”

        Next i

    End Sub

  • 7、对n个互不相同的整数(整数的最大值不超过m)进行排序,排序要求如下:①奇数在前,偶数在后;②奇数升序排序;③偶数降序排序。小刘用VB编写了实现上述功能的程序。程序运行时,自动产生n个不同的随机数存储在数组a中,并在列表框List1中显示。单击按钮Command1后,按要求在列表框List2中输出排序后的结果。

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

    Const n=15

    Const m=100      '整数的最大值

    Dim a(1 To n) As Integer

    Private Sub Form_ Load()

        '本过程产生n个不重复的随机数存储在数组a中,并在列表框List1中显示

    End Sub

    Private Sub Command1_Click()

        Dim i As Integer

        Dim flag(1 To m) As Boolean      'flag(i)= True代表数组a中存在值为i的元素

        For i=1 To m

            flag(i)= False

        Next i

        For i=1 To n

                 '

        Next i

        For i=1 To m-1 Step 2

            If flag(i) Then List2. AddItem Str(i)

        Next i

        For     '

            If flag(i) Then List2. AddItem Str(i)

        Next i

    End Sub

  • 8、某排序算法思想如下:若有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

  • 9、数字频率统计:小王编写VB程序,实现如下功能:在Text1中输入一串包含数字的任意字符串,单击“统计”按钮Command1,在列表框List1中统计并输出数字0~9出现的次数,并在标签框Label1中输出出现次数最多的数字(次数相同的数字只要求输出其中的第一个)。运行界面如图所示,VB程序代码如下。

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

    Private Sub Command1_ Click()

        Dim a(0 To 9) As Integer, s As String

        Dim k As String, i As Integer, max As Integer

        s=Text1. Text

        List1. Clear

        For i=1 To Len(s)

            k=Mid(s, I, 1)

            If k >=“0”And k <=“9”Then

                

            End If

        Next i

        max=0

        For i=0 To 9

            If  Then

                max= i

            End If

            List1. AddItem Str(i) &“出现了:”& a(i) &“次”

        Next i

        Label1. Caption=“出现次数最多的数字是:”&. Str( max)

    End Sub

  • 10、小慧在网上新学习了一种排序算法,这种算法是这样的:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列(注意,该算法不能从高位开始)。下面通过一组数据来演示这个过程,初始数组a(1 to 10)的元素分别是:231,507,394, 97, 821,6,370,479,50,643。因为该数组中最大的数是三位数,所以只需要三步,就可以完成该算法,

    第一步:

    依次根据各元素个位数的情况分别放入到编号为0到9的10个桶中,如下表:

    0号

    1号

    2号

    3号

    4号

    5号

    6号

    7号

    8号

    9号

    370

    50

    231

    821

     

    643

    394

     

    6

    507

    97

     

    479

    然后我们从0号桶到9号桶,依次将这些数装回a数组中,得到:370,50,231,821,643,394,6,507,97,479。注意:该过程中每个桶中的数的顺序不能随意更改。

    第二步:

    依次根据各元素十位数的情况分别放入到编号为0到9的10个桶中,如下表:

    0号

    1号

    2号

    3号

    4号

    5号

    6号

    7号

    8号

    9号

    6

    5507

     

    821

    231

    643

    50

     

    370

    479

     

    394

    97

    然后我们从0号桶到9号桶,依次将这些数装回a数组中,得到:6,507,821,231, 643,50,370,479,394,97。注意:该过程中每个桶中的数的顺序不能随意更改。

    第三步

    依次根据各元素百位数的情况分别放入到编号为0到9的10个桶中,如下表:

    0号

    1号

    2号

    3号

    4号

    5号

    6号

    7号

    8号

    9号

    6

    50

    97

     

    231

    370

    394

    479

    507

    643

     

    821

     

    然后我们从0号桶到9号桶,依次将这些数装回a数组中,得到:6,50,97,231,370,394,479,507,643,821。注意:该过程中每个桶中的数的顺序不能随意更改。到此,a数组中的元素已经有序,排序过程完成。

    小慧利用该算法写了一个VB程序,首先通过文本框Text1输人数组元素个数n,点击Command1命令按钮“生成数组”,产生n个1~9999之间的随机数,存储到a数组中,并显示到列表框list1中,然后点击Command2命令按钮“进行排序”,将数组a通过上诉算法进行排序,并将排序结果显示到列表框list2中。程序运行界面如下图所示:

    (1)、若原数组中有两个数相等,则按照该算法进行排序后,其在序列中的前后位置顺序是否会改变(选填:是\否)
    (2)、实现上述功能的程序如下,请在划线处填上合适的代码:

    Dim a(10000) As Integer

    Dim n As Integer

    Private Sub Command1_ Click()

        Dim i as Integer

        List1. Clear

        Randomize

        n= Val(Text1. Text)

        For i=1 To n

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

            List1. AddItem "a(" & i & "):" & Str(a(i))

        Next i

    End Sub

    Private Sub Command2_Click()

        List2. Clear

        Dim b(100000) As Integer     'b 数组记录每个桶中的数,给每个桶都分配了n个空间

        Dim leng(10) As Integer     'leng数组,用来记录每个桶中的数字数量

        Dim i as Integer, j as Integer, t as Integer

        For j=1 To 4

            For i=0 To 9     '对每个桶清零

              leng(i)=0

            Next i

            For i=1 To n     '装桶

                t =     '取相应的位上的数字

                leng(t)= leng(t) + 1

                p=

                b(p)=a(i)

            Next i

            cnt= 1

            For i=1 To 10     '从桶中倒出

                For k=1 To

                    a(cnt)=b((i-1) * n+ k)

                    cnt=cnt+1

                Next k

            Next i

        Next j

        For i=1 To n

            List2. AddItem "a(" &. i & "):" & Str(a(i))

        Next i

    End Sub

  • 11、编写一个技术成绩查询的VB程序。程序功能如下:在文本框Text1中输人分数key(0~ 50的整数),单击“查询”按钮Command1,查询出信息成绩大于等于key的所有记录,并以“信息”为主要关键字、“通用”为次要关键字均进行降序排序,结果输出在列表框List2 中。运行界面如图所示。

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

    Dim xm(1 To 600) As String      '存储学生姓名

    Dim xx(1 To 600) As Integer      '存储信息成绩

    Dim ty(1 To 600) As Integer      '存储通用成绩

    Dim n As Integer      '存储记录总数

    Private Sub Form_ Load()

        '本过程从数据库中读取学生数据,存储在相应的变量中,并在List1中显示

        '代码略

    End sub

    Private Sub Command1_ Click()

        Dim key As Integer,mid As Integer

        Dimi As Integer, L As Integer, R As Integer, k As Integer

        Dim tmpl As Integer, tmp2 As Integer

        '以“信息”为主要关键字、“通用”为次要关键字排序

        For i=1 To n-1

            k=i

            For j=i+1 To n

                If xx(k)< xx(j) or    ①    Then

                    k=j

                End If

            Next j

            If k<>i Then

                tmp1= xm(k) : xm(k)= xm(i) : xm(i)= tmp1

                tmp2 = xx(k): xx(k)=xx(i) : xx(i) = tmp2

                tmp2= ty(k) : ty(k)= ty(i) : ty(i) = tmp2

            End If

        Next i    '查询记录

        key= Val(Text1. Text)

        L=1 : R=n

        Do While L<=R

            mid=(L+R) \ 2

            If     ②     Then

                L= mid+1

            Else

                R= mid- 1

            End If

        Loop

        List2.Clear

        'vbTab相当于是键盘上制表符TAB按键的功能

        List2. AddItem“姓名”& vbTab &.“信息”&vbTab&“通用”

        For i=1 to    ③   

            List2. AddItem xm (i) & vbTab & xx(i) & vbTab & ty(i)

        Next i

    End sub

    (1)、观察上图,排序后第5位的学生姓名是
    (2)、请在划线处填入合适的代码。

     ② ③ 

  • 12、小李编写一个统计学生选考科目的VB程序,算法的基本思想是:检查每位学生选课组合的编码是否有效,对有效选择结果进行科目统计,根据各科次占有效人数的百分率求出各科排名。程序运行时,单击“显示”按钮Commmad1,学生选课数据显示在列表框list1中,各科编号及对应科目名称显示列表框list2中,单击“统计”按钮Commmad2,选课结果按各科百分率由高到低显示在列表框list3中,程序运行结果如图所示。

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

    Dim ach(1 To 500) As String     '存储各学生选课编码

    Dim bno(1 To 10) As Integer     '存储各科目编号

    Dim bname(1 To 10) As String    '存储各科目名称

    Dim bnum(1 To 10) As Integer    '存储各目被选次数

    Dim bmc(1 To 10) As Integer '存储各科目被选的名次

    Dim n As Integer, num As Integer

    Private Sub Command1_ Click()

        Dim i As Integer, km As String.

        km="物理化学生物政治历史地理技术"

        Dim cn As New ADODB. Connection, rs As New ADODB. Recordset, sql As String

        cn. Open "provider = Microsoft. Jet.oledb. 4. 0; Data Source="+App. Path +"\students. mdb"

        rs. Open " select * from choose", cn

        Do While Not rs. EOF

            n=n+1 : ach(n)=rs. Fields( "subject") : rs. MoveNext

        Loop

        rs. Close : cn. Close

        Set rs= Nothing

        Set cn= Nothing

        For i=1 To 7

            bno(i)=i : bname(i)= Mid(km, (i- 1) * 2 + 1, 2)

    List2. AddItem Str(bno(i)) + "---" + bname(i)

        Next i

    End Sub

    Private Sub Command2_ Click( )

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

        Dim c As String, per As Integer

        For i=1 To n

            If check(ach(i))= True Then

                For j=1To 3

                    c= Mid(ach(i), j, 1)

                    bnum(Val(c)) =   ①  

                Next j

                num= num+1

            End If

        Next i

        i= 1

        Do While i<=7     '该循环得到各学科被选人数的名次

            bmc(i)= 1

            For j=1 To 7

                If bnum(j) > bnum(i) Then     ②   

            Next j

            i=i+1

        Loop

        For i=1 To 7

            For j=1 To 7

                If    ③    Then

                    per= Int( bnum(j) * 100 / num *100) / 100

                    List3. AddItem Str( bno(j))+"---”+ bname(j) + "---" + Str(per) +"%"

                End If

            Next j

        Next i

    End Sub

    Function check(s As String) As Boolean

        '代码略!若学生选科代码有效,函数返回True,否则返回False

    End Function

    (1)、学生选课的编码数据存储在数据表中,其字段名为
    (2)、请在划线处填入合适的代码。

     ② ③ 

  • 13、某自主选车牌号系统,可以实现采用个性车牌选号码。当机动车所有人通过自编自排方式输入车牌号码,系统会进行号牌查询,如果还没有被使用,则提出信息“选车牌号码成功!”否则提示信息“车牌号码已被使用!”假设已使用车牌号码(数量小于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)、程序查找的数据库文件名称是
    (2)、在程序划线处填入适当的语句或表达式,把程序补充完整。

  • 14、小明利用所学的信息技术知识帮助语文老师设计一个语文学考等级查询系统,要求如下:输入某个等级,就能查出该等级的所有学生学号和姓名,并统计出该等级学生的人数,以便语文老师方便了解学生的学考情况。语文学考成绩分A、B、C、D、E五个等级,学生信息存储在数据库文件“stugrade.accdb”的数据表“Chinese”中,数据表“Chinese”的结构如图所示。

    VB程序运行界面如图所示,在文本框Text1中输入查询的等级,单击“查询”按钮Command1,在列表框List1中显示所有该等级的学生学号和姓名,并按照学号从小到大排序,并在标签Label2 处显示学生的人数,如果人数为0,则在列表框中显示“没有该等级的学生”。按此要求编写程序如下,在划线处填上合适的代码。

    Private Sub Command1_Click()

        Dim stuna(1 To 100) As String    '存放学生姓名的数组定义为stuna

        Dim stunum(1 To 100) As String    '存放学生学号的数组定义为stunum

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

        Dim t As String

        Dim cn As New ADODB. Connection

        '连接数据库

        Dim rs As New ADODB. Recordset

        Dim strSQL As String

        cn.ConnectionString =“Provider=Microsoft. ACE. OLEDB. 12. 0; Data Source=”+App. Path+“\stugrade. accdb”

        cn. Open

        strSQL=“select * from  where语文等级=‘ ”+Text1. Text+“’”

        Set rs. ActiveConnection= cn

        rs. Open strSQL

        n=0

        Do While Not rs. EOF   

            

            stuna(n)= rs. Fields(“姓名”). Value

            stunum(n)=rs. Fields(“学号”). Value

            rs. MoveNext

        Loop

        rs.Close

        cn.Close

        Set rs= Nothing

        Set cn= Nothing

            List1. Clear       '清除列表框

        If n=0 Then

            List1. AddItem“没有该等级的学生”

        Else

            For i=1 To n-1       '按学号排序

                For j=n To  Step - 1

                    If  Then

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

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

                    End If

                Next j

            Next i

            For i=1 To n

                List1. AddItem stunum(i)+“”+stuna(i)

            Next i

            Label2. Caption=“该等级的学生共有”+Str(n)+“名”

        End If

    End Sub

  • 15、小王设计了一个成绩查询程序,已知学生成绩按升序存储在数组a中,该程序的其中一个功能是在文本框Text1中输人数字Key,查找成绩等于Key的第一次出现的位置。如该数Key值存在,则返回其第一次出现的位置,如果不存在则返回0。程序设计界面如图所示,实现上述功能的VB程序如下,请回答下列问题:

    Const n= 10

    Dim a(0 To n) As Integer

    Private Sub Command1_ Click()

        '生成n个升序排列的数,存储在数组a中并在List1中显示,代码略

    End Sub

    Private Sub Command2_Click()

        Dim key As Integer, pos As Integer

        key= Val(Text1. Text)

        pos =    '改错

        If pos <>0 Then

            Label1. Caption="分数" + Str(a(pos))+"最早出现的位置:下标" + Str( pos)

        Else

            Label1.Caption="未找到符合条件的数据"

        End If

    End Sub

    Function find(L As Integer, R As Integer, key As Integer) As Integer

        If L> R Then

            find=0 : Exit Function

        Else

            m=(L+ R) \ 2

            If     ①     Then

                find= m

            ElseIf     ②     Then

                find= find(L, m - 1, key) .

            Else

                find= find(m + 1,R, key)

            End If

        End If

    End Function

    (1)、该程序界面中,包含Caption属性的对象共有
    (2)、加框处的代码有误,请修改
    (3)、在划线出填写合适的代码

     ② 

  • 16、张强编写了一个Visual Basic 程序,用于查找所有相同身高的同学编号。程序运行界面如图所示,在列表框List1 中显示所有同学的编号和身高(按身高从低到高排列),在文本框Text1中输人需要查找的身高,单击“查找”按钮Command1,在列表框List2中显示所有此身高的同学编号。数组a和数组b分别存储同学的编号和对应的身高(身高已从低到高排列)。

    解决此问题的程序代码如下:

    Const n As Integer= 10     'n为学生数

    Dim a(1 To n) As String       '数组a用于存储学生的编号

    Dim b(1 To n)As Integer数组b用于存储学生的身高

    Private Sub Command1_ Click()

        '此过程用于在列表框List2中显示给定身高的所有学生的编号,代码略。

    End Sub

    以下函数用于查找给定身高的学生的相关信息

    Private Function FindEx(k As Integer) As Integer

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

        i=1 : j=n

        f= False

        Do While (i <=j) And Not (f)

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

            If k=b(m) Then

                f=   ①  

            Else

                If k<b(m) Then

                    j=m-1

                Else

                        ②  

                End If

            End If

        Loop

        If f Then FindEx=m Else FindEx=0

        '找到返回m,否则返回0

    End Function

    Private Sub Form_ Load()

        '此过程用于对数组a和数组b进行赋值,并把数据显示在列表框List1中。代码略

    End Sub

    (1)、FindEx函数主要采用的算法是 (填:顺序查找/对分查找)
    (2)、在程序划线处,填入适当的语句或表达式,把程序补充完整

  • 17、编写程序实现如下功能:在数组a中生成n(n不超过100)个可重复的随机整数,按升序排列并显示在标签Label1中。在文本框Text1中输入一个整数,单击“查找删除”按钮Command1 ,采用对分查找法在数组a中查找该数。若找到,则从数组a中删除该数(该数后面的数组元素都前移,若有多个相同的数,则删除相同数中下标最小的那个),并在标签Label2中显示删除后的结果;否则,在标签Label2 中显示“该数未找到”程序运行界面如下图所示,实现上述功能的VB代码如下。

    Dima(1 To 100) As Integer, n As Integer

    Private Sub Form_ Load()

        '产生n个随机整数,按升序排序并在标签Label1中显示

    End Sub

    Private Sub Command1_Click() 

        Dim x As Integer, k As Integer, m As Integer

        Dim key As Integer, L As Integer, R As Integer

        key= Val( Text1. Text)

        L=1 : R= n

        Do While L<=R

            m=(L+ R) \2

            If  Then R=m-1 Else L=m+ 1   '改错

        Loop

        x=L

        If    ①    Or x> n Then

            Label2. Caption= "该数未找到"

        Else

            For    ②  

                a(k- 1)=a(k)

            Next k

            Label2. Caption=" "

            For k=1 To n-1

                Label2. Caption= Label2. Caption+Str(a(k))

            Next k

            n= n -1

        End If

    End Sub

    (1)、加框处代码有错,请改正。
    (2)、请在划线处填入合适的代码。

     ② 

  • 18、“轮转后有序数组(RotatedSortedArray)”是将有序数组取其中某一个数为分割点,将其之前的所有数都轮转到数组的末尾所得。比如{7,11,13,17,2,3,5}就是一个轮转后的有序数组,原有序数组中的子串{2,3,5}被轮转到了数组的末尾处。对于一个轮转后有序数组arr也可以进行二分查找,算法思路如下(以升序为例):每次根据查找的左侧位置L和右侧位置R求出中间位置M后,M左边[L, M]和右边[M+1,R]这两部分中至少一个是有序的(可根据中间位置数据和边界数据的大小关系判断)。

    arr[M]和待查找数据Key比较

    ①arr[M]=Key,返回M的值

    ②若M位置的右侧有序,当待查找数据在右侧,则下次在右侧查找,否则在M左侧查找

    ③若M位置的左侧有序,当待查找数据在左侧,则下次在左侧查找,否则在M右侧查找

    (1)、对于轮转后有序数组{ 7,11,13,17,2,3,5}使用以上函数search( )查找key值3,所需要的查找次数为
    (2)、以下VB函数Search()实现了对轮转后有序数组arr进行二分查找的过程,如果查询成功,返回m值,查询失败则返回- 1。请补充程序中划线处的代码:

    Function Search (key As Integer, L As Integer, R As Integer) As Integer

        

        Do While L <=R And Search=- 1

            M=(L+ R)\2

            If arr(M)= key Then

                Search= M

            Else

                If Then

                    If arr(L)<=key And key <arr(M) Then

                        R=M-1

                    Else

                        L=M+1

                    End If

                Else

                    If  Then

                        L=M+1

                    Else

                        R=M- 1

                    End If

                End If

            End If

        Loop

    End Function

  • 19、小王为班级联欢会设计了一个抽奖程序,将所有同学的编号和对应的姓名分别保存在数组a(全班共50个同学,编号为1到50)和数组b中,程序会随机产生一个1到50的正整数(同时包括1和50),作为中奖编号。

    程序界面如图所示,左边列表框List1中显示同学的编号和姓名,单击“抽奖”按钮(Command1),在标签Label3 中显示抽中的编号,同时在标签Label4中显示“恭喜***同学”,其中具体同学的姓名从数组b中获取。

    解决此问题的程序段如下:

    Dim a(1 To 50) As Integer

    Dim b(1 To 50) As String

    Function search(m As Integer) As Integer

        search= 0

        For i=1 To 50

            If m=a(i) Then

                search=a(i)

            End If

        Next i

    End Function

    Private Sub Command1_ Click()

        Dim c As Integer, t as integer

        Randomize

            ①   

        Label3. Caption= Str(c)

        t= search(c)

        If t<>0 Then

            Label4. Caption=“恭喜”+   ②    +“同学”

        End If

    End Sub

    Private Sub Form_ Load()

        '此过程用于对数组a和数组b进行初始赋值,代码略

    End Sub

    (1)、函数search中所用的算法是。(选填:顺序查找或对分查找)
    (2)、在程序中划线处土填入合适代码。

     ② 

  • 20、有VB程序段如下:

    i=1 : j=9 : s="" : flag= False

    Key= Val(Text1. Text)

    Do While i <= j And Not flag

        m=(i+j) \ 2

        s=s+Str(m)

        If a(m)= Key Then

            flag= True

            Exit Do      'Exit Do表示退出循环

        ElseIf Key>a(m) Then

            i=m+1

        Else

            j=m-1

        End If

    Loop

    If flag= False Then s="没有找到"

    Label1. Caption= s

    已知数组a共有9个整数元素,依次为“8,7,3,1,9,5,6,4,2”,若在文本框Text2 中输入“3”,执行下列程序后,Label1中显示的结果是(    )

    A、没有找到 B、3 C、9 D、521
上一页 415 416 417 418 419 下一页 跳转