Please forgive my arrogance, as I post so insubstantial answer. However, it may be helpful - if the case is teaching the idea of programming languages - and comments are to narrow.
I deeply believe, the tactic of teaching is more important, then choosing the simplest language. My classes (being a student) of programming languages involved the while language, which, I purpose, is more complex then PFC. However, in the end, the students was able to do some simple inductive proofs about while-programs, and build interpreters for a small statically-typed objective-functional-imperative cross language. Even though, they were of the first year. - I think the organization of the material and incremental going from formal grammars, through ASTs, static analyses, fixed points to semantics, Hoare logic and little lambda calculus, together with implementation of own interpreter have done the job pretty well.
The $while$ languages are generally - at least in my villagy surroundings - minimalistic derivations of IMP, containing the $while$ instruction. - Maybe this is local. If so, I should probably ask for forgiveness for my arrogance and ignorance, either. $:-)$
A good reference, for this case, can be CS522 - Programming Language Semantics (Spring 2011) lecture notes. - Especially this, if we are into the denotational semantics http://fsl.cs.uiuc.edu/images/4/45/CS522-Spring-2011-PL-book-denotational.pdf
whilelanguage, e.g. that of Hoare's famous paper An axiomatic basis for computer programming. If you don't need non-termination, you can use a typed $\lambda$-calculus. The (asynchronous) $\pi$-calculus is an especially beautiful and widely used toy language. Finally, why don't you invent a language that suits your purpose? $\endgroup$