1. 某数据压缩方法描述如下:

1)原始数据中,某数不为0且相邻无重复,压缩数据用该数据表示;

2)原始数据中,某数为0且相邻无重复,压缩数据用两个数表示,第1个为0,第2个为0;

3)原始数据中,某数据相邻有重复,压缩数据用3个数表示:第1个为0,第2个为重复数的个数,第3个为该数本身;根据上述压缩方法,对应的解压缩方法示例如图a所示。

图a

小明编写了一个解压缩VB程序,功能如下:窗体加载时,自动读取压缩数据,依次存储在数组元素a(1)、a(2)、a(3)……中,压缩数据的个数存储在变量n中,压缩数据显示在文本框Text1中。单击“解压缩”按钮Command1,程序对压缩数据依次进行解压缩处理,解压缩数据显示在文本框Text2中。程序运行界面如图b所示。

图b

(1) 如果压缩数据为“23,0,21,66,0,0,77,0,5,0”,则解压缩数据的个数是
(2) 实现上述功能的VB程序如下。请在划线处填入合适代码。

Dim a(1 To 100)As Integer    '存储压缩数据,最大处理个数为100

Dim b(1 To 1000)As Integer    '存储解压缩数据,最大处理个数为1000

Dim n As Integer    '存储压缩数据的个数

Private Sub Form_Load()

'压缩数据由上述压缩方法生成

'本过程用于读取压缩数据并存储在数组a中,压缩数据个数存储在变量n中

'代码略

End Sub

Private Sub Commandl_Click()

Dim pa As Integer '存储压缩数组当前处理位置

Dim pb As Integer '存储解压缩数组当前处理位置

Dim firstdata As Integer,count As Integer,iAs Integer

pa=1:pb=1

Do While pa<=n

  firstdata=a(pa)

  If firstdata <>0 Then  '示例1)情况处理

      b(pb)=firstdata

      pa=pa+1:pb=pb+1

  Else

      count=a(pa+1)

      If count=0 Then    '示例2)情况处理

        b(pb)=0

        pa=    ①_   _:pb=pb+1

      Else                '示例3)情况处理

        For i=1 To count

               ② 

        Next i

        pa=pa+3:pb=pb+count

      End If

  End If

Loop

Text2.Text=Str(b(1))

For i=2 To   ③   

  Text2.Text=Text2.Text+“,”+Str(b(i))

Next i

End Sub

【考点】
算法的控制结构; 常见数据类型、数组; 常量、变量及变量的赋值;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 普通
能力提升
换一批
1. 由数组a生成数组b的方法描述如下:

1)将数组a中的n个元素依次分割出若干个数据块,每个数据块有m×m个元素,m最大值为8,最小值为2。分割时,按尽可能大的数据块进行分割。

2)对每个分割出的数据块用“方阵转换法“进行转换,每次转换后得到的数据块依次存储到数组b中。

3)数组a分割后的剩余元素(个数小于4),直接依序存储到数组b中。

例如n=140时,可依次分割出3个数据块,元素个数分别为64(8×8)、64(8×8)、9(3×3),剩余元素为3个。

“方阵转换法”过程如下:将数据块中m×m个元素按行序排列成一个数字方阵,从该数字方阵中按列序得到转换后元素的次序。

以3×3数据块为例,转换过程如图所示:

小明依据上述描述设计了如下VB程序。请回答下列问题:

(1) 当n=120时,分割出的第3个数据块元素个数为
(2) 请在划线处填入合适的代码。

Const n=120

Dim a(1 To n)As Integer

Dim b(1 To n)As Integer

Private Sub Commandl_Click()

  Dim m As Integer,i As Integer

  Dim Start As Integer  '当前未分割数据的第1个元素下标

  Dim Left As Integer  '当前未分割数据的个数

  Dim pa As Integer   '数组a的下标

  Dim pb As Integer  '数组b的下标

'读取n个转换前的数据,依次存储到 a(1)、a(2)、……、a(n)中,代码略

m=8

Start=1

Left=n

Do While Left>3

  If Left<m * m Then

    m=  ① 

  Else

    pa=Start

    pb=Start

    For i=1 To m * m

      b(pb)= a(pa)

      pb=pb+1

      If i Mod m=0 Then

           ②  

      Else

        pa=pa+m

      End If

    Next i

       ③    

    Start=Start+m*m

   End If

 Loop

 For i=Start To n

   b(i)=a(i)

 Next i

'依次输出转换后的数据b(1)、b(2)、……b(n),代码略

End Sub

综合题 普通
2. 小王编写了一个依据成绩计算名次的VB程序,成绩为0到100之间的整数。算法的基本思想:先统计每个分数的个数,然后按照分数从高到低依次计算每个有效分数(该分数的个数不为0)对应的名次,分数相同时名次并列。最高分为第1名,该分数的名次与个数之和为下一个有效分数的名次,以此类推。程序用数组A存放每个分数对应的个数,数组B存放每个分数对应的名次。例如,下表中最高分100有2个,并列第1名,则分数96的名次为分数100的名次加上分数100的个数,即第3名。

分数

100

99

98

97

96

95

94

0

个数(A数组)

2

0

0

0

1

0

3

0

名次(B数组)

1

3

4

程序运行时,学生数据显示在列表框List1中,单击“计算”按钮Command1,计算结果显示在列表框List2中,程序运行界面如图所示。

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

(1) 如上表所示,若分数93的个数为2,则该分数对应的名次为
(2) 请在划线处填入合适的代码.

     Dim sName(1 To 50)As String       '存放学生姓名

     Dim sScore(1 To 50)As Integer       '存放学生分数

     Dim recCount As Integer               '存放学生人数

     Private Sub FormLoad()

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

     '代码略

     End Sub

     '整数转换成长度固定的字符串

     Function ads(x As Integer,n As Integer)As String

       Dim sx As String,nx As Integer,i As Integer

       sx=Str(x):nx=Len(sx)

       For i=1 To n - nx

         sx=""+sx

       Next i

          ①   

     End Function

     Private Sub Commandl_Click()

     Dim A(0 To 100) As Integer   '存放每个分数的个数

     Dim B(0 To 100)As Integer   '存放每个分数的名次

     Dim mc As Integer,score As Integer,i As Integer

     For i=0 To 100

       A(i)=0

     Next i

     For i=1 To recount   '计算每个分数的个数

           ②    

     Next i

     mc=1

     For i=100 To 0 Step-1   '计算每个分数的名次

       If A (i)<>0 Then

            B(i)= mc

               ③   _

       End If

     Next i

     List 2.Clear

     List 2.AddItem "姓名 分数 名次"

     List 2.AddItem "----------------"

     For i=1 To recCount

       score =sScore(i)

       mc=B(sScore(i))

       List 2.Addltem sName(i)+ads( score,5)+"第"+ads(me,3)+"名"

     Next i

     End Sub

综合题 普通