一.矩阵乘法
1.定理:
两个矩阵的乘法仅当第一个矩阵A的列数和另一个矩阵B的行数相等时才能定义。如A是m×n矩阵和B是n×p矩阵,它们的乘积C是一个m×p矩阵。
例如:
2.思路
3.代码实现
#include<stdio.h>
main()
{
int n = 0;
int ret1[2][3] = { {1,0,2}, {-1,3,1} };
int ret2[3][2] = { {3,1},{2,1},{1,0} };
int ret3[2][2];
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
ret3[i][j] = 0; //每次初始化为0
for (int k = 0; k < 3; k++)
{
ret3[i][j] += ret1[i][k] * ret2[k][j];
}
}
}
for (int i = 0; i < 2; i++) //输出
{
for (int j = 0; j < 2; j++)
{
printf("%d\t", ret3[i][j]);
}
printf("\n");
}
}
二.转置矩阵
1.定义:把m*n矩阵
行和列互换之后得到的矩阵
2.题目
<1>思路:
<2>代码
#include<stdio.h>
main()
{
int ret[3][3] = { {2,4,-1},{-10,5,11},{18,-7,6} };//定义一个二维矩阵
int newret[3][3]; //新定义一个矩阵
for (int i = 0; i < 3; i++) //分别遍历行和列
{
for (int j = 0; j < 3; j++)
{
newret[i][j] = ret[j][i]; //列索引行索引交换
printf("%d\t", newret[i][j]);
}
printf("\n");
}
}
<3>结果
三.矩阵旋转
顺时针旋转90°
1.思路
2.代码
{
int matrix[3][3] = { 2,4,-1,-10,5,11,18,-7,6 };
int matrix2[3][3];
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
matrix2[j][3-i-1] = matrix[i][j]; //根据规则旋转矩阵
}
}
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%d\t", matrix2[i][j]); //输出旋转后的矩阵
}
printf("\n");
}
}
逆时针旋转90°(等同于逆时针旋转270°)
1.思路
2.代码
{
int matrix[3][3] = { 2,4,-1,-10,5,11,18,-7,6 };
int matrix2[3][3];
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
matrix2[i][j] = matrix[j][3-1-i]; //跟顺时针旋转的区别
}
}
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%d\t", matrix2[i][j]);
}
printf("\n");
}
}
顺时针旋转180°(等同于逆时针旋转180°)
1.思路
2.代码
main()
{
int matrix[3][3] = { 2,4,-1,-10,5,11,18,-7,6 };
int matrix2[3][3];
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
matrix2[3 - i - 1][3 - j - 1] = matrix[i][j];
}
}
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%d\t", matrix2[i][j]);
}
printf("\n");
}
}
3.结果如下