sono funzioni della libreria standard. se hai un sistema gnu/linux con tutto il necessario per la prog installato, digitando
man Funzione
dalla linea di comando hai il manualetto... (al posto di Funzione metti getch, ecc.) che spiega tutto, e tra l'altro lo trovi anche online..., per es.
http://www.opengroup.org/onlinepubs/000095399/functions/getchar.html
ma se ne trovano altri.
getch e putch non fanno parte della libreria standard del C, tipicamente sono in librerie come conio (definita nell'header conio.h) per windows, o curses/ncurses per sistemi "*nix".
getchar prende un carattere dallo standard input (stdin), bufferizzata
putchar "invia" un carattere allo standard output (stdout)
getch legge un carattere dal terminale; anche se sembra non è lo stesso, getch sottintende un terminale interattivo, getchar uno stream di caratteri che può provenire anche da file (stdin e stdout posson essere reinderizzati); dunque getch è il modo tipico (ammesso che la lib sia disponibile) per "leggere interattivamente" i tasti (e reagire man mano che vengono premuti); mentre getchar, è bufferizzata, quindi p.es., metti che nel buffer ci sia "ciao", e che siamo all'inizio del buffer, la prima getchar prende "c", ma seconda "i"... se intanto il buffer si riempie, per esempio con "mondo", diventando "ciaomondo", in ogni caso dopo la "i" otterremo la "a" ecc.
putch invia un carattere al terminale, sempre supponendo che sia un terminale interattivo, e alla posizione corrente del "cursore" (che altre apposite funzioni permettono di spostare); librerie come conio e meglio curses permettono output evoluto verso terminale, cose del tipo
http://www-uxsup.csx.cam.ac.uk/pub/doc/suse/sles9/adminguide-sles9/images/yast2_ncurses_main.png
(si tratta di una shell/terminale "dentro" una finestra grafica; quello che "fa" una lib come ncurses è quello che c'è dentro, "nel" terminale, non la finestra ecc., cioè non gli elementi strettamente grafici)
getchar e putchar sono definite nello std C89/C99; getch e putch no (librerie tipo conio o curses non sono standard C)
le funzioni printf scanf ecc. sono tutte della lib standard come da standard C89/C99.
sono funzioni più evolute.
la diff tra printf e fprintf ecc. è che la "versione" con f permette di scrivere/leggere verso un "file" qualunque aperto, mentre le altre leggono da stdin e scrivono verso stdout; si può dire che
printf(....);
sia lo stesso che
fprintf(stdout, ....);
la f "finale" sta per formatted: il primo argomento di printf e scanf (il secondo di fprintf, e fscanf) è una stringa che può contenere dei codici particolari per "dire" come formattare l'output o come leggere l'input formattato.
c'è una vaga "somiglianza" funzionale tra
putchar(carattere);
e
printf("%c", carattere);
ma mentre putchar si ferma lì, printf permette di "scrivere" (mandare in output) stringhe intere, con elementi da sostituire e rappresentare come caratteri, per esempio
printf("%.1lf + %.1lf = %.1lf\n", 2.0, 3.0, 2.0+3.0);
scrive una roba del tipo
2.0 + 3.0 = 5.0
il che vuol dire che i dati float sono stati convertiti in stringhe (rappresentazione del numero) secondo il formato specificato ovvero "lf" (long float, cioè double) ma con 1 cfra dopo la virgola
ecc. .... la ricerca del man di printf aiuta...
fprintf si comporta uguale solo che come detto il primo arg è uno stream, p.es.
FILE *f = fopen("unfile.txt", "w");
fprintf(f, "%lf + %lf = %lf%c", 3., 2., 3.+2., '\n');
fclose(f);
scrive in un file della roba (invece di scrivere \n nella stringa, ho usato %c per inserire il carattere... risultato uguale con:
fprintff, "... %lf", 3., 2., 3.+2.);
fputc('\n', f);
fputc è "lo stesso" che putchar ma con la possibilità di specificare lo stream verso cui scrivere, cioè
putchar(car);
=
fputc(car, stdout);
scanf e fscanf sono le controparti che "leggono" dal flusso, stdin nel primo caso e nel secondo come specificato dal primo argomento.
scanf(...);
è in pratica
fscanf(stdin, ....)
qui la stringa di formattazione viene usata come "guida" per leggere uno stream formattato (se il formato non corrisponde, è un problema.... :D,risolvibile e controllabile ovviamente)
p.es.
scanf("%lf", &valore);
può essere usato per leggere un double dallo stdin (dunque, spesso e volentieri, ciò consente, se non ci sono caratteri spuri nel buffer di lettura, di far inserire all'utente un numero ...)
per quanto riguarda l'uso più approfondito ti rimando ai manuali