0

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

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中有类似的方法吗?

谢谢你的帮助。

4

3 回答 3

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(有或没有循环展开)编写代码,仍然会执行相同数量的加法。

于 2013-09-16T22:10:58.337 回答
0

我让它发挥作用。或多或少,每行末尾的 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;
   }
于 2016-08-26T15:59:31.287 回答
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;
   }
于 2016-08-28T14:09:54.310 回答