注册 登录
编程论坛 C语言论坛

小弟这个题一直运行不对 请求哥哥帮忙指出哪里出问题了 谢谢哥哥!

yi123456789y 发布于 2020-04-25 09:25, 1481 次点击
题目:已知分数序列2/1,3/2,5/3,8/5,13/8,21/13,…… ,计算这个序列的前20项之和。(用函数的方法)
我的代码:
#include<stdio.h>
int shu(int n)
{
    int a1=2,b1=1,a2=3,b2=2,a3,b3,sum=3.5;
    for(n=3;n<=20;n++)
    {a3=a1+a2;
    b3=b1+b2;
    a2=a3;
    b2=b3;
    a1=a2;   
    b1=b2;
    sum=sum+a2/b2;}
    return sum;
}
int main()
{
    int n=20;
    printf("%d",shu(n));
    return 0;
}
3 回复
#2
forever742020-04-25 10:13
int是保存整数的。
整除丢小数精度。
#3
纯蓝之刃2020-04-25 10:27
程序代码:
#include<stdio.h>
float shu(int n)            //返回的是float类型
{
    int a1=2,b1=1,a2=3,b2=2,a3,b3,i;
    float sum=3.5;          //累加和为float类型
    for(i=3; i<=n; i++)     //之前不论n为几,得到的都是前20的和
    {
        a3=a1+a2;
        b3=b1+b2;
        a2=a3;
        b2=b3;
        a1=a2;
        b1=b2;
        sum+=((float)a3)/b3;    //使用a3,b3更直观一些
    }                           //因为a3,b3均为int类型,得到的结果也为int类型,所以需要将其中一个值强制转换成float类型进行计算。
    return sum;
}
int main()
{
    int n=3;
    printf("%f",shu(n));    //打印float类型
    return 0;
}
#4
rjsp2020-04-25 11:18
程序代码:
#include <stdio.h>

double foo( unsigned n )
{
    double sum = 0;
    for( unsigned i=0,a=1,b=1; i!=n; ++i )
    {
        a = a+b;
        b = a-b;
        sum += a*1.0/b;
    }
    return sum;
}

int main( void )
{
    printf( "%f\n", foo(20) );
}
1