Functions are blocks of code that perform specific tasks in C programs. There are two types of functions - standard functions that are predefined like main(), printf(), scanf(), and user-defined functions created by the programmer. Functions can take parameters, return values, or do both. Functions can be called by value, where the value of an argument is passed, or by reference, where the address of an argument is passed, allowing the function to modify the original variable. Functions improve modularity, reusability, and code organization in C programs.