【C编程】简单编程练习——(4)方阵顺时针旋转与方阵的转置

目录

一、问题描述

二、问题求解

(1)方阵顺时针旋转(以3阶方阵为例)

问题分析:

程序设计:

(2)方阵转置(以3阶方阵为例)

问题分析:

程序设计:


 

一、问题描述

问题:

1.将一个n阶方阵按顺时针方向旋转90度。

2.将一个n阶方阵进行转置。

实例:

1    2    3

4    5    6

7    8    9

按顺时针旋转90度后方阵为:

7   4    1

8    5    2

9    8    3

转置后的方阵为:

1    4   7

2    5   8

3   6   9

输入:

3

1    2    3

4    5    6

7    8    9

输出:

7   4    1

8    5    2

9    8    3

1    4   7

2    5   8

3   6   9


二、问题求解

(1)方阵顺时针旋转(以3阶方阵为例)

问题分析:

对于矩阵等二维方向上的数字变化问题的求解,最主要的是找到其中的位置变化规律。

①方阵的位置表示如下:

[0,0]     [0,1]       [0,2]

[1,0]     [1,1]       [1,2]

[2,0]     [2,1]       [2,2]

②方阵旋转90度后的位置变化

[2,0]     [1,0]       [0,0]

[2,1]     [1,1]       [0,1]

[2,2]     [1,2]       [0,2]

根据上述的位置变化可知:方阵旋转90度后,每一行的列号不变,并向下逐次递加1;每一行的行号从左往右依次递减。由于在同一个方阵上修改,是逐行从左往右依次修改,所以前面修改的值必然会对后面的值产生影响,所以,需要借助一个辅助矩阵。

程序设计:

#include <stdio.h>

int main() {
	int n;
	int a[10][10];
	int b[10][10];
	//输入阶数
	scanf("%d", &n);
	//输入方阵的值
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			scanf("%d", &a[i][j]);
		}
	}
	
	//方阵顺时针变化
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			b[i][j] = a[n - j - 1][i];		
		}
	}

	//方阵打印
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			//printf("%-3d", b[i][j]);
			printf("%-3d", a[i][j]);
		}
		printf("\n");
	}
	
}

运行调试结果:

 


(2)方阵转置(以3阶方阵为例)

问题分析:

①方阵的位置表示如下:

[0,0]     [0,1]       [0,2]

[1,0]     [1,1]       [1,2]

[2,0]     [2,1]       [2,2]

②方阵转置的位置变化

[0,0]     [1,0]       [0,0]

[0,1]     [1,1]       [2,1]

[0,2]     [1,2]       [2,2]

根据上述的位置变化可知:方阵转置后,主对角线(从左上角到右下角)上的数字位置没有变化,其他位置数字的位置变化是行列号对调。

程序设计:

#include <stdio.h>

int main() {
	int n;
	int a[10][10];
	int b[10][10];
	//输入阶数
	scanf("%d", &n);
	//输入方阵的值
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			scanf("%d", &a[i][j]);
		}
	}

	//方阵转置
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			b[i][j] = a[j][i];
		}
	}

	//方阵打印
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			printf("%-3d", b[i][j]);
		}
		printf("\n");
	}

}

运行调试结果:

猜你喜欢

转载自blog.csdn.net/Jacky_Feng/article/details/109755947