반응형
동적 메모리 할당을 사용한 배열 평균 구하기
학생 수를 입력받고, 해당 학생들의 점수를 동적 메모리 할당을 통해 저장한 후, 평균 점수를 구해 출력하는 프로그램을 작성하세요.
사용 개념:
동적 메모리 할당(malloc, free)
반복문(for)
입출력(scanf, printf)
풀이 방법
- 학생 수 입력받기:
- scanf를 사용하여 사용자로부터 학생 수를 입력받습니다.
- 동적 메모리 할당:
- malloc을 사용하여 입력된 학생 수만큼의 메모리를 할당하고, 학생 점수를 저장할 배열을 생성합니다.
- 학생 점수 입력받기:
- for 반복문을 사용해 각 학생의 점수를 입력받아 동적 배열에 저장합니다.
- 평균 점수 계산:
- 반복문을 사용해 입력된 점수의 총합을 구한 후, 평균 점수를 계산합니다.
- 결과 출력 및 메모리 해제:
- 평균 점수를 출력하고, free 함수를 사용해 동적 메모리를 해제합니다.
코드
#include <stdio.h>
#include <stdlib.h>
int main() {
int n; // 학생 수를 저장할 변수
printf("학생 수를 입력하세요: ");
scanf("%d", &n);
// 1. 동적 메모리 할당으로 학생 점수 배열 생성
int *scores = (int *)malloc(n * sizeof(int));
if (scores == NULL) {
printf("메모리 할당에 실패했습니다.\n");
return 1; // 메모리 할당 실패 시 프로그램 종료
}
// 2. 학생 점수를 입력받습니다.
int sum = 0; // 점수 총합을 저장할 변수
for (int i = 0; i < n; i++) {
printf("학생 %d의 점수를 입력하세요: ", i + 1);
scanf("%d", &scores[i]);
sum += scores[i]; // 입력된 점수를 합산
}
// 3. 평균 점수를 계산하고 출력합니다.
double average = (double)sum / n;
printf("평균 점수: %.2lf\n", average);
// 4. 동적 메모리 해제
free(scores);
return 0; // 프로그램이 정상 종료됨을 알립니다.
}
코드 설명
- 변수 선언 및 입력받기:
- int n;은 학생 수를 저장할 변수입니다.
- scanf("%d", &n);을 사용해 사용자로부터 학생 수를 입력받습니다.
- 동적 메모리 할당:
- int *scores = (int *)malloc(n * sizeof(int));는 학생 수만큼 int형 배열을 동적으로 생성합니다.
- malloc은 할당된 메모리의 시작 주소를 반환합니다.
- 메모리 할당에 실패하면 NULL을 반환하므로, 이를 확인해 메모리 할당 실패 시 프로그램을 종료합니다.
- 학생 점수 입력 및 누적합 계산:
- for 반복문을 통해 각 학생의 점수를 scanf로 입력받아 scores 배열에 저장하고, 입력된 점수를 sum에 더합니다.
- 평균 점수 계산 및 출력:
- double average = (double)sum / n;은 총합을 학생 수로 나누어 평균 점수를 계산합니다.
- printf("평균 점수: %.2lf\n", average);는 평균 점수를 소수점 두 자리까지 출력합니다.
- 동적 메모리 해제:
- free(scores);는 동적 메모리 할당으로 생성된 메모리를 해제해 메모리 누수를 방지합니다.
반응형
'프로그래밍 > C' 카테고리의 다른 글
[C언어-응용문제] 배열에서 최댓값과 최솟값 찾기 (0) | 2024.11.23 |
---|---|
[C언어-응용문제] 문자열에서 특정 문자의 개수 세기 (0) | 2024.11.21 |
[C언어-응용문제] 파일에 텍스트 저장 및 읽기 (1) | 2024.11.10 |
[C언어-응용문제] 학생 점수 관리 프로그램 (구조체 문제) (1) | 2024.11.09 |
[C언어-응용문제] 숫자의 합 구하기(for, while) (1) | 2024.11.08 |