真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

求矩陣的乘積c語言函數(shù) c語言矩陣相乘函數(shù)

C語言怎么求矩陣的乘積呢?

語言只提供+,-,*,/等低級(jí)運(yùn)算功能,高級(jí)的都必須代碼實(shí)現(xiàn),包括次方開放運(yùn)算,都是編寫代碼實(shí)現(xiàn)。 你學(xué)過矩陣乘法,這就很容易,你需要定義一個(gè)結(jié)構(gòu)體,作為矩陣。。。。

我們提供的服務(wù)有:網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、承德ssl等。為1000+企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的承德網(wǎng)站制作公司

矩陣很簡(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,沒有的話你就不知道夠不夠(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è)元素,那你只要求出所有的元素就得到新矩陣了。

不過因?yàn)槭荂語言,你要考慮內(nèi)存,m3也許內(nèi)存不夠長(zhǎng),你必須要做一下內(nèi)存長(zhǎng)度判斷,不夠長(zhǎng)要申請(qǐng),否則就報(bào)錯(cuò)沒法用了。。。所以size這個(gè)成員也是必須的。。

不過話說回來,如果是用C++,只要你寫一個(gè)矩陣類,重載運(yùn)算符 * ,你就可以用

m3=m1*m2; 這樣運(yùn)算,書寫更方便,但C語言沒這好事。

c語言矩陣的乘法

#includestdio.h

typedef struct

{

int m;

int n;

int array[100][100];

}Ju_def;

int main()

{

Ju_def Ju[11];

int i=0,m,n,k;

int flag[10];

while(1)

{

flag[i]=0;

printf("In put m and n:\n");

scanf("%d%d",Ju[i].m,Ju[i].n);

while(Ju[i].m=0||Ju[i].m100||Ju[i].n=0||Ju[i].m100)

{

printf("In put m and n again:\n");

scanf("%d%d",Ju[i].m,Ju[i].n);

}

printf("In put your array:\n");

for(m=0;mJu[i].m;m++)

{

for(n=0;nJu[i].n;n++)

{

scanf("%d",Ju[i].array[m][n]);

if(Ju[i].array[m][n]==0)

flag[i]++;

}

}

if(flag[i]==(Ju[i].m*Ju[i].n))//矩陣元素全為0才退出循環(huán)

{

flag[i]=1;

break;

}

else

flag[i]=0;

i++;

i=i%10;//超過10個(gè)矩陣,則又循環(huán)到第1個(gè)。

}

for(i=1;i10;i++)

{

if((Ju[i].m!=Ju[0].n)(flag[i]==0))

{

printf("Not satisfied the definition of matrix multiplication !\n");

return 0;

}

if(flag[i])

{

break;

}

for(m=0;mJu[0].m;m++)

{

for(n=0;nJu[0].n;n++)

{

Ju[10].array[m][n]=0;

for(k=0;kJu[i].m;k++)

{

Ju[10].array[m][n]+=Ju[0].array[m][n]*Ju[i].array[k][n];

}

Ju[0].array[m][n]=Ju[10].array[m][n];

}

}

}

for(m=0;mJu[0].m;m++)

{

for(n=0;nJu[0].n;n++)

{

printf("%-8d",Ju[0].array[m][n]);

}

printf("\n");

}

}

你試試這個(gè)我的矩陣乘法是這樣的了,A=A*B*C...(10個(gè)以內(nèi))。

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;

}

C語言求兩矩陣乘積

#include?"stdio.h"

#define?LANGA?4

#define?LANGB?3

#define?LANGC?LANGB

int?multi(double?A[][LANGA],double?B[][LANGB],double?C[][LANGC],int?langa,int?langb,int?langc){

int?i,j,k;

if(langa==LANGB??langb==LANGA){

for(i=0;ilanga;i++)

for(j=0;jlangc;j++)

for(C[i][j]=k=0;klangb;k++)

C[i][j]+=A[i][k]*B[k][j];

return?0;

}

return?-1;

}

int?main(int?argv,char?*argc[]){

double?A[LANGB][LANGA],B[LANGA][LANGB],C[LANGB][LANGC];

int?i,j;

for(i=0;iLANGB;i++)

for(j=0;jLANGA;A[i][j++]=1.0/(i+j+1));

for(i=0;iLANGA;i++)

for(j=0;jLANGB;B[i][j]=1.0+j++);

if(multi(A,B,C,LANGB,LANGA,LANGB))

return?-1;

for(i=0;iLANGB;i++){

for(j=0;jLANGC;printf("%12.4le",C[i][j++]));

printf("\n");

}

return?0;?

}

運(yùn)行樣例:

C語言編程求矩陣乘積。

#include"stdio.h"

void?main()

{

int?a[3][2],b[2][3],c[3][3];

int?i,j,k;

for(i=0;i3;i++)//輸入

{

for(j=0;j2;j++)

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

}

for(i=0;i2;i++)//輸入

{

for(j=0;j3;j++)

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

}

for(i=0;i3;i++)//計(jì)算

{

for(j=0;j3;j++)

{

c[i][j]=0;//初始化c

for(k=0;k2;k++)

c[i][j]+=a[i][k]*b[k][j];

}

}

for(i=0;i3;i++)//輸出

{

for(j=0;j3;j++)

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

printf("\n");

}

}

C語言中兩矩陣相乘

#include stdio.h

int main()

{

int x,y,z;

int i,j,l;

int sum=0;

printf("請(qǐng)輸入前一個(gè)矩陣的行數(shù),列數(shù)與后一個(gè)矩陣的列數(shù):\n");

scanf("%d %d %d",x,y,z);

int a[x][y];

int b[y][z];

int c[x][z];

//讀入矩陣

printf("請(qǐng)輸入矩陣a:\n");

for(i=0;ix;i++){

for(j=0;jy;j++){

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

}

}

printf("請(qǐng)輸入矩陣b:\n");

for(i=0;iy;i++){

for(j=0;jz;j++){

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

}

}

printf("矩陣a為:\n");

for(i=0;ix;i++){

for(j=0;jy;j++){

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

if(j==y-1)

printf("\n");

else

printf("\t");

}

}

printf("矩陣b為:\n");

for(i=0;iy;i++){

for(j=0;jz;j++){

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

if(j==z-1)

printf("\n");

else

printf("\t");

}

}

for(i=0;ix;i++){

for(l=0;lz;l++){

for(j=0;jy;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;ix;i++){

for(j=0;jz;j++){

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

if(j==z-1)

printf("\n");

else

printf("\t");

}

}

return 0;

}


網(wǎng)頁標(biāo)題:求矩陣的乘積c語言函數(shù) c語言矩陣相乘函數(shù)
分享鏈接:http://weahome.cn/article/hpsgoj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部