2016-11-10 55 views
-1

因此,我已2D阵列填充有随机数。例如:在2D阵列移动元件对C

#define d 4 

int main(void) 
{ 
int a[d][d]; 
int primary[d], secondary[d]; 
size_t i, j; 

srand(time(NULL)); 

/* fill array with random numbers */ 
for (i = 0; i < d; i++) 
    for (j = 0; j < d; j++) 
     a[i][j] = rand() % 100; 

/* save diagonals */ 
for (i = 0; i < d; i++) 
{ 
    primary[i] = a[i][i]; 
    secondary[i] = a[d - (i + 1)][i]; 

如何水平镜像对角线?

例如:

1 0 0 2  

0 3 4 0 

0 5 6 0 

7 0 0 8 

8 0 0 7 

0 6 5 0 

0 4 3 0 

2 0 0 1 

任务是打印主要基质,然后打印矩阵对角线镜像但是我没有想法周期这个应该怎么样子。

我考虑循环旋转180度矩阵但是我将松散未包含于对角线元素的位置。

或者我可以节省对角线,然后扭转它在某种程度上。 这里是矩阵和对角线的代码,我现在应该做什么。

希望你的帮助。

+0

欢迎堆栈溢出!请说明迄今为止的研究/调试工作。请先阅读[问]页面。 –

回答

0

其中一个方法是以下

#include <stdio.h> 

#define N 4 

int main(void) 
{ 
    int a[N][N] = 
    { 
     { 1, 0, 0, 2 },  
     { 0, 3, 4, 0 }, 
     { 0, 5, 6, 0 }, 
     { 7, 0, 0, 8 } 
    };  

    for (size_t i = 0; i < N; i++) 
    { 
     for (size_t j = 0; j < N; j++) printf("%d ", a[i][j]); 
     printf("\n"); 
    } 

    printf("\n"); 

    for (size_t i = 0; i < N * N/2; i++) 
    { 
     int tmp = a[i/N][i % N]; 
     a[i/N][i % N] = a[(N * N - i - 1)/N][(N * N - i - 1) % N]; 
     a[(N * N - i - 1)/N][(N * N - i - 1) % N] = tmp; 
    } 

    for (size_t i = 0; i < N; i++) 
    { 
     for (size_t j = 0; j < N; j++) printf("%d ", a[i][j]); 
     printf("\n"); 
    } 

    printf("\n"); 

    return 0; 
} 

程序输出是

1 0 0 2 
0 3 4 0 
0 5 6 0 
7 0 0 8 

8 0 0 7 
0 6 5 0 
0 4 3 0 
2 0 0 1 

同样可以使用指针被写入。例如

#include <stdio.h> 

#define N 4 

int main(void) 
{ 
    int a[N][N] = 
    { 
     { 1, 0, 0, 2 },  
     { 0, 3, 4, 0 }, 
     { 0, 5, 6, 0 }, 
     { 7, 0, 0, 8 } 
    };  

    for (size_t i = 0; i < N; i++) 
    { 
     for (size_t j = 0; j < N; j++) printf("%d ", a[i][j]); 
     printf("\n"); 
    } 

    printf("\n"); 

    for (int *first = (int *)a, *last = (int *)a + N * N; 
      first < last; 
      ++first, --last) 
    { 
     int tmp = first[0]; 
     first[0] = last[-1]; 
     last[-1] = tmp; 
    } 

    for (size_t i = 0; i < N; i++) 
    { 
     for (size_t j = 0; j < N; j++) printf("%d ", a[i][j]); 
     printf("\n"); 
    } 

    printf("\n"); 

    return 0; 
}