前言:
目前同学们对“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语言矩阵相乘函数