>>76
printf("%lf", f);
printf("%f", f);

どちらも同じです。

printfのプロトタイプは
 int printf(const char *, ...);
なので、...の部分は型情報がありません。
したがって、Cの規約により、...の部分に置かれた
float型の値は格上げされ、doubleで渡されます。