ciao, ho visto un pò il tuo codice, e mi sono accorto di qualche errore devo dire, non so ma forse non hai ancora sentito parlare di allocazione dinamica della memoria!
perchè non è molto lecito fare questo:
codice:
//Creazione matrice quadrata, azzeramento condizione, creazione vettore somme righe
int matrice[N][N];
condizione=0;
int vet[N];
ma è molto più lecito dichiarare:
codice:
int *vet, **matrice;
e allocare con la malloc entrambi i puntatori:
codice:
//CREAZIONE MATRICE DINAMICA E VETTORE DINAMICO
vet = (int*)malloc(N*sizeof(int));
if ( vet == NULL ) {
     printf ("Errore di allocazione\n");
     exit(1);
}
matrice = (int**)malloc(N*sizeof(int*));
if ( matrice == NULL ) {
     printf ("Errore di allocazione\n");
     exit(1);
}
for ( i=0; i<N; i++ ) {
    matrice[i] = (int*)malloc(N*sizeof(int));
    if ( matrice[i] == NULL ) {
         printf ("Errore allocazione\n");
         exit(1);
    }
}
per il resto ho provato a fare una soluzione del problema 4, vedi un pò se funziona perchè io ho fatto una prova sola... ti posto comunque tutto il codice qua sotto:
codice:
#include <stdio.h>
#include <stdlib.h>

void stampaRiga ( int* rig, int dim );

int main()
{
 int N,i,j=0;
 int temp=0; 
 int condizione=0;
 int *vet, **matrice;

//Inserimento in N della grandezza matrice quadrata 
do
{
 printf("Inserisci la dimensione della matrice quadrata ");
 scanf("%d",&N);
 if(N<16)
  condizione=0;
 else
 {
  condizione=1;
  printf("Errore N, deve essere minore di 16 ");
 } 
}while(condizione==1);

condizione=0;

//CREAZIONE MATRICE DINAMICA E VETTORE DINAMICO
vet = (int*)malloc(N*sizeof(int));
if ( vet == NULL ) {
     printf ("Errore di allocazione\n");
     exit(1);
}
matrice = (int**)malloc(N*sizeof(int*));
if ( matrice == NULL ) {
     printf ("Errore di allocazione\n");
     exit(1);
}
for ( i=0; i<N; i++ ) {
    matrice[i] = (int*)malloc(N*sizeof(int));
    if ( matrice[i] == NULL ) {
         printf ("Errore allocazione\n");
         exit(1);
    }
}



for(i=0;i<N;i++)
 vet[i]=0;

//Input matrice con controllo sui numeri positivi
for(i=0;i<N;i++)
{
 for(j=0;j<N;j++)
 {
  do 
  {
   printf("[%d][%d]",i+1,j+1);
   scanf("%d",&matrice[i][j]);
   if(matrice[i][j]<0)
    {
     printf("Errore, i valori negativi non sono ammessi ");                 
     condizione=0;
    }
   else 
     condizione=1;
  }while(condizione==0); 
 }
 printf("\n");
} 

//Somma delle righe della matrice
for(i=0;i<N;i++)
{
 for(j=0;j<N;j++)
 {
  temp=temp+matrice[i][j];
 }
 vet[i]=temp;
 temp=0;
} 
  
//Stampa somme
for(i=0;i<N;i++)
 printf("La somma della %d riga e' %d \n",i+1,vet[i]);
  
//Stampa raggruppata di righe di matrice
for(i=0;i<N;i++) {
  if ( vet[i] >= 0 ) {
     printf("Somma %d:",vet[i]);
     stampaRiga ( matrice[i], N );
     for(j=0;j<N;j++) {
         if ( vet[j] == vet[i] && i != j ) { 
              stampaRiga ( matrice[i], N );
              vet[j]=-1;
         }
     }
     vet[i]=-1;
     printf("\n");
  }
}
system("pause");  
}

void stampaRiga ( int* rig, int dim )  
{
    int i;
    printf (" ( ");
    for ( i=0; i<dim; i++ ) 
        printf("%d ",rig[i]);
    printf (" )");    
    return;
}