问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

编写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 &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#include &lt;string.h&gt;#include &lt;...

C语言:编写完整程序:计算两个矩阵的乘积。

//矩阵的乘法Y=M*Q实现函数 void multsmatrix(ts M,ts Q,ts &amp;Y){ int arow,brow=0,p,q,i1,tp,t1,ctemp[10],ccol;if(M.n!=Q.m)cout&lt;&lt;"错误!"&lt;&lt;endl;Y.m=M.m;Y.n=Q.n;Y.t=0;if(M.t*Q.t!=0){ for(arow=1;arow&lt;=M.m;++arow){ for(i1=1;i1&lt;=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&lt;M;i++)for(j=0;j&lt;M;j++)scanf("%f",&amp;a[i][j]);printf("请输入矩阵b:");printf("\n");for(i=0;i&lt;M;i++)for(j=0;j&lt;M;j++)scanf...

求C语言源代码:从键盘输入两个矩阵,输出这两个矩阵和这两个矩阵相乘的...

main(){ int i,j,k,a[3][3],b[3][3],c[3][3];for(i=0;i&lt;3;i++)for(j=0;j&lt;3;j++)scanf("%d",a[i][j]); //shu lu a[][]for(i=0;i&lt;3;i++)for(j=0;j&lt;3;j++)scanf("%d",b[i][j]); //shu lu b[][]for(i=0;i&lt;3;i++)for(j=0;j&lt;3;j++)...

如何用C语言编写一个求两个矩阵相乘的结果

include include include include /* #include */ void main(void){ int col, row, row_s; /* the column &amp; 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 &lt;stdio.h&gt; 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 &lt; 3; i++) { //c[0]为数组c的首地址 for(j = 0; j &lt; 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 &lt;bits/stdc++.h&gt;using namespace std;int a[233][233],b[233][233],c[233][233];/*上述代码*/int main(){ scanf("%d",&amp;n); for (int i=1;i&lt;=n;i++) for (int j=1;j&lt;=n;j++) scanf("%d",&amp;a[i][j]); for (int i=1;i&lt;=n;i++) for (int j=1...

c语言:输入一个2行3列的矩阵A和一个3行4列的矩阵B,计算两矩阵的乘积

解题过程如下:include &lt;stdio.h&gt;;#include &lt;stdlib.h&gt; 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 ...

一个数与5相乘,乘积个位上是 矩阵乘矩阵的转置 转置矩阵与原矩阵相乘 两个2*2矩阵相乘 两个矩阵相乘为0 矩阵和逆矩阵相乘等于什么 矩阵乘积的值 矩阵的逆矩阵怎么求 五个五相乘的积是多少
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...90千瓦星角起动.60千瓦小容量电机和照明.请问用多大的铝芯线合适... ...星、三角起动,需截面多大的主线和电机负荷线,最好有计公式 梦见有人不断说我是魂古命的人 手相有田字纹代表什么,会越来越富的女人手相 ...旁边有活水流出!同时还梦见一个道士给看手相说过一阵运气就会好,今... 王者荣耀新英雄影如何获得 王者新英雄影怎么获得 说话中气不足锻炼方法 ...里面的油,可以用吸油管子吸出来吗?小车,凯美瑞。不知道有防盗网吗... qq密码忘记我输入现在的qq密码为什么出现以前的qq号呢我想 C++编程时,将两个矩阵相乘,用函数来写的 饺子皮做什么好东西吃 《醇厚的中原韵教学设计》教学设计 苹果MacBook Pro 2017还值得购买吗? bpf_perfevent_output 失败 Java中的String 跟StringBuffer有何区别? StringBuffer类如何字符串拼接? disruptor 线程安全吗 java拼接字符串SringBuffer 如何实名认证不要银行卡? 为什么女人25岁以后要补充胶原蛋白 怎样才能把微博水印放到图片中间啊?就像下图一样得 女人要25岁以后才可以开始补充胶原蛋白么? 如何用手机注册qq靓号 女人多大才适合吃胶原蛋白 听说女性从20岁开始就必须补充胶原蛋白,不要等到胶原蛋白已经流失的差不多了才去补,是真的吗? 女人多大服用胶原蛋白效果最好 女人20岁以后就要补充胶原蛋白吗? 父母的长相和智力,谁遗传给孩子的比例最大,有什么依据? 孩子会遗传父母智商的百分之多少?遗传父亲的多还是母亲的多? 用C语言写一个两个矩阵相乘的函数 如何擀出Q弹的饺子皮 计算矩阵乘积 编程求两个矩阵的乘积,主函数如下,请编写子函数multi(),output(),用指针处理。 编写一个函数,用于执行两个矩阵的乘法。要求:数据输入输出在主函数中完成,用函数实现运算. 输入m*n阶矩阵A和B,用函数编程实现两个函数相加和相乘 求一个matlab中矩阵乘积的自定义函数 FORTRAN 矩阵相乘的函数function怎么写? 必须用 function 不能用 subroutine 1. 编写一个M函数,用于计算两个矩阵的积(两个矩阵作为输入参数,不能使用矩阵乘运算符)。 自身免疫系统肝炎怎么治疗 肝炎是什么原因导致的?患肝炎之后应该如何治疗呢? 为什么乙肝病毒不容易被自身免疫系统杀死? 全球不明病因儿童肝炎169例,引发肝炎的主要原因是什么? 感觉肝炎越来越严重了,怎样才能判断肝炎有没有恶化呢? 西安的十大美食有什么? 计算机学Java好就业吗?薪资咋样啊? 学好java有前途吗 ?工资怎么样啊 学java的现在工资怎么样 上海java培训班学习后薪资高吗 学JAVA编程以后工作都在哪里工作?工资怎么样…?