如何将二维数组中的两行元素逐个求和,就像C语言中的向量和一样?

如何将二维数组中的两行元素逐个求和,就像C语言中的向量和一样?,c,arrays,sum,rows,C,Arrays,Sum,Rows,我想知道是否有任何简单的方法可以在不使用循环的情况下对C中2D数组的两行求和。我在main函数中得到了以下示例代码 for (i = 0; i < 3; i++) { (*A)[i] = drand48(); (*B)[i] = drand48(); } 但我有个错误。在fortran中,只需将以下内容放入即可: C = A + B 假设A、B和C是长度相同的数组,并且A和B都是初始化的。或者,如果我们想对2Darray的两行求和,我们可以将: C = A(i,:) +

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

for (i = 0; i < 3; i++) {
    (*A)[i] = drand48();
    (*B)[i] = drand48();
}
但我有个错误。在fortran中,只需将以下内容放入即可:

C = A + B
假设A、B和C是长度相同的数组,并且A和B都是初始化的。或者,如果我们想对2Darray的两行求和,我们可以将:

C = A(i,:) + A(j,:)
将第i行和第j行相加

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


Thaks感谢您的帮助。

有几件事您应该了解:首先,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(带或不带循环展开)编写代码,都会执行相同数量的加法运算。

我已经实现了这一功能。 每行末尾的sumline或多或少都有一个错误

   #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;
   }

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

   #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;
   }

C中类似的方法是使用循环。尝试*C=*a+*B;,会出现什么错误;?从数组*A[i]的填充方式来看,我假设该范围内的变量被声明为double**A。如果C随后被声明为double*C,那么这确实会导致erro@Pankrates. 不,我将A和B声明为指向数组的指针:是的,它等于double**A@jlahd. 所以它不能像我的fortran示例那样用一个干净的句子来完成?好的,谢谢你。
   #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;
   }