| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 711 人关注过本帖
标题:求解释,个位高手。
只看楼主 加入收藏
回首依依
Rank: 7Rank: 7Rank: 7
来 自:苏州
等 级:黑侠
威 望:1
帖 子:193
专家分:524
注 册:2011-12-3
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
求解释,个位高手。
#include"stdio.h"
int main()
{
  long int a,b=0;
  scanf("%ld",&a);
  printf("%ld",b=27500+(a-400000)*0.03);
  return 0;
}
在VC6.0环境下结果为30500,这正确;但在TC2.0下结果却少了1,为30499.这是为什么啊?
再者:程序改为:
#include"stdio.h"
int main()
{
  long int a,;
  scanf("%ld",&a);
  printf("%ld",27500+(a-400000)*0.03);
  return 0;
}
结果怎么变为0啦,TC2.0,VC6.0,结果一样。
真心求指教啊。谢谢啦。
搜索更多相关主题的帖子: long include return 
2012-01-23 18:54
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:10 
请在TC2.0下执行下面的程序,告诉我结果。要分析你的第一问我需要确认一些事情,我的机器上没有TC(也不打算装)。
第二问的原因是你将一个浮点数作为整数输出造成的。printf并不判断参数的实际类型是什么,你把它当作什么输出它就认为是什么类型。
#include<stdio.h>
int main()
{
  printf("%d\n", sizeof(0.1));
  return 0;
}

重剑无锋,大巧不工
2012-01-23 19:22
回首依依
Rank: 7Rank: 7Rank: 7
来 自:苏州
等 级:黑侠
威 望:1
帖 子:193
专家分:524
注 册:2011-12-3
收藏
得分:0 
回复 2楼 beyondyf
结果是:8
2012-01-23 19:33
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
你的a值输入的是多少?500000?

重剑无锋,大巧不工
2012-01-23 19:40
回首依依
Rank: 7Rank: 7Rank: 7
来 自:苏州
等 级:黑侠
威 望:1
帖 子:193
专家分:524
注 册:2011-12-3
收藏
得分:0 
回复 2楼 beyondyf
对啊。浮点数占8个字节啊。第二问还是有些不太明白,参数是浮点数,不错,应该是30500.000000;变为长整形时,不是去小数吗?还应该是30500啊。嗯,我就是不懂为什么是0啊?大哥,这到底怎么回事啊?麻烦了。
2012-01-23 19:46
回首依依
Rank: 7Rank: 7Rank: 7
来 自:苏州
等 级:黑侠
威 望:1
帖 子:193
专家分:524
注 册:2011-12-3
收藏
得分:0 
回复 4楼 beyondyf
是500000
2012-01-23 19:46
飞莲
Rank: 2
等 级:论坛游民
帖 子:42
专家分:64
注 册:2011-12-28
收藏
得分:0 
使用%d显示float值不会把该float值转换为近似的int值,而是显示垃圾值.这个对吗?
2012-01-23 19:55
飞莲
Rank: 2
等 级:论坛游民
帖 子:42
专家分:64
注 册:2011-12-28
收藏
得分:0 
#include <stdio.h>
int main(void)
{
    long a;
    float b;
    scanf("%ld",&a);
    b=27500+(a-400000)*0.03;
    printf("%f",b);
    return 0;
}
2012-01-23 20:03
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:10 
第二问很好理解。将浮点数转换为整数的过程会去掉小数部分,但你的输入中并没有进行转换,只是将这8字节浮点数的低4字节作为一个整型输出了。
正确的方式应该是printf("%ld",(long int)(27500+(a-400000)*0.03));

第一问的成因是计算精度的问题。计算机不能精确地表示0.03。VC与TC对此的处理方式不同。

重剑无锋,大巧不工
2012-01-23 20:09
回首依依
Rank: 7Rank: 7Rank: 7
来 自:苏州
等 级:黑侠
威 望:1
帖 子:193
专家分:524
注 册:2011-12-3
收藏
得分:0 
回复 9楼 beyondyf
真心谢谢版主,懂了。,版主厉害。
2012-01-23 20:17
快速回复:求解释,个位高手。
数据加载中...
 
   



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

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