Quote Originariamente inviata da toni123 Visualizza il messaggio
infatti mi sono accorto...
la matrice di destinazione è della stessa grandezza di quella originale( sempre [3][3]). quindi la matrice deve proprio "ruotare su se stessa".

Come posso fare?
codice:
#include <stdio.h>

#define MAX 5

#define max(i) (MAX-(i)-1)

void stampa_matrice(int mat[MAX][MAX]) {
    int i, j;
    printf("\n################################################################################");
    for(i = 0; i < MAX; ++i) {
        printf("\n");
        for(j = 0; j < MAX; ++j) {
            printf("%4d", mat[i][j]);
        }
    }
    printf("\n################################################################################");
}

int main(void) {
    int a[MAX][MAX];
    int b[MAX][MAX];
    int i, j, *ptmp, itmp;
    
    //inizializzazione matrice
    ptmp = (int *)a;
    for(i = 0; i < MAX*MAX; ++i) {
        *(ptmp+i) = i+1;
    }
    //rotazione in nuova matrice
    stampa_matrice(a);
    for(i = 0; i < MAX; ++i) {
        for(j = 0; j < MAX; j++) {
            b[j][max(i)] = a[i][j];
        }
    }
    stampa_matrice(b);
    //rotazione in-place
    stampa_matrice(a);
    for(i = 0; i < MAX - 1; ++i) {
        for(j = i; j < max(i); ++j) {
            itmp = a[i][j];
            a[i][j] = a[max(j)][i];
            a[max(j)][i] = a[max(i)][max(j)];
            a[max(i)][max(j)] = a[j][max(i)];
            a[j][max(i)] = itmp;
            
        }
    }
    stampa_matrice(a);
    return 0;
}