When you look closely, C is a very academic programming language, and its academic influence can be seen in its design-level decisions.
For instance, why does C differentiate between for loops and while loops? Because mathematically there's a natural partition between the two: for loops correspond to primitive recursion, and while loops correspond to total recursion.
Here's another one: why are unions called unions? Because, if types are interpreted as sets, the C union is directly equivalent to the set theoretic union. Similarly, structures are directly equivalent to the Cartesian product (although they are not named appropriately).
K&R were geniuses, not only in practical programming, but in the egg-head understanding of the mathematical theory behind programming languages.