求矩阵的乘积c语言函数 矩阵的乘法c语言

C语言怎么求矩阵的乘积呢?语言只提供 ,-,*,/等低级运算功能 , 高级的都必须代码实现,包括次方开放运算,都是编写代码实现 。你学过矩阵乘法 , 这就很容易,你需要定义一个结构体,作为矩阵 。。。。
矩阵很简单,行数,列数,元素 。
typedef struct {
uint r,c;
float *d;
int size;
}matrix;
分别是行数,列数 , 数据指针,和数据最大长度 。数据最好用指针不用数组,是因为增加灵活性,你只需要动态申请内存即可让你的矩阵大小可变,数组长度不可变 。最后一个参数代表内存长度 , 最好是要有,方便你重新定义数组时看内存够不够 , 不够可以realloc,没有的话你就不知道够不够(5*4的矩阵 , 乘以 4*5 矩阵必然变成5*5矩阵,赋值到新矩阵结构体里,如果还是20个单位,显然装不下,必须realloc , 所以该参数必须有) 。。。
你只要实现个函数int mul(matrix *m1,*m2,*m3)即可,m1,m2分别为左右 矩阵,m3为结果 。
按照运算法则,你必须完成两件事,判断m1,m2是否可以相乘,不可以相乘返回一个错误(比如返回-1) , (3*3和4*4矩阵不能相乘) , 如果可以那就先让m3.r=m1.r,m3.c=m2.c;
m3.d[i][j]=0;
for(k=0;km1.c;k)
m3.d[i][j] =m1.d[i][k]*m2.d[k][j];
这你就能到到m3的一个元素,那你只要求出所有的元素就得到新矩阵了 。
不过因为是C语言,你要考虑内存,m3也许内存不够长,你必须要做一下内存长度判断,不够长要申请,否则就报错没法用了 。。。所以size这个成员也是必须的 。。
不过话说回来,如果是用C,只要你写一个矩阵类 , 重载运算符 *,你就可以用
m3=m1*m2;这样运算,书写更方便,但C语言没这好事 。
C语言编程求矩阵乘积#define MAX 50
#define M MAX
#define N MAX
#define T MAX
#define S MAX
int Mult(double a[][N],int m,int n,double b[][T]int s,int t,double c[][T]) {
int i,j,k;
if(n != s) {
printf("两矩阵相乘求矩阵的乘积c语言函数,左矩阵求矩阵的乘积c语言函数的列数与右矩阵的行数必须相等 。\n");
return 0;
}
int c;
tmp.m_Mat = new double *[tmp.m_Rows];
for(int i = 0;itmp.m_Rows;i) tmp.m_Mat[i] = new double[tmp.m_Cols];
for(i = 0; im;i) {
for(j = 0; jn;j) {
c[i][j] = 0;
for(k = 0; kt;k)
c[i][j]= c[i][k] * c[k][j];
}
}
return 1;
}
C语言求两矩阵乘积#include "stdio.h"
#define LANGA 4
#define LANGB 3
#define LANGC LANGB
int multi(double A[][LANGA],double B[][LANGB],double C[][LANGC],int langa,int langb,int langc){
int i,j,k;
if(langa==LANGBlangb==LANGA){
for(i=0;ilanga;i)
for(j=0;jlangc;j)
for(C[i][j]=k=0;klangb;k)
C[i][j] =A[i][k]*B[k][j];
return 0;
}
return -1;
}
int main(int argv,char *argc[]){
double A[LANGB][LANGA],B[LANGA][LANGB],C[LANGB][LANGC];
int i,j;
for(i=0;iLANGB;i)
for(j=0;jLANGA;A[i][j]=1.0/(i j 1));
for(i=0;iLANGA;i)
for(j=0;jLANGB;B[i][j]=1.0 j);
if(multi(A,B,C,LANGB,LANGA,LANGB))
return -1;
for(i=0;iLANGB;i){
for(j=0;jLANGC;printf(".4le",C[i][j]));
printf("\n");
}
return 0;
}
运行样例:
C语言中两矩阵相乘#include stdio.h
int main()
{
int x,y,z;
int i,j,l;
int sum=0;
printf("请输入前一个矩阵的行数 , 列数与后一个矩阵的列数:\n");
scanf("%d %d %d",x,y,z);
int a[x][y];
int b[y][z];
int c[x][z];
//读入矩阵
printf("请输入矩阵a:\n");
for(i=0;ix;i){
for(j=0;jy;j){
scanf("%d",a[i][j]);
}
}
printf("请输入矩阵b:\n");
for(i=0;iy;i){
for(j=0;jz;j){
scanf("%d",b[i][j]);
}
}
printf("矩阵a为:\n");
for(i=0;ix;i){
for(j=0;jy;j){
printf("%d",a[i][j]);
if(j==y-1)
printf("\n");
else
printf("\t");
}
}
printf("矩阵b为:\n");
for(i=0;iy;i){
for(j=0;jz;j){
printf("%d",b[i][j]);
if(j==z-1)
printf("\n");
else
printf("\t");
}
}
for(i=0;ix;i){
for(l=0;lz;l){
for(j=0;jy;j){
sum =a[i][j]*b[j][l];
if(j==y-1){
c[i][l]=sum,sum=0;
}
}
}
}
printf("矩阵a与矩阵b的乘积为:\n");
for(i=0;ix;i){
for(j=0;jz;j){
printf("%d",c[i][j]);
if(j==z-1)
printf("\n");
else
printf("\t");
}
}
return 0;
}
C语言编程求矩阵乘积 。#include"stdio.h"
void main()
{
int a[3][2],b[2][3],c[3][3];
int i,j,k;
for(i=0;i3;i)//输入
{
for(j=0;j2;j)
scanf("%d",a[i][j]);
}
for(i=0;i2;i)//输入
{
for(j=0;j3;j)
scanf("%d",b[i][j]);
}
for(i=0;i3;i)//计算
{
for(j=0;j3;j)
{
c[i][j]=0;//初始化c
for(k=0;k2;k)
c[i][j] =a[i][k]*b[k][j];
}
}
for(i=0;i3;i)//输出
{
for(j=0;j3;j)
printf("%d ",c[i][j]);
printf("\n");
}
}
【求矩阵的乘积c语言函数 矩阵的乘法c语言】关于求矩阵的乘积c语言函数和矩阵的乘法c语言的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读