1. 下列VB程序实现数字字母混合序列分离后分别排序,最后又合并输出。具体算法如下:在文本框Text1输入若干组混合序列,每组序列中仅包含一组字母和一个多位数字,序列之间用逗号隔开,以逗号结束。单击“排序”按钮command1,把每组序列中的字母和数字分开,并分别排序,最后在列表框list1输出。排序规则如下:所有数字按从小到大升序排序,字母序列按长度升序排序,若长度相同,直接按字母序列大小升序排序(按字母的ASCII码排序,“A”<“Z”<“a”<“z”)。实现算法的部分程序界面如图所示,VB程序代码如下,回答下列问题:

Private Sub Command1_Click()

Dim a(1 To 6) As Integer, b(1 To 6) As String, i as integer, j as integer

Dim c As String, k As Integer, tmp1 As Integer, tmp2 As String

s=text1.text

i = 1: k = 1: tmp1 = 0: tmp2 = ""

Do While i <= Len(s)

      c = Mid(s, i, 1)

      If c = "," Then

         a(k) = tmp1: b(k) = tmp2

         tmp1 = 0: tmp2 = ""

              ①    

      Else

        If  Then 

           tmp2 = tmp2 + c

        Else

         tmp1=tmp1*10+val(c)

        End If

      End If

      i = i + 1

    Loop

    For i = 1 To 5

      For j = 1 To 6 - i

        If a(j) > a(j + 1) Then tmp1 = a(j): a(j) = a(j + 1): a(j + 1) = tmp1

    If Len(b(j)) > Len(b(j + 1)) Or      ②       Then

          tmp2 = b(j): b(j) = b(j + 1): b(j + 1) = tmp2

        End If

      Next j

    Next i

    For i = 1 To 6

      List1.AddItem Str(a(i)) + b(i)

    Next i

    End Sub

(1) 代码“list1.AddItem”中的AddItem是(单选,填字母:A .属性名   B .对象名   C .方法   D .事件名)
(2) 在程序划线处填入合适代码,使程序完整

 ② 

(3) 加框处代码有错,请改正
(4) 若输入的字符串为“21ckk,gho63,TCP43,23Yes,no62,phy46,”,则程序运行后第3组字符是
【考点】
常见数据类型、数组; 运算符、基本运算与表达式; 排序算法及程序实现; 查找算法及程序实现;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 困难
能力提升
换一批
1. 在一个数组中存储了若干个同学的技术成绩小题分,其中a(1)存储学生个数,a(2)开始按顺序存储小题分数据。每个学生有33个小题的数据,例:a(2)~a(13)是学生1的信息选择题得分,a(27)~a(30)是学生1的信息4个主观题得分。具体如下表

题号

1-12

13-25

26-29

30-33

科目题型

信息客观题

通用客观题

信息主观题

通用主观题

满分分值

每题2分

每题2分

4/8/7/7

6/9/3/6

小李根据上述描述,设计了一个统计所有同学信息各题得分率的算法。程序运行后首先在列表框list1显示信息技术各小题得分,单击“计算”按钮“command1”,在列表框list2显示信息各题的题号和得分率,在文本框text1输出所有同学的信息平均分(平均分=各题得分率*各题分值的和)。算法的VB程序如下,回答下列问题。

(1) 根据题目描述,使用如图所示数据,a(95)的数值是
(2) 在程序划线处填上合适代码,使程序完整

    Dim a(1 To 1000) As Integer, n As Integer

    Private Sub Command1_Click()

        Dim i As Integer, j As Integer

        Dim fz(1 To 16) As Integer 'fz数组存储信息各题满分值

        Dim b(1 To 33) As Double   '数组b存储全卷各题的得分率

            For i = 1 To 16  ‘数组fz存储信息16个小题的满分值

              If i <= 12 Then fz(i) = 2

              fz(13) = 4: fz(14) = 8: fz(15) = 7: fz(16) = 7

            Next i

            For i = 2 To n  '把数组a数据分别统计到各题中

                 

              b(j) = a(i ) + b(j)  

            Next i

            For i = 1 To 33  '仅处理信息各题的平均分

              If i <= 12 Then

                b(i) = b(i) / (a(1) * fz(i))’计算信息选择题各题的得分率

            ElseIf i >= 26 And i <= 29 Then

                b(i) =

            End If

            Next i

            For i = 1 To 16

          If i > 12 Then j = i + 13 Else j = i

          b(j) = Int(b(j) * 1000 + 0.5) / 10 '对结果四舍五入保留1位小数

          List2.AddItem Str(i) +  Str(b(j)) + "%"

            ave=   

            Next i

          Text1.Text = Str(ave / 100)

          End Sub

          Private Sub Form_Load()

          ‘读入数据到数组a,数据个数n,代码略

     End Sub

综合题 困难
2. 求最长升序子序列的长度。一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列是升序的。对于给定的一个序列(a1, a2, ..., aN),我们可以得到一些升序的子序列(ai1, ai2, ..., aiK),这里 1 <= i1 < i2 < ...<iK <= N。比如,对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些升序子序列,如(1, 7), (3, 4, 8)等等。这些子序列中最长的长度是4,比如子序列(1, 3, 5, 8)。小王设计VB程序用于求最长升序子序列的长度,在文本框Text1中输入n个各不相同的数据(各数据之间以逗号隔开),单击“求解”按钮Command1后在标签Label1中输出最长升序子序列的长度,运行界面如图所示。

具体算法描述如下:

⑴将文本框Text1中的n个数据依次读取到数组a中;

⑵构造一个数组b(j),j表示升序子序列的长度,b(j)的值表示所有j长度升序序列中最小的末尾元素值。例:序列(2,6,4,5),长度为2的子序列有(2,6)、(2,4)、(2,5)、(4,5),则b(2)=4;

⑶从第1个元素开始,依次处理到第i(1≤i≤n)个元素为止,b数组所能达到的最大下标值maxlen,处理过程分两种情况:

A.a(i)>b(maxlen),则最长升序子序列的长度增加;

B.a(i)<b(maxlen),则在b数组中逆序查找到第一个b(j)>a(i)(maxlen-1≤j≤1),更新数组b中升序子序列长度为j+1时所存储的元素值。

以图中数据为例:

⑷数组b的最大下标值即为最长升序子序列的长度。实现上述过程的VB程序如下,请回答下列问题:

(1) 若在文本框Text1中输入的序列为(4,7,9,8,6),则数组元素 b(2)的值为
(2) 请在划线处填入合适的代码

Private Sub Command1_Click()

Dim a(1 To 100) As Integer '存储原序列

Dim b(1 To 100) As Integer '存储各长度序列的最小末尾元素Dim s As String

Dim n As Integer, i As Integer, j As Integer, maxlen As Integer s = Text1.Text

n = 1: j = 1

For i = 1 To Len(s) c = Mid(s, i, 1)

If c = "," Then

a(n) = Mid(s, j, i - j ) n = n + 1

j = i + 1 End If

Next i

 maxlen = 1: b(1) = a(1) For i = 2 To n

If a(i) > b(maxlen) Then

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

Else

j = maxlen - 1: flag = True Do While j >= 1 And flag

If a(i) > b(j) Then

flag = False End If

j = j - 1 Loop

IfThen b(1) = a(i)

End If Next i

Label1.Caption = "最长升序子序列的长度为:" + Str(maxlen)

End Sub

综合题 普通