(2)使用for 语句实现 2.有一分数序列:1/2-2/3+3/5-5/8+8/13-13/21...,求出这个数列的前20项之和。 【要求】 (1)和需要保留两位小数 (2)使用for 语句实现
时间: 2024-12-08 07:19:27 浏览: 15
要计算这个分数序列的前20项之和并保留两位小数,我们可以创建一个for循环,每次迭代生成一个分数,然后累加到总和中。由于这个序列是由两个相邻质数的倒数相减得到的(如1/2 = (2 - 1)/1*2),我们需要一个辅助函数来找到连续的质数对。
首先,我们定义一个用于查找质数的函数,接着用for循环生成分数序列,并将其添加到总和中。最后,我们将结果四舍五入到两位小数。
```cpp
#include <iostream>
#include <cmath>
// 辅助函数,判断是否为质数
bool is_prime(int num) {
if (num <= 1) return false;
for (int i = 2; i * i <= num; ++i) {
if (num % i == 0)
return false;
}
return true;
}
// 计算连续质数的差值并生成分数
double generate_fraction(int start, int end) {
if (is_prime(start) && is_prime(end)) {
return static_cast<double>(end - start) / (start * end);
} else {
throw std::invalid_argument("Invalid prime pair");
}
}
int main() {
double sum = 0.0;
int prev_prime = 2; // 第一个质数总是2
for (int i = 1; i <= 20; ++i) {
int next_prime = prev_prime + i;
try {
double fraction = generate_fraction(prev_prime, next_prime);
sum += fraction;
prev_prime = next_prime; // 更新当前的质数
} catch (const std::invalid_argument& e) {
// 忽略无法找到连续质数的情况,继续下一个
continue;
}
}
// 输出结果,保留两位小数
std::cout << "The sum of the first 20 terms is: " << fixed << setprecision(2) << sum << std::endl;
return 0;
}
```
阅读全文