c语言代码矩阵的变换(主、次对角线对称阵、矩阵90度转置)
时间: 2025-02-03 11:19:54 浏览: 75
### C语言实现矩阵变换
#### 主对角线对称
对于一个 \( N \times N \) 的矩阵,可以通过交换主对角线两侧的元素来完成对称操作。具体来说,如果有一个位置 (i, j),那么其对应的对称位置将是 (j, i)[^1]。
```c
void flipMatrixAlongMainDiagonal(int matrix[][N], int size) {
for (int i = 0; i < size; ++i) {
for (int j = i + 1; j < size; ++j) { // Start from i+1 to avoid redundant swaps and self-swap on diagonal.
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
}
```
#### 次对角线对称
次对角线是指从左下到右上的那条斜线。为了沿这条线进行对称转换,可以先通过水平翻转再垂直翻转或者相反顺序达到效果;另一种方法是直接计算新坐标并互换相应元素的位置[^2]。
```c
void flipMatrixAlongSecondaryDiagonal(int matrix[][N], int size) {
for (int i = 0; i < size; ++i) {
for (int j = 0; j < size - i - 1; ++j) {
int temp = matrix[i][j];
matrix[i][j] = matrix[size - j - 1][size - i - 1];
matrix[size - j - 1][size - i - 1] = temp;
}
}
}
```
#### 矩阵90度旋转
要使矩阵顺时针方向旋转90度,一种常见做法是从外层向内逐圈处理每一层中的四个边框元素,并依次移动它们形成新的排列方式。也可以考虑先转置矩阵然后再按行逆序打印出来以获得相同的效果[^3]。
```c
// Method using transpose followed by reversing each row.
void rotateMatrixClockwiseBy90Degrees(int matrix[][N], int size) {
// Transpose the matrix first.
for (int i = 0; i < size; ++i) {
for (int j = i; j < size; ++j) {
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
// Reverse every row of transposed matrix.
for (int i = 0; i < size; ++i) {
for (int start = 0, end = size - 1; start < end; ++start, --end) {
int temp = matrix[i][start];
matrix[i][start] = matrix[i][end];
matrix[i][end] = temp;
}
}
}
// Alternatively, directly swap elements layer-by-layer without explicit transpose step.
void rotateMatrixInPlace(int matrix[][N], int size) {
for (int layer = 0; layer < size / 2; ++layer) {
int first = layer;
int last = size - 1 - layer;
for (int i = first; i < last; ++i) {
int offset = i - first;
// Save top element temporarily.
int top = matrix[first][i];
// Move left side over to top.
matrix[first][i] = matrix[last - offset][first];
// Move bottom up into place where left was.
matrix[last - offset];
// Put right side at position previously occupied by bottom.
matrix[last][last - offset] = matrix[i][last];
// Place saved top value onto right edge completing rotation cycle.
matrix[i][last] = top;
}
}
}
```
阅读全文
相关推荐


















