如何在C中使用分数?

问题描述

我现在正在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.0f5.12f)。不带后缀的类型为double1.05.12

,

常量16都是整数,因此1/6执行整数除法。如果要进行浮点除法,则一个或两个值应为浮点常量:

const float b = 1.0/6.0;
,

您对两个不变的整数16进行除法,并且该运算的结果等于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;
}

您的程序将正常运行。