當前位置:首頁 » 編程語言 » 矩陣乘法演算法c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

矩陣乘法演算法c語言

發布時間: 2023-08-10 02:45:59

c語言編程:編寫一個函數,實現矩陣的乘法。

#include
<stdio.h>
#include
"stdlib.h"
void
pr(int
**a,int
m,int
n)
{
int
i,j;
printf("\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)printf("%5d",a[i][j]);
printf("\n");
}
printf("\n");
}
void
AB(int
**a,int
m1,int
n1,int
**b,int
m2,int
n2,int
**c)
{
int
i,j,k;
for(i=0;i<m1;i++)
for(j=0;j<n2;j++)
for(k=0;k<n1;k++)
c[i][j]+=a[i][k]*b[k][j];
}
void
main()
{
int
**a,**b,**c,m1,n1,m2,n2;
int
i,j;
printf("輸入第一個矩陣的行數列數:");
scanf("%d%d",&m1,&n1);
printf("輸入第二個矩陣的行數列數:");
scanf("%d%d",&m2,&n2);
if(n1!=m2)
{
printf("第一個矩陣的列必須等於第二個矩陣的行數!");
return;
}
//建立A矩陣
a=(int
**)calloc(m1,sizeof(int));
for(i=0;i<m1;i++)
a[i]=(int
*)calloc(n1,sizeof(int));
printf("A:輸入%d個整數:",m1*n1);
for(i=0;i<m1;i++)
for(j=0;j<n1;j++)
scanf("%d",&a[i][j]);
//建立B矩陣
b=(int
**)calloc(m2,sizeof(int));
for(i=0;i<m2;i++)
b[i]=(int
*)calloc(n2,sizeof(int));
printf("B:輸入%d個整數:",m2*n2);
for(i=0;i<m2;i++)
for(j=0;j<n2;j++)
scanf("%d",&b[i][j]);
//建立C矩陣
c=(int
**)calloc(m1,sizeof(int));
for(i=0;i<m1;i++)
c[i]=(int
*)calloc(n2,sizeof(int));
AB(a,m1,n1,b,m2,n2,c);
printf("A:\n");
pr(a,m1,n1);
printf("B:\n");
pr(b,m2,n2);
printf("C=AB\n");
pr(c,m1,n2);
}

⑵ C語言實現矩陣乘法

#include<stdio.h>
intp,q,k;
voidmain()
{
floatA[2][2]={1,1,2,1},B[2][1]={2,1};
floatC[2][1]={0};
printf("矩陣A*矩陣B為: ");//計算兩個矩陣相乘;以[2][2]*[2][1]為例
for(p=0;p<2;++p)
{
for(q=0;q<1;++q)
{
for(k=0;k<2;++k)
C[p][q]+=A[p][k]*B[k][q];
}
}
for(p=0;p<2;p++){
for(q=0;q<1;q++)
{
printf("%f",C[p][q]);
printf(" ");
}
}
}

⑶ 求高手幫忙用c語言求出兩個矩陣的乘積

1、首先打開編程軟體,新建一個項目,添加一個double.cpp文件,如圖所示。

⑷ 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;i<x;i++){
for(j=0;j<y;j++){
scanf("%d",&a[i][j]);
}
}
printf("請輸入矩陣b:\n");
for(i=0;i<y;i++){
for(j=0;j<z;j++){
scanf("%d",&b[i][j]);
}
}
printf("矩陣a為:\n");
for(i=0;i<x;i++){
for(j=0;j<y;j++){
printf("%d",a[i][j]);
if(j==y-1)
printf("\n");
else
printf("\t");
}
}
printf("矩陣b為:\n");
for(i=0;i<y;i++){
for(j=0;j<z;j++){
printf("%d",b[i][j]);
if(j==z-1)
printf("\n");
else
printf("\t");
}
}
for(i=0;i<x;i++){
for(l=0;l<z;l++){
for(j=0;j<y;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;i<x;i++){
for(j=0;j<z;j++){
printf("%d",c[i][j]);
if(j==z-1)
printf("\n");
else
printf("\t");
}
}

return 0;
}

⑸ 用c語言實現兩個矩陣相乘怎麼做

1、程序運行輸入數據時,第一行為A矩陣的行列數和B矩陣的行列數,接著分別輸入A、B兩個矩陣的值。

⑹ c語言的矩陣乘法問題 初學者求助

//矩陣乘法屬於線性代數;矩陣乘法的原理不難,只要原理搞請,代碼很好寫的

#include<stdio.h>

/*功能為計算給定的矩陣a(m行n列)和矩陣b(n行t列)的乘積矩陣c*/

void f(int a[3][4], int b[4][3], int c[3][3], int m, int n, int t) {

//矩陣乘法:前行乘後列

//矩陣a的行(m)作為矩陣c的行

//矩陣b的列(t)作為矩陣c的列

for (int i = 0; i < m; i++) {//新矩陣m行

for (int j = 0; j < t; j++) {//新矩陣t列

int sum=0;

for (int k = 0; k < n; k++) {

sum += (a[i][k] * b[k][j]);//行列對應相乘,然後累加

}

c[i][j]=sum;

}

}

}

/* 請在這里填寫答案 */

/*

1 2 3 4

2 3 4 5

3 4 5 6

1 2 3

2 3 4

3 4 5

4 5 6

*/

int main() {

int i, j, a[3][4], b[4][3], c[3][3];

for (i = 0; i < 3; i++)

for (j = 0; j < 4; j++)

scanf("%d", &a[i][j]);

for (i = 0; i < 4; i++)

for (j = 0; j < 3; j++)

scanf("%d", &b[i][j]);


f(a, b, c, 3, 4, 3);

for (i = 0; i < 3; i++) {

for (j = 0; j < 3; j++)

printf("%5d", c[i][j]);

printf(" ");

}

}

⑺ 求一個C語言編矩陣乘法運算的程序

#include "iostream.h"

void MatrixChain(int *p,int n,int **m,int **s)
{
for(int i=1;i<=n;i++)
m[i][i]=0;
for(int r=2;r<=n;r++)
for( i=1;i<=n-r+1;i++)
{
int j=i+r-1;
m[i][j]=m[i+1][j]+p[i-1]*p[i]*p[j];
s[i][j]=i;
for(int k=i+1;k<j;k++)
{
int t=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j];
if(t<m[i][j])
{
m[i][j]=t;
s[i][j]=k;
}
}
}

}

void Traceback(int i,int j,int **s)
{

if(i==j)return;
Traceback(i,s[i][j],s);
Traceback(s[i][j]+1,j,s);
cout<<"讓 A"<<i;//<<","<<s[i][j];
cout<<"和 A"<<(s[i][j]+1)<<"相乘"<<endl;//<<","<<j<<"相乘"<<endl;

}

void main()
{

int n,*p;
int j=1;
cout<<"請輸入矩陣的個數"<<endl;
cin>>n;
p=new int[n+1];

cout<<"請輸入第一個矩陣的行數,然後按回車鍵"<<endl;
cin>>p[0];
cout<<"第"<<j<<"個矩陣是"<<endl;
cout<<p[0]<<"*";
cin>>p[1];
// cout<<p[1]<<endl;
cout<<endl;
for(int i=2;i<n+1;i++)
{

cout<<"第"<<i<<"個矩陣是:";
cout<<p[i-1]<<"*";
cin>>p[i];
}
// int p[]={30,35,15,5,10,20,25};
// int m[6][6],s[6][6];

int **m,**s;
m=new int*[n];
for( i=1;i<=n;i++)
m[i]=new int[n];

s=new int*[n];
for( i=1;i<=n;i++)
s[i]=new int[n];

MatrixChain(p,n,m,s);
Traceback(1,n,s);

}
這是矩陣連乘

⑻ C語言編程求矩陣乘積。

#include "iostream.h"

void MatrixChain(int *p,int n,int **m,int **s)

{

for(int i=1;i<=n;i++)

m[i][i]=0;

for(int r=2;r<=n;r++)

for( i=1;i<=n-r+1;i++)

{

int j=i+r-1;

m[i][j]=m[i+1][j]+p[i-1]*p[i]*p[j];

s[i][j]=i;

for(int k=i+1;k<j;k++)

{

int t=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j];

if(t<m[i][j])

{

m[i][j]=t;

s[i][j]=k;

}

}

}

}