C语言编程 求序列前N项和

求大神看看哪儿有问题

2/1+3/2+5/3+8/5+...这个数列每项的分子、分母分别是Fibonacci数列的后一项与前一项。求这一数列前N项的和可采取N由键盘输入,设一循环按Fibonacci数列规律求出分子与分母,将将分式转换为浮点除法求值累加获得最后结果。举例代码如下:

#include "stdio.h"
int main(int argc,char *argv[]){
int a,b,i,N;
double s;
printf("Input N(int 0<N<44)...\nN=");//大于43时int范围溢出
if(scanf("%d",&N)!=1 || N<1 || N>43){//保证输入正确
printf("Input error, exit...\n");
return 0;
}
for(s=0.0,a=2,b=i=1;i<=N;i++){//由此循环计算
s+=a/(b+0.0);//当前项累加给s
a+=b;//下一项的分子是当前项分子分母之和
b=a-b;//下一项分母是当前项分子
}
printf("The result are %.2f (when N=%d)\n",s,N);
return 0;
}

试运行结果如下图:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2023-03-19
计算有序数列前N项和有多种方法,本文介绍两种常用方法。

方法一:循环求和

可以使用循环来遍历序列,并将每一项累加到总和中,代码如下:

```c
#include <stdio.h>

int main() {
int n, sum = 0;
printf("请输入N的值:");
scanf("%d", &n);

for(int i = 1; i <= n; i++) {
sum += i;
}

printf("前%d项和为:%d
", n, sum);

return 0;
}
```

在代码中,使用`for`循环遍历了1到N的每一个整数,并将其累加到`sum`中,最后输出了序列前N项的和。

方法二:递归求和

也可以使用递归的方式来计算序列前N项的和,代码如下:

```c
#include <stdio.h>

int sum(int n) {
if(n == 1) {
return 1;
} else {
return sum(n - 1) + n;
}
}

int main() {
int n;
printf("请输入N的值:");
scanf("%d", &n);

printf("前%d项和为:%d
", n, sum(n));

return 0;
}
```

在代码中,`sum`函数使用递归的方式计算序列前N项的和。当N等于1时,返回1,否则继续调用`sum`函数,传入N-1作为参数,并将结果加上N,最终返回总和。
第2个回答  2015-03-10
#include "stdio.h"

int main(void)
{int x,y,i,N,t;
float sum;
scanf("%d",&N);
x=2;
y=1;
sum=0;
for(i=1;i<=N;i++)
{sum=sum+((float)x/y);
t=x;
x=x+y;
y=t;
}
printf("%.2f",sum);
return 0;
}
没有错啊,难道是大写N,还是少了int void?不会吧
还是全部改float?用double是30.660261,用float是30.660259。。。。。。追问

题目上的要求是需要精确到小数点后两位,还有就是计算结果不超过双精度范围。
对了 这个I算结果不超过双精度范围是个啥意思。
你也觉得程序没啥问题?

本回答被网友采纳
相似回答