该程序的代码如下:
头文件如下:
#ifndef _MATRIX_H_
#define _MATRIX_H_
void evaluate( int**x, int m,int n);//该函数用于给矩阵赋值
void addmatrix( int** x, int** y,int **z, int m, int n);//该函数用于矩阵的加法,m,n分别为矩阵的列数,行数
void multiplmatrix( int** x, int ** y,int **z, int m, int n1,int n);//该函数用于矩阵的乘法,m,n1为矩阵x的列数、列数,n为矩阵y的列数
void showmatrix( int** a, int m,int n);//该函数用于矩阵的显示,m,n分别为矩阵的行数与列数
void subtractionmatrix(int** x, int** y,int **z, int m, int n);//该函数用于矩阵的减法法,m,n分别为矩阵的列数,行数
int** creat( int m, int n);//该函数用于矩阵的分配内存
void free_1(int** x, int m);//该函数用于释放矩阵的内存
#endif
函数的定义文件如下:
#include"matrix.h"
#include<stdio.h>
#include<stdlib.h>
void evaluate( int **x, int m,int n) {//该函数用于给矩阵赋值
printf("请依次输入矩阵的值:\n");
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
scanf_s("%d", &x[i][j]);
}
}
}
void addmatrix( int **x, int **y,int **z, int m, int n) {//该函数用于矩阵的加法
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
z[i][j] = x[i][j] + y[i][j];
}
}
}
void multiplmatrix( int** x, int** y,int **z, int m, int n1,int n) {//该函数用于矩阵的乘法
for (int k = 0; k < n; k++) {
for (int i = 0; i < m; i++) {
z[i][k] = 0;
for (int j = 0; j < n1; j++) {
z[i][k]+= x[k][j] * y[j][i];
}
}
}
}
void showmatrix(int** a, int m, int n) {//该函数用于矩阵的显示
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
printf("%d ",a[i][j]);
}
printf("\n");
}
}
void subtractionmatrix(int** x, int** y, int **z,int m, int n) {
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
z[i][j] = x[i][j] - y[i][j];
}
}
}
int** creat( int m, int n) {
int** temp = (int**)malloc(sizeof(int) * m);
for (int i = 0; i < m; i++) {
temp[i] = (int*)malloc(sizeof(int) * n);
}
return temp;
}
void free_1(int** x, int m) {
for (int i = 0; i < m; i++) {
free(x[i]);
}
free(x);
}
主程序的文件如下
/*******************************************************************************************
项目说明:
该项目用于实现矩阵的加法、减法、乘法运算
********************************************************************************************/
#include<stdio.h>
#include"matrix.h"
#include<stdlib.h>
int main() {
int m1, n1, m2, n2;//分别维矩阵的行数与列数
printf("请输入第一个矩阵的行数与列数:");
scanf_s("%d %d", &m1, &n1);
printf("请输入第二个矩阵的行数与列数:");
scanf_s("%d %d", &m2, &n2);
int** A = creat(m1,n1);//为矩阵A分配m1行
int** B = creat(m2,n2);//为矩阵B分配m2行
//初始化A,B矩阵
evaluate(A, m1,n1);
evaluate(B, m2,n2);
//显示A,B矩阵
printf("第一个矩阵如下:\n");
showmatrix(A, m1,n1);
printf("第二个矩阵如下:\n");
showmatrix(B, m2,n2);
int** C = creat(m1,n1);//C矩阵为A,B矩阵相加的结果
int** D = creat(m1,n1);//D矩阵为A,B矩阵相减的结果
int** E = creat(m1, n2);//E矩阵为A,B矩阵相乘的结果
if (m1 == m2 && n1 == n2) {
addmatrix(A, B, C, m1, n1);//将两矩阵相加
//显示矩阵相加的结果
printf("矩阵相加的结果如下:\n");
showmatrix(C, m1, n1);
}
else
printf("这两个矩阵不满足矩阵相加的规律,不能想加!\n");
//释放矩阵C所占的内存
free_1(C, m1);
if (m1 == m2 && n1 == n2) {
subtractionmatrix(A, B, D, m1, n1);//将两矩阵相减
//显示矩阵相减的结果
printf("矩阵相减的结果如下:\n");
showmatrix(D, m1, n1);
}
else
printf("这两个矩阵不满足矩阵相减的规律,不能相减!\n");
//释放矩阵D所占的内存
free_1(D, m1);
if (n1 == m2) {
//将两矩阵相乘
multiplmatrix(A, B, E, m1, n1, n2);
printf("矩阵相乘的结果如下:\n");
showmatrix(E, m1, n2);//显示矩阵D的值
}
else
printf("这两个矩阵不满足矩阵乘法的规律,不能相乘!\n");
//释放相乘后矩阵的内存
free_1(E,m1);
//释放第一第二个矩阵的内存
free_1(A, m1);
free_1(B, m2);
return 0;
}
下面是运行结果
结果显然是正确的!