有一个分数序列: 2/1, 3/2,5/3,8/5,13/8,…… 用数组来表示这个序列,编写子函数并用指针做形参实现:求这个序列的前 20 项之和。在主函数中将和显示出来。
时间: 2024-11-12 21:41:09 浏览: 7
MATLAB程序设计例题及答案.pdf
5星 · 资源好评率100%
这个分数序列实际上是著名的斐波那契数列(Fibonacci sequence)的倒数形式,其中每个分数的分子是前两个分数的和,分母是当前的位置(从1开始)。我们可以创建一个数组来存储分数,然后用递归的方式生成序列。下面是一个C++的例子,展示了如何实现这个功能,使用指针作为参数传递数组:
```cpp
#include <iostream>
#include <vector>
// 定义一个辅助函数,计算下一个分数并添加到数组中
void add_next_fraction(double* arr, int& index, double* &sum) {
if (index >= 20) return; // 如果已经达到20项,停止
double current = (arr[index - 1] + arr[index - 2]) / static_cast<double>(index);
arr[index++] = current; // 更新数组
*sum += current; // 累加总和
}
// 主函数,调用辅助函数求和并输出结果
int main() {
std::vector<double> fractions(21, 0); // 创建一个大小为21的数组,用于存储前20项分数
double sum = 0; // 存储总和
fractions[0] = 1.0; // 初始化第一项为1
fractions[1] = 1.0; // 第二项也为1,因为后续分数都是这两项的比值
// 递归生成并累加分数
for (int i = 2; i < 21; i++) {
add_next_fraction(&fractions[0], i, &sum);
}
std::cout << "Sum of the first 20 fractions in the Fibonacci sequence is: " << sum << std::endl;
return 0;
}
```
在这个程序中,`add_next_fraction` 函数负责递归地生成分数,将它们添加到数组中,并累计总和。在主函数里,我们先初始化前两项为1,然后通过循环调用这个函数直到达到20项为止。最后,我们会打印出这20项分数的总和。
阅读全文