当前位置:编程学习 > C/C++ >>

用C语言求任意两个矩阵的乘积的子程序

输入矩阵的行数、列数和元素值,可以求得两矩阵乘积。
答案:#include <stdio.h>
#include "stdlib.h"
void pr(int **a,int m,int n)
{
 int i,j;
 printf("\n");
 for(i=0;i<m;i++)
 {
  for(j=0;j<n;j++)printf("%5d",a[i][j]);
  printf("\n");
 }
 printf("\n");
}
void AB(int **a,int m1,int n1,int **b,int m2,int n2,int **c)
{
 int i,j,k;
 for(i=0;i<m1;i++)
  for(j=0;j<n2;j++)
   for(k=0;k<n1;k++)
    c[i][j]+=a[i][k]*b[k][j];
}

void main()
{
 int **a,**b,**c,m1,n1,m2,n2;
 int i,j;
 printf("输入第一个矩阵的行数列数:");
 scanf("%d%d",&m1,&n1);
 printf("输入第二个矩阵的行数列数:");
 scanf("%d%d",&m2,&n2);
 if(n1!=m2)
 {
  printf("第一个矩阵的列必须等于第二个矩阵的行数!");
  return;
 }
 //建立A矩阵
 a=(int **)calloc(m1,sizeof(int));
 for(i=0;i<m1;i++)
  a[i]=(int *)calloc(n1,sizeof(int));
 printf("A:输入%d个整数:",m1*n1);
 for(i=0;i<m1;i++)
  for(j=0;j<n1;j++)
   scanf("%d",&a[i][j]);
 //建立B矩阵
 b=(int **)calloc(m2,sizeof(int));
 for(i=0;i<m2;i++)
  b[i]=(int *)calloc(n2,sizeof(int));

 printf("B:输入%d个整数:",m2*n2);
 for(i=0;i<m2;i++)
  for(j=0;j<n2;j++)
   scanf("%d",&b[i][j]);
 //建立C矩阵
 c=(int **)calloc(m1,sizeof(int));
 for(i=0;i<m1;i++)
  c[i]=(int *)calloc(n2,sizeof(int));
 AB(a,m1,n1,b,m2,n2,c);
 printf("A:\n");
 pr(a,m1,n1);
 printf("B:\n");
 pr(b,m2,n2);
 printf("C=AB\n");
 pr(c,m1,n2);

}

上一个:求一个C语言程序。很急。谢谢!积分多多。
下一个:c语言中,形参和实参是什么意思?有什么区别?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,