(с плавающей точкой) 9/5 использует только 9, а не результат 9/5. Таким образом, операция / не является целочисленной операцией на данном этапе. (float) (9/5) даст результат 1.00000.
Попробуйте скомпилировать все предупреждения, и, вероятно, вам многое расскажут о том, что не так.
Например, в 64-битной системе Linux, компилируя с помощью gcc -Wall, я получаю:
pf.c: In function ‘main’:
pf.c:6:2: warning: format ‘%f’ expects argument of type ‘double’, but argument 3 has type ‘int’ [-Wformat]
pf.c:6:2: warning: format ‘%d’ expects argument of type ‘int’, but argument 4 has type ‘long unsigned int’ [-Wformat]
pf.c:6:2: warning: format ‘%d’ expects argument of type ‘int’, but argument 5 has type ‘long unsigned int’ [-Wformat]
Как уже упоминалось выше, вам нужны правильные спецификаторы формата. Использование правильных спецификаторов формата и приведения дает:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
printf("%f %f %lu %lu\n",(float)(9/5),(float)4,sizeof(float),sizeof(int));
return 0;
}
дает:
snits@perelman:~/proj/c=>./pf
1.000000 4.000000 4 4