Amount of pseudo code in the thesis body
Use block diagrams

Block diagrams are effective for conveying the functionality of the program and abstracting away complex and/or banal code. For my dissertation (novel implementation of controller for exhaust gas recirculation), I used block diagrams to cover the overall functionality of my code and subsequent sections to explain non-trivial implementations. 

If you are not pressed for a page/word count and feel like the only way for the program to be understood is a full explanation: fully explain it. For the sake of the sanity of your reader, your second bullet point seems most prudent: Explain rather than disclose simple and obvious code in the main body and disclose it in the appendix. Novel code implementations should be disclosed and explained in the main body of the report.

For my undergraduate dissertation I opted for this method. For example, my code modelled the control system and a DC motor. The DC motor model was trivial and unoriginal (the governing differential equations can be derived or looked up easily) and so a simple mathematical explanation of the torque and armature current equations in the main body was sufficient.