一分数序列:2/1,3/2,5/3,8/5,13/8,21/13……求这个数列的前20项之和,分别用while语句和do-while语句两种方法
时间: 2024-11-17 14:29:51 浏览: 10
python 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和 (示例)
5星 · 资源好评率100%
这是一个著名的斐波那契数列(Fibonacci sequence)变种,每个分数的分子是前面两个分数的分子之和,分母则保持为当前项的位置(从1开始)。要计算这个数列的前20项之和,我们可以使用while和do-while循环来迭代计算。
**While语句方法:**
```c
#include <stdio.h>
int fib(int n) {
if (n <= 0)
return 0;
else if (n == 1 || n == 2)
return 1;
int a = 1, b = 1, c;
while (n > 2) {
c = a + b;
a = b;
b = c;
n--;
}
return b; // 分子
}
double sum_fractions(int n) {
double total = 0;
for (int i = 1; i <= n; i++) {
total += (fib(i) / (i * 1.0)); // 注意除法可能溢出,此处采用浮点数
}
return total;
}
int main() {
int n = 20;
printf("前20项之和(while语句): %.9f\n", sum_fractions(n));
return 0;
}
```
**Do-while语句方法:**
```c
#include <stdio.h>
int fib(int n) {
if (n <= 0)
return 0;
else if (n == 1 || n == 2)
return 1;
int a = 1, b = 1, c;
do {
c = a + b;
a = b;
b = c;
n--;
} while (n > 2);
return b; // 分子
}
double sum_fractions(int n) {
double total = 0;
for (int i = 1; i <= n; i++) {
total += (fib(i) / (i * 1.0)); // 同上
}
return total;
}
int main() {
int n = 20;
printf("前20项之和(do-while语句): %.9f\n", sum_fractions(n));
return 0;
}
```
在这两种情况下,你需要确保处理浮点数时避免精度损失,因为整数除法可能导致结果不准确。同时,`fib`函数用于计算斐波那契数列中的值。
阅读全文