當前位置:首頁 » 編程語言 » c語言求兩個n階方陣的乘積
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言求兩個n階方陣的乘積

發布時間: 2022-03-08 19:11:02

1. 用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);}

2. 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;
}

3. 編寫一個C函數實現兩個n階矩陣相乘。

float a[n1][m];
float b[m][n2];
float s[n1][n2];
for(w=0;w<n1;w++)
{
for(j=0;j<n2;j++)
{
for(i=0;i<m;i++)
{
s[n1][n2]+=a[n1][m]*b[m][n2];
}
}
}

n1=n2=m時,就是兩個m階方陣的乘積。

4. C語言求個程序!!!!計算兩個矩陣乘積

#include<stdio.h>
#include<stdlib.h>
intmain()
{
unsignedintm,p,n;
inti,j,k,*a,*b,*c;
scanf("%d%d%d",&m,&p,&n);
a=malloc(m*p*sizeof(int));
for(i=0;i<m;i++)
for(j=0;j<p;j++)
scanf("%d",&a[i*p+j]);
b=malloc(p*n*sizeof(int));
for(i=0;i<p;i++)
for(j=0;j<n;j++)
scanf("%d",&b[i*n+j]);
c=calloc(m*n,sizeof(int));
for(i=0;i<m;i++)
for(j=0;j<n;j++)
for(k=0;k<p;k++)
c[i*n+j]+=a[i*p+k]*b[k*n+j];
printf(" ");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf("%d",c[i*n+j]);
printf(" ");
}
free(a);free(b);free(c);
return0;
}

5. C語言題,求兩個矩陣的乘積c 已知矩陣a和b的值

定義矩陣a和b
雙重循環, 輸入a和b的值
定義結果矩陣c,並將所有元素賦值為0
三重循環
根據矩陣乘積規則,計算c的每個值。
輸出c

6. C語言題,求兩個矩陣的乘積c ,已知矩陣a和b的值

用兩個二維數組分別存儲兩個矩陣,然後按照數學的方法運算,同時定義一個二維數組進行存儲

7. 輸入兩個n(2≤n≤10)階方陣A和B,計算並輸出它們的乘積C.

#include<stdio.h>
#include<stdlib.h>
intmain()
{
introw1=0,row2=0,cow1=0,cow2=0;
inti=0,j=0,k=0,temp=0;
intarray1[20][20],array2[20][20],array[20][20];
printf("請輸入第一個矩陣的行數和列數 ");
scanf("%d%d",&row1,&cow1);
printf("請輸入%d行%d列矩陣 ",row1,cow1);
for(i=0;i<row1;i++)
for(j=0;j<cow1;j++)
scanf("%d",&array1[i][j]);
printf("請輸入第二個矩陣的行數和列數 ");
scanf("%d%d",&row2,&cow2);
printf("請輸入%d行%d列矩陣 ",row2,cow2);
if(cow1!=row2)
{
printf("矩陣不能相乘 ");
exit(0);
}
for(i=0;i<row2;i++)
for(j=0;j<cow2;j++)
scanf("%d",&array2[i][j]);
for(i=0;i<row1;i++)
{
for(j=0;j<cow2;j++)
{
temp=0;
for(k=0;k<cow1;k++)
temp=temp+array1[i][k]*array2[k][j];
array[i][j]=temp;
}
}
printf("2個矩陣相乘的結果是: ");
printf("行:%d列:%d ",row1,cow2);
for(i=0;i<row1;i++)
{
for(j=0;j<cow2;j++)
printf("%-6d",array[i][j]);
printf(" ");
}
return0;
}

8. 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;

}

}

}

}

9. C語言題,求兩個矩陣的乘積

簡單題,按照矩陣的定義去做即可

源代碼如下

//#pragma GCC diagnostic error"-std=c11"

#include<stdlib.h> //有隨機數庫

#include<malloc.h>

#include<time.h> //用於產生隨機數種子

#include<math.h>

#include<string.h>

#include<stdio.h>

#define ELE int

typedef struct Metrix {

ELE *A;

int row, col;

}Metrix;

//初始化矩陣

void init(Metrix *M, int row, int col, int auto_read) {

M->A = (ELE*)calloc(row*col, sizeof(ELE));

M->row = row;

M->col = col;

if (auto_read) {

int i, size = row*col;

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

scanf("%d", M->A + i);

}

}

#define IDX(M,r,c) (r*(M->col)+c)

ELE* get(Metrix *M, int r, int c) {

return M->A + IDX(M, r, c);

}

int main()

{

int m, l, n, i, j, k;

scanf("%d%d%d", &m, &l, &n);

Metrix L, R;

init(&L, m, l, 1);

init(&R, l, n, 1);

// init(M,m,n,0);

//矩陣乘法走起

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

for (j = 0; j<n; j++) {

ELE *lp = get(&L, i, 0), *rp = get(&R, 0, j);

ELE out = 0;

for (k = 0; k<l; k++) {

out += *(rp)*lp[k];

rp += n; //rp換下一行

}

printf("%d ", out);

}

printf(" "); //刪去空格再換行。

}

return 0;

}

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

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