int main( void )

è consuetudine scrivere void se non ci sono parametri, come lo è scrivere return 1; se il programma termina su sistemi *nix e linux per segnalare che il programma è terminato con successo (su windows non so cosa segnala ma dovrebbe essere scritto comunque).

printf("Inserisci il cognome del dipendente: ");
scanf("%s",CG);
printf("Inserisci l'anzianità del dipendente: ");
scanf("%d",&AN);


perchè una stringa non è altro che un puntatore a differenti caratteri, cosa che non un intero: questa parte deve essere studiata per essere compresa.

printf("%s %s Anzianità: %d Stipendio: %d", NM, CG, AN, ST);

No.
Se mettevi & davanti alle variabili stampavi il valore dei puntatori (con il relativo %p).

strcpy(NOME, NM);

Copia semplicemente il contenuto di una stringa in un'altra stringa. Non puoi assegnare NOME = NM, non otterresti quello che vuoi.

char *NOME

Studia i puntatori... così ti togli tutti i dubbi.