一道C语言题,求矩阵乘法

第一行三个整数为m、n、p(m、n、p均小于10),从第二行开始为m行n列A矩阵,然后为n行p列的B矩阵。所有数据之间均由一个空格分隔。
#include <stdio.h>
void main()
{
int m,n,p,x,y,z,sum;
int a[10][10];
int b[10][10];
int c[10][10];
x=0;y=0;z=0;sum=0;
scanf("%d" "%d" "%d",&m,&n,&p);
for(x=0;x<m;x++)
{for(y=0;y<n;n++)
{scanf("%d",&a[x][y]);}}

for(y=0;y<n;y++)
{for(z=0;z<p;z++)
{scanf("%d",b[y][z]);}}

for(x=0;x<m;x++)
{for(z=0;z<p;z++)
{for(y=0;y<n;y++)
{c[x][z]=a[x][y]+b[y][z];
sum+=c[x][z];}
c[x][z]=sum;
printf("%d",c[x][z]);

}
}

}
运行没反应,问哪儿出错了

第1个回答  2011-12-12
#include <stdio.h>

void multi(int a[][4],int b[][3],int c[][3]) { //注意数组只能省略第一维的大小
int *pa,*pb,*pc,sum,i,j,k;
for(pc = c[0], i = 0; i < 3; i++) { //c[0]为数组c的首地址
for(j = 0; j < 3; j++) {
pa = a[i]; //让pa指向数组a第i+1行开头
pb = &b[0][j]; //让pb指向数组b第j+1列开头
sum = 0;
for(k = 0; k < 4; k++) {
sum += (*pa) * (*pb);
pa++; //让pa指向该行第二个元素
pb += 3; //让pb指向该列第二个元素
} //for
*pc++ = sum;
} //for
} //for
} //multi

void output(int c[][3]) {
int i,*p;
printf("\n数组c:\n");
for(p = c[0], i = 0; i < 9; i++) {
((i + 1) % 3) ? printf("%d ",*p++) : printf("%d\n",*p++);
} //for
} //output

int main() {
int a[3][4],b[4][3],c[3][3],*p,i;
//对数组a赋值.注意a[0]是个一维指针,指向数组a的首地址,且该数组总长度为3*4即12
for(p = a[0], i = 0; i < 12; i++) {
scanf("%d",p++);
} //for
for(p = b[0], i = 0; i < 12; i++) { //对数组b赋值,其总长度为4*3即12
scanf("%d",p++);
} //for
printf("\n数组a:\n");
for(p = a[0], i = 0; i < 12; i++) {
((i + 1) % 4) ? printf("%d ",*p++) : printf("%d\n",*p++);
} //for
printf("\n数组b:\n");
for(p = b[0], i = 0; i < 12; i++) {
((i + 1) % 4) ? printf("%d ",*p++) : printf("%d\n",*p++);
} //for
multi(a,b,c);
output(c);
return 0;
} //main #include <stdio.h>

void multi(int a[][4],int b[][3],int c[][3]) { //注意数组只能省略第一维的大小
int *pa,*pb,*pc,sum,i,j,k;
for(pc = c[0], i = 0; i < 3; i++) { //c[0]为数组c的首地址
for(j = 0; j < 3; j++) {
pa = a[i]; //让pa指向数组a第i+1行开头
pb = &b[0][j]; //让pb指向数组b第j+1列开头
sum = 0;
for(k = 0; k < 4; k++) {
sum += (*pa) * (*pb);
pa++; //让pa指向该行第二个元素
pb += 3; //让pb指向该列第二个元素
} //for
*pc++ = sum;
} //for
} //for
} //multi

void output(int c[][3]) {
int i,*p;
printf("\n数组c:\n");
for(p = c[0], i = 0; i < 9; i++) {
((i + 1) % 3) ? printf("%d ",*p++) : printf("%d\n",*p++);
} //for
} //output

int main() {
int a[3][4],b[4][3],c[3][3],*p,i;
//对数组a赋值.注意a[0]是个一维指针,指向数组a的首地址,且该数组总长度为3*4即12
for(p = a[0], i = 0; i < 12; i++) {
scanf("%d",p++);
} //for
for(p = b[0], i = 0; i < 12; i++) { //对数组b赋值,其总长度为4*3即12
scanf("%d",p++);
} //for
printf("\n数组a:\n");
for(p = a[0], i = 0; i < 12; i++) {
((i + 1) % 4) ? printf("%d ",*p++) : printf("%d\n",*p++);
} //for
printf("\n数组b:\n");
for(p = b[0], i = 0; i < 12; i++) {
((i + 1) % 4) ? printf("%d ",*p++) : printf("%d\n",*p++);
} //for
multi(a,b,c);
output(c);
return 0;
} //main
第2个回答  推荐于2016-03-10
#include <stdio.h>
void main()
{
int m,n,p,x,y,z,sum;
int a[10][10];
int b[10][10];
int c[10][10];
x=0;y=0;z=0;sum=0;
scanf("%d%d%d",&m,&n,&p);
for(x=0;x<m;x++)
{for(y=0;y<n;y++)//这里应该y++
{scanf("%d",&a[x][y]);}}

for(y=0;y<n;y++)
{for(z=0;z<p;z++)
{scanf("%d",&b[y][z]);}}//这里没加&

for(x=0;x<m;x++)
{for(z=0;z<p;z++)
{for(y=0;y<n;y++)
{c[x][z]=a[x][y]*b[y][z];//这里是*
sum+=c[x][z];}
c[x][z]=sum;
sum=0;
printf("%d ",c[x][z]);//给你加了个空格

}
printf("\n");//如果要输出成阵列的形式,加这句
}

}
望采纳!本回答被提问者采纳
第3个回答  2011-12-12
x1[i]=new double[b1]; cout<<"输入第一个矩阵:\\n"; for(i=0;i<a1;i++) for(int j=0;j<b1;j++) cin>>x1[i][j]; /x2[][]
第4个回答  2011-12-12
{for(y=0;y<n;n++)
这里应该是y++
第5个回答  2011-12-12
for(x=0;x<m;x++)
for(z=0;z<p;z++)
{
c[x][z]=0;
for(y=0;y<n;y++)
c[x][z]+=a[x][y]*b[y][z];
}
相似回答