First I would recommend you to read cs50Style and also add some comments so the code is more legible not just for us, but for you too. Another recommendation is adding some "tests" during the program, for example if you want to know if some part of the program is being executed add some code like:
printf("TEST1\n"); //check 1
By doing this you can check when your program is reaching a certain point or failing in another. (This tests will be deleted before sending or checking the problems, don't forget that).
Now let's get to the main problem. For knowing what a function or any function does, you can visit [reference cs50]: https://reference.cs50.net or writting in your "cs50 appliance" console: man followed by the name of the function in this chase man round.
Basically this function rounds a number to its nearest integer value (2.70 to 3.00).
Regarding the question of why your program doesn't work.
First I would look a way of implementing a do..while loop in the input section:
printf(" O hai! How much change is owed?\n");
float change;
change=GetFloat();
Because if I write down -5.00, what would be the result of that?
Second, it's not neccesary to return the value of i in each iteration.
Third, I see a problem with the symbols, for example: x>25, x>10. What if the remaining coin is 10 if you have written x>10?. It's really easy to fix this problem tho :)
Fourth, if you think about it, you dont really need to write the last part of your code
while(x>1)
{
x=x-1;
i++;
because the coins values will be 1 so you can add the amount of remaing 1 coins to the total (i+x).
And try to take adventage of style using this when writting code
x = x-1;
is equal to
x -= 1;
And lastly I would like to tell you that there is way of resolving this problem without any while(x >=25, x>=10,...), just by doing sums, divisions(think of type int property) and modulo operations.
Moreover I hope that you don't give up in this course, it's challenging but really funny once you get things learned, it's like some kind of snowball.
Good luck!