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,若程序定义为三行三列的矩阵,并在主函数中键盘赋值。请编写函数juzhen(int a[][3],int n),函数功能是:使矩阵左下角元素中的值乘以.例如:若矩阵中的值为:
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语言编程工具,怎么可以显示不同颜色?

另外这好像就是我原来的那个程序,我想把矩阵乘法单独摘出来,使用时再调用;

参考技术B

你想要的是这样:

#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;

就是漏了初始化……输出的时候敲几个空格,别让数字连在一起。

参考技术C #include<stdio.h>
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语言实现矩阵乘法的主要内容,如果未能解决你的问题,请参考以下文章

C语言之两矩阵乘法的实现

动态规划 - 矩阵链乘法

R语言的一些矩阵运算

求助 c语言实现高精度乘法

大数乘法(C语言实现)

C语言2个数相乘