1. 给定一字符串(全部由小写字母组成),有n个字符(1≤n≤100),将每个字符存入到数组a中,有以下两种操作:

操作1:在文本框中分别输入L,R,T(1≤L≤R≤n),对数组下标为L到R之内(包含L和R)的字符做相应的字符加密操作(1≤T≤100)。

操作2:在文本框中输入M(1≤M≤n),在标签中输出a(M)的值。

为了提高算法的效率,小明设计了如下算法,以n=10为例,将n个元素依次分成 段( 表示对 向下取整),每段的元素个数为 ,若最后有不足 个元素,则自成一段。给每段设置一个标记,如下表所示。

①对于操作1,若输入的L,R属于同一段,则直接对a(L to R)的每个元素的ASCII码进行后移T位的操作。如输入4,6,3,则第2段中的每个字符变为k,r,q,操作后如下表所示。

②对于操作1,若输入的L,R不属于同一段,则对元素a(L)所在段中从a(L)开始到该段最后一个元素为止的每个字符的ASCII码做后移T位的操作,并对元素a(R)所在段中从该段第一个元素开始到a(R)为止的每个字符的ASCII码做后移T位的操作,对a(L)元素所在段的下一段开始到a(R)元素所在段的上一段为止的每个段标记值增加T,这些段中的元素值保持不变。如在上表的基础_上再输入1,8,2,则第1段的3个字符和第3段中的前2个数都做相应的字符后移2位的操作,第2段的段标记值增加2,如下表所示。

③对于操作2,若输入M的值为4,则输出a(4)的值,若a(M)所在的段标记为奇数,a(M)的值为该数组元素的值,否则输出a(M)对应的大写字母的值,如a(4)=H。程序运行如下。请回答下列问题:

(1) 若数组元素为“p,y,t,h,o,n,j,a,v,a”,依次进行以下3次操作后a(6)的值为

操作1:在文本框Text1,Text2,Text3中依次输入1,8,3后,点击按钮Command1

操作1:在文本框Text1,Text2,Text3中依次输入7,9,2后,点击按钮Command1

操作2:在文本框Text4中输入6后,点击按钮Command2

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

Const n=10

Dim a(1 To n)As String

Dim dbj(1 To n)As Integer    ‘依次表示每段的标记值

Dim bk As Integer       ‘表示每段的元素个数.

Private Sub Form_Lond()

  bk = Int(Sqr(n))

  ‘读取数据,并存储到数组a中,代码略

  ‘读取数据,并存储到数组dbj中,代码略

End Sub

Function bl(x As Integer)As Integer   ‘bl函数返回数组元素a(x)的段编号

  bl=

End Function

Private Sub Command1_Click()

  Dim L Ax Integer, R As Integer, t As Integer

  L= Val(Text1.Text)

  R= Val(Text2.Text)

  t= Val(Text3.Texr)

  If bl(L)= bl(R) Then

    For i =L To R

      a(i)= Chr((Ase(a(i))- Ase("a")+t) Mod 26+97)

    Next i

  Else

    For i=L To bl(L)*bk

      a(i) = Chr((Ase(a(i))- Ase("a")+1) Mod 26+97)

  Next i

For i= bl(L)+ 1 To bl(R)-1

  dbj(i) = dbj(i) + t

Next i

For i =

      a(i) = Chr((Ase(a(i))-Ase("a") + 1) Mod 26 + 97)

    Next i

  End If

  List1. AddItem Str(L) +"," + Str(R) + "," + Str(t) +“加密完成!”

End Sub

Private Sub Command2_Click( )

  Dim M As Integer

  Dim jg As Suring

  M= Val(Text4. Tex1)

  If dbj(bl(M)) Mod2 = 0 Then

    Jg=

  Else

    jg= a(M)

  End If

Labell. Caption =“经过一 系列操作后. a(” + Str(M) +“)的值为:“+ ig

End Sub

【考点】
常见数据类型、数组; 运算符、基本运算与表达式; 常量、变量及变量的赋值; 过程与自定义函数; 加密与解密算法;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 困难
能力提升
换一批
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

综合题 普通