C 언어로 분산 계산하기

CBeginner
지금 연습하기

소개

이 실습에서는 C 언어로 숫자 집합의 분산을 계산하는 방법을 배웁니다. 이 실습은 세 가지 주요 단계로 구성됩니다: 평균 계산, 평균으로부터의 제곱 편차의 합 계산, 그리고 숫자 개수로 합을 나누어 분산을 구하는 단계입니다. 이 실습은 C 언어에서 이러한 통계 계산을 구현하는 과정을 안내하기 위한 자세한 코드 예제와 설명을 제공합니다.

이 실습은 숫자 집합의 평균을 계산하는 방법을 보여주며, 이는 분산 계산에서 중요한 단계입니다. 그런 다음 평균으로부터의 제곱 편차의 합을 계산하는 방법과 마지막으로 숫자 개수로 합을 나누어 분산을 도출하는 방법을 보여줍니다. 단계별 지침을 따르면 C 프로그래밍 언어를 사용하여 이러한 통계 연산을 수행하는 방법에 대한 확실한 이해를 얻을 수 있습니다.

평균 계산

이 단계에서는 C 언어로 숫자 집합의 평균을 계산하는 방법을 배웁니다. 평균은 모든 값을 합하고 숫자의 총 개수로 나누어 계산합니다.

먼저 평균 계산을 구현하기 위한 새로운 C 파일을 만듭니다.

cd ~/project
nano mean.c

이제 평균을 계산하는 다음 C 코드를 작성합니다.

#include <stdio.h>

int main() {
    int numbers[] = {10, 20, 30, 40, 50};
    int count = sizeof(numbers) / sizeof(numbers[0]);
    int sum = 0;

    // 모든 숫자의 합을 계산합니다.
    for (int i = 0; i < count; i++) {
        sum += numbers[i];
    }

    // 평균을 계산합니다.
    float mean = (float)sum / count;

    printf("숫자들: ");
    for (int i = 0; i < count; i++) {
        printf("%d ", numbers[i]);
    }
    printf("\n개수: %d\n", count);
    printf("합계: %d\n", sum);
    printf("평균: %.2f\n", mean);

    return 0;
}

프로그램을 컴파일하고 실행합니다.

gcc mean.c -o mean
./mean

예시 출력:

숫자들: 10 20 30 40 50
개수: 5
합계: 150
평균: 30.00

코드를 자세히 살펴보겠습니다.

  • 정수 배열 numbers를 정의합니다.
  • sizeof()를 사용하여 숫자의 개수를 계산합니다.
  • 모든 숫자의 합을 계산하기 위해 for 루프를 사용합니다.
  • 합을 개수로 나누어 평균을 계산합니다.
  • 숫자, 개수, 합계, 평균을 출력합니다.

(x-평균)²의 합 계산 및 개수로 나누기

이 단계에서는 평균으로부터의 제곱 편차의 합을 계산하고 숫자의 개수로 나누어 분산을 계산하는 방법을 배웁니다.

먼저 이전의 mean.c 파일을 수정하여 분산 계산을 포함시킵니다.

cd ~/project
nano variance.c

분산을 계산하는 다음 C 코드를 작성합니다.

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

int main() {
    int numbers[] = {10, 20, 30, 40, 50};
    int count = sizeof(numbers) / sizeof(numbers[0]);
    int sum = 0;
    float mean, variance = 0.0;

    // 합계와 평균을 계산합니다.
    for (int i = 0; i < count; i++) {
        sum += numbers[i];
    }
    mean = (float)sum / count;

    // 제곱 편차의 합을 계산합니다.
    for (int i = 0; i < count; i++) {
        variance += pow(numbers[i] - mean, 2);
    }

    // 개수로 나누어 분산을 구합니다.
    variance /= count;

    printf("숫자들: ");
    for (int i = 0; i < count; i++) {
        printf("%d ", numbers[i]);
    }
    printf("\n평균: %.2f\n", mean);
    printf("분산: %.2f\n", variance);

    return 0;
}

수학 라이브러리를 사용하여 프로그램을 컴파일하고 실행합니다.

gcc variance.c -o variance -lm
./variance

예시 출력:

숫자들: 10 20 30 40 50
평균: 30.00
분산: 200.00

분산 계산의 주요 단계:

  • 이전 단계에서 평균을 계산합니다.
  • 각 숫자에서 평균을 뺍니다.
  • 차이의 제곱을 구합니다.
  • 제곱된 차이의 합을 구합니다.
  • 숫자의 개수로 나눕니다.

분산 출력

이 단계에서는 분산 계산을 서로 다른 정밀도 수준으로 포맷하고 출력하며, 코드를 더욱 모듈화하기 위한 함수를 만드는 방법을 배웁니다.

이전의 variance.c 파일을 수정하여 분산 출력을 개선합니다.

cd ~/project
nano variance_print.c

분산 출력을 향상시키는 다음 C 코드를 작성합니다.

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

// 분산을 계산하는 함수
float calculate_variance(int numbers[], int count) {
    int sum = 0;
    float mean, variance = 0.0;

    // 합계와 평균을 계산합니다.
    for (int i = 0; i < count; i++) {
        sum += numbers[i];
    }
    mean = (float)sum / count;

    // 제곱 편차의 합을 계산합니다.
    for (int i = 0; i < count; i++) {
        variance += pow(numbers[i] - mean, 2);
    }

    // 개수로 나누어 분산을 구합니다.
    variance /= count;

    return variance;
}

// 서로 다른 포맷으로 분산을 출력하는 함수
void print_variance(float variance) {
    printf("분산 표현 방식:\n");
    printf("1. 표준 포맷:   %.2f\n", variance);
    printf("2. 과학적 표기법: %e\n", variance);
    printf("3. 정밀 포맷:    %.4f\n", variance);
}

int main() {
    int numbers[] = {10, 20, 30, 40, 50};
    int count = sizeof(numbers) / sizeof(numbers[0]);

    // 분산을 계산하고 출력합니다.
    float variance = calculate_variance(numbers, count);

    printf("원본 숫자들: ");
    for (int i = 0; i < count; i++) {
        printf("%d ", numbers[i]);
    }
    printf("\n\n");

    print_variance(variance);

    return 0;
}

프로그램을 컴파일하고 실행합니다.

gcc variance_print.c -o variance_print -lm
./variance_print

예시 출력:

원본 숫자들: 10 20 30 40 50

분산 표현 방식:
1. 표준 포맷:   200.00
2. 과학적 표기법: 2.000000e+02
3. 정밀 포맷:    200.0000

주요 개선 사항:

  • 분산 계산을 위한 별도의 함수를 생성했습니다.
  • 여러 가지 분산 출력 포맷을 추가했습니다.
  • 분산을 표현하는 다양한 방법을 보여주었습니다.

요약

이 실험에서 C 언어로 숫자 집합의 평균을 계산하는 방법을 배웠습니다. 모든 값을 더하고 총 개수로 나누는 방식입니다. 또한, 평균으로부터의 제곱 편차의 합을 계산하고 숫자의 개수로 나누어 분산을 계산하는 방법을 배웠습니다. 이를 통해 평균 주변 데이터의 퍼짐 정도 또는 산포도를 측정할 수 있으며, 이는 통계 분석에 유용한 지표입니다.