소개
이 실습에서는 C 프로그래밍으로 데이터 집합의 중앙값 (median) 을 계산하는 방법을 배웁니다. 이 실습은 다음 단계를 다룹니다: 숫자 배열을 읽고 정렬하고, 중간 요소 또는 두 중간 요소의 평균을 찾고, 중앙값을 출력하는 단계입니다. 단계별 지침은 C 프로그래밍을 사용하여 이러한 작업을 구현하는 과정 (배열 읽기, 정렬 및 출력 함수 포함) 을 안내합니다. 이 실습은 C 에서 통계 분석 기법을 이해하고 적용하는 실질적인 방법을 제공합니다.
배열 읽기 및 정렬
이 단계에서는 중앙값을 계산하기 위한 준비로 숫자 배열을 읽고 정렬하는 방법을 배웁니다. 이 작업을 수행하기 위해 C 프로그래밍을 사용할 것입니다.
먼저 배열 읽기 및 정렬을 구현할 C 파일을 생성해 봅시다.
cd ~/project
nano median_calculator.c
이제 다음 코드를 파일에 추가합니다.
#include <stdio.h>
#define MAX_SIZE 100
// 배열 요소를 읽는 함수
void readArray(int arr[], int *n) {
printf("요소 개수를 입력하세요 (최대 %d): ", MAX_SIZE);
scanf("%d", n);
printf("%d개의 요소를 입력하세요:\n", *n);
for (int i = 0; i < *n; i++) {
scanf("%d", &arr[i]);
}
}
// 버블 정렬 알고리즘을 사용하여 배열을 정렬하는 함수
void sortArray(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// 요소 교환
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
// 배열을 출력하는 함수
void printArray(int arr[], int n) {
printf("정렬된 배열: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int arr[MAX_SIZE];
int n;
readArray(arr, &n);
sortArray(arr, n);
printArray(arr, n);
return 0;
}
프로그램을 컴파일하고 실행합니다.
gcc median_calculator.c -o median_calculator
./median_calculator
예시 출력:
요소 개수를 입력하세요 (최대 100): 5
5개의 요소를 입력하세요:
42
15
7
23
11
정렬된 배열: 7 11 15 23 42
코드를 살펴보겠습니다.
readArray()함수는 사용자로부터 배열 요소를 입력받습니다.sortArray()함수는 버블 정렬 알고리즘을 사용하여 오름차순으로 요소를 정렬합니다.printArray()함수는 정렬된 배열을 출력합니다.main()함수는 이러한 함수들을 연결합니다.
버블 정렬 알고리즘의 시간 복잡도는 O(n²) 입니다. 이 알고리즘은 이해하기 쉽지만 대규모 데이터 집합에는 효율적이지 않습니다.
중앙값 (Median) 계산
이 단계에서는 이전 프로그램을 확장하여 정렬된 배열에서 중앙값을 계산합니다. 중앙값은 중앙에 있는 요소 하나 또는 두 개의 중앙 요소의 평균입니다.
기존 파일을 열고 코드를 수정합니다.
cd ~/project
nano median_calculator.c
중앙값을 계산하는 새로운 함수를 추가하여 코드를 업데이트합니다.
#include <stdio.h>
#define MAX_SIZE 100
// 이전 함수 (readArray, sortArray, printArray) 는 동일하게 유지
// 중앙값을 계산하는 새로운 함수
float calculateMedian(int arr[], int n) {
// 요소 개수가 홀수이면 중앙 요소를 반환
if (n % 2 != 0) {
return arr[n / 2];
}
// 요소 개수가 짝수이면 두 중앙 요소의 평균을 반환
int mid1 = arr[(n / 2) - 1];
int mid2 = arr[n / 2];
return (mid1 + mid2) / 2.0;
}
int main() {
int arr[MAX_SIZE];
int n;
readArray(arr, &n);
sortArray(arr, n);
printArray(arr, n);
// 중앙값을 계산하고 출력
float median = calculateMedian(arr, n);
printf("중앙값: %.2f\n", median);
return 0;
}
업데이트된 프로그램을 컴파일하고 실행합니다.
gcc median_calculator.c -o median_calculator
./median_calculator
홀수 개의 요소에 대한 예시 출력:
요소 개수를 입력하세요 (최대 100): 5
5개의 요소를 입력하세요:
42
15
7
23
11
정렬된 배열: 7 11 15 23 42
중앙값: 15.00
짝수 개의 요소에 대한 예시 출력:
요소 개수를 입력하세요 (최대 100): 6
6개의 요소를 입력하세요:
42
15
7
23
11
8
정렬된 배열: 7 8 11 15 23 42
중앙값: 13.00
중앙값 계산에 대한 주요 사항:
- 요소 개수가 홀수이면 중앙값은 중앙에 있는 요소입니다.
- 요소 개수가 짝수이면 중앙값은 두 중앙 요소의 평균입니다.
- 중앙값을 계산하기 전에 배열을 정렬해야 합니다.
calculateMedian() 함수는 두 경우 모두 처리합니다.
- 정수 나눗셈을 사용하여 중앙 인덱스를 찾습니다.
- 요소 개수가 홀수인지 짝수인지 확인합니다.
- 적절한 중앙값 값을 반환합니다.
중앙값 출력
이 마지막 단계에서는 중앙값 계산 프로그램을 개선하여 더 자세한 출력을 제공하고 중앙값을 표현하는 다양한 방법을 보여줍니다.
기존 파일을 열어 최종 수정을 합니다.
cd ~/project
nano median_calculator.c
개선된 출력 형식으로 코드를 업데이트합니다.
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
// 이전 함수 (readArray, sortArray, printArray, calculateMedian) 는 동일하게 유지
void printDetailedMedianInfo(int arr[], int n, float median) {
printf("\n--- 중앙값 계산 세부 정보 ---\n");
printf("요소 총 개수: %d\n", n);
printf("배열 요소: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n\n중앙값 계산:\n");
if (n % 2 != 0) {
printf("요소 개수가 홀수\n");
printf("중앙 인덱스: %d\n", n / 2);
printf("중앙 요소: %d\n", arr[n / 2]);
} else {
printf("요소 개수가 짝수\n");
printf("두 중앙 인덱스: %d 및 %d\n", (n / 2) - 1, n / 2);
printf("중앙 요소: %d 및 %d\n", arr[(n / 2) - 1], arr[n / 2]);
}
printf("\n최종 중앙값: %.2f\n", median);
}
int main() {
int arr[MAX_SIZE];
int n;
readArray(arr, &n);
sortArray(arr, n);
float median = calculateMedian(arr, n);
// 정렬된 배열 출력
printArray(arr, n);
// 자세한 중앙값 정보 출력
printDetailedMedianInfo(arr, n, median);
return 0;
}
업데이트된 프로그램을 컴파일하고 실행합니다.
gcc median_calculator.c -o median_calculator
./median_calculator
홀수 개의 요소에 대한 예시 출력:
요소 개수를 입력하세요 (최대 100): 5
5개의 요소를 입력하세요:
42
15
7
23
11
정렬된 배열: 7 11 15 23 42
--- 중앙값 계산 세부 정보 ---
요소 총 개수: 5
배열 요소: 7 11 15 23 42
중앙값 계산:
요소 개수가 홀수
중앙 인덱스: 2
중앙 요소: 15
최종 중앙값: 15.00
짝수 개의 요소에 대한 예시 출력:
요소 개수를 입력하세요 (최대 100): 6
6개의 요소를 입력하세요:
42
15
7
23
11
8
정렬된 배열: 7 8 11 15 23 42
--- 중앙값 계산 세부 정보 ---
요소 총 개수: 6
배열 요소: 7 8 11 15 23 42
중앙값 계산:
요소 개수가 짝수
두 중앙 인덱스: 2 및 3
중앙 요소: 11 및 15
최종 중앙값: 13.00
이 단계의 주요 개선 사항:
- 새로운 함수
printDetailedMedianInfo()추가 - 중앙값 계산에 대한 포괄적인 정보 제공
- 홀수 및 짝수 요소 수에 대한 다양한 시나리오 표시
- 사용자의 중앙값 계산 이해도 향상
요약
이 실험에서는 숫자 배열을 읽고 버블 정렬 알고리즘을 사용하여 정렬하고 중앙값 계산을 위한 데이터를 준비하는 방법을 배웠습니다. 정렬된 배열은 콘솔에 출력되어 첫 번째 단계의 성공적인 완료를 보여줍니다. 버블 정렬 알고리즘은 이해하기 쉽지만, 대규모 데이터 세트에 대해서는 가장 효율적인 방법이 아닌 O(n²) 의 시간 복잡도를 가지고 있습니다. 다음 단계에서는 정렬된 배열의 중앙값을 찾는 데 집중할 것입니다.
다음 단계는 배열의 크기에 따라 중앙 요소 또는 두 중앙 요소의 평균을 식별하는 것입니다. 이 단계는 중앙값이 정확하게 계산되고 사용자에게 제시되도록 합니다.



