首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-02-15 
一维数组与二维数组本质上的区别#include stdio.hvoidjc(int*a,int*b,int*c,intm,intn){inti,j,kfor(i

一维数组与二维数组本质上的区别
#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 ");
}
}

热点排行