我想知道是否有任何简单的方法可以在不使用循环的情况下在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 ??中有类似的方法
请求你的帮助。
答案 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;
}