2 a865386512 a865386512 于 2014.12.20 13:46 提问

C语言的一个小问题,求大神

#include
int main()
{
float c,f;
scanf("%f",&f);

c=(5.0/9)*(f-32);

printf("摄氏度为%f\n",c);
return 0;
}
语句c=(5.0/9)*(f-32); 中的5.0换成5的话输出结果就错了,这是为什么呀,求大神指点

9个回答

caozhy
caozhy   Ds   Rxr 2014.12.20 13:55

如果除数是5的话,那么/就是整除的意思。
你也可以写成 5f,让它被视作是float

a865386512
a865386512 回复caozhy: /的意思是:如果是整数的话那就是整除,如果有一个是浮点型的话那就是精确求值,这样说对吗
接近 3 年之前 回复
caozhy
caozhy 回复a865386512: 那当然
接近 3 年之前 回复
a865386512
a865386512 那如果前面定义的cf为int型呢,那么/也是整除的意思吗
接近 3 年之前 回复
hjkNet
hjkNet   Ds   Rxr 2014.12.20 13:56

5/9 取整为0吧 你的输出结果是0吗?

mayh554024289
mayh554024289 因为C在运算的时候,它会自动判断数据类型。比如5/9=0。因为除数与被除数都是整型,所以结果默认整型。你要想得到浮点型的结果,那么除数或被除数至少需要一个是浮点型,这样得到的结果就是浮点型啦。所以要写成5.0/9, 或者5/9.0
接近 3 年之前 回复
hjkNet
hjkNet 回复a865386512: 因为5/9是在执行取整计算,结果为0,自然乘什么值都输出零了,如果换成5.0,结果为浮点型,也就是0.XXXX,应该就是正确的
接近 3 年之前 回复
a865386512
a865386512 是的,我换成5的话输出结果就变成0 了,这是为什么丫
接近 3 年之前 回复
a865386512
a865386512 是的,我换成5的话输出结果就变成0 了,这是为什么丫
接近 3 年之前 回复
Tianzheng369
Tianzheng369   2014.12.20 13:51

如果是输出0的话,应该是默认为int型了

qq_14922765
qq_14922765   2014.12.20 13:56

这个涉及类型转换问题,5.0/9会先将9转换成float类型在进行计算,但是5/9就会是两个整型相除结果就是0.

a865386512
a865386512 不理解呀
接近 3 年之前 回复
lxw_xiangyu
lxw_xiangyu   2014.12.20 14:28

没有头文件,include

cj_286
cj_286   2014.12.20 14:46

因为(5/9)是两个int型数据,是按整型的规则来计算的,5.0是实型,就不是取整了

u013337963
u013337963   2014.12.20 14:52

那是运算的优先级问题,如果换5 就是整型除整型得的结果还是整型,最后再乘整型得到的结果还是整型,那就与你定义的变量c(浮点型)相违背啦,但可以解决,那就是c=float((5/9)*(f-32));这样就是对的辣

mayh554024289
mayh554024289   2014.12.20 15:15

因为C在运算的时候,它会自动判断数据类型。比如5/9=0。因为除数与被除数都是整型,所以结果默认整型。你要想得到浮点型的结果,那么除数或被除数至少需要一个是浮点型,这样得到的结果就是浮点型啦。所以要写成5.0/9, 或者5/9.0

guangtouhaky
guangtouhaky   2014.12.22 14:44

编译器默认5/9为整形的除法,假如是5.0/9或者5/9.0的话应为有一个为float类型,所以编译器将另一个整形隐式转换成float并运算,结果也为float类型

Csdn user default icon
上传中...
上传图片
插入图片