C语言实现矩阵乘法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言实现矩阵乘法相关的知识,希望对你有一定的参考价值。
如何构造一个函数,将矩阵作为函数参数,实现矩阵的乘法,该函数只是程序的一部分。
#include<stdio.h>
int p,q,k;
void main()
float A[2][2]=1,1,2,1,B[2][1]=2,1;
float C[2][1]=0;
printf("矩阵A*矩阵B为:\n"); //计算两个矩阵相乘;以[2][2]*[2][1]为例
for(p=0;p<2;++p)
for(q=0;q<1;++q)
for(k=0;k<2;++k)
C[p][q]+=A[p][k]*B[k][q];
for(p=0;p<2;p++)
for(q=0;q<1;q++)
printf("%f",C[p][q]);
printf("\n");
这是C语言矩阵的乘法程序。希望高手可以将其转化为子函数调用的形式,最后把得到的结果返回。
1 9 7
2 3 8
4 5 6
n=3,则矩阵值变为:
1 9 7
6 9 8
12 15 18
注:二维数组下三角元素每行最后元素的列标和该列的列号一致
#include <stdio.h>
int juzhen(int a[][3],int n)
int i,j;
for (i=1;i<3;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;i<3;i++)
for (j=0;j<3;j++)
scanf("%d",&a[i][j]);
printf("the old ju zhen is:\n");
for (i=0;i<3;i++)
for (j=0;j<3;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;i<3;i++)
for (j=0;j<3;j++)
printf("%3d",a[i][j]);
printf("\n");
2,请编写函数juzhen,该函数的功能是:将三行四列矩阵x乘以四行三列矩阵y,结果放在三行三列矩阵中。矩阵相乘的基本方法是:矩阵Xy中行列下标分别为i,j的元素的值,是矩阵X中第i行上四个元素与矩阵Y中第j列上四个元素对应相乘的积。
X和Y矩阵原型可运行后看到!
#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;i<3;i++)
for (j=0;j<4;j++)
for (z=0;z<3;z++)
ab[i][z]=ab[i][z]+a[i][j]*b[j][z];/*此得为要填写的内容*/
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;i<3;i++)
for (j=0;j<4;j++)
printf("%3d",x[i][j]);
printf("\n");
printf("y ju zhen is:\n");
for (i=0;i<4;i++)
for (j=0;j<3;j++)
printf("%3d",y[i][j]);
printf("\n");
printf("xy ju zhen is:\n");
for (i=0;i<3;i++)
for (j=0;j<3;j++)
printf("%3d",xy[i][j]);
printf("\n");
由于你没有说要求,我就写了两个,这是两道比较精典的求c语言矩阵乘法程序 参考技术A #include<stdio.h>
int p,q,k;
void main()
float A[2][2]=1,1,2,1,B[2][1]=2,1;
float C[2][1]=0;
printf("矩阵A*矩阵B为:\\n"); //计算两个矩阵相乘;以[2][2]*[2][1]为例
for(p=0;p<2;++p)
for(q=0;q<1;++q)
for(k=0;k<2;++k)
C[p][q]+=A[p][k]*B[k][q];
for(p=0;p<2;p++)
for(q=0;q<1;q++)
printf("%f",C[p][q]);
printf("\\n");
追问
你用的什么C语言编程工具,怎么可以显示不同颜色?
另外这好像就是我原来的那个程序,我想把矩阵乘法单独摘出来,使用时再调用;
你想要的是这样:
#include<stdio.h>int main()
int a[2][2]= 1, 1, 2, 0;
int b[2][3]= 0, 2, 3, 1, 1, 2;
int i, j, k, s[2][3];
for(i=0; i<2; i++)
for( j=0; j<3; j++)
s[i][j]=0;//这里初始化就好了!
for( k=0; k<2; k++)
s[i][j]=s[i][j]+a[i][k]*b[k][j];
for(i=0;i<2;i++)
for(j=0;j<3;j++)
printf("%d ",s[i][j]);
if(j==2)
printf("\\n");
return 0;
就是漏了初始化……输出的时候敲几个空格,别让数字连在一起。
int p, q, k;
int fun(float A[][2], float B[][1])
float C[2][1] = 0 ;
for (p = 0; p < 2; ++p)
for (q = 0; q < 1; ++q)
for (k = 0; k < 2; ++k)
C[p][q] += A[p][k] * B[k][q];
for (p = 0; p < 2; p++)
for (q = 0; q < 1; q++)
printf("%f", C[p][q]);
printf("\n");
return 0;
int main()
float A[2][2] = 1, 1, 2, 1 , B[2][1] = 2, 1;
printf("矩阵A*矩阵B为:\n"); // 计算两个矩阵相乘;以[2][2]*[2][1]为例
fun(A, B);
system("pause");
return0;
祝你愉快!追问
能不能把相乘所得结果返回呢,就是返回main函数。
追答那你吧fun函数里的return 0;改为return C;就可以了。
本回答被提问者采纳以上是关于C语言实现矩阵乘法的主要内容,如果未能解决你的问题,请参考以下文章