0

ループを使用せずに C で 2D 配列の 2 つの行を合計する簡単な方法があるかどうかを知りたいです。main関数で次のサンプルコードを取得しました

for (i = 0; i < 3; i++) {
    (*A)[i] = drand48();
    (*B)[i] = drand48();
}

長さ 3 の配列への 2 つのポインター (A と B) を使用しています。それらを乱数で初期化した後、それらを 1 つの文 (ベクトル合計のように) で合計したいと考えています。C を長さ 3 の配列への別のポインターとします。

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

しかし、私はそれでエラーが発生しています。Fortran では、次のように入力するだけで簡単に実行できます。

C = A + B

A、B、および C が同じ長さの配列であり、A と B の両方が初期化されていると仮定します。または、2Darray の 2 つの行を合計したい場合は、次のように入力できます。

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

行 i を行 j に合計します。

それで、Cにも同様の方法がありますか??

助けてくれてありがとう。

4

3 に答える 3

1

理解しておくべきことがいくつかあります。まず、fortran はループをコンパイルします。そのため、そのコードを実行すると、まだデータをループしています。第 2 に、オプティマイザーがループを「展開」することで何らかの作業を行う場合があります。次のように、本質的に小さなループを展開するコードを書くことができます。

  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 (ループ展開の有無にかかわらず) でコーディングしても、同じ数の add が実行されます。

于 2013-09-16T22:10:58.337 に答える
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 に答える