You problem is with floating point precision.
float i = 4.2;
i *= 100;
printf("%f\n", i);
Print: 419.999969 and not 4.2 as it should, in this case 419 is the value used in the coin problem resulting in 22 coins used 16 of 25, 1 of 10, 1 of 5 and 4 of 1 = total 22
Use: i = round(i * 100); instead of i = i * 100;
You need to contemplate the equal value, eg: else if (i >= 10 && i < 25), the range is [ini, fin), close at the beginning, open at the end. If you change the else if by if you don’t need the while loop. 
Final code:
#include <stdio.h>
#include <math.h>
int main() {
    int c = 0;
    float iv = 4.2;
    int i = round(iv * 100);
    printf("%d\n", i);
    if (i >= 25) {
        c += i / 25;
        i = i % 25;
    }
    if (i >= 10) {
        c += i / 10;
        i = i % 10;
    }
    if (i >= 5) {
        c += i / 5;
        i = i % 5;
    }
    if (i > 0) {
        c += i;
    }
    printf("%d\n", c);
    return 0;
}
More info about 
What Every Programmer Should Know About Floating-Point Arithmetic
solved can someone examine the algorithm [closed]