/************************************************************************/ /* Author: Qian Guo Zheng */ /************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <malloc.h> typedef int** T; typedef int* T1; typedef int T2; typedef struct rect matrix; //the marix 's struct struct rect{ int col; int row; T a; }; //create the matrix and allocate the memory! matrix creat_matrix(int row,int col) { matrix m; int i; m.row=row; m.col=col; m.a=(T)malloc(sizeof(T1)*row); for (i=0;i<m.row;i++) { m.a[i]=(T1)malloc(sizeof(T2)*col); } return m; } //initialize the matrix matrix init_matrix(matrix m) { int i,j; T2 x; printf("Start of (%d,%d):(row,col) matrix:/n",m.row,m.col); for(i=0;i<m.row;i++) { for(j=0;j<m.col;j++) { scanf("%d,",&x); m.a[i][j]=x; } } printf("End of a Matrix!/n/n"); return m; } //the matrix multiple matrix multiple_matrix(matrix r1,matrix r2) { int i,j,k; matrix m=creat_matrix(r1.row,r2.col); //m=init(m); for (i=0;i<r1.row;i++) { for (j=0;j<r2.col;j++) { m.a[i][j]=0; } } if (r1.col!=r2.row) { printf("Sorry the first matrix' row is not equal with the matrix's col/n"); exit(1); } for (i=0;i<r1.row;i++) { for(j=0;j<r2.col;j++) { for (k=0;k<r1.col;k++) { m.a[i][j]=r1.a[i][k]*r2.a[k][j]; } } } return m; } //the plus of the two matrix matrix plus_matrix(matrix r1,matrix r2) { int i,j; if (r1.row!=r2.row || r1.col != r2.col) { printf("Sorry the two matrix's row or col is not equal !/n"); exit(1); } matrix m=creat_matrix(r1.row,r2.col); for (i=0;i<r1.row;i++) { for (j=0;j<r2.col;j++) { m.a[i][j]=0; //clear the matrix's random number! } } for (i=0;i<r1.row;i++) { for (j=0;j<r2.col;j++) { m.a[i][j]=r1.a[i][j]+r2.a[i][j]; } } return m; } //the subtraction of two matrix matrix sub_matrix(matrix r1,matrix r2) { int i,j; if (r1.row!=r2.row || r1.col != r2.col) { printf("Sorry the two matrix's row or col is not equal !/n"); exit(1); } matrix m=creat_matrix(r1.row,r2.col); for (i=0;i<r1.row;i++) { for (j=0;j<r2.col;j++) { m.a[i][j]=0; //clear the matrix's random number! } } for (i=0;i<r1.row;i++) { for (j=0;j<r2.col;j++) { m.a[i][j]=r1.a[i][j]-r2.a[i][j]; } } return m; } //the transpose of matrix matrix trans_matrix(matrix m) { int i,j; matrix tmp=creat_matrix(m.col,m.row); for (i=0;i<m.col;i++) { for(j=0;j<m.row;j++) { tmp.a[i][j]=m.a[j][i]; //clear the matrix's random number; } } return tmp; } // print the matrix void print_matrix(matrix m) { int i=0,j=0; printf("The print Matrix is (%d,%d):(row,col):/n",m.row,m.col); for (i=0;i<m.row;i++) { for (j=0;j<m.col;j++) { printf("%d ",m.a[i][j]); } printf("/n"); } system("pause"); } int main(int argc,char *argv[]) { matrix r1=creat_matrix(3,4); r1=init_matrix(r1); /* matrix r2=creat_matrix(4,2); r2=init_matrix(r2); r1=multiple_matrix(r1,r2); print_matrix(r1); */ r1=trans_matrix(r1); print_matrix(r1); printf("/n"); r1=plus_matrix(r1,r1); print_matrix(r1); r1=sub_matrix(r1,r1); print_matrix(r1); return 0; }