编写c++程序,计算两个矩阵的乘积,矩阵相乘设计成函数形式
发布网友
发布时间:2022-05-13 01:42
我来回答
共1个回答
热心网友
时间:2023-11-07 09:58
这得用到线性函数啊,都快忘没了;
先分析一下矩阵相乘的算法:
a[m][n] * b[n][p] = c[m][p]
其中c[i][j] = a[i][0] * b[0][j] + ... + a[i][n-1] * b[n-1][j]
现在我们就可以来写程序了
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
using namespace std;
#define COLUM_NUM 2
typedef struct array
{
int (*parray)[COLUM_NUM];
int colum; //列
int row; //行
}STRU_ARRAY;
int func(STRU_ARRAY *parray_1, STRU_ARRAY *parray_2, STRU_ARRAY **out_array);
int main(int argc, char **argv)
{
int a[2][COLUM_NUM] = {{1,2}, {3,4}};
int b[2][COLUM_NUM] = {{4,3}, {2,1}};
int *print_tmp = NULL;
STRU_ARRAY local_array1 = {a, 2, 2};// 1 2
// 3 4
STRU_ARRAY local_array2 = {b, 2, 2};// 4 3
// 2 1
STRU_ARRAY *local_out_array = NULL;
#if 0
printf("%d %d %d %d %d %d\n",
local_array1.parray[0][0],
local_array1.parray[0][1],
local_array1.parray[1][0],
local_array1.parray[1][1], local_array1.row, local_array1.row);
printf("%d %d %d %d %d %d\n",
local_array2.parray[0][0],
local_array2.parray[0][1],
local_array2.parray[1][0],
local_array2.parray[1][1], local_array2.row, local_array2.row);
#endif
int result = func(&local_array1, &local_array2, &local_out_array);
print_tmp = (int *)local_out_array->parray;
//printf("%d %d \n", print_tmp[0], print_tmp[1]);
//printf("%d %d \n", print_tmp[2], print_tmp[3]);
cout<<print_tmp[0]<<" "<<print_tmp[1]<<endl;
cout<<print_tmp[2]<<" "<<print_tmp[3]<<endl;
free(local_out_array->parray);
free(local_out_array);
}
int func(STRU_ARRAY *parray_1, STRU_ARRAY *parray_2, STRU_ARRAY **out_array)
{
int i = 0;
int j = 0;
int n = 0;
int *p = NULL;
int (*ptmp)[COLUM_NUM] = NULL;
if ((NULL == parray_1) || (NULL == parray_2))
{
return -1;
}
*out_array = (STRU_ARRAY *)malloc(sizeof(STRU_ARRAY));
if (NULL == *out_array)
{
return -1;
}
memset(*out_array, 0, sizeof(STRU_ARRAY));
(*out_array)->parray = (int (*)[COLUM_NUM])malloc(parray_2->colum * parray_1->row);
if (NULL == (*out_array)->parray)
{
return -1;
}
memset((*out_array)->parray, 0, (parray_2->colum * parray_1->row) * 4);
ptmp = (*out_array)->parray;
//i为新生成矩阵的行,j为新生成矩阵的列
for (i = 0; i < parray_1->row; i++)
{
p = (int *)ptmp;
for (j = 0; j < parray_2->colum; j++)
{
for (n = 0; n < parray_1->colum; n++)
{
p[j] += parray_1->parray[i][n] * parray_2->parray[n][j];
}
}
ptmp++;
}
return 0;
}
1 2
3 4
与
4 3
2 1
相乘
运行结果正确:
./array
8 5
20 13
编写c++程序,计算两个矩阵的乘积,矩阵相乘设计成函数形式
这得用到线性函数啊,都快忘没了;先分析一下矩阵相乘的算法:a[m][n] * b[n][p] = c[m][p]其中c[i][j] = a[i][0] * b[0][j] + ... + a[i][n-1] * b[n-1][j]现在我们就可以来写程序了#include <stdio.h>#include <stdlib.h>#include <string.h>#include <...
C语言:编写完整程序:计算两个矩阵的乘积。
//矩阵的乘法Y=M*Q实现函数 void multsmatrix(ts M,ts Q,ts &Y){ int arow,brow=0,p,q,i1,tp,t1,ctemp[10],ccol;if(M.n!=Q.m)cout<<"错误!"<<endl;Y.m=M.m;Y.n=Q.n;Y.t=0;if(M.t*Q.t!=0){ for(arow=1;arow<=M.m;++arow){ for(i1=1;i1<=M.m;i...
求高手帮忙用c语言求出两个矩阵的乘积
1、首先打开编程软件,新建一个项目,添加一个double.cpp文件,如图所示。2、包含stdio.h头文件,如图所示。3、接着输入main函数,如图所示。4、然后定义两个double类型变量并初始化,如图所示。5、使用scanf函数接受任意两个小数,计算两个小数的乘积并打印出来,如图所示。6、然后运行程序,查看结果,如...
如何用c语言编写一个“两模糊矩阵相乘”的运算?
float a[M][M],b[M][M],c[M],d[M][M];int count = 0;int i,j , k;printf("请输入矩阵a:");printf("\n");for(i=0;i<M;i++)for(j=0;j<M;j++)scanf("%f",&a[i][j]);printf("请输入矩阵b:");printf("\n");for(i=0;i<M;i++)for(j=0;j<M;j++)scanf...
求C语言源代码:从键盘输入两个矩阵,输出这两个矩阵和这两个矩阵相乘的...
main(){ int i,j,k,a[3][3],b[3][3],c[3][3];for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d",a[i][j]); //shu lu a[][]for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d",b[i][j]); //shu lu b[][]for(i=0;i<3;i++)for(j=0;j<3;j++)...
如何用C语言编写一个求两个矩阵相乘的结果
include include include include /* #include */ void main(void){ int col, row, row_s; /* the column & row of the matrix */ int **pM_f = NULL, **pM_s = NULL; /* point to two matrix,they will be multiplied */ int **pM_r = NULL; /* the matrix will store ...
编程求两个矩阵的乘积,主函数如下,请编写子函数multi(),output(),用...
include <stdio.h> void multi(int a[][4],int b[][3],int c[][3]) { //注意数组只能省略第一维的大小 int *pa,*pb,*pc,sum,i,j,k;for(pc = c[0], i = 0; i < 3; i++) { //c[0]为数组c的首地址 for(j = 0; j < 3; j++) { pa = a[i]; //让pa...
用c语言实现两个矩阵相乘怎么做?
C语言实现矩阵相乘问题描述:编写程序,可以实现m*n矩阵和n*p矩阵相乘。m,n,p均小于10,矩阵元素为整数。分析:首先我们可以根据题意写出函数头。可以定为voidMatrixMutiply(intm,intn,intp,longlMatrix1[MAX][MAX],longlMatrix2[MAX][MAX],longlMatrixResult[MAX][MAX]),其中lMatrix1和lMatrix2...
c语言,用函数调用的方式求两个矩阵相乘。
include <bits/stdc++.h>using namespace std;int a[233][233],b[233][233],c[233][233];/*上述代码*/int main(){ scanf("%d",&n); for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) scanf("%d",&a[i][j]); for (int i=1;i<=n;i++) for (int j=1...
c语言:输入一个2行3列的矩阵A和一个3行4列的矩阵B,计算两矩阵的乘积
解题过程如下:include <stdio.h>;#include <stdlib.h> define L 2,#define M 3,#define N 4 }printf("\n");}return;}int main(void){double A[L][M] = {{0}};double B[M][N] = {{0}};double C[L][N] = {{0}};int i = 0, j = 0, k = 0;printf("\nGenerate ...