lo que pasa es lo siguiente:
el 4 y el 3, son enteros, no son numeros con decimales. por lo tanto si haces.
#include <stdio.h>
#include <stdlib.h>
int main()
{
float a;
a = 4.0 /3.0;
printf("%f", a);
return 0;
}
funciona como esperabas. Pero si haces lo siguiente:
#include <stdio.h>
#include <stdlib.h>
int main()
{
float a;
a = 4 /3;
printf("%f", a);
return 0;
}
ya el resultado es otro porque desprecia las cifras decimales porque es una operacion entre enteros y el resultado se lo asignas a un float.
Pero si haces lo siguiente:
#include <stdio.h>
#include <stdlib.h>
int main()
{
float a;
a = (float)4/3;
printf("%f", a);
return 0;
}
Funciona como vos esperas, por que?, porque el casting(conversion se podria decir) entre entero a float es explicito por lo tanto el compilador lo interpreta como en el primer caso.