個人網站: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');
}
}