如何将二维数组中的两行元素逐个求和,就像C语言中的向量和一样?
我想知道是否有任何简单的方法可以在不使用循环的情况下对C中2D数组的两行求和。我在main函数中得到了以下示例代码如何将二维数组中的两行元素逐个求和,就像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,:) +
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;
}