Código (c) [Seleccionar]
if(b*b-4*a*c>=0) /*Aca podes poner directamente if (y1 >= 0) que es la variable donde calculaste el radicando*/
...
if(y1<0) /*Este if es redundante, con el else anterior, se entiende que y1 es menor a 0*/
...
y1=(-b+sqrt(y1*(-1)))/(2*a);
y2=(-b-sqrt(y1*(-1)))/(2*a);
/*Procura no mezclar tanto las variables, las soluciones las estas usando en las variables x1 y x2, no está mal, pero tampoco esta muy bien :P*/
Ahora, no está bien el algoritmo a la hora de mostrar el resultado como número imaginario. Porque el número imaginario "i" aparece solo cuando resolvés el radicando, es decir, multiplica solo lo que resuelve la función sqrt (en tu programa, este suma o resta a toda la función real de Bahskara).
Yo separaría en una variable la parte real del resultado Re= (-b/2a) y en otra la parte imaginaria Im = (sqrt((-1)*y1)/2a), y la forma de mostrar el resultado sería:
Código (c) [Seleccionar]
printf("La primer raiz es %f + (%f)*i \n",Re,Im);
printf("La segunda raiz es %f - (%f)*i \n", Re,Im);
Perdón por no poner tu code entero con comentarios, pero es que no salía bien la previsualización.
Espero que se haya entendido.