| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 51274 人关注过本帖
标题:有一个分数序列2/1,3/2,5/3,8/5,13/8,21/13,…求出这个序列的前20项之 ...
只看楼主 加入收藏
菲儿1031
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-6-17
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:13 
有一个分数序列2/1,3/2,5/3,8/5,13/8,21/13,…求出这个序列的前20项之和。
这道题我已经用几种方法做出来了,但有一种方法运行出的答案一直是40.000000,正确答案是32.660259.请大神帮我看看是哪里的问题,程序如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int i;
    float sum=0.0,a=2.0,b=1.0,c;
    for(i=1;i<=20;i++)
    {
        c=a/b;
        sum=sum+c;
        b=a;
        a=a+b;
    }
    printf("sum=%f\n",sum);
    system("pause");
    return 0;
}
搜索更多相关主题的帖子: include 正确答案 
2015-07-05 17:22
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:2 

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int i;
    float sum=0.0,a=2.0,b=1.0,c;
    for(i=1;i<=20;i++)
    {
        c=a/b;
        sum=sum+c;
        b=a;
        a=a+b;
        printf("%2d:sum=%f\n",i,sum);//观察为什么是40,是代码块生存周期问题
    }
   
    system("pause");
    return 0;
}
2015-07-05 18:10
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:2 


#include<stdio.h>
#include<stdlib.h>
int main()
{
    int i,temp;
    float sum=0.0,a=2.0,b=1.0;
    for(i=1,a=2.0;i<=20;i++)
    {
        sum=sum+a/b;
        temp=a;
        a=a+b;
        b=temp;
    }
    printf("sum=%f\n",sum);
    system("pause");
    return 0;
}
2015-07-05 19:40
实际应用
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:89
专家分:341
注 册:2015-5-30
收藏
得分:0 
3楼言之有理
for 里的a=2.0多余
2015-07-05 22:29
zhangrenxin0
Rank: 1
等 级:新手上路
帖 子:1
专家分:2
注 册:2014-8-1
收藏
得分:2 
#include<stdio.h>
#include<stdlib.h>
 int main()
 {
     int i;
     float sum=0.0,a=2.0,b=1.0,c,d;
     for(i=1;i<=20;i++)
     {
         c=a/b;
         sum=sum+c;
         d=a+b;
         b=a;
         a=d;
     }
     printf("sum=%f\n",sum);
     system("pause");
     return 0;
 }
  就是赋值语句块错了。没有中间变量,不能实现 a b的交换
2015-07-06 12:21
菲儿1031
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-6-17
收藏
得分:0 
回复 5楼 zhangrenxin0
恩恩,我已经改过来啦
2015-07-06 15:30
自傲
Rank: 2
等 级:论坛游民
帖 子:53
专家分:95
注 册:2015-5-16
收藏
得分:0 
2015-07-06 22:20
maqiangdemo
Rank: 2
等 级:论坛游民
帖 子:78
专家分:98
注 册:2014-2-26
收藏
得分:2 
回复 楼主 菲儿1031
b=a;
a=a+b;
a赋给了b,b变为2,a又被新赋值2+2=4,循环下去,c一直得2,sum=2*20=40
2015-07-07 09:37
rolimi
Rank: 4
等 级:业余侠客
威 望:1
帖 子:43
专家分:232
注 册:2015-6-10
收藏
得分:0 
赋值还可以这样
a = a + b;
b = a - b;

呆呆的逗比程序猿
2015-07-07 09:51
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:2 
程序代码:
#include<stdio.h>
#include<stdlib.h>
int f(int i){
    if(i>=0)
        return i>1?f(i-1)+f(i-2):1;
} 
float sum_(int i,float &s){
    if(i<=20){
        s+=1.0*f(i+1)/f(i);
        i++;
        return sum_(i,s);
    }
    else return s;
}
int main()
{
    int i;
    float sum=0.0; 
    printf("sum=%f\n",sum_(1,sum));
    system("pause");
    return 0;
}

剑栈风樯各苦辛,别时冰雪到时春
2015-07-07 10:00
快速回复:有一个分数序列2/1,3/2,5/3,8/5,13/8,21/13,…求出这个序列的前 ...
数据加载中...
 
   



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

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