一道简单的c语言各位大佬帮忙看下哪里错了~

本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+... 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中输出部分和的值,精确到小数点后两位。题目保证计算结果不超过双精度范围。
输入样例:
20
输出样例:
32.66

#include<stdio.h>
main(){
int n,fz=2,fm=1,zj;
double sum=2.00;
scanf("%d",&n);
for(int i = 1 ; i <n;i++){
zj=fz;
fz+=fm;
fm=zj;
sum+=fz/fm;
}
printf("%.2lf",sum);
}

问题在这句 sum+=fz/fm; fz/fm是int的除法,结果还是个int ,把fz/fm变成double的除法就好了
改成:

sum+=(double)fz/fm; //把fz强制转换为double
或者
sum+=1.0*fz/fm; //1.0是个double 1.0*fz就是double了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-07-04
#include<stdio.h>
#include<string.h>
#define N 20
main()
{
int i;
double a[N],b[N],fs,s=0;
a[0]=1.0;a[1]=2.0;a[2]=3.0;b[1]=1.0;
for(i=2;i<=N;i++)
{
a[i]=a[i-1]+a[i-2];
b[i]=a[i-1];
}
for(i=1;i<=N;i++)
{
fs=a[i]/b[i];
s+=fs;
}
printf("%.2lf",s);
}本回答被网友采纳