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("%d\t",array3[i_3][j_3]);}printf("\n");}return 0;}