最近在做多线程矩阵乘法实验,下面是单线程下矩阵乘法的实现,也就是用朴素矩阵乘法算法求C=A*B。代码支持自定义输入A、B的值,便于观看和理解,代码里写了很多注释和输出反馈,后续多线程会删掉,有兴趣的朋友关注一波~
运行实例在末尾,下面是完整代码~
#include <stdio.h>
#include <stdlib.h>
#define ROW 20
#define COL 20
//print matrix
void printmatrix(int C[ROW][COL],int row,int col)
{
printf("\n---MATRIX ELEMENTARY START---\n");
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
printf("%5d ",C[i][j]);
}
printf("\n");
}
printf("\n---MATRIX ELEMENTARY END---\n");
}
int main(int argc,char *argv[])
{
int A[ROW][COL]={0};
int B[ROW][COL]={0};
int C[ROW][COL]={0};
int row1,col1,row2,col2;
//matrix A input
printf("\n---please input you row-col number of A--\n ");
scanf("%d-%d\n",&row1,&col1);
printf("Now input you elementary of matrix A:\n");
for(int i=0;i<row1;i++)
{
for(int j=0;j<col1;j++)
{
scanf("%d",&A[i][j]);
}
}
printf("---Input of A done!---\n");
printmatrix(A,row1,col1);
printf("\n");
//matrix B input
printf("---please input you row-col number of B--\n ");
scanf("%d-%d\n",&row2,&col2);
printf("Now input you elementary of matrix B:\n");
for(int i=0;i<row2;i++)
{
for(int j=0;j<col2;j++)
{
scanf("%d",&B[i][j]);
}
}
printf("---Input of B done!---\n");
printmatrix(B,row2,col2);
printf("\n");
//accumulate judge and matrix C count
if(col1!=row2)
printf("illegal to multiply:colA!=rowB\n");
else
{
for(int i=0;i<row1;i++)
{
for(int j=0;j<col2;j++)
{
for(int k=0;k<col1;k++)
{
C[i][j]+=A[i][k]*B[k][j];
}
}
}
}
printf("---accumulate of C=A*B done!---\n");
printmatrix(C,row1,col2);
printf("\n");
return 0;
}
运行实例如下: