
程序很简单,重要的是二维指针的动态分配内存
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; } 以上是内存溢出为你收集整理的C/C++实现矩阵各种运算全部内容,希望文章能够帮你解决C/C++实现矩阵各种运算所遇到的程序开发问题。 如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。 欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)