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.