如何修改此函数以使用结构作为参数而不是双精度


/* the struct */
typedef struct atom {
    double x;
    double y;
    double z;
    char line[200];
    int is_connected;
    struct atom *next;
} p_atom;
/* the existing function */  
double
calcdist (double px, double py, double pz, double lx, double ly, double lz )   
{  
    double x, y, z, sqr_sum;
    x = px - lx;
    y = py - ly;
    z = pz - lz;
    sqr_sum = pow (x, 2) + pow (y, 2) + pow (z, 2);
    return sqrt (sqr_sum);
}
  1. 编写上述程序是为了计算 2 点之间的距离在 3D 中。如果我想编写一个接受 x,y,z 的新函数通过我的结构坐标并计算距离(同上(,是吗可能。。。如果是这样,怎么办?
  2. 如何在命令行上执行提供多个输入文件的 c 程序。

也许首先要做的是阅读一本C书,尤其是关于函数如何工作的书。无论如何,我会给你一些提示。

  1. 如果我想编写一个接受 x,y,z 坐标并计算距离(同上(的子例程,是否有可能......如果是这样,怎么办?

这是可能的,实际上是这样做的好方法。您可以根据需要传递任意数量的参数来运行。但是,在这种情况下,最好将指针传递给struct。这种方式通常比传递多个参数更方便、更有效。

double calcdist( p_atom *point1, p_atom *point2 )

在该函数中,您可以使用point1->xpoint1->y等进行计算,就像您目前使用pxpy等一样。

  1. 如何通过在命令行中提供多个输入文件来执行 c 程序

可以cat多个输入文件,然后将它们pipe到程序中。像这样:

cat file1 file2 | ./a.out

优雅:

typedef struct {
    double          x;
    double          y;
    double          z;
}COORD_3D;

typedef struct atom {
    COORD_3D        coord;
    char            line[200];
    int             is_connected;
    struct atom     *next;
} p_atom;

double calc3Ddist (COORD_3D *coord1, COORD_3D *coord2)   
{  
    double x, y, z, sqr_sum;
    x = coord1->x - coord2->x;
    y = coord1->y - coord2->y;
    z = coord1->z - coord2->z;
    sqr_sum = pow (x, 2) + pow (y, 2) + pow (z, 2);
    return sqrt (sqr_sum);
}

int HowToDo(){
    p_atom      a, b;
    int         dist;
    dist=calcdist( &a.coord, &b.coord);
}

更简单:

double
calcdist (p_atom *patom, p_atom *latom )   
{  
    double x, y, z, sqr_sum;
    x = patom->x - latom->x;
    y = patom->y - latom->y;
    z = patom->z - latom->z;
    sqr_sum = pow (x, 2) + pow (y, 2) + pow (z, 2);
    return sqrt (sqr_sum);
}

最新更新