C程序设计(第四版)习题5-10

求分数序列
2/1 +3/2+5/3+8/5+13/8+21/13...
前20项之和。

我这样的代码为什么不对啊?输出是21.00000000 答案输出是32.6602607986

 #include <stdio.h> 
int main()
{
    int fenzi(int n);
    int fenmu(int m);
    int i;
    float s=0,tem;
    for(i=1;i<=20;i++)
    {
        tem=fenzi(i)/fenmu(i);
        s=s+tem;
    }
    printf("%f",s);
    return 0;
}
int fenzi(int n)
{
    if(n==1) return 2;
    else if(n==2) return 3;
    else return (fenzi(n-2)+fenzi(n-1));
}
int fenmu(int m)
{
    if(m==1) return 1;
    else if(m==2) return 2;
    else return (fenmu(m-2)+fenmu(m-1));
}

4个回答

 // ConsoleApplication1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

int fenzi(int n);
int fenmu(int m);

int main()
{
    int i;
    float s = 0, tem;
    for (i = 1; i <= 20; i++)
    {
        tem = (double)fenzi(i) / (double)fenmu(i);
        s = s + tem;
    }
    printf("%f", s);
    return 0;
}
int fenzi(int n)
{
    if (n == 1) return 2;
    else if (n == 2) return 3;
    else return (fenzi(n - 2) + fenzi(n - 1));
}
int fenmu(int m)
{
    if (m == 1) return 1;
    else if (m == 2) return 2;
    else return (fenmu(m - 2) + fenmu(m - 1));
}
ldwformat
ldwformat 回复baidu_23253519: 最后一句说对了,除非你主动cast一个为float。或者本身除数和被除数中出现float形式
5 年多之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复baidu_23253519: 麻烦你受累将鼠标移到我的回答的右边,会出现一个采纳,点一下
5 年多之前 回复
baidu_23253519
baidu_23253519 回复caozhy: anyway 谢谢
5 年多之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复baidu_23253519: 和结果无关
5 年多之前 回复
baidu_23253519
baidu_23253519 回复caozhy: 2个int类型变量做除法,我已经把结果设定为float类型了,除数和被除数还要强制转换类型么?
5 年多之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 相当于乘除
5 年多之前 回复
baidu_23253519
baidu_23253519 谢谢。 是因为2个int类型除法运算无法得到一个float类型的结果吗?
5 年多之前 回复

你都用int当然不对,要用float double

baidu_23253519
baidu_23253519 哪个数据的类型不对啊?
5 年多之前 回复

32.660263Press any key to continue . . .

楼主所有想输出float的地方都被省略成int了,重新看一下关于float的说明

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐