The C preprocessor processes C source files before compilation by the compiler. It performs tasks like file inclusion using #include, macro definition and expansion, and conditional compilation using #if, #ifdef, #ifndef, etc. Macros allow constants, simple textual substitutions, and basic functions to be defined, but overuse or misuse of macros can negatively impact code readability and maintainability. The printf function formats and prints output using conversion specifiers like %d for integers, %f for floats, and %s for strings, and supports options for padding, precision and justification of the output.