我遇到了一些问题,当我想用C编写一个程序,逆时针旋转90度一个矩阵,有不同的行和列的值,这是代码:
#include <stdio.h>
void swap(int *x, int *y)
{
int temp = *x;
*x = *y;
*y = temp;
}
void transpose(int row, int column, int matrix[row][column])
{
for (int i = 0; i < row; i++)
{
for (int j = i; j < column; j++)
{
swap(&matrix[i][j], &matrix[j][i]);
}
}
}
void reverseColumns(int row, int column, int matrix[row][column])
{
for (int i = 0; i < column; i++)
{
for (int j = 0, k = column - 1; j < k; j++, k--)
{
swap(&matrix[j][i], &matrix[k][i]);
}
}
}
int main()
{
int row, column;
scanf("%d %d", &row, &column);
int matrix[row][column];
for(int i = 0; i < row; i++)
{
for(int j = 0; j < column; j++)
{
scanf("%d", &matrix[i][j]);
}
}
int rotation_times;
scanf("%d", &rotation_times);
rotation_times = rotation_times % 4;
for(int i = 0; i < rotation_times; i++)
{
transpose(row, column, matrix);
reverseColumns(row, column, matrix);
}
for (int i = 0; i < row; i++)
{
for (int j = 0; j < column; j++)
{
printf("%d ", matrix[i][j]);
}
printf("\n");
}
return 0;
}
我想旋转一个2x3大小的矩阵2次,这是输入:
2 3
1 1 1
2 3 4
2
以下是预期输出:
4 3 2
1 1 1
这是实际输出:
0 0 422510592
4 3 2
我试图通过打印3行和3列来查看问题所在,结果如下:
0 0 -2119237632
4 3 2
1 1 1
有人知道发生了什么事以及如何修复吗?提前感谢。
1条答案
按热度按时间gudnpqoy1#
在每个转置函数之后,列和行都将切换,因此可能需要考虑将(column,row)传递到下一个函数中。