C语言:输入一个2*3的整数矩阵和一个3*2的整数矩阵,使用指针数组实现这两个矩阵的相乘。程序如下:

问题:1.运行结构有错误
2.输入第一个矩阵时为什么可以输入7个数据?
#include <stdio.h>
main()
{
int i,j,n,*tem[3];
int p[2][3],q[3][2],r[2][2];
tem[0]=p[0];tem[1]=q[0];tem[2]=r[0];
printf("请输入第1个矩阵:\n");
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
scanf("%d\t",tem[0]+3*i+j);
}
}

printf("请输入第2个矩阵:\n");
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
scanf("%d\t",tem[1]+2*i+j);
}
}

printf("请输入2个矩阵相乘得到的矩阵");
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
for(n=0;n<3;n++)
{
r[i][j]+=(*(tem[0]+3*i+n))*(*(tem[1]+2*n+j));
}
}
}
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
printf("%d\t",*(tem[3]+i*2+j));
}
}
getch();
}

//正确的程序如下:
#include <stdio.h>
void main()
{
int i,j,n,*tem[3];
int p[2][3],q[3][2],r[2][2];
tem[0]=p[0];tem[1]=q[0];tem[2]=r[0];
printf("请输入第1个矩阵:\n");
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
r[i][j]=0;
}
}
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",tem[0]+3*i+j);
}
}

printf("请输入第2个矩阵:\n");
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
scanf("%d",tem[1]+2*i+j);
}
}

printf("输出2个矩阵相乘得到的矩阵:\n");
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
for(n=0;n<3;n++)
{
r[i][j]+=(*(tem[0]+3*i+n))*(*(tem[1]+2*n+j));
}
}
}
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
printf("%d\t",*(tem[2]+i*2+j));
}
printf("\n");
}
getch();
}
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答