Here comes the explanation to your questions:
Question #44
increment( i ) is a local function and the value of i that is incremented inside the function will not be reflected in the main function and so the loop will never end because the loop variable is not changed.
Question #51
The condition is tested and then the loop breaks giving you the value as 5 outside the loop.
Question #91
Static variables are stored in heap and preserve the value for the execution of the program and so it does not reset for each function call where as other variable are allocated in the stack which gets destroyed when the function returns.