Вот моя первая попытка ответа:
void
xprintfloat(char *format, float f)
{
char s[50];
char *p;
sprintf(s, format, f);
for(p=s; *p; ++p)
if('.' == *p) {
while(*++p);
while('0'==*--p) *p = '\0';
}
printf("%s", s);
}
Известные ошибки: возможное переполнение буфера в зависимости от формата. Если "." присутствует по другой причине, чем% f может произойти неправильный результат.