首页 > 编程知识 正文

矩阵相乘编程C语言,矩阵的乘法c语言

时间:2023-05-06 13:59:25 阅读:214574 作者:4351

C语言实现一个矩阵乘法计算器

虽然一般做练习题的时候具体的矩阵最多四阶左右,但是作为实现该功能的代码最好不要局限于此。由于矩阵乘法的运算要求,第二个矩阵的行数必须与第一个矩阵的列数相等,且两个矩阵的行列数均不可小于或等于0,该算法会先要求输入第一个矩阵的行数与列数,然后按行输入矩阵的元素,接着输入第二个矩阵的行数与列数,判断是否符合要求,然后同样按行输入矩阵元素。然后就可以得到结果。

虽然还有很多可以改进的地方,比如把输入矩阵做成函数以简化代码,另外当时只是一边构思一边编写代码,所以命名极不规范,建议初学者不要养成这样的习惯。不过本人确实是初学者,目的只是实现这样一个小功能,细枝末节的地方暂不深究。

具体代码如下(请不要吐槽我混乱的代码风格)

#include <stdio.h>int main(void){ int m,n; //输入第一个矩阵的规格 printf("请输入第一个矩阵的行数和列数:n"); scanf("%d %d",&m,&n); if(m<=0||n<=0) //判断 m,n的值是否有效,如果无效重新输入 { printf("不可小于或等于0!n"); printf("请重新输入第一个矩阵的行数和列数:"); scanf("%d %d",&m,&n); } printf("请输入第一个矩阵的元素:n"); //输入第一个矩阵的元素 int array1[m][n]; int x_1; int i_1,j_1; for(i_1=0;i_1<m;i_1++) { for(j_1=0;j_1<n;j_1++) { scanf("%d",&x_1); array1[i_1][j_1]=x_1; } } int p,q; //输入第二个矩阵的规格 printf("请输入第二个矩阵的行数和列数:n"); scanf("%d %d",&p,&q); if(p<=0||q<=0) //判断 m,n的值是否有效,如果无效重新输入 { printf("不可小于或等于0!n"); printf("请重新输入第一个矩阵的行数和列数:n"); scanf("%d %d",&p,&q); } if(p!=n) //判断第二个矩阵的行数是否等于第一个矩阵的列数 如果不等则重新输入第二个矩阵的行列数 { printf("第二个矩阵的行数应等于第一个矩阵的列数!n"); printf("请重新输入第二个矩阵的行数和列数:n"); scanf("%d %d",&p,&q); } int array2[p][q]; int x_2; int i_2,j_2; printf("请输入第二个矩阵的元素:n"); //输入第二个矩阵的元素 for(i_2=0;i_2<p;i_2++) { for(j_2=0;j_2<q;j_2++) { scanf("%d",&x_2); array2[i_2][j_2]=x_2; } } int array3[m][q]; //定义第三个矩阵 int i_3,j_3; int i; int sum=0; for(i_3=0;i_3<m;i_3++) { for(j_3=0;j_3<q;j_3++) { for(i=0;i<n;i++) { sum=sum+array1[i_3][i]*array2[i][j_3]; //对前两个矩阵进行运算,讲结果保存在第三个矩阵里 array3[i_3][j_3]=sum; } sum=0; } } printf("两个矩阵相乘得到的结果为:n"); for(i_3=0;i_3<m;i_3++) //输出结果矩阵 { for(j_3=0;j_3<q;j_3++) { printf("%dt",array3[i_3][j_3]); } printf("n"); } return 0;}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。