个人网站:Geek交流圈
程序实现随机生成N阶方阵,然后求转置矩阵,利用对称矩阵与原矩阵相乘,构造对称矩阵。
代码如下:
/*
方阵,转置矩阵,对称矩阵
程序说明:
利用随机数生成随机的 N阶方阵 GeneratedMatrix函数
将生成的 N阶方阵 转置,得到转置方阵 TransposeMatrixAi函数
将原方阵与转置方阵相乘 得到 对称矩阵 MatrixMutiply函数
输出矩阵 OutputMatrixAi函数
*/
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define N 3 //确定方阵的阶数
int i = 0;
int j = 0;
int t = 0;
int OriginalMatrix[N][N] = { 0 };
int TransposeMatrix[N][N] = { 0 };
int SymmetricMatrix[N][N] = { 0 };
//输出矩阵内容
void OutputMatrixAi(int TransposeMatrix[N][N]);
//随机生成矩阵
void GeneratedMatrix();
//转置矩阵算法
void TransposeMatrixAi(int TransposeMatrix[N][N]);
//矩阵相乘算法
void MatrixMutiply(int m, int n, int p, int Matrix1[N][N], int Matrix2[N][N], int MatrixResult[N][N]);
int main(void)
{
//随机生成原矩阵
GeneratedMatrix();
//输出原矩阵
printf("原矩阵:\n");
OutputMatrixAi(OriginalMatrix);
//将原矩阵转置,调用转置算法
TransposeMatrixAi(TransposeMatrix);
//输出转置矩阵
printf("转置矩阵:\n");
OutputMatrixAi(TransposeMatrix);
//求对称矩阵,调用矩阵相乘函数
MatrixMutiply(N, N, N, TransposeMatrix, OriginalMatrix, SymmetricMatrix);
//输出对称矩阵
printf("对称矩阵:\n");
OutputMatrixAi(SymmetricMatrix);
system("pause");
return 0;
}
void MatrixMutiply(int m, int n, int p, int Matrix1[N][N], int Matrix2[N][N], int MatrixResult[N][N])
{
int i, j, k;
int Sum;
/*嵌套循环计算结果矩阵(m*p)的每个元素*/
for (i = 0; i < m; i++)
for (j = 0; j < p; j++)
{
/*按照矩阵乘法的规则计算结果矩阵的i*j元素*/
Sum = 0;
for (k = 0; k < n; k++)
Sum += Matrix1[i][k] * Matrix2[k][j];
MatrixResult[i][j] = Sum;
}
}
void GeneratedMatrix()
{
srand(time(NULL));
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
OriginalMatrix[i][j] = rand() % 10;
TransposeMatrix[i][j] = OriginalMatrix[i][j];
}
}
}
void TransposeMatrixAi(int TransposeMatrix[N][N])
{
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
if (i > j)
{
t = TransposeMatrix[i][j];
TransposeMatrix[i][j] = TransposeMatrix[j][i];
TransposeMatrix[j][i] = t;
}
}
}
}
void OutputMatrixAi(int TransposeMatrix[N][N])
{
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
printf("%d ", TransposeMatrix[i][j]);
}
putchar('\n');
}
}