Declaras empleados e[3], sin haber hecho un typedef de la struct y luego usas la struct... etc etc.
Se consecuente con tus declaraciones y con los parámetros que tus funciones reciben y los argumentos que pasas al llamarlas.
Además ten cuidado con cosas como esta:
Debes pasar la referencia de d para poder modificarla.
Puede que te funcione.
			Se consecuente con tus declaraciones y con los parámetros que tus funciones reciben y los argumentos que pasas al llamarlas.
Además ten cuidado con cosas como esta:
Código (c) [Seleccionar] 
void ingresar(empleado d);Debes pasar la referencia de d para poder modificarla.
Código (c) [Seleccionar] 
#include <stdio.h>
typedef struct {
     char nom[40];
     int asiento[3];
} empleado;
void ingresar(empleado * d);
void asignarAsiento(empleado q[]);
void imprimir(empleado a);
int main()
{
    int i;
      empleado e[3];
      asignarAsiento(e);
      for (i=0; i<3; ++i)
        imprimir(e[i]);
      return 0;
}
void ingresar(empleado * d){
     printf("Nombre: ");
      scanf("%s", d->nom);
     printf("Asiento: ");
      scanf("%d", d->asiento);
    }
void asignarAsiento(empleado e[]){
    int i, j;
    for(i=0; i<3; i++){
        ingresar(&e[i]);
        for(j=0; j<i; j++) {
            if( *e[i].asiento == *e[j].asiento ){
                printf ("Asiento ocupado. Vuelva a intentarlo.\n");
                i--;
                break;
            }
        }
    }
}
void imprimir(empleado a){
     printf("Nombre: %s\tAsiento: %d\n", a.nom, *a.asiento);
}
Puede que te funcione.