modify registration/sign up form

Is it possible to modify the registration process?
When entering username and password, want to add a field called "City" where users will select a city from a drop down menu.

Also, is it possible to allow users to create their own password instead of the computer-generated one during registration?