C语言实现顺时针打印矩阵代码及解析

更新时间:2024-04-26 17:00:59   人气:7112
在C语言编程中,处理二维数组或矩阵的操作是常见的任务之一。下面将详细介绍如何使用C语言来实现按顺时针顺序打印一个给定的矩阵。

c

#include <stdio.h>

// 定义矩阵大小(这里以3x3为例)
#define N 3

void printMatrixClockwisely(int matrix[N][N]) {
int i = 0, j = N - 1;

while (i <= j) {
// 打印第一行元素(从左到右)
for (; i<=j && i<N; ++i) printf("%d ",matrix[i][j]);

if(i>j) break;

// 打印最后一列元素(从上至下)
for(; i<=j && j>=0 ; --j) printf("%d ",matrix[i][j]);

// 如果没有越界且当前层未结束,则继续向内一层移动,并打印其左侧元素
if(j >= 0 && i<N-1){
++i;
--j;

// 打印最左边一列元素(自顶向下)
for(; i<j && j>=0; --j) printf ("%d ",matrix[j][i]);

// 再次检查边界并打印底部的最后一行元素(由左往右)
for(; i<j && i<--N; ++i) printf ("%d ",matrix[j][i]);
}
}
}

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

printf("The clockwise order of the elements in the given matrix is:\n");
printMatrixClockwisely(example_matrix);

return 0;
}


这段程序的核心在于`printMatrixClockwisely()`函数的设计与实现:

首先定义两个指针变量 `i` 和 `j` 分别指向每一圈遍历起始位置:即外侧一圈的第一个元素所在行和最后一个元素所在的列。然后按照以下四个步骤循环进行操作直至无法再找到新的元素为止:

1. 遍历“首行”所有剩余元素。
2. 遍历“尾列”的上方部分元素。
3. 若条件满足则开始内部一行的遍历:“末行”的左侧元素向上递减输出。
4. 最后遍历完这一圈内的全部内容之后,“底边列”的下方元素逐个向右侧输出。

通过这种方式,在主函数main调用该方法的时候就可以顺利地对任意给定尺寸为NxN的矩阵按照顺时针对角线方向完成元素的输出了。这个算法的时间复杂度接近于O(N^2),因为它需要访问每一个矩阵中的元素一次。同时空间效率也很高,仅需常数级额外存储即可解决问题。