Is midnight a.m. or p.m. and explain why?
There's no "right" answer of course, but I will defend the usual standard answer, that midnight is a.m. The reason for this is basically consistency, it makes sense that 12.00 and 12.01 should be both a.m. or both p.m. (to my mind anyway), and 12.01 is a.m., so 12.00 must also be a.m. Furthermore, assuming your clock is perfectly accurate, by the time the light reaches your eyes, the correct time will be slightly past 12.00 and so it will now be a.m. If you really need to decide on a.m. or p.m. I'd go with a.m., but I usually write 12noon or 12midnight, thus sidestepping the problem.
It all depends on whether you feel it is more important for there to be a "last instant of the previous day" or a "first instant of the next day". If the former, midnight is pm, otherwise midnight is am. I agree with Dan that conventionally it is am, because the digit has turned. In some ways it is a bit like the convention that 0.5 rounds up to 1 rather than down to zero.
This is all nonsense, it is am because of the rotation of the earth. It takes 24 hours to get through a whole day and so 12.00 at night is really 00.00 in that rotation i.e think of a clock counting down from 24.00 to 00.00. Dont listen to anything else!.
Sorry, Thomas, but you've sidestepped the problem. We choose to run through the clock once per rotation of the Earth on its axis (or thereabouts), but the choice to begin the "new day" exactly halfway between consecutive times when the sun is at its highest point in the sky (that is, at midnight) is entirely arbitrary. It would be just as easy to change the date at midday, dawn or dusk (there are cultures where the day changes at dawn and dusk, I am not aware of any that consider noon to be the change of day) or indeed any other time we feel like. Since the whole system is completely arbitrary, so is the choice of whether the border between days is considered to be in one or the other. Of course, for all practical purposes, it makes no difference whatsoever.