/* Program: matrix-product-file-v0.c (Report comments/bugs to chikh@yuntech.edu.tw) Function: 讀取檔案設定矩陣元素,設置好A與B矩陣之後,實作矩陣相乘 Note: 預設讀取matrixData1.txt;matrixData2.txt用於測試A與B維度不符的狀況 */ #include #define N 100 int rowA, colA, rowB, colB; char idA, idB; int init(int A[][N], int B[][N]) //初始化A與B矩陣 { FILE *f; int i, j; f = fopen("matrixData1.txt","r"); //f = fopen("matrixData2.txt","r"); fscanf(f,"%c %d %d %c %d %d",&idA,&rowA,&colA,&idB,&rowB,&colB); if (colA != rowB) return 0; for (i = 0; i < rowA; i++) for (j = 0; j < colA; j++) fscanf(f,"%d",&A[i][j]); for (i = 0; i < rowB; i++) for (j = 0; j < colB; j++) fscanf(f,"%d",&B[i][j]); return 1; } void mul(int A[][N], int B[][N], int C[][N]) //實作C=A*B矩陣相乘運算,運算結果存入C { int i, j, k, sum; for (i = 0; i < rowA; i++) { for (j = 0; j < colB; j++) { for (sum = k = 0; k < colA; k++) sum += A[i][k]*B[k][j]; C[i][j] = sum; } } } void show(char p, char q, int X[][N], int row, int col) { int i, j; if (q != '-') //以q來區隔顯示模式的差異 printf("\nMatrix %c*%c =\n",p,q); else printf("\nMatrix %c =\n",p); for (i = 0; i < row; i++) { for (j = 0; j < col; j++) printf("%6d",X[i][j]); printf("\n"); } printf("\n"); } int main() { int A[N][N] = {0}, B[N][N] = {0}, C[N][N] = {0}, D[N][N] = {0}; printf("\n*** 讀取描述矩陣的檔案,進行矩陣乘積運算 ***\n\n"); if (init(A,B)==0) { printf("矩陣維度有誤,無法運算,sorry\n"); return -1; } mul(A,B,C); show('A','-',A,rowA,colA); show('B','-',B,rowB,colB); show('A','B',C,rowA,colB); return 0; }