Ciao....visto che non hai ancora affrontato l'allocazione dinamica della memoria, prova a dare un'occhiata a questa:
codice:
#include <stdio.h>
#include <stdlib.h>

#define N 16

int main()
{
    int n, i, j, k;
    int matrix[N-1][N] = {0};
    do
    {
        printf("Dimensione della matrice: ");
        scanf(" %d",&n);
    }
    while(n <= 0 || n >= N);
    printf("Inserimento valori della matrice\n");
    for(i=0; i<N; i++)
    {
        if(i < n)
        {
            printf("\nRiga %d:\n",i+1);
            for(j=0; j<n; j++)
            {
                printf("Valore %d: ",j+1);
                scanf(" %d",&matrix[i][j]);
                if(matrix[i][j] < 0)
                {
                    printf("Valore errato!\n");
                    j--;
                }
                else
                    matrix[i][n] += matrix[i][j];
            }
        }
    }
    printf("\nCalcolo delle somme.\n");
    for(i=0; i<n; i++)
    {
        if(matrix[i][n] >= 0)
        {
            printf("Somma %d: (", matrix[i][n]);
            for(j=0; j<n; j++)
                printf("%d%s", matrix[i][j], ((j == n-1) ? ")" : " "));
            for(j=i+1; j<n; j++)
            {
                if(matrix[i][n] == matrix[j][n])
                {
                    printf(", (");
                    for(k=0; k<n; k++)
                        printf("%d%s", matrix[j][k], ((k == n-1) ? ")" : " "));
                    matrix[j][n] = -1;
                }
            }
            printf("\n");
        }
    }
    return 0;
}
L'ho provata solo con i valori dell'esempio nel testo dell'esercizio, quindi magari fai qualche prova con altri valori o con dimensione diversa da quella dell'esempio.
Fammi sapere se può andare.