L'algoritmo sembra essere corretto. Ho fatto anche una simulazione su carta e funziona bene...penso debba essere un problema di codice!
codice:
#include<stdio.h>
#include<stdlib.h>
#define c 4
#define m 30
#include<math.h>
int lettura(int  mat[][c]);
void derivata(int mat[][c], float deriv[][c],int r);
void caccolo(float soluzioni[][2], float deriv[][c], int r); 
void stampa( int mat[][c], float deriv[][c], float soluzioni[][2], int r);


main()
{
      int colonne,righe;
      int prima[m][c], matder[m][c];
      float zeri[m][2], dopo[m][c];;
      righe=lettura(prima);
      derivata(prima, dopo, righe);
      caccolo(zeri,dopo,righe);
      stampa(prima, dopo, zeri, righe);
      system("pause");
     
      




}


int lettura(int mat[][c])
{
    int r,i,k;
    printf("Inserire il numero di polinomi\n");
    scanf("%d", &r);
    printf("inserire i coefficienti del polinomio di terzo grado\n");
    for(i=0;i<r;i++)
    {
                    for(k=0;k<c;k++)
                    {
                                    scanf("%d", &mat[i][k]);
                    }
    }
    return r;
}

void derivata(int mat[][c],float deriv[][c], int r)
{
     int i,k;
     int z;     
     for(i=0;i<r;i++)
     {
                     z=3;
                     for(k=0;k<c;k++)
                     {
                                     deriv[i][k]=z*mat[i][k];
                                     z=z-1;                    
                     }
     }
}

void caccolo(float soluzioni[][2], float deriv[][c], int r)
{
     int i,k;
     float delta;
     for(i=0;i<r;i++)
     {
                     delta=(deriv[i][1]*deriv[i][1])-4*(deriv[i][0]*deriv[i][2]);
                     if(delta<0)
                     {
                                soluzioni[i][0]=0;
                                soluzioni[i][1]=0;
                     }
                     else
                     {
                         if(delta>0)
                         {
                                soluzioni[i][0]=(deriv[i][1]*(-1)-sqrt(delta))/(2*deriv[i][0]);
                                soluzioni[i][1]=(deriv[i][1]*(-1)+sqrt(delta))/(2*deriv[i][0]);
                         }
                        else
                         {
                                soluzioni[i][0]=(deriv[i][1]*(-1))/(2*deriv[i][0]);
                                soluzioni[i][1]=(deriv[i][1]*(-1))/(2*deriv[i][0]);
                         }
                     }
     }
}
                     
void stampa( int mat[][c], float deriv[][c], float soluzioni[][2], int r)
{
     int i;
     for(i=0;i<r;i++)
     {
                     printf("Polinomio di terzo grado\t");
                     printf("(%d)x^3+(%d)x^2+(%d)x+(%d)\n", mat[i][0],mat[i][1],mat[i][2],mat[i][3]);
                     printf("Derivata prima:\t");
                     printf("(%d)x^2+(%d)x+(%d)\n", deriv[i][0],deriv[i][1],deriv[i][2]);
                     if(((deriv[i][1]*deriv[i][1])-4*(deriv[i][0]*deriv[i][2]))>=0)
                     {
                                                                      printf("Le soluzioni sono:\t");
                                                                      printf("%f %f", soluzioni[i][0], soluzioni[i][1]);
                                                                                  
                     }
                     else
                     {
                         printf("Non ci sono massimi e minimi\n");
                     }
     }
}
Non far caso al nome della funzione "caccolo " xD