龙空技术网

C|二维数组做函数参数求矩阵乘积

小智雅汇 136

前言:

目前同学们对“c语言矩阵相乘函数”可能比较着重,朋友们都需要剖析一些“c语言矩阵相乘函数”的相关资讯。那么小编同时在网摘上网罗了一些关于“c语言矩阵相乘函数””的相关资讯,希望兄弟们能喜欢,各位老铁们一起来了解一下吧!

数据在内存中线性顺序按字节编址存储,不管几维数组,其实质都是一维,关键在于数组名(相当于一个常量指针)是首地址,由下标求出偏移量。但C是强类型语言,有类型匹配的问题。

以下用两个方法求矩阵乘积,从具体到一般:

#include <stdio.h>  // 二维数组做函数参数求矩阵乘积                    // 矩阵(m*t) * 矩阵(t*n) = 矩阵(m*n)void mutul(int a[][4],int b[][3], int c[][3],int m, int t, int n){    int i,j,k;    for(i=0; i<m; i++)            // 控制a、c 行        for(j=0; j<n; j++)        // 控制b、c 列        {            c[i][j]=0;            for(k=0; k<t; k++)    // 控制b 行、a 列                c[i][j] += a[i][k]*b[k][j];        }    for(i=0; i<m; i++)            // 输出    {        for(j=0; j<n; j++)            printf("%5d",c[i][j]);        printf("\n");    }    printf("\n");}void mutul2(int a[],int b[], int c[], int m,int t,int n)//降维处理{    int i,j,s;    for(i=0; i<m; i++)               // 控制a、c 行        for(j=0; j<n; j++)           // 控制b、c 列        {            s=i*n+j;            c[s]=0;            for(int k=0; k<t; k++)   // 控制b 行、a 列                c[s] += a[i*t+k] * b[k*n+j];        }    for(i=0;i<m; i++)                // 输出    {        for(j=0; j<n; j++)            printf("%5d",c[i*n+j]);        printf("\n");    }}int main(){    int a[2][4] = { 1, 2, 3, 4,                    5, 6, 7, 8 };    int b[4][3] = { 1, 2, 3,                    4, 5, 6,                    7, 8, 9,                    10,11,12 };    int c[2][3] = {0};    mutul(a,b,c,2,4,3);    mutul2((int*)a,(int*)b,(int*)c,2,4,3);    getchar();    return 0;}/*   70   80   90  158  184  210   70   80   90  158  184  210*/

-End-

标签: #c语言矩阵相乘函数