| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 727 人关注过本帖
标题:这一题我编的的程序错在哪里
只看楼主 加入收藏
tigerball
Rank: 2
等 级:论坛游民
帖 子:58
专家分:32
注 册:2013-6-10
结帖率:80%
收藏
已结贴  问题点数:2 回复次数:11 
这一题我编的的程序错在哪里
图片附件: 游客没有浏览图片的权限,请 登录注册

这是谭浩强书上的一道例题,虽然有答案,但是我自己还是编了一个。感觉我编的这个没啥错误啊,逻辑也对啊,可为什么运行出来的结果是错误的呢?求解答!


我的代码如下:

程序代码:
#include <stdio.h>
int main()
{
    int sign,deno;
    double sum;
    sum=1.0;
    sign=1;
    deno=2;
    while(deno<=100)
    {
        sign=-sign;
        sum=sum+sign*1/deno;
        deno=deno+1;
    }
    printf("%f\n",sum);
    return 0;
} 


[ 本帖最后由 tigerball 于 2013-6-11 20:39 编辑 ]
2013-06-11 20:37
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:2 
程序代码:
#include <stdio.h>
int main()
{
    int sign,deno;
    double sum;
    sum=1.0;
    sign=1;
    deno=2;
    while(deno<=100)
    {
        sign = -sign;
        sum=sum+sign*1./deno;
        deno=deno+1;
    }
    printf("%f\n",sum);
    return 0;
}

仰望星空...........不忘初心!
2013-06-11 20:41
我想学cplaus
Rank: 1
等 级:新手上路
帖 子:6
专家分:7
注 册:2013-5-31
收藏
得分:0 
你那个sign*1./deno;是int类结果为零,把deno定义成double类,就ok了
2013-06-11 21:00
我叫沃恩
Rank: 12Rank: 12Rank: 12
来 自:Asia
等 级:贵宾
威 望:10
帖 子:1234
专家分:3865
注 册:2013-3-29
收藏
得分:0 
同意2楼!!

因为我是菜鸟,所以应该被骂! 细节+坚持=成功!
2013-06-11 21:48
apologz
Rank: 2
等 级:论坛游民
帖 子:56
专家分:24
注 册:2013-2-4
收藏
得分:0 
老实说,一开始我还真找不出问题,不过看了2楼,豁然开朗。我也是新手,也看谭书。

难觅知音、同一个编程梦,我们共同进步。
2013-06-11 21:55
apologz
Rank: 2
等 级:论坛游民
帖 子:56
专家分:24
注 册:2013-2-4
收藏
得分:0 
其实我发现,不用把sign定义为double,只需要改为sum=sum+sign*1.0/deno;就可以了

难觅知音、同一个编程梦,我们共同进步。
2013-06-11 22:02
tigerball
Rank: 2
等 级:论坛游民
帖 子:58
专家分:32
注 册:2013-6-10
收藏
得分:0 
以下是引用我想学cplaus在2013-6-11 21:00:36的发言:

你那个sign*1./deno;是int类结果为零,把deno定义成double类,就ok了
为什么 sign*1/deno;是int类呢?这个我不明白,是因为sign和deno都是定义的int类吗?
2013-06-11 23:32
tigerball
Rank: 2
等 级:论坛游民
帖 子:58
专家分:32
注 册:2013-6-10
收藏
得分:0 
以下是引用Susake在2013-6-11 20:41:28的发言:

#include  
int main()
{
    int sign,deno;
    double sum;
    sum=1.0;
    sign=1;
    deno=2;
    while(deno<=100)
    {
        sign = -sign;
        sum=sum+sign*1./deno;
        deno=deno+1;
    }
    printf("%f\n",sum);
    return 0;
}
为什么加一个点就可以了呢?
2013-06-12 09:55
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:0 
相当于1.0

仰望星空...........不忘初心!
2013-06-12 10:18
tigerball
Rank: 2
等 级:论坛游民
帖 子:58
专家分:32
注 册:2013-6-10
收藏
得分:0 
以下是引用Susake在2013-6-12 10:18:24的发言:

相当于1.0
哦,为什么 sign*1/deno是int类呢?而 sign*1. /deno就变成了浮点类型类呢?是因为1.0是浮点型的,就把整个式子运算的结果类型给改变了吗?
2013-06-12 11:05
快速回复:这一题我编的的程序错在哪里
数据加载中...
 
   



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

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