こんなんは?
順列の生成方法を、奥村晴彦著、C言語による最新アルゴリズム事典、
ISBN 4-87408-414-1の119ページからぱちって来た。

#include <stdio.h>
#define N 9

int check(int a[])
{
  if ((a[0] + a[1] + a[2] == 15) &&
    (a[3] + a[4] + a[5] == 15) &&
    (a[6] + a[7] + a[8] == 15) &&
    (a[0] + a[3] + a[6] == 15) &&
    (a[1] + a[4] + a[7] == 15) &&
    (a[2] + a[5] + a[8] == 15) &&
    (a[0] + a[4] + a[8] == 15) &&
    (a[2] + a[4] + a[6] == 15)) { return 1; } else { return 0; }
}

void perm(int a[], int n, int i, int j)
{
  int k;

  a[i] = j;
  if (j == N) {
    if (a[0] == n && check(a)) {
      putchar('\n');
      printf ("%d %d %d\n", a[0], a[1], a[2]);
      printf ("%d %d %d\n", a[3], a[4], a[5]);
      printf ("%d %d %d\n", a[6], a[7], a[8]);
    }
  }
  else {
    for (k = 0; k < N; k++) {
      if (a[k] == 0) { perm(a, n, k, j + 1); }
    }
  }
  a[i] = 0;
}

void main(void)
{
  int i, n;
  int a[N];

  printf("input n: "); scanf("%d", &n);
  for (i = 0; i < N; i++) { a[i] = 0; }
  for (i = 0; i < N; i++) { perm(a, n, i, 1); }
}