top down
top down is good when you have a high-level idea of what the software should do, and you are working to design the parts that will create and support that required functionality
bottom up
bottom up is good for when you know what much [or most] of the underlying functionality will be, but you don’t know yet how that will be implemented at a higher level
cast
ex: double (int value)
pointers
identifiers that refer to some object in memory
string
an array of characters, just like in many other languages, that ends with the NULL character
function prototype
definition of the function without the innards
format specifier
control what the output looks like