A) #2. One page would be enough to handle everything, but you could separate it into two pages: one for showing questions, one for saving answers.
B) I would do an INSERT for the first "page" and UPDATES for the remainder. Advantages include getting a row into the table sooner and thus an ID, making it easier to save progress through the survey, and keeping track of complete versus incomplete results (starts off incomplete, marked as complete after the final set of questions).
How I would do it, given two minutes to think about it and not knowing the full story behind this project:
I could easily see grouping some questions together into distinct "pages" - for a short survey probably not but if you have >200 then probably so. So that's a new entity in the system: a "page of questions".
Code:
page_id | page_title
--------+---------------------
1 | Personal Information
2 | Favorite Things
3 | Multiple Choice
There's also the questions themselves, of course...
Code:
question_id | page_id | question_text
------------+---------+--------------
1 | 1 | Gender
2 | 1 | Age
3 | 2 | Favorite color
...and their possible answers.
Code:
answer_id | question_id | answer_text
----------+-------------+------------
1 | 1 | Male
2 | 1 | Female
3 | 1 | Transgender
4 | 1 | No answer
5 | 2 | 1-18
6 | 2 | 19-25
Then the place to put the chosen answers.
Code:
result_user | question_id | answer_id
------------+-------------+----------
1 | 1 | 4
1 | 2 | 7
(You'd also need a table for the users. This is for one survey per user: if you want multiple surveys then you'd need a table for users/results, and the table of chosen answers would use that as its foreign key.)
And there's the hard part out of the way.