반응형
배열의 문제점
- 원소의 개수가 미리 파악이 안되는 경우 문제 발생
- 학생 성적 평균 예의 경우, 학생수를 모른다면? 아주 큰 배열로 선언할 수도 있으나, 비효율적임
- 실제 학생수에 맞는 배열 선언이 필요
- 학생수는 실행 도중 사용자로부터 입력을 받을 수도 있음
→ 동적 메모리 할당의 필요성 !
동적 메모리 할당
- 동적 메모리 할당 (Dynamic Memory Allocation)
- 실행 도중, 추가적인 메모리 영역을 배정받고자 하는 경우에 사용 malloc() 함수가 대표적으로 사용됨
void *malloc(int size)
(char *) malloc(100); (int *) malloc(sizeof(int)*20);
- 실행 도중, 추가적인 메모리 영역을 배정받고자 하는 경우에 사용 malloc() 함수가 대표적으로 사용됨
- C++는 “new 객체명”과 같은 방식 주로 사용(보다 편리)
- 예) int *ptr = new int[10]; // ptr은 10개의 원소로 이루어진 배열을 가리킴
예제) 학생들의 성적을 입력 받아 반별, 과목별 평균을 계산하고 출력하기
- 학급별 학생수가 다르고, 또한 프로그램 개발 시점에서 이를 미리 알지 못한다.
- 모든 학급에 적용 가능한 프로그램을 작성하시오.
- 단, 실행 시 학급 인원수를 먼저 입력할 수 있다.
#include <iostream>
using namespace std;
const int CLASS = 3;
const int SUBJECT = 3;
const int STUDENT = 10;
int main()
{
int score[CLASS][SUBJECT][STUDENT] = {
90,80,70,60,57,40,96,86,76,66,
56,90,87,70,60,50,40,96,86,76,
66,58,90,82,70,60,58,40,96,86,
76,66,57,94,80,70,68,50,40,96,
86,76,66,56,94,80,70,61,50,47,
96,86,76,66,56,90,80,70,60,58,
44,96,86,76,68,56,90,87,70,60,
51,40,96,86,76,66,56,97,80,74,
60,50,40,96,86,76,66,56,95,83};
//각 반별 과목별 평균
cout << "각 반별 과목별 평균" << endl;
for (int cls = 0; cls < CLASS; cls++) {
for (int subject = 0; subject < SUBJECT; subject++) {
int sum = 0;
for (int student = 0; student < STUDENT; student++) {
sum += score[cls][subject][student];
}
double average = (double)sum / STUDENT;
cout << "CLASS = " << cls << " SUBJECT = " << subject << " AVERAGE = " << average << endl;
}
}
//과목별 전체 평균
cout << "\n" << "과목별 전체 평균" << endl;
for (int subject = 0; subject<SUBJECT; subject++){
int sum = 0;
for (int cls = 0; cls < CLASS; cls++)
for (int student = 0; student < STUDENT; student++)
sum += score[cls][subject][student];
double average = (double)sum / (CLASS + STUDENT);
cout << "SUBJECT = " << subject << " AVEARAGE = " << average << endl;
}
}
반응형
'공부 > 자료구조 | 알고리즘' 카테고리의 다른 글
[자료구조] 연결리스트 만들고 출력하기 Linked List (0) | 2019.08.01 |
---|---|
[자료구조] 단순 연결리스트 노드 삽입 (0) | 2019.07.30 |
[자료구조] 단순 연결리스트 (0) | 2019.07.25 |
[자료구조] 배열과 포인터 / 2차원 배열과 포인터 예제 (0) | 2019.07.24 |
[자료구조] 배열 / 배열을 이용한 연도 및 분기별 통계 예제 (0) | 2019.07.18 |