C言,斐波那契数列,前50项求均值,数据类型,精度问题
发布网友
发布时间:2022-04-29 02:39
我来回答
共4个回答
热心网友
时间:2022-06-28 21:02
/*
前45项平均值 : 66027001.600000
前46项平均值 : 104511455.978261
前47项平均值 : 165505149.957447
前48项平均值 : 262213938.000000
前49项平均值 : 415612470.877551
前50项平均值 : 659025601.960000
前51项平均值 : 1045417473.960784
前52项平均值 : 1658991755.211539
前53项平均值 : 2633657781.962264
前54项平均值 : 4182433957.703704
前55项平均值 : 6644278112.018182
Press any key to continue
*/
#include <stdio.h>
long double Average(int n) {
int i;
long double sum = 2.0,a[56] = {1,1};
if(n == 1 || n == 2) {
return 1;
}
for(i = 2;i < n;i++) {
a[i] = a[i - 1] + a[i - 2];
sum += a[i];
}
return sum/(long double)n;
}
int main() {
int i;
for(i = 45; i < 56; ++i)
printf("前%2d项平均值 : %lf\n",i,Average(i));
return 0;
}
热心网友
时间:2022-06-28 21:03
你想问什么问题?
你的代码算出来的q是n+1项的和除以n的值,而不是n项的和除以n的平均值,把for(i=2;i<=n;i++)中的i<=n改成i<n就OK了。
另:(double)这种强制是多余的,因为你声明的sum和n都是double型的。
热心网友
时间:2022-06-28 21:03
你想问什么问题?
你的代码算出来的q是n+1项的和除以n的值,而不是n项的和除以n的平均值,把for(i=2;i<=n;i++)中的i<=n改成i<n就OK了。
另:(double)这种强制是多余的,因为你声明的sum和n都是double型的。
热心网友
时间:2022-06-28 21:04
需要知道什么呢
是这段代码的解释还是这段代码有问题