| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 17113 人关注过本帖
标题:2/1,3/2,5/3,8/5,13/8,21/13…… 用C语言求出数列的前20项之和??
只看楼主 加入收藏
星野
Rank: 2
来 自:河北
等 级:论坛游民
帖 子:73
专家分:26
注 册:2016-4-13
结帖率:82.35%
收藏
已结贴  问题点数:20 回复次数:16 
2/1,3/2,5/3,8/5,13/8,21/13…… 用C语言求出数列的前20项之和??
求各位大神帮助

2/1,3/2,5/3,8/5,13/8,21/13……
求出数列的前20项之和??
搜索更多相关主题的帖子: C语言 
2016-04-13 17:11
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:5 
你觉得太复杂 就 拆分开来做
先定义一个数组 数组有20个元素
分别存储每一个分子
分子就是一个类斐波那契数列 很简单的吧

再定义一个数组 一样20个元素
分别存储每一个分母

最后循环访问两个数组
每次循环 计算 分子除以分母的结果 并把结果加起来

ps 注意分子除以分母得处理为 浮点数相除

https://zh.
2016-04-13 17:43
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:5 
如楼上,找好规律就不难。
程序代码:
#include <stdio.h>
#define M 20
//分母
int f1(int n)
{
    if(n<=3)  return n;
    return f1(n-1)+f1(n-2);
}
//分子
int f2(int n)
{
    if(n<=2)  return n+1;
    return f2(n-1)+f2(n-2);
}

int main()
{
    int i=1;
    double sum=0;
    
    for(;i<=M;i++)
    {
        sum+=1.0d*f2(i)/f1(i);
    }
    
    printf("sum=%.5f\n",sum);
    return 0;
}

   唯实惟新 至诚致志
2016-04-13 18:45
星野
Rank: 2
来 自:河北
等 级:论坛游民
帖 子:73
专家分:26
注 册:2016-4-13
收藏
得分:0 
回复 2楼 lin5161678
本人新手  还没有学过数组。。
感觉好难啊
2016-04-13 21:05
星野
Rank: 2
来 自:河北
等 级:论坛游民
帖 子:73
专家分:26
注 册:2016-4-13
收藏
得分:0 
回复 3楼 qq1023569223
谢谢 大神 赐教
我的问题解决啦
嘻嘻
2016-04-13 21:06
星野
Rank: 2
来 自:河北
等 级:论坛游民
帖 子:73
专家分:26
注 册:2016-4-13
收藏
得分:0 
#include<stdio.h>
int main()
{
    int a,b,c,n;
    a=2;
    b=1;
    c=a/b;
    for(n=2;n<=20;n++)
    {
        a=a+b;
        b=a-b;
        c=c+a/b;
    }
    printf("c=%d",c);
}


哪里错了??
2016-04-13 21:13
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
回复 3楼 qq1023569223
类斐波那契数列 用递归是很蠢的做法
有很多不必要的计算

https://zh.
2016-04-13 21:13
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
回复 6楼 星野
        a=a+b;
        b=a-b;

你忽略了 第一条语句对第二条语句造成的影响
b = a-b 这个a 在前面的操作中被修改为 a+b
于是 第二条语句其实是 b = a+b-b
那就是 b 本身 b的值一直不变 所以错了 这段话说错了
b 会变为 a 原来的值

你现在不熟练 不要总想着在一个人循环接近所有问题

拆分成三个循环 你会发现很好做

做完之后 你可以针对已有的代码进行简化

[此贴子已经被作者于2016-4-13 21:25编辑过]


https://zh.
2016-04-13 21:16
星野
Rank: 2
来 自:河北
等 级:论坛游民
帖 子:73
专家分:26
注 册:2016-4-13
收藏
得分:0 
回复 8楼 lin5161678
  好的  我试试
2016-04-13 21:20
ldsh304
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:242
专家分:755
注 册:2016-1-18
收藏
得分:5 
回复 6楼 星野
程序代码:
#include<stdio.h>

 int main()

 {
     int a,b,c,n;//float c;
     a=2;
     b=1;
     c=a/b;//注意c的类型
     for(n=2;n<=20;n++)
     {
         a=a+b;
         b=a-b;
         c=c+a/b;// c=c+(float)a/b;把a强制转换成float型
     }
     printf("c=%d",c);// printf("c=%f",c);
 }


[此贴子已经被作者于2016-4-13 21:28编辑过]

2016-04-13 21:26
快速回复:2/1,3/2,5/3,8/5,13/8,21/13…… 用C语言求出数列的前20项之和??
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017244 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved