QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1019|回复: 12

一个好玩的东西,整型和浮点型

[复制链接]
发表于 2005-8-29 09:41:45 | 显示全部楼层 |阅读模式
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
main()
{
      int x, y;
      x = 10;
      y =3;
      printf("%f", x/y);
}
结果输入为0.0000000!
我试了很多次,这种情况输出都可能为0。
我印像中TC下是不会是0的!
发表于 2005-8-29 10:28:54 | 显示全部楼层
晕,这也叫好玩~~~~~~~~~~
简单的错误,x/y得到的结果的int,而你的输出用的是float,float和int的存储结构不一样,出的结果不知道是什么,但是0的情况应该不大,因为x/y总归是有内容的。
回复

使用道具 举报

 楼主| 发表于 2005-8-29 10:30:59 | 显示全部楼层
[quote:fa2b40cd76="marship"]晕,这也叫好玩~~~~~~~~~~
简单的错误,x/y得到的结果的int,而你的输出用的是float,float和int的存储结构不一样,出的结果不知道是什么,但是0的情况应该不大,因为x/y总归是有内容的。[/quote]
你试试看闹......因为是0才好玩!不是0有什么好玩的!
回复

使用道具 举报

发表于 2005-8-29 11:49:47 | 显示全部楼层
marship@macroheart:~/testc> cat 2.c
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
main()
{
int x, y;
x = 10;
y=3;
printf("%f",x/y);
}


marship@macroheart:~/testc> gcc 2.c
marship@macroheart:~/testc> ./a.out
-1.995918marship@macroheart:~/testc>

哈哈,刚试的,就是不是零,
:)
回复

使用道具 举报

 楼主| 发表于 2005-8-29 12:42:33 | 显示全部楼层
难道是XP的原因,我也是用GCC编译的
回复

使用道具 举报

 楼主| 发表于 2005-8-29 12:43:32 | 显示全部楼层
C:\lltoutm>copy atan.c con
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
main()
{
      double angle;
      /*
      double x,y;
      double tanv;
      printf("X:");
      scanf("%lf",&x);
      printf("Y:");
      scanf("%lf",&y);
      printf("%lf/%lf\n",x,y);
      tanv = x/y;
      printf("%lf\n", tanv);
      angle = acos(tanv);
      printf("angle = %f\n", angle);
      printf("cos:%lf\n", cos(angle));
      printf("sina:%lf\n", sin(angle));
      */
      int x, y;
      x = 10;
      y =3;
      printf("%f", x/y);
}
已复制         1 个文件。

C:\lltoutm>atan
0.000000
C:\lltoutm>
回复

使用道具 举报

发表于 2005-8-29 13:45:33 | 显示全部楼层
跟存储结构有什么关系?整型相除当然为整型,也没见那本书上说用printf中的%f会发生强制类型转换,如果你要得到小数有两个方法:
1、int main()
{
        int x;
        int y;
        x = 10;
        y = 3;
        printf("%f\n", (float)x/(float)y);


}

2、int main()
{
        float x;
        float y;
        x = 10;
        y = 3;
        printf("%f\n", x/y);


}
回复

使用道具 举报

发表于 2005-8-29 13:55:08 | 显示全部楼层
如果你还想看看什么叫奇怪,这里有了:
int main()
{
        int x;
        int y;
        x = 10;
        y = 3;
        printf("%f\n", x/y);
        printf("%f\n", (float)x/(float)y);
        printf("%f\n", x/y);

}
结果:
[root@dreamboat tmp]# gcc test.c && ./a.out
-1.992073
3.333333
3.333332
环境:redhat 9.0
不规范的操作,必然会造成不规范的结果。
回复

使用道具 举报

 楼主| 发表于 2005-8-29 13:57:16 | 显示全部楼层
晕!
楼上的试试这个,
int x;
int y;
float z;
z =  x/y;
看看是什么?
有书上会说这样子是个整型的吗?
回复

使用道具 举报

 楼主| 发表于 2005-8-29 13:59:07 | 显示全部楼层
有浮点型或强制转换成浮点当然不会出错了!
只是当代码很长的时间,这种问题(或者说错误)很容易出现,调试的时候很是痛苦!
回复

使用道具 举报

发表于 2005-8-29 14:17:16 | 显示全部楼层
int main()
{
        int x;
        int y;
        float z;
        x = 10;
        y = 3;
        z = x/y;
        printf("%f\n", x/y);
        printf("%f\n", (float)x/(float)y);
        printf("%f\n", x/y);
        printf("%f\n", z);

}
结果:
[root@dreamboat tmp]# gcc test.c && ./a.out
-1.996590
3.333333
3.333332
3.000000
环境:redhat 9.0
很正常啊,这个结果没错啊?
相除的结果为整型,然后值送到z,发生类型类转换。这可是书上说过的。
回复

使用道具 举报

发表于 2005-8-29 14:19:09 | 显示全部楼层
建议看看谭浩强的C语言那本书写得很好。
回复

使用道具 举报

发表于 2005-8-29 15:01:29 | 显示全部楼层
哈哈,没意思。。。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-5 11:57 , Processed in 0.042404 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表