A parte il fatto che chiamare il tipo e il vettore con lo stesso simbolo (operaio) non è una buona idea, in ogni caso hai preparato un vettore di 30 puntatori a struttura ma non hai mai allocato lo spazio per tali strutture.

Prima di fare

strcpy(operaio[i]->nome, nome);

devi allocare l'elemento a cui punta operaio[i] con

operaio[i] = (struct operaio *)malloc(sizeof(struct operaio));