si infatti il problema della radice l'ho risolto includendo math.h, anche se non ho capito perchè non me lo segnalava quando lo compilavo (mistero :master: ), mentre il problema dei calcoli sembra risolto con

codice:
x=(c*-1)/(double)b;
grazie a tutti

adesso il codice è:

codice:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
int a;
int b;
int c;
int d2;
double d3;
double x;
double y;
double y2;

//risoluzioni espressioni di primo e secondo grado
printf("inserisci il valore di a \n");
scanf("%d", &a);
printf("inserisci il valore di b \n");
scanf("%d", &b);
printf("inserisci il valore di c \n");
scanf("%d", &c);
			printf("l'espressione inserita e': %d", a);
			printf("x^2 + %d", b);
			printf("x + %d", c);
			printf("=0 \n");

switch (a) {
case 0:
printf("l'equazione e' di 1^ grado \n");
x=(c*-1)/(double)b;
printf("x=%f\n", x);
break;
default:
printf("l'equazione e' di secondo grado \n");

	switch (b) {
   case 0:
   printf("si tratta di un equazione pura \n");
   x=(c*-1);
   y=sqrt(x/a);
   printf("i risultati sono: x1=%f", -y);
   printf("; x2=%f\n", y);
   break;
   default:
   	switch (b) {
      case 0:
      printf("si tratta di un equazione pura \n");
      x=(c*-1);
      y=sqrt(x/a);
      printf("i risultati sono: x1=%f", -y);
      printf("; x2=%f\n", y);
      break;
      default:
      	switch (c) {
         case 0:
         printf("si tratta di un' equazione spuria \n");
         x=(b*-1)/(double)a;
         printf("i risultati sono: x1=0; x2=%f \n", x);
         break;
         default:
         d2=(b*b-4*a*c);
         d3=sqrt(d2);
         y=(-b-d3)/(double)(2*a);
         y2=(-b+d3)/2*a;
         y2=(-b+d3)/(double)(2*a);
         printf("i risultati dell'equazione sono: x1=%f", y);
         printf("; x2=%f\n", y2);
         break;
         }
   	break;
      }
   break;
   }
break;
}

fflush(stdin);
system("pause");
return 0;
}
e funziona!!