What is the difference between typing Ctrl+C and Ctrl+D in the Linux terminal?

Control+C is used to kill a process with the signal SIGINT, and can be intercepted by a program so it can clean its self up before exiting, or not exit at all.
Control+D is EOF (End-Of-File). It closes the stdin pipe. If read(STDIN) returns 0, it means stdin closed, which means CTRL+D was hit (assuming there is a keyboard at the other end of the pipe).

Ctrl + C To terminate.
Ctrl + D signals EOF.
Ctrl + Z suspends a program.