| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 875 人关注过本帖
标题:这程序的运行结果怎么等于0了呢?
只看楼主 加入收藏
ayawawa
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-3-7
结帖率:0
收藏
已结贴  问题点数:20 回复次数:9 
这程序的运行结果怎么等于0了呢?
#include<stdio.h>

  int main()
  
    {
     
     printf("8除以3=%d\n",8/3);        
     printf("8除以3=%f\n",8/3);
     printf("8除以3=%.1f\n",8/3);
        
      return 0;
        
        
    }

8除以3=2
8除以3=0.000000
8除以3=0.0

为何后两个运算结果为0呢?我预期是下面的:
8除以3=2.666667
8除以3=2.7

请问为何会出现这样的情况,想不通啊?
搜索更多相关主题的帖子: 运行 结果 
2010-03-07 11:45
hanzhenddd
Rank: 5Rank: 5
等 级:职业侠客
帖 子:90
专家分:361
注 册:2010-3-4
收藏
得分:3 
printf("8除以3=%f\n",8/3);
 printf("8除以3=%.1f\n",8/3);


把 8 和 3  换成 8.0和3.0,这是由于类型不匹配造成的。。。  编译器把8和3当成了int型。


建议在linux下 学习     C语言。。这类的错误在  gcc -Wall  filename   是要警告的。到目前为止,我的警告也就只有1次是不可改的,其他的都是0警告!~


[ 本帖最后由 hanzhenddd 于 2010-3-7 12:27 编辑 ]
2010-03-07 12:25
ayawawa
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-3-7
收藏
得分:0 
类型不匹配,系统不会自动转换类型吗?那也不至于等于0吧?我是在widnows下,用chIDE运行的
2010-03-07 14:42
邮贼
Rank: 2
等 级:论坛游民
帖 子:17
专家分:36
注 册:2010-3-5
收藏
得分:3 
这个是因为8/3的结果是一个整数,所以与前面的float不匹配,只要将后面的8/3强制类型转换就好咯!具体改正后如下:
#include<stdio.h>

  int main()
  
    {
     
     printf("8除以3=%d\n",8/3);        
     printf("8除以3=%f\n",(float)8/3);
     printf("8除以3=%.1f\n",(float)8/3);
        
      return 0;
        
        
    }
2010-03-07 15:13
ayawawa
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-3-7
收藏
得分:0 
谢谢!这个强制类型转换的方法,我知道。只是没有搞明白里面的机制是怎样的?8/3结果是2,那么2以f%输出为何为0,整数是32位补码存储的,浮点数是以阶码64位存储的,是不是这个过程中有啥说法啊?
2010-03-07 17:01
邮贼
Rank: 2
等 级:论坛游民
帖 子:17
专家分:36
注 册:2010-3-5
收藏
得分:0 
不好意思,我才初学,这个我也不太懂。欢迎懂得人给介绍一下吧!
2010-03-07 17:23
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:3 
参考下吧,各位!
http://topic.

★★★★★为人民服务★★★★★
2010-03-07 19:41
无诲今生
Rank: 8Rank: 8
来 自:桂林理工大学
等 级:蝙蝠侠
威 望:2
帖 子:373
专家分:726
注 册:2009-5-11
收藏
得分:3 
可以看一下浮点型在内存的二进制表示法方面的内容,就知道为什么了

顺境逆境切莫止境,得意失意切莫在意。
2010-03-07 19:46
悠哉悠哉
Rank: 2
等 级:论坛游民
帖 子:19
专家分:15
注 册:2010-2-7
收藏
得分:3 
不懂悠
2010-03-08 10:49
冰点小爱
Rank: 2
来 自:吉林长春
等 级:论坛游民
帖 子:39
专家分:49
注 册:2010-3-2
收藏
得分:3 
#include<stdio.h>

  void main()
  
    {
     
     printf("8除以3=%d\n",8/3);        
     printf("8除以3=%f\n",8.0/3.0);
     printf("8除以3=%.1f\n",8.0/3.0);
        
      return 0;
        
        
    }
这样就好了啊。你试试吧
2010-03-08 12:16
快速回复:这程序的运行结果怎么等于0了呢?
数据加载中...
 
   



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

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