7. 배열
7.1 1차원 배열
📌 배열 Array
배열
이란 같은 종류의 데이터들이 순차적으로 저장되어 있는 자료 구조를 말한다.
인덱스
란 배열 원소의 번호를 말한다.
📌 선언
배열의 선언은 데이터형
배열명
[
배열 크기
]
;
순으로 한다.
이 때 배열의 크기를 꼭 입력해야 한다.
다음은 배열 선언의 예시이다.
#include <iostream>
using namespace std;
int main() {
int myArray[10];
}
여기서 데이터형은 배열 원소들이 int
형이라는 것을 의미한다.
배열명은 배열을 사용할 때 사용할 이름이 myArray
라는 것을 의미한다.
배열 크기는 배열 원소의 개수가 10개
라는 것을 의미한다.
배열 선언은 다양하게 할 수 있다.
#include <iostream>
using namespace std;
int main() {
int myArray[10];
float myArray1[5];
char myArray2[50];
char myArray3[50], myArray4[10]; // 2개의 문자형 배열을 동시에 선언할 수 있다.
int index, myArray5[10]; // 일반 변수와 배열을 동시에 선언할 수 있다.
}
📌 초기화
배열의 초기화는 index 0
부터 시작한다.
#include <iostream>
using namespace std;
int main() {
int myArray[5] = {1, 2, 3, 4, 5};
// myArray[0] = 1
// myArray[1] = 2
// myArray[2] = 3
// myArray[3] = 4
// myArray[4] = 5
}
📌 주의 사항
{}
: 선언부에서만 사용 가능하다.
#include <iostream>
using namespace std;
int main() {
int myArray[3] = {1, 2, 3};
}
{}
: 배열 크기는 생략 가능하다.
배열의 크기가 주어지지 않으면 자동으로 초기값의 개수만큼 배열의 크기로 할당된다.
#include <iostream>
using namespace std;
int main() {
int myArray[] = {1, 2, 3};
}
0
으로 모두 초기화 가능하다.
#include <iostream>
using namespace std;
int main() {
int myArray[3] = {0};
}
초기화하고 남은 배열은 0
으로 초기화한다.
#include <iostream>
using namespace std;
int main() {
int myArray[3] = {1, 2};
// myArray[0] = 1
// myArray[1] = 2
// myArray[2] = 0
}
인덱스 크기
를 초과할 수 없다.
#include <iostream>
using namespace std;
int main() {
int myArray[3] = {1, 2, 3, 4} // Error
}
상수
, 매크로 상수
로 크기를 지정할 수 있다.
#include <iostream>
using namespace std;
#define MAX 100
int main() {
int myArray[MAX];
}
문자형 배열의 초기화는 다음과 같이 한다.
#include <iostream>
using namespace std;
int main() {
char myArray[3] = {'a', 'b', 'c'};
}
모든 문자열의 끝에는 null
(1 byte)이 숨겨져있다.
#include <iostream>
using namespace std;
int main() {
char myArray[4] = "abc"; // 문자 3개 + null (4 byte)
}
다음은 배열을 사용하여 성적을 입력받고 평균 점수와 학점을 계산하는 소스 코드이다.
#include <iostream>
using namespace std;
#define SUBJECTS 5
int avg_score(int score[]);
char choose_score(int result_avg);
int main() {
int score[SUBJECTS], result_avg;
char result_score;
for(int i = 0; i < SUBJECTS; i++){
printf("%d 번째 점수를 입력하세요: ", i+1);
cin >> score[i];
}
result_avg = avg_score(score);
printf("\n평균 점수: %d\n", result_avg);
result_score = choose_score(result_avg);
printf("\n학점은 %c 입니다.\n", result_score);
return 0;
}
int avg_score(int score[]) {
int result_sum = 0;
for(int i = 0; i < SUBJECTS; i++)
result_sum += score[i];
int result_avg = result_sum / SUBJECTS;
return result_avg;
}
char choose_score(int result_avg) {
char result_score;
switch (result_avg / 10) {
case 10:
case 9:
result_score = 'A';
break;
case 8:
result_score = 'B';
break;
case 7:
result_score = 'C';
break;
case 6:
result_score = 'D';
break;
default:
result_score = 'F';
break;
}
return result_score;
}
7.2 2차원 배열
📌 2차원 배열
2차원 배열의 선언은 데이터형
배열명
[ 행의 크기 ]
[ 열의 크기 ]
;
순으로 한다.
다음은 2차원 배열 선언의 예시이다.
#include <iostream>
using namespace std;
int main() {
int myArray[3][5];
}
📌 초기화
배열의 초기화는 index 0
부터 시작한다.
#include <iostream>
using namespace std;
int main() {
int myArray[3][5] = {
{1, 2, 3, 4, 5}, // 첫 번째 행의 원소들의 초기값
{6, 7, 8, 9, 10}, // 두 번째 행의 원소들의 초기값
{11, 12, 13, 14, 15} // 세 번째 행의 원소들의 초기값
};
}
문자형 배열의 초기화는 다음과 같이 한다.
#include <iostream>
using namespace std;
int main() {
char alphabet[4][10] = {"abc", "def", "ghi", "Hello"};
char animal[3][10] = {"강아지", "고양이", "나무늘보"};
}
끝을 나타내기 위해서 모든 문자열의 끝에는 null
(1 byte)이 자동으로 삽입된다.
한글은 2byte를 사용한다.
다음은 배열을 사용하여 여러 학생들의 성적을 입력받고 평균 점수와 학점을 계산하는 소스 코드이다.
#include <iostream>
using namespace std;
#define STUDENTS 3
#define SUBJECTS 5
int avg_score(int score[]);
char choose_score(int result_avg);
int main() {
int score[STUDENTS][SUBJECTS], result_avg[STUDENTS];
char result_score[STUDENTS];
for(int i=0; i<STUDENTS;i++){
printf("\n-- %d 번째 학생 --\n", i+1);
for(int j=0;j<SUBJECTS;j++){
printf("%d 번째 점수를 입력하세요: ", j+1);
cin >> score[i][j];
}
result_avg[i] = avg_score(score[i]);
printf("\n>> 평균 점수: %d\n", result_avg[i]);
result_score[i] = choose_score(result_avg[i]);
printf(">> 학점은 %c 입니다.\n", result_score[i]);
}
return 0;
}
int avg_score(int score[]) {
int result_sum = 0, result_avg = 0;
for(int i=0;i<SUBJECTS;i++)
result_sum += score[i];
result_avg = result_sum / SUBJECTS;
return result_avg;
}
char choose_score(int result_avg) {
char result_score;
switch (result_avg / 10) {
case 10:
case 9:
result_score = 'A';
break;
case 8:
result_score = 'B';
break;
case 7:
result_score = 'C';
break;
case 6:
result_score = 'D';
break;
default:
result_score = 'F';
break;
}
return result_score;
}
7.3 3차원 배열
📌 3차원 배열
3차원 배열의 선언은 데이터형
배열명
[ 면의 개수 ]
[ 행의 크기 ]
[ 열의 크기 ]
;
순으로 한다.
다음은 3차원 배열 선언의 예시이다.
#include <iostream>
using namespace std;
int main() {
int myArray[3][3][5];
}