标题:求出2/1,3/2。。。。前20项的和,为什么结果是1.000000??
只看楼主
zxrd1989
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2011-5-11
结帖率:64.29%
已结贴  问题点数:10 回复次数:11 
求出2/1,3/2。。。。前20项的和,为什么结果是1.000000??
#include<Stdio.h>
void main()
{
    int m=2;
    int n=1,i;
    float s=m/n;
    float sum=0;
    for(i=1;i<=20;i++)
    {
        m=m+n;
        n=m;
        s=m/n;
        sum=sum+s;
         printf("%f\n",s);
    }
   

}
搜索更多相关主题的帖子: 为什么 
2011-06-14 10:30
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:1 
5 / 2 在C\C++\Java里都等于2,小数部分被截断,如果要获得小数部分,则改成 5.0 / 2 或 5 / 2.0 或 5.0 / 2.0,即两个操作数只要有一个是浮点类型,则结果为浮点类型,否则小数部分被截断。

My life is brilliant
2011-06-14 10:34
jlu_uestc
Rank: 2
等 级:论坛游民
帖 子:30
专家分:14
注 册:2011-4-14
得分:1 
你输出的是s,s等于m/n,每次你都假设m=n,当然最后的结果只能是1
2011-06-14 10:35
落叶深蓝色
Rank: 8Rank: 8
来 自:山东
等 级:蝙蝠侠
帖 子:319
专家分:807
注 册:2010-12-8
得分:1 
程序代码:
#include <stdio.h>
void main()
{
    int i=2,j=1;
    double sum=0.0;
    for(;j<=20;)
    {
        sum+=(double)i/j;
        i++;
        j++;
    }
    printf("sum=%g",sum);
}
2011-06-14 11:00
韩54521风
Rank: 4
等 级:业余侠客
帖 子:75
专家分:212
注 册:2011-6-11
得分:1 
#include <stdio.h>
void main()
{
    int i=2,j=1;
    double sum=0.0;
    for(;j<=20;i++,j++)
      sum+=(double)i/j;    /*强制类型转换*/
    printf("sum=%lf",sum);
}
这样简单,你的思路的可以改成
#include<Stdio.h>
void main()
{
    int m=2;
    int n=1,i;
    float s;
    float sum=0.0;
    for(i=1;i<=20;i++)
    {
        m++;
        n++;
        s=(float)m/n;
        sum=sum+s;
         printf("%f\n",sum);
    }
    }
可以继续改一下,去掉没有必要的变量
#include<Stdio.h>
void main()
{
    int m=2,n=1;     /*一次性定义*/
    float s,sum=0.0;
    for(;n<=20;)
    {
        m++;
        n++;
        s=(float)m/n;
        sum=sum+s;
    }
    printf("%f\n",sum);  /*只输出结果*/
    }
尽量做到精简
2011-06-14 12:47
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
得分:1 
楼主 你先看看书本吧

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2011-06-14 13:05
cxs365
Rank: 2
等 级:论坛游民
帖 子:32
专家分:30
注 册:2011-5-6
得分:1 
错误至少有3个。
1、C语言中整数相除结果为整数,2/1=2,3/2=1,这显然与题目所求之和不符。
2、循环中,当i = 1时,m = m + n也就是m = 2 + 1 = 3,然后n = m,也就是n = m = 3,换句话说m==n,那么s = m / n = 1.
3、printf( "%f", s ),这里的错误导致最后的结果永远都是1.000000 你要求的是sum,不是s.
 
 
 

每天前进一小步!
2011-06-14 13:08
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
得分:1 
楼主看看书吧。
2011-06-14 14:33
烟雾中的迷茫
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:621
专家分:1069
注 册:2011-2-9
得分:1 
看样子楼主跟我一样缺少自己多分析分析的能力啊
2011-06-14 16:47
我叫小杜
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:54
专家分:105
注 册:2011-6-11
得分:1 
首先同意三楼。其次,你的思路好像不太清晰啊!我的建议:
#include<stdio.h>
void main()
{
float a=2,b=1,s=0;
int i,t,n=20;
for(i=1,i<=n,i++)
{
s=s+a/b;
t=a;
a=a+b;
b=t;
}
printf("sum=%9.6f\n",s);
}

坚持到底,不,轻言,放弃!
2011-06-14 18:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-342764-1-1.html




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

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