设一个3*3d矩阵
1:求转置
int main(){int a[3][3];int len1 = sizeof(a) / sizeof(a[0]);int len2 = sizeof(a[0]) / sizeof(a[0][0]);for (int i = 0; i < len1; ++i){for (int j = 0; j < len2; ++j){a[i][j] = i*len2 + j + 1;}}for (int i = 0; i < len1; ++i){for (int j = 0; j < len2; ++j){printf("%-3d", a[i][j]);}puts("");} //表示出3*3矩阵 {{123},{456},{789}}puts("*************************");int t;for (int i = 0; i < len1; ++i){for (int j = 0; j < i; ++j){t = a[j][i];a[j][i] = a[i][j]; //求转置a[i][j] = t;}}for (int i = 0; i < len1; ++i){for (int j = 0; j < len2; ++j){printf("%-3d", a[i][j]); //输出结果}puts(""); }return 0;}
2:求水平镜像
int main(){int a[3][3];int len1 = sizeof(a) / sizeof(a[0]);int len2 = sizeof(a[0]) / sizeof(a[0][0]);for (int i = 0; i < len1; ++i){for (int j = 0; j < len2; ++j){a[i][j] = i*len2 + j + 1;}}for (int i = 0; i < len1; ++i){for (int j = 0; j < len2; ++j){printf("%-3d", a[i][j]);}puts("");} //表示出3*3矩阵 {{123},{456},{789}}puts("*************************");{int t;for (int i = 0; i < len1; ++i){for (int j = 0; j < len2 / 2; ++j){t = a[i][j];a[i][j] = a[i][len2 - 1 - j];//求水平镜像a[i][len2 - 1 - j] = t;}}for (int i = 0; i < len1; ++i){for (int j = 0; j < len2; ++j){printf("%-3d", a[i][j]); //输出结果}puts(""); }return 0;}
灵活利用转置和水平镜像还可以得出矩阵的 顺时针90度旋转、逆时针90度旋转、180度旋转、垂直镜像等。
顺时针90度旋转:先转置再水平镜像
int main(){int a[3][3];int len1 = sizeof(a) / sizeof(a[0]);int len2 = sizeof(a[0]) / sizeof(a[0][0]);for (int i = 0; i < len1; ++i){for (int j = 0; j < len2; ++j){a[i][j] = i*len2 + j + 1;}}for (int i = 0; i < len1; ++i){for (int j = 0; j < len2; ++j){printf("%-3d", a[i][j]);}puts("");}puts("*************************");int t;for (int i = 0; i < len1; ++i){for (int j = 0; j < i; ++j){t = a[j][i];a[j][i] = a[i][j];a[i][j] = t;}}for (int i = 0; i < len1; ++i){for (int j = 0; j < len2 / 2; ++j){t = a[i][j];a[i][j] = a[i][len2 - 1 - j];a[i][len2 - 1 - j] = t;}}for (int i = 0; i < len1; ++i){for (int j = 0; j < len2; ++j){printf("%-3d", a[i][j]);}puts("");} }
逆时针90度旋转:先水平镜像再转置
int main(){int a[3][3]; int t;int len1 = sizeof(a) / sizeof(a[0]);int len2 = sizeof(a[0]) / sizeof(a[0][0]);for (int i = 0; i < len1; ++i){for (int j = 0; j < len2; ++j){a[i][j] = i*len2 + j + 1;}}for (int i = 0; i < len1; ++i){for (int j = 0; j < len2; ++j){printf("%-3d", a[i][j]);}puts("");}puts("*************************");for (int i = 0; i < len1; ++i){for (int j = 0; j < len2 / 2; ++j){t = a[i][j];a[i][j] = a[i][len2 - 1 - j];a[i][len2 - 1 - j] = t;}}for (int i = 0; i < len1; ++i){for (int j = 0; j < i; ++j){t = a[j][i];a[j][i] = a[i][j];a[i][j] = t;}}for (int i = 0; i < len1; ++i){for (int j = 0; j < len2; ++j){printf("%-3d", a[i][j]);}puts("");}return 0;}
180度旋转:进行两次90度旋转
垂直镜像 :先180度旋转再进行水平镜像
用C语言编写一个3*3矩阵的转置 水平镜像 顺时针90度旋转 逆时针90度旋转 180度旋转 垂直镜像