struct point的代码要怎么完善

想问问大家缺少的主函数应该写在哪里怎么写?是写int main还是写void main?
另外这里不知道是不是写的有问题,跑完之后报错,没法子识别point

img


#include<stdio.h>
#include<math.h>

struct Point{
        double x;
        double y;
        };
//计算两点之间的距离
double distance(Point p1,  Point p2){
float x,y;
float d;
x = fabs(p1.x-p2.x);
y = fabs(p1.y-p2.y);
d = sqrt(x*x+y*y);
return d;
    }
//计算两组点之间的相似性
double getSimilitude(Point arr1[], Point arr2[],int n){
int i;
double simi=0.0;
for(i=0;i<n;++i){
    simi+= distance(arr1[i],arr2[i]);
}
return simi;
}
#include <stdio.h>
#include <math.h>

struct Point {
    double x;
    double y;
};

double distance(struct Point p1, struct Point p2) {
    float x, y, d;
    x = fabs(p1.x - p2.x);
    y = fabs(p1.y - p2.y);
    d = sqrt(x * x + y * y);
    return d;
}

double getSimilitude(struct Point arr1[], struct Point arr2[], int n) {
    int i;
    double simi = 0.0;
    for(i = 0; i < n; ++i) {
        simi += distance(arr1[i], arr2[i]);
    }
    return simi;
}

int main() {
    struct Point p1 = {1.0, 2.0};
    struct Point p2 = {3.0, 4.0};
    double d = distance(p1, p2);
    printf("Distance: %lf", d);
    struct Point arr1[] = {{1.0, 2.0}, {3.0, 4.0}};
    struct Point arr2[] = {{5.0, 6.0}, {7.0, 8.0}};
    double simi = getSimilitude(arr1, arr2, 2);
    printf("Similarity: %lf", simi);

    return 0;
}

typedef struct
{
    double x;
    double y;
} Point;

【以下回答由 GPT 生成】

缺少的主函数应该写在最后面。以下是一个可以正常运行的主函数示例:

#include <stdio.h>
#include <math.h>

struct Point{
    double x;
    double y;
};

double distance(struct Point p1, struct Point p2){
    double x, y;
    double d;
    x = fabs(p1.x - p2.x);
    y = fabs(p1.y - p2.y);
    d = sqrt(x * x + y * y);
    return d;
}

double getSimilitude(struct Point arr1[], struct Point arr2[], int n){
    int i;
    double simi = 0.0;
    for(i = 0; i < n; i++){
        simi += distance(arr1[i], arr2[i]);
    }
    return simi;
}

int main(){
    // 创建两组点的数组
    struct Point arr1[3];
    struct Point arr2[3];

    // 添加点的坐标值
    arr1[0].x = 1.0;
    arr1[0].y = 2.0;
    arr1[1].x = 3.0;
    arr1[1].y = 4.0;
    arr1[2].x = 5.0;
    arr1[2].y = 6.0;

    arr2[0].x = 2.0;
    arr2[0].y = 3.0;
    arr2[1].x = 4.0;
    arr2[1].y = 5.0;
    arr2[2].x = 6.0;
    arr2[2].y = 7.0;

    // 调用getSimilitude函数计算相似性
    double similarity = getSimilitude(arr1, arr2, 3);
    printf("Similarity: %f\n", similarity);

    return 0;
}

可能存在的问题: 1. 在distancegetSimilitude函数中,结构体Point被错误地使用为Point而不是struct Point。必须更正为double distance(struct Point p1, struct Point p2)double getSimilitude(struct Point arr1[], struct Point arr2[], int n)。 2. 在代码结束时缺少一个返回值,加上return 0;语句。

以上是修改后的正确代码。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

void main()
int main()
都可以

img

代码

#include <stdio.h>
#include <math.h>


typedef struct Point {
  double x;
  double y; 
} Point;

// 计算两点之间的距离
double distance(Point p1, Point p2) {
  float x, y, d;
  x = fabs(p1.x - p2.x);
  y = fabs(p1.y - p2.y);
  d = sqrt(x * x + y * y);
  return d;
}

// 计算两组点之间的相似性
double getSimilitude(Point arr1[], Point arr2[], int n) {
  int i;
  double simi = 0.0;
  for (i = 0; i < n; ++i) {
    simi += distance(arr1[i], arr2[i]);
  }
  return simi;
}

// 主函数
int main() {

  // 定义两组点的数组
  Point arr1[3] = {{1.0, 2.0}, {3.0, 4.0}, {5.0, 6.0}};
  Point arr2[3] = {{2.0, 3.0}, {4.0, 5.0}, {6.0, 7.0}};
  
  // 调用getSimilitude函数计算相似性 
  double simi = getSimilitude(arr1, arr2, 3);

  // 打印
  printf("两组点之间的相似性为 %.2f\n", simi);

  // 返回0表示程序正常结束
  return 0; 
}


首先说明两个问题:

  • struct Point定义,在c中只能struct Point a来定义一个变量,而在c++中struct与class类似,可以Point a来定义一个变量
  • 如果你的代码要编译成可执行的程序,那么必须要有程序入口,int main(int argc, char *argv[])
#include <stdio.h>
#include <math.h>
 
struct Point {
    double x;
    double y;
};
 
double distance(Point p1, Point p2) {
    float x, y, d;
    x = fabs(p1.x - p2.x);
    y = fabs(p1.y - p2.y);
    d = sqrt(x * x + y * y);
    return d;
}
 
double getSimilitude(Point arr1[], Point arr2[], int n) {
    int i;
    double simi = 0.0;
    for(i = 0; i < n; ++i) {
        simi += distance(arr1[i], arr2[i]);
    }
    return simi;
}

int main(int argc, char *argv[]) {
    struct Point p1 = {11.0, 12.0};
    struct Point p2 = {31.0, 41.0};
    double d = distance(p1, p2);
    printf("Distance: %lf\n", d);
    struct Point arr1[] = {{11.0, 12.0}, {23.0, 34.0}};
    struct Point arr2[] = {{35.0, 26.0}, {37.0, 48.0}};
    double simi = getSimilitude(arr1, arr2, 2);
    printf("Similarity: %lf\n", simi);
 
    return 0;
}

用int main,这是基础主库

struct 结构:
struct{
变量
};

仅供参考,谢谢!

img


#include<stdio.h>
#include<math.h>
struct Point
{
    double x;
    double y;
};
// 计算两点之间的距离,不能用标签Point作为类型名称这是错误用法
double distance(struct Point p1, struct Point p2)
{
    double x, y;
    double d;
    x = fabs(p1.x - p2.x);
    y = fabs(p1.y - p2.y);
    d = sqrt(x * x + y * y);
    return d;
}

// 计算两组点之间的相似性
double getSimilitude(struct Point arr1[], struct Point arr2[], int n)
{
    int i;
    double simi = 0.0;
    for (i = 0; i < n; ++i)
    {
        simi += distance(arr1[i], arr2[i]);
    }
    return simi;
}

// 标准C主函数写法如下,不要用void作为返回值了。
int main(void)
{
    // 定义两个点
    struct Point p1 = { 1.20, 3.60 }, p2 =
    {5.2, 7.82};

    // 定义两组点的数组
    struct Point arr1[] = { {1.5, 2.0}, {3.62, 4.0}, {5.0, 6.0}, {8.2, 9.6} };
    struct Point arr2[] = { {21.0, 13.0}, {4.0, 15.0}, {6.20, 7.0}, {12.32, 14.90} };

    // 调用
    // distance函数和getSimilitude函数分别求两点间距离和两组点的相似性,结果直接输出。
    printf
        ("点(%.2lf,%.2lf)到点(%.2lf,%.2lf)之间的距离为:%.2lf\n两组点之间的相似性为 %.2lf\n",
         p1.x, p1.y, p2.x, p2.y, distance(p1, p2), getSimilitude(arr1, arr2, 4));

    return 0;
}



主函数是写int main而不是void main


 
typedef struct Point {
  double x;
  double y; 
} Point;


当然是int main表示有返回值,所以记得return 0,另外我看你的代码问题,


int main() {
    struct Point p1, p2;
    
    // 使用结构体进行计算    double dist = distance(p1, p2);
    double sim = getSimilitude(p1, p2);
    
    // 打印结果    printf("距离:%f\n", dist);
    printf("相似度:%f\n", sim);
    
    return 0;
}

在C/C++中,主函数应该写为int main(),而不是void main()。主函数是程序的入口点,它在程序开始运行时被调用。正确的主函数声明应该如下:

int main() {
    // Your code here
    return 0;
}

关于你提供的代码,有一些问题需要注意:

  1. 主函数的缺失: 你的代码中没有主函数。在主函数内部,你可以调用其他函数,包括distancegetSimilitude函数。确保在主函数中创建适当的点数组并调用相应函数。

  2. Point结构体的大小写问题: 你定义的结构体是struct Point,但在函数参数和函数体中使用的是小写的point。确保结构体名称大小写一致。

  3. 距离计算函数参数的类型: 你的distance函数的参数类型是Point,但是在函数体内使用了float类型。确保参数类型一致,否则会导致类型错误。

  4. getSimilitude函数的参数: 你的getSimilitude函数使用了两个Point数组作为参数,但是在调用函数时没有传递数组。确保在调用函数时传入正确的数组。

以下是修复后的代码示例:

#include<stdio.h>
#include<math.h>

struct Point {
    double x;
    double y;
};

double distance(Point p1, Point p2) {
    double x, y, d;
    x = fabs(p1.x - p2.x);
    y = fabs(p1.y - p2.y);
    d = sqrt(x * x + y * y);
    return d;
}

double getSimilitude(Point arr1[], Point arr2[], int n) {
    int i;
    double simi = 0.0;
    for (i = 0; i < n; ++i) {
        simi += distance(arr1[i], arr2[i]);
    }
    return simi;
}

int main() {
    // Create and initialize arrays of points
    Point arr1[10];  // Example size, modify as needed
    Point arr2[10];  // Example size, modify as needed
    
    // Fill in the arrays with points
    
    // Call the getSimilitude function and print the result
    double similarity = getSimilitude(arr1, arr2, 10);  // Modify size accordingly
    printf("Similarity: %lf\n", similarity);
    
    return 0;
}

请根据你的具体需求和数据调整代码中的数组大小等参数。另外,确保所有函数的参数和调用都正确匹配。