- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图通过使用指针在排序函数中的 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/
我刚接触 C 语言几周,所以对它还很陌生。 我见过这样的事情 * (variable-name) = -* (variable-name) 在讲义中,但它到底会做什么?它会否定所指向的值吗? 最佳答案
我有一个指向内存地址的void 指针。然后,我做 int 指针 = void 指针 float 指针 = void 指针 然后,取消引用它们以获取值。 { int x = 25; vo
我正在与计算机控制的泵进行一些串行端口通信,我用来通信的 createfile 函数需要将 com 端口名称解析为 wchar_t 指针。 我也在使用 QT 创建一个表单并获取 com 端口名称作为
#include "stdio.h" #include "malloc.h" int main() { char*x=(char*)malloc(1024); *(x+2)=3; --
#include #include main() { int an_int; void *void_pointer = &an_int; double *double_ptr = void
对于每个时间步长,我都有一个二维矩阵 a[ix][iz],ix 从 0 到 nx-1 和 iz 从 0 到 nz-1。 为了组装所有时间步长的矩阵,我定义了一个长度为 nx*nz*nt 的 3D 指针
我有一个函数,它接受一个指向 char ** 的指针并用字符串填充它(我猜是一个字符串数组)。 *list_of_strings* 在函数内部分配内存。 char * *list_of_strings
我试图了解当涉及到字符和字符串时,内存分配是如何工作的。 我知道声明的数组的名称就像指向数组第一个元素的指针,但该数组将驻留在内存的堆栈中。 另一方面,当我们想要使用内存堆时,我们使用 malloc,
我有一个 C 语言的 .DLL 文件。该 DLL 中所有函数所需的主要结构具有以下形式。 typedef struct { char *snsAccessID; char *
我得到了以下数组: let arr = [ { children: [ { children: [], current: tru
#include int main(void) { int i; int *ptr = (int *) malloc(5 * sizeof(int)); for (i=0;
我正在编写一个程序,它接受一个三位数整数并将其分成两个整数。 224 将变为 220 和 4。 114 将变为 110 和 4。 基本上,您可以使用模数来完成。我写了我认为应该工作的东西,编译器一直说
好吧,我对 C++ 很陌生,我确定这个问题已经在某个地方得到了回答,而且也很简单,但我似乎找不到答案.... 我有一个自定义数组类,我将其用作练习来尝试了解其工作原理,其定义如下: 标题: class
1) this 指针与其他指针有何不同?据我了解,指针指向堆中的内存。如果有指向它们的指针,这是否意味着对象总是在堆中构造? 2)我们可以在 move 构造函数或 move 赋值中窃取this指针吗?
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: C : pointer to struct in the struct definition 在我的初学者类
我有两个指向指针的结构指针 typedef struct Square { ... ... }Square; Square **s1; //Representing 2D array of say,
变量在内存中是如何定位的?我有这个代码 int w=1; int x=1; int y=1; int z=1; int main(int argc, char** argv) { printf
#include #include main() { char *q[]={"black","white","red"}; printf("%s",*q+3); getch()
我在“C”类中有以下函数 class C { template void Func1(int x); template void Func2(int x); }; template void
我在64位linux下使用c++,编译器(g++)也是64位的。当我打印某个变量的地址时,例如一个整数,它应该打印一个 64 位整数,但实际上它打印了一个 48 位整数。 int i; cout <<
我是一名优秀的程序员,十分优秀!