0

我正在尝试计算一些整数,并且我知道计算的答案将包含小数,所以我必须使用双精度数。我已经评论了我认为代码中的问题在哪里(//这是一切都出错的地方)。

我试图通过键入来对计算进行类型转换,obs.avgX = (float) (arr[0].x + arr[1].x + arr[2].x + arr[3].x + arr[4].x) / 5;但它根本不起作用。

#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);
    }

    // This is where everything goes wrong
    obs.avgX = (arr[0].x + arr[1].x + arr[2].x + arr[3].x + arr[4].x) / 5;
    obs.avgY = (arr[0].y + arr[1].y + arr[2].y + arr[3].y + arr[4].y) / 5;

    printf("Average of X: %.2f\n", obs.avgX);
    printf("Average of Y: %.2f", obs.avgY);


    getchar();
    getchar();

    return 0;
4

2 回答 2

2

这条线

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

正在做整数运算

您需要强制它使用浮点数

IE

obs.avgX = (float)(arr[0].x + arr[1].x + arr[2].x + arr[3].x + arr[4].x) / 5.0f;
于 2013-11-09T14:33:27.597 回答
0
 obs.avgX = (arr[0].x + arr[1].x + arr[2].x + arr[3].x + arr[4].x) / 5; should be 

 obs.avgX = (float) (arr[0].x + arr[1].x + arr[2].x + arr[3].x + arr[4].x) / 5
于 2013-11-09T14:34:46.300 回答