Description
输入一个m×n的整数矩阵A,再输入一个n×m的整数矩阵B。计算C=A×B。
Input
先输入m和n(m和n均≤10),另起一行后输入一个m×n的整数矩阵A,然后再输入一个n×m的整数矩阵B。每列数据用空格分隔,每行数据用回车分隔。
Output
计算A×B→C,输出矩阵C。
Sample Input
2 3
1 2 3
2 4 6
1 2
3 4
5 6
Sample Output
22 28
44 56
方法一
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int m,n;
while(scanf("%d %d",&n,&m)!=EOF&&n<=10&&m<=10)
{
int a[11][11];
int b[11][11];
int c[11][11];
int i,j;
for(i=0;i<=10;i++){
for(j=0;j<=10;j++){
a[i][j]=0;
b[i][j]=0;
c[i][j]=0;
}
}
for(i=0;i<=n-1;i++){
for(j=0;j<=m-1;j++){
scanf("%d",&a[i][j]);
}
}
for(i=0;i<=m-1;i++){
for(j=0;j<=n-1;j++){
scanf("%d",&b[i][j]);
}
}
int k;
//
// for(i=0;i<=n-1;i++){
//
// for(j=0;j<=m-1;j++){
// c[i][j]=c[i][j]+b[j][i]*a[i][j];
//
// }
//
// }
//
for (i = 0; i<n; i++) //矩阵a与矩阵b相乘
{
for (j = 0; j < n; j++)
{
c[i][j] = 0;
for (k = 0; k < m; k++)
c[i][j] += a[i][k] * b[k][j];
}
}
for (i = 0; i < n; i++) //输出矩阵c
{
for (j = 0; j < n-1; j++)
{
printf("%d ", c[i][j]);
}
printf("%d\n",c[i][j]);
}
}
return 0;
}
方法二
#include<stdio.h>
#include<iostream>
using namespace std;
#define X 3
#define Y 2
#define Z 4
int main()
{
int i, j, k;
int a[X][Y], b[Y][Z], c[X][Z];
for (i = 0; i < X; i++) //输入矩阵a,3行2列
for (j = 0; j < Y; j++)
scanf_s("%d", &a[i][j]);
for (i = 0; i < Y; i++) //输入矩阵b,2行4列
for (j = 0; j < Z; j++)
scanf_s("%d", &b[i][j]);
for (i = 0; i < X; i++) //初始化矩阵c,3行4列
for (j = 0; j < Z; j++)
c[i][j] = 0;
for (i = 0; i<X; i++) //矩阵a与矩阵b相乘
for (j = 0; j < Z; j++)
{
c[i][j] = 0;
for (k = 0; k < Y; k++)
c[i][j] += a[i][k] * b[k][j];
}
for (i = 0; i < X; i++) //输出矩阵c
for (j = 0; j < Z; j++)
printf("%3d", c[i][j]);
system("pause");
return 0;
}