C/C++实现矩阵各种运算
程序很简单,重要的是二维指针的动态分配内存type **Matrix ;//row为行,col为列 Matrix=(type **) malloc(row*sizeof(type *)) ; for(int i=0; i Matrix[i] = (type *)malloc(col * sizeof(type )); 类似数组a[2][3],他一共两行,每一行有3个元素,所以为他先分配两行内存,然后每一行再分配3列内存 Matrix类型是type**,先为它分配row行内存,内存类型与Matrix一样 Matrix=(type**) malloc(rowsizeof(type)) 每一行分配col列内存,内存类型与Matix[i]一样,也就是type* Matrix[i] = (type*)malloc(col * sizeof(type )); 其中一个功能的结果: 下面是完整代码#include #include #include using namespace std; typedef struct { //结构体 int row,col; //二维指针,目的是动态分配内存 float **matrix; } Matrix; typedef struct { char *name; char *number; } Student; Matrix CreateMatrix() { Matrix m; int row,col; cout << "输入行数与列数:" << endl; cin >> row >> col; float **enterMatrix ; enterMatrix=(float**) malloc(row*sizeof(float*)) ; for(int i=0; i enterMatrix[i] = (float *)malloc(col * sizeof(float)); cout<<"输入你的矩阵:"< for(int i=0; i { for(int j=0; j { cin >> enterMatrix[i][j]; } } m.col = col; m.row = row; m.matrix = enterMatrix; return m; } //初始化一个行为row列为col矩阵 Matrix InitMatrix(int row,int col) { Matrix m; float **matrix ; matrix=(float**) malloc(row*sizeof(float*)) ; for(int i=0; i matrix[i] = (float *)malloc(col * sizeof(float)); for(int i=0; i { for(int j=0; j { matrix[i][j] = 0; } } m.col = col; m.row = row; m.matrix = matrix; return m; } Matrix add(Matrix m1,Matrix m2) { for(int i=0; i { for(int j=0; j { m1.matrix[i][j] = m1.matrix[i][j] +m2.matrix[i][j]; } } return m1; } Matrix sub(Matrix m1,Matrix m2) { for(int i=0; i { for(int j=0; j { m1.matrix[i][j] = m1.matrix[i][j] -m2.matrix[i][j]; } } return m1; } int calRowCol(Matrix M1,Matrix M2,int row,int col)//row为M1的行 col为m2的列 { int result = 0; int same = M1.col; for(int j=0; j { result+=M1.matrix[row][j]*M2.matrix[j][col]; } return result; } Matrix Mul(Matrix m1,Matrix m2) { Matrix result = InitMatrix(m1.row,m2.col); for(int i=0; i { for(int j=0; j { result.matrix[i][j] = calRowCol(m1,m2,i,j); } } return result; } Matrix numMul(Matrix m,int num) { cout<<"数值:"< for(int i=0; i { for(int j=0; j { m.matrix[i][j] = m.matrix[i][j]*num; } } return m; } Matrix printMatrix(Matrix m) { for(int i=0; i { for(int j=0; j { cout << m.matrix[i][j] << " "; } cout< } } int main() { int num = 0; do { cout<<"*************************************n"; cout<<"* 菜单 *n"; cout<<"* 1.矩阵相加 *n"; cout<<"* 2.矩阵相减 *n"; cout<<"* 3.矩阵相乘 *n"; cout<<"* 4.矩阵数乘 *n"; cout<<"* 5.退出 *n"; cout<<"*************************************n"; cin>>num; if(1 == num|| 2 == num || 3 == num) { cout<<"请输入矩阵1"< Matrix m1 = CreateMatrix(); cout<<"请输入矩阵2"< Matrix m2 = CreateMatrix(); cout<<"两矩阵为"< printMatrix(m1); cout< printMatrix(m2); switch(num) { case 1: { if(m1.col!=m2.col || m1.row!=m2.row) { cout<<"行列不同"< } else{ cout<<"结果为:"< printMatrix(add(m1,m2)); } break; } case 2: { if(m1.col!=m2.col || m1.row!=m2.row) { cout<<"参数错误"< } else{ cout<<"结果为:"< printMatrix(sub(m1,m2)); } break; } case 3: { if(m1.col!=m2.row) { cout<<"参数错误"< } else{ cout<<"结果为:"< printMatrix(Mul(m1,m2)); } break; } default: break; } } else if(4 == num) { int number = 1; cout<<"请输入矩阵"< Matrix m = CreateMatrix(); cout<<"请输入数值"< cin>>number; cout<<"矩阵为:"< printMatrix(m); cout<<"数值为:"< cout< printMatrix(numMul(m,number)); } cout<<"按回车继续...."; getchar(); getchar(); system("cls"); } while(1 == num|| 2 == num || 3 == num ||4 == num); return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |