矩阵乘法实现C语言,矩阵乘法C语言实现

转自:http://nickandmiles.blog.163.com/blog/static/234221232011428114811156/

/*

矩阵乘法C语言实现

Slyar 2009.3.20

*/

#include

#include

/* 给 int 类型定义别名 datatype */

typedef int datatype;

/* 函数声明部分 */

datatype** Create(int m, int n);

void Reset(datatype**, int, int);

void Input(datatype**, int, int);

void Output(datatype**, int, int);

void MatrixMutiply(datatype**, datatype**, datatype**);

void MatrixFree(datatype** , int);

/* 定义三个矩阵的行列大小 */

int row_a, col_a;

int row_b, col_b;

int row_c, col_c;

/* 定义文件指针 */

FILE *fp;

int main()

{

int i;

datatype **a, **b, **c;

/* 以只读方式打开输入文件 in.txt */

if((fp = fopen("in.txt","r")) == NULL)

{

printf("Cannot open this file.\n");

exit(0);

}

/* 创建并读入矩阵a */

fscanf(fp,"%d%d", &row_a, &col_a);

a=Create(row_a, col_a);

Input(a,row_a, col_a);

/* 创建并读入矩阵b */

fscanf(fp,"%d%d", &row_b, &col_b);

b = Create(row_b, col_b);

Input(b,row_b, col_b);

/* 关闭输入文件 */

fclose(fp);

/* 以写入方式打开输出文件 out.txt */

if((fp = fopen("out.txt","w")) == NULL)

{

printf("Cannot open this file.\n");

exit(0);

}

/* 判断两个矩阵能否相乘 */

if(col_a == row_b)

{

row_c = row_a;

col_c = col_b;

}

else

{

fprintf(fp,"Matrix Can't Mutiply !\n");

exit(0);

}

/* 创建并初始化结果矩阵c */

c = Create(row_c, col_c);

Reset(c, row_c, col_c);

/* 进行矩阵乘法运算 */

MatrixMutiply(a, b, c);

/* 输出结果矩阵C */

Output(c, row_c, col_c);

/* 关闭输出文件 */

fclose(fp);

/* 释放矩阵内存 */

MatrixFree(a,row_a);

MatrixFree(b,row_b);

MatrixFree(c,row_c);

//system("pause");

return 0;

}

/* 为矩阵动态分配内存的函数 */

datatype** Create(int m, int n)

{

int i;

datatype **Matrix;

Matrix = (datatype **) malloc(sizeof(datatype *) * m);

for(i = 0; i < m; i++)

{

Matrix[i] = (datatype *) malloc(sizeof(datatype) * n);

}

return Matrix;

}

/* 初始化矩阵函数 */

void Reset(datatype** Matrix, int m, int n)

{

int i,j;

for(i = 0; i < m; i++)

{

for(j = 0; j < n; j++)

{

Matrix[i][j] = 0;

}

}

}

/* 读入数据函数 */

void Input(datatype** Matrix, int m, int n)

{

int i,j;

for(i = 0; i < m; i++)

{

for(j = 0; j < n; j++)

{

fscanf(fp,"%d", &Matrix[i][j]);

}

}

}

/* 输出数据函数 */

void Output(datatype** Matrix, int m, int n)

{

int i,j;

for(i = 0; i < m; i++)

{

for(j = 0; j < n; j++)

{

fprintf(fp,"%d ", Matrix[i][j]);

}

fprintf(fp,"\n");

}

}

/* 矩阵乘法运算函数 */

void MatrixMutiply(datatype** a, datatype** b, datatype** c)

{

int i,j,k;

for(i = 0; i < row_c; i++)

{

for(j = 0; j < col_c; j++)

{

for(k = 0; k < col_a; k++)

{

c[i][j] += a[i][k] * b[k][j];

}

}

}

}

/* 释放矩阵内存函数 */

void MatrixFree(datatype** Matrix, int m)

{

int i;

for(i = 0; i < m; i++)

{

free(Matrix[i]);

}

free(Matrix);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值