It's all about the floating point number and how it is stored in the computer, which is the purpose of the lesson.
Floats are stored imprecisely in a computer. For example, if you try to store 5.50 in a float, it might be stored as something like 5.4999999978 or maybe like 5.500000023. (These are just illustrations. The exact stored number will be dependant on your computer's architecture.) The error in the number, both in amount and direction +/- will depend on the number stored and the architecture.
Here's how that affects your code. The computer does exactly and precisely what it is told. So, when you say
if(change<0.25 && change>=0.10), look what could happen. If the float is .24999987, it is less than .25, but the actual number should have been .25, so the code fails to handle it correctly. (Actually, it would have been mishandled on the prior test.) Or, what if the float is .099999999978? Same problem.
This also illustrates the need for testing special cases, or corner cases, as they're sometimes known.
Want to see an effective demonstration? Compile the following on your computer and feed numbers into it.
printf("Enter 0 to quit or a floating point number: ");
cents = GetFloat() ;
printf("You entered: %.15f \n",cents );
if (cents == 0.0) break;
while ( true );
You can see exactly what I mean when you enter .30 and .35.
If this answers your question, please accept this answer to remove the question from the unanswered question pool. Let's keep up on forum housekeeping. ;-)