やろうとしていることは簡単です。標準入力から 1 文字読み込み、アルファベットの大文字であれば小文字に変換して標準出力に書き込んでいます。 ここで、アルファベットの大文字かどうかの判別には isupper を使うべきだと主張する方がおられるかもしれませんが、その主張は必ずしも正しくありません。なぜなら、isupper の挙動はその時点で設定されているロケールに依存するからです。確実に、'A'~'Z' の範囲に収まっているかどうかを判定するには、やはり自前で処理を書かなければなりません。 というわけで、isupper ではなく、自前で判定を行っていること自体は間違いではないわけですが、問題はその判定方法にあります。ASCII や ASCII と(ほぼ)互換性のある文字コードの場合、多バイト文字さえ考慮しなければ上のコードでも問題ありません。しかし、このコードには少なくとも移植性がありません。