0

我是结构的初学者,几乎不了解它们的用处。我有一个任务是创建一个空间为 5 个点的数组。每个点都将由用户输入。

我不明白如何将结构与数组一起使用。我试过这个,但它根本不起作用......

        #include <stdio.h>

int main(void)
{

    struct Input
    {
        int x;
        int y;
    };

    struct Input arr[5];


    for(int i=1; i <= 5; i++)
    {
        printf("Enter coordinates for point #%d (x,y): ", i);
        scanf("%d,%d", &arr[i].x, &arr[i].y);
    }

    printf("\n\nYou entered:\n");

    for(int i=1; i <= 5; i++)
    {
        printf("Point #%d: %d, %d\n", i, arr[i].x, arr[i].y);
    }


    getchar();
    getchar();

    return 0;

}

编辑

我正在尝试计算 x 坐标的平均值,但obs.avgX不像计划的那样工作,计算总是为 0。

#include <stdio.h>

int main(void)
{

    struct Observations
    {
        int x;
        int y;
        double avgX;
        double avgY;
    };

    struct Observations arr[5];
    struct Observations obs;


    for(int i=0; i < 5; i++)
    {
        printf("Enter coordinates for point #%d (x,y): ", i +1);
        scanf("%d, %d", &arr[i].x, &arr[i].y);
    }

    printf("\n\nYou entered:\n");

    for(int i=0; i < 5; i++)
    {
        printf("Point #%d: %d, %d\n", i, arr[i].x, arr[i].y);
    }


    obs.avgX = arr[0].y + arr[1].y + arr[2].y + arr[3].y + arr[4].y / 5;
    printf("Average of X: %d", obs.avgX);


    getchar();
    getchar();

    return 0;

}
4

3 回答 3

3

如果你需要创建一个包含 5 个点的数组,首先你必须定义一个点是什么。

例如:

struct Point {
    int x;
    int y;
};

然后你必须定义一个包含 5 个点的数组:

struct Point array_of_points[5];

你可以像这样使用它:

array_of_points[0].x = 20;
array_of_points[0].y = 10;
// etc...
array_of_points[4].x = 3;
array_of_points[4].y = 8;
于 2013-11-09T10:21:39.457 回答
1

SirDarius 对代码给出了很好的解释。

你说

几乎不明白它们有什么用

实际上,您可以认为,结构是一种“数据保存器”,您可以在其中存储不同或多种类型的数据。

例如,使用数组,您不能在一个单元格中同时存储 x 和 y 坐标(多种类型的数据)。

此外,如果您想存储学生的学校信息,您可能需要存储他的唯一 ID(整数)、他的姓名(字符串)、他的成绩(整数)和每节课的平均值(浮点数)(不同的数据)。使用结构,您可以轻松地以这种方式存储它们:

struct Student {
int ID;
char * name;
int grade;
float average;
}

希望有助于理解结构真正有用的原因:)

于 2013-11-09T10:39:07.593 回答
0

计算平均值时缺少大括号,如下所示,

obs.avgX = (arr[0].y + arr[1].y + arr[2].y + arr[3].y + arr[4].y) / 5;

此外,要打印双精度类型变量,您应该使用%f格式说明符而不是%d.

于 2013-11-09T11:27:52.933 回答