gpt4 book ai didi

c - 移动 c 的二维数组中的元素

转载 作者:行者123 更新时间:2023-11-30 19:36:44 24 4
gpt4 key购买 nike

所以我有一个充满随机数的二维数组。例如:

#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 度的循环,但是我会丢失不包含在对角线上的元素的位置。

或者我可以保存对角线,然后以某种方式反转它。这是矩阵和对角线的代码我现在应该做什么。

希望得到您的帮助。

最佳答案

其中一种方法如下

#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;
}

关于c - 移动 c 的二维数组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40533470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com