如何按元素对两行2D数组元素求和,就像C语言中的向量之和一样?

时间:2013-09-16 20:21:18

标签: c arrays sum rows

我想知道是否有任何简单的方法可以在不使用循环的情况下在C中对两行2D数组求和。我在主函数

中得到了以下示例代码
for (i = 0; i < 3; i++) {
    (*A)[i] = drand48();
    (*B)[i] = drand48();
}

我正在使用两个指针(A和B)到一个长度为3的数组,并且在用随机数初始化它们之后,我想用一个句子(如矢量和)对它们求和。设C是指向长度为3的数组的另一个指针。我试过了

(*C) = (*A) + (*B);

但是我得到了一个错误。在fortran中,人们可以通过放置:

来实现
C = A + B

假设A,B和C是相同长度的阵列,并且A和B都被启动。或者,如果我们想要对2Darray的两行求和,我们可以使用:

C = A(i,:) + A(j,:)

将行i与行j相加。

所以,在C ??中有类似的方法

请求你的帮助。

3 个答案:

答案 0 :(得分:1)

你应该理解几件事:首先,fortran为你编译一个循环,所以当它的代码运行时,它仍然循环遍历数据。其次,优化器可以通过“解除”循环来为您做一些工作。您可以编写基本上展开小循环的代码,如:

  for (i = 0; i < 2; i++) {

    C[i][0] = A[i][0] + B[i][0];
    C[i][1] = A[i][1] + B[i][1];
    C[i][2] = A[i][2] + B[i][2];

  }

但是,无论您使用Fortran,Matlab(面向矢量的语言)还是C(使用或不使用循环展开)进行编码,仍会执行相同的添加次数。

答案 1 :(得分:0)

我有这个功能。 或多或少,每行末尾的求和中存在错误。

   #include <stdio.h>
   int main ()
   //2D_Array. Create 2D array . Multiplication in each array slot.
   //KHO2016.no4. mingw (TDM-GCC-32) . c-ansi .
   {
   //Declare
   int a,b,c,d,sum;
   int k,l,num_array[50][50];

   //vaulate
   jump1 :
   printf ("Coordinat system Descartes\nBasically two FOR-loops.\n\n");
   printf ("Plot X no. of Columns, Horizontal axis. Then Y no. of Rows, Vertical axis\n:\n");
   scanf ("%d %d",&a,&b); //a = vertical , b=Horizontal.
   printf ("\nPlot two no. to be multipled\n:\n");
   scanf ("%d %d",&c,&d);

   //calculate
   for (l=0;l<b;l++) // l counts lines or on Y axis .
   {for (k=0;k<a;k++) // k counts colums (on each line) .
   printf ("[Y%d] [X%d] (%d * %d = %d)\t: ",l,k,c++,d,c*(d));
   sum = (sum+(c*d++));
   printf ("sum %d",sum);
   printf ("\n");}

   printf ("\n");
   goto jump1;  

   //terminate
   return 0;
   }

答案 2 :(得分:0)

这里可以选择一个坐标, 并获取所选坐标的值。 但没有每一行的总和。

   #include <stdio.h>
   int main ()
   //2D_Array.(float). Select Coordinate, and obtain slot Value .
   //KHO2016.no6. mingw (TDM-GCC-32) . c-ansi . 
   {
   //declare
   int aa,c,d,p,q;
   float j,ar_d[10][10];

   //valuate
   jump0:
   printf ("Select 1, 2, 3, 4 : ");
   scanf ("%d",&aa);
   if (aa==1&&2&&3)
   goto jump0;

   //calculate
   if (aa==4)
   {for (c=0;c<10;c++)
   for (d=0;d<10;d++)
   ar_d[c][d]=(float)d/c;

   for (c=0;c<10;c++)
   {for (d=0;d<10;d++)
   printf ("(Y%d X%d.%.1d/%.1d= %.2f) ",c,d,c,d,ar_d[c][d]);
   printf ("SumLine1(%d)/(%d) = %.2f\n",c,d,j);
   j=(float)d/(c+1);}

   printf ("\nSelect a Coordinate : first X then Y\n"); 
   scanf("%d%d",&p,&q);
   printf ("Coordinate X[%d],Y[%d] has this value : %f\n",p,q,ar_d[q][p]);}
   goto jump0;

   //terminate
   return 0;
   }