读书人

一维数组与二维数组本质上的区别,该怎

发布时间: 2012-02-15 12:09:44 作者: rapoo

一维数组与二维数组本质上的区别
#include <stdio.h>
void jc(int *a,int *b,int *c,int m,int n)
{int i,j,k;
for(i=0;i <m;i++)
for(j=0;j <m;j++)
{*(c+i*n+j)=0;
for(k=0;k <n;k++)
*(c+i*n+j)+=*(a+i*n+k)*(*(b+k*m+j));
}
}
main()
{int a[2][4],b[4][2],c[2][2],i,j;
printf( "input a:\n ");
for(i=0;i <2;i++)
for(j=0;j <4;j++)
scanf( "%d ",&a[i][j]);
printf( "input b:\n ");
for(i=0;i <4;i++)
for(j=0;j <2;j++)
scanf( "%d ",&b[i][j]);
jc(&a[0][0],&b[0][0],&c[0][0],2,4);
printf( "the result is :\n ");
for(i=0;i <2;i++)
{for(j=0;j <2;j++)
printf( "%d ",c[2][2]);
printf( "\n ");
}
}
这个程序不能正确实现矩阵相乘,我觉得是一维数组与二维数组的区别所导致的,谁能解释一下

[解决办法]
//LZ自己的逻辑错误,改了,自己看看.
#include <stdio.h>

void jc(int *a,int *b,int *c,int m,int n)
{
int i,j,k;
for(i=0;i <m;i++)
for(j=0;j <m;j++)
{
//错误1 *(c+i*n+j)=0;
*(c+i*m+j)=0;
for(k=0;k <n;k++)
//错误2 *(c+i*n+j)+=*(a+i*n+k)*(*(b+k*m+j));
*(c+i*m+j)+=*(a+i*n+k)*(*(b+k*m+j));
}
}

int main()
{
int a[2][4],b[4][2],c[2][2],i,j;
printf( "input a:\n ");
for(i=0;i <2;i++)
for(j=0;j <4;j++)
scanf( "%d ",&a[i][j]);

printf( "input b:\n ");
for(i=0;i <4;i++)
for(j=0;j <2;j++)
scanf( "%d ",&b[i][j]);

jc(&a[0][0],&b[0][0],&c[0][0],2,4);

printf( "the result is :\n ");
for(i=0;i <2;i++)
{
for(j=0;j <2;j++)
//错误3 printf( "%d ",c[2][2]);
printf( "%d ",c[i][j]);
printf( "\n ");
}
}

读书人网 >C语言

热点推荐