| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 408 人关注过本帖
标题:菜鸟求教
只看楼主 加入收藏
C舞
Rank: 1
等 级:新手上路
帖 子:6
专家分:1
注 册:2010-4-14
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
菜鸟求教
编程实现有一分数序列
      2/1,3/2,5/3,8/5,13/8,21/13....      
即:后一项的分母为前一项的分子,后项的分子为前一项的分子与分母之和),求该数列的前20项之和
我写的程序如下
程序代码:
#include "stdio.h"
void main()
{int a=1,b=2,t,i;
    float sum=0;
    for(i=1;i<=20;i++)
    {
        sum=sum+b/a;
        t=b;
        b=a+b;
        a=t;
    }
    printf("%f",sum);  
}
发现运算结果与答案不符,答案如下
程序代码:
#include "stdio.h"
void main()
{int t,i;
    float a=1,b=2,sum=0;
    for(i=1;i<=20;i++)
    {
        sum=sum+b/a;
        t=b;
        b=a+b;
        a=t;
    }
    printf("%f",sum);  
}
我定义的a,b为整型,而答案定义的是浮点型,请问为什么会影响结果?
PS:刚刚起步学习C语言,请指教。
2010-04-19 15:41
zhecool
Rank: 2
等 级:论坛游民
帖 子:8
专家分:39
注 册:2010-3-31
收藏
得分:15 
sum=sum+b/a,如果a,b都定义为整型,那么b/a的结果会自动除去小数部分保存为整型,于是sum的结果也是除去了小数后的整型数,这应该也是为什么你的答案不对的原因,所以a,b必须声明为float。
“无论什么时候,如果某个运算的两个操作数都是整型数,C语言就会使用整数算术的运算规则执行该运算。这种情况下,所有运算的小数点部分都会被丢弃”——嘿嘿,特意找了一下书上关于这个问题的论述。

[ 本帖最后由 zhecool 于 2010-4-19 15:53 编辑 ]
2010-04-19 15:46
hs2009
Rank: 2
等 级:论坛游民
帖 子:10
专家分:19
注 册:2010-4-18
收藏
得分:5 
在c中,3/2=1  是取整数的,而不是1.5
2010-04-19 15:47
zhongyong123
Rank: 2
等 级:论坛游民
帖 子:45
专家分:15
注 册:2008-12-16
收藏
得分:0 
正解
2010-04-19 15:58
C舞
Rank: 1
等 级:新手上路
帖 子:6
专家分:1
注 册:2010-4-14
收藏
得分:0 
回复 2楼 zhecool
呵呵 谢谢你详尽的解释我明白了~
2010-04-19 16:00
快速回复:菜鸟求教
数据加载中...
 
   



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

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