童鞋,不知道你是用的什么測(cè)試數(shù)據(jù),在我的機(jī)器上測(cè)試了幾組數(shù)據(jù),結(jié)果都是正確的。
成都創(chuàng)新互聯(lián)主要從事成都做網(wǎng)站、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)淮南,10余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575
重復(fù)下我的測(cè)試代碼。
#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("請(qǐng)輸入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("請(qǐng)輸入a矩陣%d行%d列的數(shù),,",(i+1),(j+1));
scanf("%d",(p+m*i+j));
}
printf("請(qǐng)輸入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("請(qǐng)輸入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");
}
}
附帶一組測(cè)試數(shù)據(jù)
A 3 4
2 1
B 3
4
Result
25
10
結(jié)果正確。
1、程序運(yùn)行輸入數(shù)據(jù)時(shí),第一行為A矩陣的行列數(shù)和B矩陣的行列數(shù),接著分別輸入A、B兩個(gè)矩陣的值。
2、首先,定義6個(gè)整型變量,保存A、B矩陣的行和列,以及控制循環(huán)的變量,k則用于實(shí)現(xiàn)矩陣的乘法。
3、接著,定義三個(gè)整型二維數(shù)組,保存A、B和C矩陣的各元素。
4、輸入三個(gè)矩陣的行數(shù)和列數(shù),保存在變量a、b、c中。
5、輸入矩陣A的各元素,保存在數(shù)組X中。
6、輸入矩陣B的各元素,保存在數(shù)組Y中。
7、將二維數(shù)組Z的各元素,初始化為0。
8、用兩層for循環(huán),控制矩陣的乘法,并輸出乘法所得的結(jié)果。
9、計(jì)算A矩陣和B矩陣的乘法,結(jié)果保存在數(shù)組Z中。
10、最后,輸出乘法所得的結(jié)果,即輸出Z數(shù)組中的所有元素。
11、運(yùn)行程序,輸入矩陣A和B的行數(shù)和列數(shù),以及A矩陣和B矩陣的所有元素,電腦就會(huì)計(jì)算出乘積C矩陣的所有元素,并輸出C矩陣。
函數(shù)類型是根據(jù)有無返回值判斷的,無返回值就把函數(shù)定義為void類型
如果是單純輸出矩陣那就不用返回了,如果還要傳回主函數(shù)有其它應(yīng)用那就返回吧
#includestdio.h
/*
m1和m2為兩個(gè)相加的數(shù)組首元素地址,r和c為兩個(gè)數(shù)組的行數(shù)和列數(shù)
m用于存放結(jié)果。
調(diào)用該函數(shù)時(shí),要求m為有足夠存儲(chǔ)單元、能容納運(yùn)算結(jié)果的數(shù)組首元素地址
*/
void add(int *m,int *m1,int *m2,int r,int c);
void sub(int *m,int *m1,int *m2,int r,int c);
void mult(int *m,int *m1,int *m2,int r,int p,int c);
void disp(int *m,int r,int c);
void main()
{
int a[3][4]={{2,4,6,8},{1,3,5,7},{11,33,44,22}};
int b[3][4]={{2,-4,6,-8},{-1,3,-5,7},{11,-33,-44,22}};
int c[4][3]={{2,4,6},{1,3,5},{1,0,3},{0,2,4}};
int d[3][4]={0};
int e[3][3]={0};
printf("\nA(3x4):\n");
disp(a[0],3,4);
printf("\nB(3x4):\n");
disp(b[0],3,4);
add(d[0],a[0],b[0],3,4);
printf("\nD(3x4)=A+B:\n");
disp(d[0],3,4);
sub(d[0],a[0],b[0],3,4);
printf("\nD(3x4)=A-B:\n");
disp(d[0],3,4);
printf("\nA(3x4):\n");
disp(a[0],3,4);
printf("\nC(4x3):\n");
disp(c[0],4,3);
mult(e[0],a[0],c[0],3,4,3);
printf("\nE(3x3)=A*C:\n");
disp(e[0],3,3);
}
void add(int *m,int *m1,int *m2,int r,int c){
int i,j;
for(i=0; ir; i++)
for(j=0; jc; j++)
*(m+i*c+j) = *(m1+i*c+j) + *(m2+i*c+j);
}
void sub(int *m,int *m1,int *m2,int r,int c){
int i,j;
for(i=0; ir; i++)
for(j=0; jc; j++)
*(m+i*c+j) = *(m1+i*c+j) - *(m2+i*c+j);
}
void mult(int *m,int *m1,int *m2,int r,int p,int c){
int i,j,k,t;
for(i=0; ir; i++)
for(j=0; jc; j++)
{
t=0;
for(k=0; kp; k++)
t += *(m1+i*p+k) * *(m2+k*c+j);
*(m+i*c+j)=t;
}
}
void disp(int *m,int r,int c)
{
int i,j;
for(i=0; ir; i++)
{
for(j=0; jc; j++)
printf("%6d",*(m+i*c+j));
printf("\n");
}
}
網(wǎng)頁(yè)題目:c語(yǔ)言指針矩陣乘法函數(shù) 矩陣的乘法如何用c語(yǔ)言定義
URL網(wǎng)址:http://vcdvsql.cn/article20/ddopijo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、網(wǎng)站策劃、電子商務(wù)、微信小程序、網(wǎng)站維護(hù)、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)