http://ideology.com.au/polyglot/ is a nice eight-language (Cobol, Pascal, Fortran, C, PostScript, Shell, x86, Perl) polyglot program.
Conveniently, it has a source viewer which will highlight relevant parts of the program's structure for a given language. For instance, the C compiler sees this: http://ideology.com.au/polyglot/c/
Reasoning behind trigraphs (partially explained in footnote in standard, section 5.2.1.1) is that there is something like "Invariant Code Set" which is subset of ASCII and some characters used by C does not fall into this set (which is obvious since C uses all ASCII characters except @ and $, with $ being valid character for identifiers on some compilers). Real usefulness of this feature is exactly zero, but it provides some insight into process of standardization. Uselessness of this is even more pronounced by fact that there is no trigraph sequence for _, which also does not exist in some encodings (althought for slightly different reasons).
Because almost all encodings that are not somehow compatible with ASCII are obsolete now, trigraphs are obsolete too. But it is certainly interesting thing to know about. And by the way "incompatible with ASCII" means that the characters are there, but look different (¤ vs. $, ¥ vs \, and so on...)
...or according to the wikipedia article it was intended to support C code entry on keyboards that don't have characters for [, ], {, }, #, etc. In other words torture.