gpt4 book ai didi

c - 是否有某种方法可以对结构进行排序,同时仅使用指针将其传递到 void 函数中?

转载 作者:行者123 更新时间:2023-12-02 01:28:10 25 4
gpt4 key购买 nike

我试图通过使用指针在排序函数中的 XY 坐标系上对一些随机点以及这些点与用户输入点的距离(将其视为 (0,0),即原点)进行排序,当我从排序函数中删除点排序代码时,距离排序就可以了,但是当我尝试对点以及距离进行排序时,代码不起作用。我知道有人问过有关排序点的类似问题,但我知道我想仅使用指针来实现它的逻辑。有人可以帮忙吗?

代码

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

struct point {
float x, y;
};

void sort();

int main() {
int n;
printf("Enter the number of points in the system:");
scanf("%d", &n);
float d[n], xi, yi;
struct point p[n];
printf("\nEnter the X and Y coordinates of the points-\n");

for (int i = 0; i < n; i++) {
printf("Enter the X coordinate of point %d: ", i + 1);
scanf("%f", &p[i].x);
printf("Enter the Y coordinate of point %d: ", i + 1);
scanf("%f", &p[i].y);
}

printf("\nPoints entered are-\n");

for (int i = 0; i < n; i++) {
printf("%d- (%0.2f,%0.2f)\n", i + 1, p[i].x, p[i].y);
}

printf("\nEnter the X coordinate of point from which distance is to be calculated:");
scanf("%f", &xi);
printf("Enter the Y coordinate of point from which distance is to be calculated:");
scanf("%f", &yi);

for (int i = 0; i < n; i++) {
d[i] = fabs(sqrt(pow(((p[i].x) - xi), 2) + pow(((p[i].y) - yi), 2)));
}

printf("\nDistance- ");

for (int i = 0; i < n; i++) {
printf("%0.2f ", d[i]);
}

printf("\n");
sort(d);
printf("\n\nSorted distance- ");

for (int i = 0; i < n; i++) {
printf("%0.2f ", d[i]);
}

printf("\n\n");

for (int i = 0; i < n; i++) {
printf("%d- (%0.2f,%0.2f)\n", i + 1, p[i].x, p[i].y);
}
}

void sort(float *d, struct point *p) {
for (int i = 0; i < sizeof(d) / sizeof(float); i++) {
for (int j = 1; j < (sizeof(d) / sizeof(float)) - i; j++) {
if (*(d + i) > *(d + i + j)) {
float temp = *(d + i), pxtemp = (p + i)->x, pytemp = (p + i)->y;
*(d + i) = *(d + i + j);
*(d + i + j) = temp;
/*(p + i)->x = (p + i + j)->x;
(p + i + j)->x = pxtemp;
(p + i)->y = (p + i + j)->y;
(p + i + j)->y = pytemp;*/
}
}
}
}

输出

Enter the number of points in the system:2

Enter the X and Y coordinates of the points-
Enter the X coordinate of point 1: 5
Enter the Y coordinate of point 1: 6
Enter the X coordinate of point 2: 3
Enter the Y coordinate of point 2: 4

Points entered are-
1- (5.00,6.00)
2- (3.00,4.00)

Enter the X coordinate of point from which distance is to be calculated:0
Enter the Y coordinate of point from which distance is to be calculated:0

Distance- 7.81 5.00

最佳答案

代码中存在多个问题:

  • 您没有将 p 传递给 sort 函数。
  • 在此 sort 函数中,sizeof(d)/sizeof(float) 不会计算出 d< 指向的数组中的条目数 因为 d 只是一个指针。您必须将数组 n 的长度作为额外参数传递。
#include <math.h>
#include <stdio.h>

struct point {
float x, y;
};

void sort(float *d, struct point *p, int n) {
for (int i = 1; i < n; i++) {
for (int j = 0; j < n - i; j++) {
if (d[i] > d[i + 1]) {
float temp = d[i];
d[i] = d[i + 1];
d[i + 1] = temp;
struct point temp1 = p[i];
p[i] = p[i + 1];
p[i + 1] = temp1;
}
}
}
}

int main() {
int n;
printf("Enter the number of points in the system:");
if (scanf("%d", &n) != 1 || n < 1)
return 1;
float d[n], xi, yi;
struct point p[n];
printf("\nEnter the X and Y coordinates of the points-\n");

for (int i = 0; i < n; i++) {
printf("Enter the X coordinate of point %d: ", i + 1);
if (scanf("%f", &p[i].x) != 1)
return 1;
printf("Enter the Y coordinate of point %d: ", i + 1);
if (scanf("%f", &p[i].y) != 1)
return 1;
}

printf("\nPoints entered are-\n");

for (int i = 0; i < n; i++) {
printf("%d- (%0.2f,%0.2f)\n", i + 1, p[i].x, p[i].y);
}

printf("\nEnter the X coordinate of point from which distance is to be calculated:");
if (scanf("%f", &xi) != 1)
return 1;
printf("Enter the Y coordinate of point from which distance is to be calculated:");
if (scanf("%f", &yi) != 1)
return 1;

for (int i = 0; i < n; i++) {
// use hypot() to compute the distance between 2 points
// it has better behavior than sqrt(dx2 + dy2) in corner cases.
d[i] = hypot(p[i].x - xi, p[i].y - yi);
}
printf("\n");

printf("Distance- ");
for (int i = 0; i < n; i++) {
printf("%0.2f ", d[i]);
}
printf("\n");

sort(d, p, n);

printf("\n\nSorted distance- ");
for (int i = 0; i < n; i++) {
printf("%0.2f ", d[i]);
}
printf("\n\n");

for (int i = 0; i < n; i++) {
printf("%d- (%0.2f,%0.2f)\n", i + 1, p[i].x, p[i].y);
}
return 0;
}

关于c - 是否有某种方法可以对结构进行排序,同时仅使用指针将其传递到 void 函数中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73947282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com