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

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;
}
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值