首页 > 编程知识 正文

c语言输出矩阵程序,C语言如何输出矩阵

时间:2023-05-04 03:09:55 阅读:190763 作者:4190

C语言实现矩阵螺旋输出

题目描述
给定一个m行、n列的矩阵,请按照顺时针螺旋的顺序输出矩阵中所有的元素(从[0][0]位置开始,具体请参见下图):

输入格式要求:
每次程序运行时,首先在第一行输入2个整数,分别对应题目描述中的m和n,(1<=m, n<=100),之间用一个空格分隔。接下来输入m行,每行包含n个整数,每两个整数之间用一个空格分隔。

输出格式要求:
输出为一行,包括m*n个整数,按照题目要求的顺序依次输出所有矩阵元素,任意两个整数之间用一个空格分隔,最后一个整数后面没有空格。

思路:
顺时针螺旋输出的过程可以看作一系列“向右-向下-向左-向上”进行输出的过程,只不过在这个过程中,要确保输出过的元素不被重复地访问和输出。可以把每次沿着一个方向的输出看成一个独立过程,考虑到每沿着一个方向输出后剩余的待输出部分还是一个矩阵,你也可以通过四个变量分别记录现在还没被输出的矩阵的行数和列数可能的最小值、最大值。也可以用另一个等大的二维数组来标记对应位置的数字是否已经被输出了。

代码:

#include <stdio.h>void space(int, int);int main() { int matrix[101][101]; int m; int n; int i, j; // 输入m*n的矩阵 scanf("%d%d", &m, &n); for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { scanf("%d", &matrix[i][j]); } } //定义上下左右边界,每次边上的数后,更新周围的值 int up = 0, left = 0, down = m-1, right = n-1; int k, num = 0; while (up <= down && left <= right) { // 向右输出 for (k = left; k <= right; k++) { printf("%d", matrix[up][k]); num++; space(num, m*n); } up++; if (num == m*n) //如果全部数值已经输出完毕,退出while循环 break; // 向下输出 for (k = up; k <= down; k++) { printf("%d", matrix[k][right]); num++; space(num, m*n); } right--; if (num == m*n) //如果全部数值已经输出完毕,退出while循环 break; // 向左输出 for (k = right ; k >= left; k--) { printf("%d", matrix[down][k]); num++; space(num, m*n); } down--; if (num == m*n) //如果全部数值已经输出完毕,退出while循环 break; // 向上输出 for (k = down; k >= up; k--) { printf("%d", matrix[k][left]); num++; space(num, m*n); } left++; if (num == m*n) //如果全部数值已经输出完毕,退出while循环 break; } return 0;}//判断每次输出数字后是否要输出空格void space(num, all) { if (num < all) printf(" ");}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。