0

いくつかの整数を計算しようとしていますが、計算の答えには小数が含まれることがわかっているので、double を使用する必要があります。コードの問題がどこにあると思われるかについてコメントしました(//これはすべてがうまくいかない場所です)。

入力して計算を型キャストしようとしました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;

整数演算を行っています

浮動小数点数を使用するように強制する必要があります

すなわち

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 に答える