新聞中心
用c語言編寫一個函數(shù)實(shí)現(xiàn)矩陣的叉乘
#includestdio.h
創(chuàng)新互聯(lián)作為成都網(wǎng)站建設(shè)公司,專注成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì),有關(guān)企業(yè)網(wǎng)站建設(shè)方案、改版、費(fèi)用等問題,行業(yè)涉及塑料袋等多個領(lǐng)域,已為上千家企業(yè)服務(wù),得到了客戶的尊重與認(rèn)可。
void matrix(int a[][100],int a1,int a2,int b[][100],int b1,int b2,int c[][100])
{
int i,j,k;
if(a2!=b1)
{
printf("矩陣的維數(shù)錯了!\n");
return;
}
for(i=0;ia1;i++)
{
for(j=0;jb2;j++)
{
c[i][j]=0;
for(k=0;ka2;k++)
c[i][j]+=a[i][k]*b[k][j];
}
}
}
int main()
{
int a1,a2,b1,b2,a[100][100],b[100][100],c[100][100],i,j;
printf("輸入矩陣一的行數(shù)和列數(shù)(不超過100):\n");
scanf("%d%d",a1,a2);
for(i=0;ia1;i++)
{
for(j=0;ja2;j++)
scanf("%d",a[i][j]);
}
printf("輸入矩陣一的行數(shù)和列數(shù)(不超過100):\n");
scanf("%d%d",b1,b2);
for(i=0;ib1;i++)
{
for(j=0;jb2;j++)
scanf("%d",b[i][j]);
}
matrix(a,a1,a2,b,b1,b2,c);
printf("結(jié)果:\n");
for(i=0;ia1;i++)
{
for(j=0;jb2;j++)
printf("%d ",c[i][j]);
printf("\n");
}
return 0;
}
c語言 矩陣相乘
#include fstream
#include IOMANIP
#include stdio.h
using namespace std;
void input_data(float b[][50])
{
int r,l;
for(int i=0;i3;i++)
{
for(int j=0;j3;j++)
{
printf("\n第%d個元素為:",i*3+j+1);//去掉b[i][j]
scanf("%f",b[i][j]);
}
}
printf("輸入完畢!\n");
}
void output_data(float b[][50])
{
int r,l;
for(int i=0;i3;i++)
{
for(int j=0;j3;j++)
{
printf("%f ",b[i][j]);
}
printf("\n");
}
}
void multiply(float M[50][50],float N[50][50],float J[50][50])
{
float sum;
int l=3;
int l1=3;//都是三乘三的吧,方陣
int k=3;//K賦初值
for(int i=0;ik;i++)
{
for( k=0;kl;k++)
{
sum=0;//賦初值
for(int j=0;jl1;j++)
{
sum+=M[i][j]*N[j][k];
}
J[i][k]=sum;
sum=0;
}
}
}
void main()
{
float A[50][50];
float B[50][50];
float C[50][50]={0};//賦初值
input_data(A);
output_data(A);
multiply(A,A,C);
output_data(C);
}//1 2 3 4 5 6 7 8 9
用c語言實(shí)現(xiàn)兩個矩陣相乘怎么做?
1、程序運(yùn)行輸入數(shù)據(jù)時(shí),第一行為A矩陣的行列數(shù)和B矩陣的行列數(shù),接著分別輸入A、B兩個矩陣的值。
2、首先,定義6個整型變量,保存A、B矩陣的行和列,以及控制循環(huán)的變量,k則用于實(shí)現(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、計(jì)算A矩陣和B矩陣的乘法,結(jié)果保存在數(shù)組Z中。
10、最后,輸出乘法所得的結(jié)果,即輸出Z數(shù)組中的所有元素。
11、運(yùn)行程序,輸入矩陣A和B的行數(shù)和列數(shù),以及A矩陣和B矩陣的所有元素,電腦就會計(jì)算出乘積C矩陣的所有元素,并輸出C矩陣。
C語言實(shí)現(xiàn)矩陣乘法
1,若程序定義為三行三列的矩陣,并在主函數(shù)中鍵盤賦值。請編寫函數(shù)juzhen(int a[][3],int n),函數(shù)功能是:使矩陣左下角元素中的值乘以.例如:若矩陣中的值為:
1 9 7
2 3 8
4 5 6
n=3,則矩陣值變?yōu)椋?/p>
1 9 7
6 9 8
12 15 18
注:二維數(shù)組下三角元素每行最后元素的列標(biāo)和該列的列號一致
#include stdio.h
int juzhen(int a[][3],int n)
{
int i,j;
for (i=1;i3;i++)
for (j=0;j=i;j++)
a[i][j]=a[i][j]*n;
}
main()
{
int i,j,a[3][3],m;
clrscr();
printf("please enter 9 numbers :\n");
for (i=0;i3;i++)
for (j=0;j3;j++)
scanf("%d",a[i][j]);
printf("the old ju zhen is:\n");
for (i=0;i3;i++)
{
for (j=0;j3;j++)
printf("%3d",a[i][j]);
printf("\n");
}
printf("please enter a int number:\n");
scanf("%d",m);
juzhen (a,m);
printf("the new ju zhen is:\n");
for (i=0;i3;i++)
{
for (j=0;j3;j++)
printf("%3d",a[i][j]);
printf("\n");
}
}
2,請編寫函數(shù)juzhen,該函數(shù)的功能是:將三行四列矩陣x乘以四行三列矩陣y,結(jié)果放在三行三列矩陣中。矩陣相乘的基本方法是:矩陣Xy中行列下標(biāo)分別為i,j的元素的值,是矩陣X中第i行上四個元素與矩陣Y中第j列上四個元素對應(yīng)相乘的積。
X和Y矩陣原型可運(yùn)行后看到!
#include conio.h
#include stdio.h
void juzhen (int a[3][4],int b[4][3],int ab[3][3])
{
int i,j,z;
for (i=0;i3;i++)
for (j=0;j4;j++)
for (z=0;z3;z++)
ab[i][z]=ab[i][z]+a[i][j]*b[j][z];/*此得為要填寫的內(nèi)容*/
}
main()
{
int x[3][4]={1,0,1,1,2,1,0,1,1,2,0,3};
int y[4][3]={1,1,1,0,0,0,2,1,1,1,1,3};
int xy[3][3]={0},i,j;
clrscr();
juzhen (x,y,xy);
printf("x ju zhen is:\n");
for (i=0;i3;i++)
{
for (j=0;j4;j++)
printf("%3d",x[i][j]);
printf("\n");
}
printf("y ju zhen is:\n");
for (i=0;i4;i++)
{
for (j=0;j3;j++)
printf("%3d",y[i][j]);
printf("\n");
}
printf("xy ju zhen is:\n");
for (i=0;i3;i++)
{
for (j=0;j3;j++)
printf("%3d",xy[i][j]);
printf("\n");
}
}
由于你沒有說要求,我就寫了兩個,這是兩道比較精典的求c語言矩陣乘法程序
用C語言寫一個兩個矩陣相乘的函數(shù)
自己看看吧,可以同時(shí)都換成注釋的行,有助于你理解參數(shù)傳遞
:)======================================================
#includestdio.h
#define M 5
#define P 4
#define N 3
void mltp(float (*a)[P],float (*b)[N],float (*c)[N])
//void mltp(float *a,float *b,float *c)
{
for(int i=0;iM;i++)
for(int j=0;jN;j++)
for(int k=0;kP;k++)
c[i][j]+=a[i][k]*b[k][j];
//c[i*N+j]+=a[i*P+k]*b[k*N+j];
}
void main()
{
int i,j;
float a[M][P],b[P][N];
float c[M][N]={0};
printf("plz input a,b:\n");
for(i=0;iM;i++)
for(j=0;jP;j++)
scanf("%f",a[i][j]);
for(i=0;iP;i++)
for(j=0;jN;j++)
scanf("%f",b[i][j]);
mltp(a,b,c);
//mltp(a[0][0],b[0][0],c[0][0]);//等
//mltp((float*)a,(float*)b,(float*)c);//價(jià)
printf("result is:\n");
for(i=0;iM;i++)
{
for(j=0;jN;j++)
printf("%f\t",c[i][j]);
printf("\n");
}
}
C語言關(guān)于矩陣乘法的函數(shù),,
童鞋,不知道你是用的什么測試數(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é)果正確。
本文標(biāo)題:矩陣叉乘c語言子函數(shù),矩陣的叉乘運(yùn)算法則
當(dāng)前URL:http://www.dlmjj.cn/article/hdeiji.html