问题描述
我现在正在DevC ++中学习C,我需要解决一个简单的练习,将数字(整数或浮点数,在这种情况下为10)乘以比率,分数是分数(在这种情况下为1/6) )。当我在下面运行我的代码时,我得到的输出是0.000000,这是不正确的。在某些分数(例如4/2)上可以正常使用。
我在做什么错? 请注意:由于我们尚未研究某些高级解决方案和功能,因此我无法使用它们。另外,我必须在练习中使用常量,因为在练习开始时就已经知道分数。我的代码必须和我现在正在使用的代码一样简单:
#include <stdio.h>
#include <math.h>
const float a = 10;
const float b = 1/6;
float c;
main()
{
c = a * b;
printf("Answer = %f",c);
return 0;
}
解决方法
const float b = 1/6;
1/6
是整数除法,它等于0
您需要使用浮点常量:
const float b = 1.0f/6.0f;
后缀为f
的常量具有float
类型(1.0f
,5.12f
)。不带后缀的类型为double
(1.0
,5.12
)
常量1
和6
都是整数,因此1/6
执行整数除法。如果要进行浮点除法,则一个或两个值应为浮点常量:
const float b = 1.0/6.0;
,
您对两个不变的整数1
和6
进行除法,并且该运算的结果等于0
,并且该值正在传递给{{1} }。将float
的值更改为b
。
您需要使用浮点数,例如1.0
(而不是1
,而恰好是整数)或6.0
(而不是6
,这也是整数)
将除法运算符/
应用于两个整数时,它会执行整数除法,这意味着结果应为整数。
如果将整数1
除以6
,则得到0
,其余为1
。
最好的方法是在需要浮点表达式时使用浮点文字,例如:
#include <stdio.h>
#include <math.h>
const float a = 10.0; /* this time everything is double */
const float b = 1.0/6.0; /* you convert it into float on initialization */
float c;
main()
{
c = a * b; /* ... or when assigning */
printf("Answer = %f",c);
return 0;
}
您的程序将正常运行。