/*
请按照注释实现数组处理功能,并计算时间复杂度,同时学习此例程中的文件读写方法。 2020年9月程鸿亮
*/
#define pmatrixIn(i,j) (pmatrixIn+5i+j)
#define pmatrixOut(i,j) (pmatrixOut+5i+j)
#define N 5
#include <stdio.h>
#include <stdlib.h>
void matrixProcess(double* pmatrixIn, double* pmatrixOut, int nOrder)
{
/* 直接复制方阵
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
pmatrixOut(i, j) = pmatrixIn(i, j);
//*/
//* 方阵的转置
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
pmatrixOut(i, j) = pmatrixIn(j, i);
//*/
/* 方阵的平方
double sum;
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
for (int k = 0; k < 5; k++)
{
if (k == 0)
sum = 0;
sum += pmatrixIn(i, k) * pmatrixIn(k, j);
pmatrixOut(i, j) = sum;
}
//*/
}
int main(){
double matrixCHD[N][N] = { 0 };
double matrixProcessCHD[N][N] = { 0 };
FILE* pf = NULL;
if ((pf = fopen("matrixCHD.txt", "r")) == NULL){
printf("读取matrixCHD.txt失败...\n");
return errno;
}
for (int i = 0; !feof(pf);i++)
fscanf(pf, "%lf", *matrixCHD + i);
fclose(pf);
printf("读取matrixCHD.txt并打印matrixCHD矩阵...\n");
for (int i = 0; i < N; i++){
for (int j = 0; j < N; j++)
printf("%.2lf\t", matrixCHD[i][j]);
printf("\n");
}
matrixProcess(matrixCHD, matrixProcessCHD, N);
printf("\n打印矩阵处理结果...\n");
for (int i = 0; i < N; i++){
for (int j = 0; j < N; j++)
printf("%.2lf\t", matrixProcessCHD[i][j]);
printf("\n");
}
if ((pf = fopen("matrixProcessCHD.txt", "w")) == NULL){
printf("读取matrixProcessCHD.txt失败...\n");
return errno;
}
for (int i = 0; i < N*N; i++){
fprintf(pf, "%.2lf\t", *(*matrixProcessCHD + i));
if (i%N == N - 1)fprintf(pf, "\n");
}
fclose(pf);
printf("\n矩阵处理结果已保存到matrixProcessCHD.txt文件,请查看结果\n");
return 0;
}