时限:1000ms 内存限制:10000K 总时限:3000ms
描述: 对给定的两个“实数”矩阵,输出它们的乘积。
输入: 输入文件包括多组测试用例,以“0 0 0”标志文件结束,该行无需处理。 每个测试用例第一行为三个正整数m,n,k (1<=m,n,k<=10 ),表示以下m 行为一个m*n 的矩阵A ,再接下来的n 行为n*k 的矩阵B 。每行各元素间用一个空格隔开。
输出: 输出矩阵A 与矩阵B 的乘积C=A*B 。C 中元素一律“四舍五入”保留一位小数。 每个测试用例之间输出一个空行。
输入样例:
2 3 4
1 2 3
4 5 6
1 2 3 4
5 6 7 8
9 10 11 12
1 2 4
2 4
1.1 1.2 1.3 1.4
2.1 2.2 2.3 2.4
0 0 0
输出样例:
38.0 44.0 50.0 56.0
83.0 98.0 113.0 128.0
10.6 11.2 11.8 12.4
#include<stdio.h> #include<math.h> int main() { int i,j,ii; int m,n,k; scanf("%d%d%d",&m,&n,&k); while(m!=0&&n!=0&&k!=0) { double A[10][10]={0},B[10][10]={0},C[10][10]={0}; for(i=0;i<m;i++) for(j=0;j<n;j++) scanf("%lf",&A[i][j]); for(i=0;i<n;i++) for(j=0;j<k;j++) scanf("%lf",&B[i][j]); for(i=0;i<m;i++) for(j=0;j<k;j++) { for(ii=0;ii<n;ii++) C[i][j]+=A[i][ii]*B[ii][j]; } for(i=0;i<m;i++) { for(j=0;j<k-1;j++) printf("%.1lf ",C[i][j]); printf("%.1lf\n",C[i][k-1]); } printf("\n"); scanf("%d%d%d",&m,&n,&k); } return 0; }