소개
이 실습에서는 C 프로그래밍에서 사분위수 범위 (IQR) 를 계산하는 방법을 배웁니다. 이 실습에서는 숫자 배열을 읽고 정렬하는 단계, 첫 번째 사분위수 (Q1) 와 세 번째 사분위수 (Q3) 의 위치를 찾는 단계, 그리고 Q3 와 Q1 의 차이로서 IQR 을 계산하는 단계를 다룹니다. 이 실습을 마치면 C 를 사용하여 이러한 통계 분석을 수행하는 방법에 대한 확실한 이해를 얻게 될 것입니다.
이 실습에서는 C 프로그래밍에서 사분위수 범위 (IQR) 를 계산하는 방법을 배웁니다. 이 실습에서는 숫자 배열을 읽고 정렬하는 단계, 첫 번째 사분위수 (Q1) 와 세 번째 사분위수 (Q3) 의 위치를 찾는 단계, 그리고 Q3 와 Q1 의 차이로서 IQR 을 계산하는 단계를 다룹니다. 이 실습을 마치면 C 를 사용하여 이러한 통계 분석을 수행하는 방법에 대한 확실한 이해를 얻게 될 것입니다.
이 단계에서는 사분위수 범위 (IQR) 를 계산하기 위한 준비로 숫자 배열을 읽고 정렬하는 방법을 배웁니다. 이 작업을 수행하기 위해 C 프로그래밍을 사용할 것입니다.
먼저 IQR 계산을 위한 C 소스 파일을 만들어 봅시다.
cd ~/project
nano iqr_calculation.c
이제 배열을 읽고 정렬하는 초기 코드를 작성해 봅시다.
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
// 정수를 비교하기 위한 qsort 함수
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
int main() {
int numbers[MAX_SIZE];
int n, i;
// 요소의 개수를 읽습니다.
printf("요소의 개수를 입력하세요 (최대 %d): ", MAX_SIZE);
scanf("%d", &n);
// 배열 요소 입력
printf("%d개의 정수를 입력하세요:\n", n);
for (i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
// 배열을 정렬합니다.
qsort(numbers, n, sizeof(int), compare);
// 정렬된 배열을 출력합니다.
printf("정렬된 배열: ");
for (i = 0; i < n; i++) {
printf("%d ", numbers[i]);
}
printf("\n");
return 0;
}
프로그램을 컴파일합니다.
gcc -o iqr_calculation iqr_calculation.c
프로그램을 실행하고 예시 입력을 제공합니다.
./iqr_calculation
예시 출력:
요소의 개수를 입력하세요(최대 100): 6
6개의 정수를 입력하세요:
45 22 14 65 97 72
정렬된 배열: 14 22 45 65 72 97
코드를 자세히 살펴보겠습니다.
compare() 함수는 qsort()에 의해 정수를 정렬하는 데 사용됩니다.qsort()를 사용하여 배열을 오름차순으로 정렬합니다.이 단계에서는 이전 프로그램을 수정하여 Q1 과 Q3 위치를 찾아 사분위수 범위 (IQR) 를 계산합니다.
이전 소스 파일을 엽니다.
cd ~/project
nano iqr_calculation.c
IQR 을 계산하도록 코드를 업데이트합니다.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX_SIZE 100
// 정수를 비교하기 위한 qsort 함수
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
// Q1 과 Q3 를 계산하는 함수
double calculateQuartile(int *arr, int n, double position) {
int index = floor(position);
double fraction = position - index;
if (fraction == 0) {
return arr[index - 1];
} else {
return arr[index - 1] * (1 - fraction) + arr[index] * fraction;
}
}
int main() {
int numbers[MAX_SIZE];
int n, i;
double q1, q3, iqr;
// 요소의 개수를 읽습니다.
printf("요소의 개수를 입력하세요 (최대 %d): ", MAX_SIZE);
scanf("%d", &n);
// 배열 요소 입력
printf("%d개의 정수를 입력하세요:\n", n);
for (i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
// 배열을 정렬합니다.
qsort(numbers, n, sizeof(int), compare);
// Q1 과 Q3 위치를 계산합니다.
double q1_pos = 0.25 * (n + 1);
double q3_pos = 0.75 * (n + 1);
// Q1 과 Q3 를 계산합니다.
q1 = calculateQuartile(numbers, n, q1_pos);
q3 = calculateQuartile(numbers, n, q3_pos);
// IQR 을 계산합니다.
iqr = q3 - q1;
// 결과를 출력합니다.
printf("정렬된 배열: ");
for (i = 0; i < n; i++) {
printf("%d ", numbers[i]);
}
printf("\n");
printf("Q1: %.2f\n", q1);
printf("Q3: %.2f\n", q3);
printf("IQR: %.2f\n", iqr);
return 0;
}
업데이트된 프로그램을 컴파일합니다.
gcc -o iqr_calculation iqr_calculation.c -lm
프로그램을 실행하고 예시 입력을 제공합니다.
./iqr_calculation
예시 출력:
요소의 개수를 입력하세요(최대 100): 7
7개의 정수를 입력하세요:
12 15 18 22 25 30 35
정렬된 배열: 12 15 18 22 25 30 35
Q1: 15.00
Q3: 30.00
IQR: 15.00
코드의 주요 내용:
calculateQuartile() 함수는 짝수 및 홀수 크기의 배열 모두를 처리합니다.이 마지막 단계에서는 사분위수 범위 (IQR) 결과를 명확하고 정보적으로 제시하는 데 중점을 둡니다.
이전 소스 파일을 엽니다.
cd ~/project
nano iqr_calculation.c
IQR 출력을 개선하고 설명적인 텍스트를 추가하도록 코드를 업데이트합니다.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX_SIZE 100
// 이전 함수 (compare 및 calculateQuartile) 는 동일하게 유지됩니다.
int main() {
int numbers[MAX_SIZE];
int n, i;
double q1, q3, iqr;
// 더 나은 프레젠테이션을 위해 화면을 지웁니다.
printf("\033[2J\033[1;1H");
// IQR 소개
printf("사분위수 범위 (IQR) 계산기\n");
printf("=====================================\n\n");
// 요소의 개수를 읽습니다.
printf("요소의 개수를 입력하세요 (최대 %d): ", MAX_SIZE);
scanf("%d", &n);
// 배열 요소 입력
printf("%d개의 정수를 입력하세요:\n", n);
for (i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
// 배열을 정렬합니다.
qsort(numbers, n, sizeof(int), compare);
// Q1 과 Q3 위치를 계산합니다.
double q1_pos = 0.25 * (n + 1);
double q3_pos = 0.75 * (n + 1);
// Q1 과 Q3 를 계산합니다.
q1 = calculateQuartile(numbers, n, q1_pos);
q3 = calculateQuartile(numbers, n, q3_pos);
// IQR 을 계산합니다.
iqr = q3 - q1;
// 자세한 출력
printf("\n데이터 분석 결과\n");
printf("--------------------\n");
printf("원본 데이터 집합: ");
for (i = 0; i < n; i++) {
printf("%d ", numbers[i]);
}
printf("\n\n");
// 형식화된 IQR 출력
printf("사분위수 분석:\n");
printf("1 사분위수 (Q1): %.2f\n", q1);
printf("3 사분위수 (Q3): %.2f\n", q3);
printf("사분위수 범위 (IQR): %.2f\n", iqr);
// IQR 해석
printf("\n해석:\n");
printf("IQR 은 데이터 중앙 50%%의 분포를 나타냅니다.\n");
printf("IQR 이 작을수록 데이터가 더 일관적임을 나타내고,\n");
printf("IQR 이 클수록 데이터의 변동성이 더 큼을 나타냅니다.\n");
return 0;
}
업데이트된 프로그램을 컴파일합니다.
gcc -o iqr_calculation iqr_calculation.c -lm
프로그램을 실행하고 예시 입력을 제공합니다.
./iqr_calculation
예시 출력:
사분위수 범위(IQR) 계산기
=====================================
요소의 개수를 입력하세요(최대 100): 7
7개의 정수를 입력하세요:
12 15 18 22 25 30 35
데이터 분석 결과
--------------------
원본 데이터 집합: 12 15 18 22 25 30 35
사분위수 분석:
1사분위수 (Q1): 15.00
3사분위수 (Q3): 30.00
사분위수 범위 (IQR): 15.00
해석:
IQR은 데이터 중앙 50%의 분포를 나타냅니다.
IQR이 작을수록 데이터가 더 일관적임을 나타내고,
IQR이 클수록 데이터의 변동성이 더 큼을 나타냅니다.
주요 개선 사항:
이 실험에서는 먼저 C 프로그래밍에서 숫자 배열을 읽고 정렬하는 방법을 배웠습니다. C 소스 파일을 만들고 qsort() 함수를 사용하여 배열 요소를 읽고 정렬하는 초기 코드를 작성했습니다. 그런 다음 정렬된 배열을 출력하여 정렬 과정을 확인했습니다.
다음으로, 이전 프로그램을 수정하여 첫 번째 사분위수 (Q1) 와 세 번째 사분위수 (Q3) 의 위치를 찾고 IQR 을 Q3 - Q1 로 계산하여 사분위수 범위 (IQR) 를 계산합니다. 마지막으로 계산된 IQR 을 출력합니다.