1、程序運行輸入數(shù)據(jù)時,第一行為A矩陣的行列數(shù)和B矩陣的行列數(shù),接著分別輸入A、B兩個矩陣的值。
創(chuàng)新互聯(lián)是一家專注于做網(wǎng)站、成都網(wǎng)站建設(shè)與策劃設(shè)計,古藺網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:古藺等地區(qū)。古藺做網(wǎng)站價格咨詢:18982081108
2、首先,定義6個整型變量,保存A、B矩陣的行和列,以及控制循環(huán)的變量,k則用于實現(xiàn)矩陣的乘法。
3、接著,定義三個整型二維數(shù)組,保存A、B和C矩陣的各元素。
4、輸入三個矩陣的行數(shù)和列數(shù),保存在變量a、b、c中。
5、輸入矩陣A的各元素,保存在數(shù)組X中。
6、輸入矩陣B的各元素,保存在數(shù)組Y中。
7、將二維數(shù)組Z的各元素,初始化為0。
8、用兩層for循環(huán),控制矩陣的乘法,并輸出乘法所得的結(jié)果。
9、計算A矩陣和B矩陣的乘法,結(jié)果保存在數(shù)組Z中。
10、最后,輸出乘法所得的結(jié)果,即輸出Z數(shù)組中的所有元素。
11、運行程序,輸入矩陣A和B的行數(shù)和列數(shù),以及A矩陣和B矩陣的所有元素,電腦就會計算出乘積C矩陣的所有元素,并輸出C矩陣。
童鞋,不知道你是用的什么測試數(shù)據(jù),在我的機(jī)器上測試了幾組數(shù)據(jù),結(jié)果都是正確的。
重復(fù)下我的測試代碼。
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
void multiplication(int a,int b,int c,int *p,int *q);
void main()
{
int m,n,l,h;
int i,j,g,k;
int *p,*q;
char x;
printf("請輸入a矩陣行數(shù)和列數(shù),以空格分開,,,");
scanf("%d %d",m,n);
p=(int *)malloc(sizeof(int)*m*n);
for(i=0;im;i++)
for(j=0;jn;j++)
{
printf("請輸入a矩陣%d行%d列的數(shù),,",(i+1),(j+1));
scanf("%d",(p+m*i+j));
}
printf("請輸入b矩陣行數(shù)和列數(shù),以空格分開,,,");
scanf("%d %d",l,h);
q=(int *)malloc(sizeof(int)*l*h);
for(g=0;gl;g++)
for(k=0;kh;k++)
{
printf("請輸入b矩陣%d行%d列的數(shù),,",(g+1),(k+1));
scanf("%d",(q+l*g+k));
}
multiplication( m, n, h, p, q);
}
void multiplication(int a,int b,int c,int *p,int *q)
{
int i,j;
int k;
int sum;
for(i=0;ia;i++)
{
for(j=0;jc;j++)
{
sum=0;
for(k=0;kb;k++)
{
sum=sum+(*(p+a*i+k))*(*(q+b*k+j));
}
printf("%d ",sum);
}
printf("\n");
}
}
附帶一組測試數(shù)據(jù)
A 3 4
2 1
B 3
4
Result
25
10
結(jié)果正確。
函數(shù)類型是根據(jù)有無返回值判斷的,無返回值就把函數(shù)定義為void類型
如果是單純輸出矩陣那就不用返回了,如果還要傳回主函數(shù)有其它應(yīng)用那就返回吧
如果確定距陣的大小長度,定義兩個二維數(shù)組,用兩個for循環(huán)兩數(shù)據(jù)輸入到內(nèi)存,是每兩個for輸入一個數(shù)組,然后定義另外一個數(shù)組,用來得到結(jié)果距陣,再用三個嵌套的for將結(jié)果放入第三個數(shù)組當(dāng)中,即c[i][j]=a[i][k]+b[k][j],k是在第三重循環(huán),這樣就可以得到要求的距陣,如果不確定大小長度就在輸入語句的每個for循環(huán)的轄區(qū)內(nèi)加一個變量作為標(biāo)記程序運行時求出距陣的大小