Поскольку вы используете числа с плавающей точкой, вы можете получить ошибку округления и получить деньги, имеющие значение, например .001. Это приведет к тому, что вы снова войдете в верхний уровень для цикла, который сбросит q, d, n и p на 0. Гораздо удобнее использовать циклы while:
#include <stdio.h>
#include <stdlib.h>
main()
{
int q = 0;
int d = 0;
int n = 0;
int p = 0;
float money = .34; // test value
int coins;
while (money >= .25)
{
money = money - .25;
q++;
}
while (money >= .10)
{
money = money - .1;
d++;
}
while (money >= .05)
{
money = money - .05;
n++;
}
while (money >= .01)
{
money = money - .01;
p++;
}
coins = q+d+n+p;
printf("%d", coins); // Note that type was changed to int
}
Примечание, поскольку при этом все еще используются числа с плавающей запятойВы можете получить небольшие ошибки округления. Было бы лучше посчитать по центам, используя целые числа, а не числа с плавающей запятой, чтобы отслеживать доли доллара, но я хотел сохранить стиль, аналогичный вашему.