1. 对n项(n<=100)数据序列的前x项求和,可设计如下算法:将数据序列存储在数组a中,并按一定规则转换成数组c,再借助数组c实现求和.

将数组a转换成数组c的方法描述如下:

①将数组a中的元素依次存储到数组c中,把当前数组c看作第一层;

②把第一层中的各元素进行如下处理:奇数项值不变,偶数项的值更新为自己与自己前一项的和,将更新后的数组元素看作第二层;

③把第二层中的各元素,按上述方法进行同样操作,更新后的数组元素看作第三层;

④以此类推,直到当前层中仅有一项为止。

例如x=11时,转换过程如图所示:

借助数组c,可快速计算出数组a中前x项的和.例如,数组a中前11项的和,可由表达式c(11)+c(10)+c(8)得到.表达式具体分析过程如下:

②表达式第一项为c(11);

②将下标11转换成二进制数1011,计算该二进制数最右边的“1”所对应的权值,再用11减去此权值得到10,即表达式第二项为c(10);

③按上述方法继续操作,直到计算结果等于0为止。

小龙依据上述方法设计了如下vb程序.请回答下列问题:

(1) 计算数组a中前22项和的表达式为(填写表达式,如c(11)+c(10)+c(8))。
(2) 请在划线处填入合适的代码。

Dim n As Integer

Dim a(1 To 1000) As Long, c(1 To 1000) As Long

Private Sub Form_Load()

'读取n个数据,并存储到数组a中(代码略)

End Sub

Private Sub Command1_Click()

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

For i = 1 To n

c(i) = a(i)

Next i

k = 2 '当前层第一个偶数项的位置

space = 1 '当前层偶数项与前一项的间距

Do While k <= n

For i = k To n Step k

c(i) = c(i) + c(i - space)

Next i

k = k * 2

Loop

End Sub

Private Sub Command2_Click()

Dim x As Integer, sum As Long

x = Val(Text1.Text): sum = 0

Do While x <> 0

sum = sum + c(x)

Loop

Text2.Text = Str(sum)

End Sub

Function lowbit(x As Integer) As Integer

Dim temp As Integer

temp = x: lowbit = 1

Do While ③'

lowbit = lowbit * 2

temp = temp \ 2

Loop

End Function

【考点】
运算符、基本运算与表达式; 过程与自定义函数; 递归算法;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 困难