| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1189 人关注过本帖
标题:刚学C想问个问题
只看楼主 加入收藏
bredleaf
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-7-19
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:14 
刚学C想问个问题
#include <stdio.h>
#include <math.h>

int main(void)
{
    double a=0.0,
        b=0.0,
        c=0.0;
    int    d=0,
        e=0;
    printf("输入你一个星期的薪水为");
    scanf("%lf",&a);
    printf("\n工作时数为");
    scanf("%lf",&b);
    c=a/b,d=c,e=(c-d)*100;
    printf("你每小时获得金钱为%d元,%d分。",d,e);
    return 0;
}
把c=a/b,d=c,e=(c-d)*100;
改成c=a/b,d=floor(c),e=(c-d)*100;时 结果会比原来小1分
比如薪水为145 时数为50时,没改前是2元90分 改后会变成2元89分。哪位大虾能解惑下
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
不管怎样,先多谢各位啦

[ 本帖最后由 bredleaf 于 2013-7-27 23:55 编辑 ]
搜索更多相关主题的帖子: include double return 
2013-07-27 16:15
cddazao
Rank: 2
来 自:四川
等 级:论坛游民
帖 子:46
专家分:25
注 册:2013-2-12
收藏
得分:4 
floor向下取整
2013-07-27 16:51
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:4 
强制转换类型时会自动取近似值

孤独与寂寞是催化一个人迅速成长的良药,没有之一
2013-07-27 17:48
bredleaf
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-7-19
收藏
得分:0 
回复 2楼 cddazao
我知道向下取整啊  但跟后面少1分有什么关系??
2013-07-27 17:48
XiaoXiao_Ren
Rank: 3Rank: 3
来 自:西安
等 级:论坛游侠
威 望:1
帖 子:80
专家分:198
注 册:2013-7-17
收藏
得分:4 
回复 楼主 bredleaf
#include <stdio.h>
#include <math.h>

int main(void)
{
    double a=0.0,
        b=0.0,
        c=0.0;
    int    d=0,
        e=0;
    printf("输入你一个星期的薪水为");
    scanf("%lf",&a);
    printf("\n工作时数为");
    scanf("%lf",&b);
    c=a/b,d=c,e=(c-d)*100;
    printf("你每小时获得金钱为%d元,%d分。",d,e);
    return 0;
}
把c=a/b,d=c,e=(c-d)*100;
改成c=a/b,d=floor(c),e=(c-d)*100;时 结果会比原来小1分
比如薪水为145 时数为50时,没改前是2元90分 改后会变成2元89分。哪位大虾能解惑下


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
不是吧,我运行了一下,两个结果都是2元89分,
我的理解是计算机在计算e的时候,由于c是double,
所以该计算式全部转换为double进行运算,最后在赋值给整数(仅仅取整数部分),
为什么会把90.0赋值给int型数的时候变成89,不清楚。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
可以加入下列代码进行验证。
     double  g=0.0;
     int  f=0;  
     g=(c-d)*100;
     f=g;
     printf("g=%3.2f  f=%d  \n",g,f);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

否极泰来
2013-07-27 17:51
bredleaf
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-7-19
收藏
得分:0 
回复 3楼 小小程序猿
那也只是计算时把d转成double类型  计算后再转成int类型啊  而且按我给的数据145 50 计算得c=2.9 那么d=2 e=90.不用取近似值啊
2013-07-27 17:55
XiaoXiao_Ren
Rank: 3Rank: 3
来 自:西安
等 级:论坛游侠
威 望:1
帖 子:80
专家分:198
注 册:2013-7-17
收藏
得分:0 
回复 6楼 bredleaf
我的理解是计算e的时候都转换为double进行,可能内存中存放了一个无限接近90.0的数,如89.999999,存放到int后就成了89,这仅仅是猜测,不清楚%ld显示的g为什么还是90.0,很奇怪,不清楚,帮不了你喽。

否极泰来
2013-07-27 18:02
bredleaf
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-7-19
收藏
得分:0 
回复 5楼 XiaoXiao_Ren
我这里没用floor时是2元90分的,试了你给的代码的确得出差了1
2013-07-27 18:05
XiaoXiao_Ren
Rank: 3Rank: 3
来 自:西安
等 级:论坛游侠
威 望:1
帖 子:80
专家分:198
注 册:2013-7-17
收藏
得分:0 
回复 8楼 bredleaf
这个还真是奇怪,可能和编译器有关系吧,我这里两个结果都是2元89分。

否极泰来
2013-07-27 18:09
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:0 
对不住,刚才没调试,只是单纯的凭经验大致看了一眼

不过刚刚我又重新调了

首先你的强制转换就有问题啊 定义的d是int型,却又d=floor(c);这是要闹哪样啊???

不过奇迹般的是;我用VC6.0调试的两次的结果一样

个人认为,因为你定义的d是int型,所以第一次也就是d=c时,似乎就已经强制转换,取整了,而第二次d=floor(c),因为c本身就是浮点型所以你的float无意义,相当于还是d=c
至于你说的两次结果不一样我感觉是float强制转换时发生的取近似所导致的的

知识有限只能帮你到这了

[ 本帖最后由 小小程序猿 于 2013-7-27 18:36 编辑 ]

孤独与寂寞是催化一个人迅速成长的良药,没有之一
2013-07-27 18:30
快速回复:刚学C想问个问题
数据加载中...
 
   



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

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