1、程序運(yùn)行輸入數(shù)據(jù)時(shí),第一行為A矩陣的行列數(shù)和B矩陣的行列數(shù),接著分別輸入A、B兩個(gè)矩陣的值。
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到磐石網(wǎng)站設(shè)計(jì)與磐石網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:做網(wǎng)站、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋磐石地區(qū)。
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矩陣。
#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("兩矩陣相乘,左矩陣的列數(shù)與右矩陣的行數(shù)必須相等。\n");
return?0;
}
int?c;
tmp.m_Mat?=?new?double?*[tmp.m_Rows];
for(int?i?=?0;i??tmp.m_Rows;i++)?tmp.m_Mat[i]?=?new?double[tmp.m_Cols];
for(i?=?0;?i??m;?++i)?{
for(j?=?0;?j??n;?++j)?{
c[i][j]?=?0;
for(k?=?0;?k??t;?++k)
c[i][j]?+=?c[i][k]?*?c[k][j];
}
}
return?1;
}
如果確定距陣的大小長(zhǎng)度,定義兩個(gè)二維數(shù)組,用兩個(gè)for循環(huán)兩數(shù)據(jù)輸入到內(nèi)存,是每?jī)蓚€(gè)for輸入一個(gè)數(shù)組,然后定義另外一個(gè)數(shù)組,用來(lái)得到結(jié)果距陣,再用三個(gè)嵌套的for將結(jié)果放入第三個(gè)數(shù)組當(dāng)中,即c[i][j]=a[i][k]+b[k][j],k是在第三重循環(huán),這樣就可以得到要求的距陣,如果不確定大小長(zhǎng)度就在輸入語(yǔ)句的每個(gè)for循環(huán)的轄區(qū)內(nèi)加一個(gè)變量作為標(biāo)記程序運(yùn)行時(shí)求出距陣的大小
語(yǔ)言只提供+,-,*,/等低級(jí)運(yùn)算功能,高級(jí)的都必須代碼實(shí)現(xiàn),包括次方開放運(yùn)算,都是編寫代碼實(shí)現(xiàn)。 你學(xué)過(guò)矩陣乘法,這就很容易,你需要定義一個(gè)結(jié)構(gòu)體,作為矩陣。。。。
矩陣很簡(jiǎn)單,行數(shù),列數(shù),元素。
typedef struct {
uint r,c;
float *d;
int size;
}matrix;
分別是行數(shù),列數(shù),數(shù)據(jù)指針,和數(shù)據(jù)最大長(zhǎng)度。數(shù)據(jù)最好用指針不用數(shù)組,是因?yàn)樵黾屿`活性,你只需要?jiǎng)討B(tài)申請(qǐng)內(nèi)存即可讓你的矩陣大小可變,數(shù)組長(zhǎng)度不可變。最后一個(gè)參數(shù)代表內(nèi)存長(zhǎng)度,最好是要有,方便你重新定義數(shù)組時(shí)看內(nèi)存夠不夠,不夠可以realloc,沒(méi)有的話你就不知道夠不夠(5*4的矩陣,乘以 4*5 矩陣必然變成5*5矩陣,賦值到新矩陣結(jié)構(gòu)體里,如果還是20個(gè)單位,顯然裝不下,必須realloc,所以該參數(shù)必須有)。。。
你只要實(shí)現(xiàn)個(gè)函數(shù) int mul(matrix *m1,*m2,*m3)即可,m1,m2分別為左右 矩陣,m3為結(jié)果。
按照運(yùn)算法則,你必須完成兩件事,判斷m1,m2是否可以相乘,不可以相乘返回一個(gè)錯(cuò)誤(比如返回-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的一個(gè)元素,那你只要求出所有的元素就得到新矩陣了。
不過(guò)因?yàn)槭荂語(yǔ)言,你要考慮內(nèi)存,m3也許內(nèi)存不夠長(zhǎng),你必須要做一下內(nèi)存長(zhǎng)度判斷,不夠長(zhǎng)要申請(qǐng),否則就報(bào)錯(cuò)沒(méi)法用了。。。所以size這個(gè)成員也是必須的。。
不過(guò)話說(shuō)回來(lái),如果是用C++,只要你寫一個(gè)矩陣類,重載運(yùn)算符 * ,你就可以用
m3=m1*m2; 這樣運(yùn)算,書寫更方便,但C語(yǔ)言沒(méi)這好事。
童鞋,不知道你是用的什么測(cè)試數(shù)據(jù),在我的機(jī)器上測(cè)試了幾組數(shù)據(jù),結(jié)果都是正確的。
重復(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é)果正確。
函數(shù)類型是根據(jù)有無(wú)返回值判斷的,無(wú)返回值就把函數(shù)定義為void類型
如果是單純輸出矩陣那就不用返回了,如果還要傳回主函數(shù)有其它應(yīng)用那就返回吧
名稱欄目:c語(yǔ)言關(guān)于矩陣乘積的函數(shù),c語(yǔ)言中乘積函數(shù)
URL地址:http://muchs.cn/article6/hcgsig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、電子商務(wù)、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈、商城網(wǎng)站、虛擬主機(jī)
聲明:本網(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í)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容