主题:遇到问题了,高人帮帮忙啊
小弟刚来什么也不懂,不要笑话我啊。一道c的题目。
题目要求如下:
题目描述:
求两个矩阵A、B的乘积C=AB。根据矩阵乘法的定义,只有A的列数和B的行数相同才能相乘。可以确保所有运算结果都在int类型的范围之内。
输入要求:
输入数据为多个矩阵(最少2个),每个矩阵以两个正整数m和n开始,满足0<m,n<=100,接下来为一个m行n列的矩阵A。当输入的m和n均为0时,表示输入数据结束。
输出要求:
对输入的矩阵两两相乘:第1个和第2个相乘、第1个和第2个相乘的结果和第3个相乘……按顺序输出矩阵相乘的结果:每行两个元素之间用一个空格分开,每行最后一个元素之后为一个换行,在下一行开始输出矩阵的下一行。
若前k个矩阵相乘的结果和第k+1个矩阵无法相乘(即不满足矩阵乘法定义),则输出“Not satisfied the definition of matrix multiplication!”。然后用第k+1个矩阵去和第k+2个矩阵相乘。最后一个矩阵只做乘数。
每两组输出之间用一个空行分隔开。
输入样例:
2 3
1 1 1
1 1 1
3 3
1 2 3
4 5 6
7 8 9
3 1
0
0
0
0 0
输出样例:
12 15 18
12 15 18
0
0
小弟的程序,望大侠纠正。
#include<stdio.h>
int matrix(int m,int n,int a[100][100])
{
int j,i;
for(j=0; j<m; j++)
for(i=0; i<n; i++)
scanf("%d",&a[j][i]);
return 0;
}
int cpymatrix(int m,int n,int a[100][100],int b[100][100])
{
int j,i;
for(j=0; j<m; j++)
for(i=0; i<n; i++)
a[j][i]=b[j][i];
return 0;
}
int mulmatrix(int mi,int m,int n,int a[100][100],int b[100][100])
{
int j,i,jj;
int c[100][100]= {0};
for(j=0; j<mi; j++)
{
for(i=0; i<n; i++)
{
for(jj=0; jj<m; jj++)
{
c[j][i]+=a[j][jj]*b[jj][i];
}
}
}
cpymatrix(mi,n,a,c);
return 0;
}
int putmatrix(int mi,int n,int a[100][100])
{
int j,i;
for(j=0; j<mi; j++)
{
printf("%d",a[j][0]);
for(i=1; i<n; i++)
printf(" %d",a[j][i]);
printf("\n");
}
return 0;
}
int main()
{
int m,n,t=0,mi=-1,ni=-1;
int a[100][100]= {0},b[100][100]= {0};
for(; scanf("%d%d",&m,&n);)
{
if(m==0&&n==0)
break;
if(t==0)
{
matrix(m,n,a);
mi=m;
ni=n;
}
else
{
matrix(m,n,b);
}
if(ni==m&&t!=0)
{
mulmatrix(mi,m,n,a,b);
putmatrix(mi,n,a);
printf("\n");
ni=n;
}
else if(t!=0)
{
cpymatrix(m,n,a,b);
mi=m;
ni=n;
printf("Not satisfied the definition of matrix multiplication!\n\n");
}
t=1;
}
return 0;
}
题目要求如下:
题目描述:
求两个矩阵A、B的乘积C=AB。根据矩阵乘法的定义,只有A的列数和B的行数相同才能相乘。可以确保所有运算结果都在int类型的范围之内。
输入要求:
输入数据为多个矩阵(最少2个),每个矩阵以两个正整数m和n开始,满足0<m,n<=100,接下来为一个m行n列的矩阵A。当输入的m和n均为0时,表示输入数据结束。
输出要求:
对输入的矩阵两两相乘:第1个和第2个相乘、第1个和第2个相乘的结果和第3个相乘……按顺序输出矩阵相乘的结果:每行两个元素之间用一个空格分开,每行最后一个元素之后为一个换行,在下一行开始输出矩阵的下一行。
若前k个矩阵相乘的结果和第k+1个矩阵无法相乘(即不满足矩阵乘法定义),则输出“Not satisfied the definition of matrix multiplication!”。然后用第k+1个矩阵去和第k+2个矩阵相乘。最后一个矩阵只做乘数。
每两组输出之间用一个空行分隔开。
输入样例:
2 3
1 1 1
1 1 1
3 3
1 2 3
4 5 6
7 8 9
3 1
0
0
0
0 0
输出样例:
12 15 18
12 15 18
0
0
小弟的程序,望大侠纠正。
#include<stdio.h>
int matrix(int m,int n,int a[100][100])
{
int j,i;
for(j=0; j<m; j++)
for(i=0; i<n; i++)
scanf("%d",&a[j][i]);
return 0;
}
int cpymatrix(int m,int n,int a[100][100],int b[100][100])
{
int j,i;
for(j=0; j<m; j++)
for(i=0; i<n; i++)
a[j][i]=b[j][i];
return 0;
}
int mulmatrix(int mi,int m,int n,int a[100][100],int b[100][100])
{
int j,i,jj;
int c[100][100]= {0};
for(j=0; j<mi; j++)
{
for(i=0; i<n; i++)
{
for(jj=0; jj<m; jj++)
{
c[j][i]+=a[j][jj]*b[jj][i];
}
}
}
cpymatrix(mi,n,a,c);
return 0;
}
int putmatrix(int mi,int n,int a[100][100])
{
int j,i;
for(j=0; j<mi; j++)
{
printf("%d",a[j][0]);
for(i=1; i<n; i++)
printf(" %d",a[j][i]);
printf("\n");
}
return 0;
}
int main()
{
int m,n,t=0,mi=-1,ni=-1;
int a[100][100]= {0},b[100][100]= {0};
for(; scanf("%d%d",&m,&n);)
{
if(m==0&&n==0)
break;
if(t==0)
{
matrix(m,n,a);
mi=m;
ni=n;
}
else
{
matrix(m,n,b);
}
if(ni==m&&t!=0)
{
mulmatrix(mi,m,n,a,b);
putmatrix(mi,n,a);
printf("\n");
ni=n;
}
else if(t!=0)
{
cpymatrix(m,n,a,b);
mi=m;
ni=n;
printf("Not satisfied the definition of matrix multiplication!\n\n");
}
t=1;
}
return 0;
}