输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如,输入如下矩阵:

1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16

则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。


其实顺时针的打印,无非就是先打印出矩阵最外面的第一行,然后是最后一列,然后是最后一行,最后是第一列,每一次打印时控制的条件也就是矩阵的行和列的边界,那么打印完一圈之后只需要改变打印的范围也就是首尾行和首尾列就可以再打印里面的矩阵;


程序设计如下:

#include<iostream>#include<assert.h>usingnamespacestd;voidClockwisePrintArr(intarr[][5],size_trow,size_tcol){assert(arr&&row&&col);//条件判断int(*tmp)[5]=arr;//第一次开始的行为0,列也为0,打印终止的行为形参行数,列也为形参列数intstart_row=0;intstart_col=0;intend_row=row;intend_col=col;//判断条件当开始边界小于终止边界的时候while((start_row<end_row)&&(start_col<end_col)){//打印矩阵第一行for(inti=start_col;i<end_col;++i){cout<<tmp[start_row][i]<<"";}//打印矩阵最后一列for(inti=start_row+1;i<end_row;++i){cout<<tmp[i][end_col-1]<<"";}//打印矩阵最后一行for(inti=end_col-2;i>=start_col;--i){cout<<tmp[end_row-1][i]<<"";}//打印矩阵第一列for(inti=end_row-2;i>start_row;--i){cout<<tmp[i][start_col]<<"";}//依次将打印的边界缩小一圈++start_row;++start_col;--end_row;--end_col;}cout<<endl;}intmain(){intarr[5][5]={{0,1,2,3,4},{5,6,7,8,9},{10,11,12,13,14},{15,16,17,18,19},{20,21,22,23,24}};ClockwisePrintArr(arr,sizeof(arr)/sizeof(arr[0]),sizeof(arr[0])/sizeof(arr[0][0]));return0;}


运行程序:



《完》