티스토리 뷰
배열
변수 여러 개를 이어 놓은 것
- 메모리에 연속적으로 할당함
- 여러 개의 이름을 짓거나, 초기화하지 않아도 됨(한 번만 이름 지으면 됨)
- 숫자 첨자(인덱스)로 정보에 접근함
코드 예시
#include <iostream>
using namespace std;
int main() {
int a = 1;
int b = 1;
int c = 1;
int d = 1;
int e = 1;
int aa[5] = { 1,1,1,1,1 };
return 0;
}
배열 선언
자료형 배열 이름[배열 크기]
배열 이름
- A ~ Z
- a ~ z
- 숫자 0 ~9(중간, 끝만 가능 / 시작 불가능)
- _ (언더바)
- 대소문자 구분 가능
- 예약어 사용 불가능
배열 사용
배열 이름[첨자]
첨자: 인덱스 개념
배열은 0부터 시작함
코드 예시 1
#include <iostream>
using namespace std;
int main() {
int a[5];
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
a[4] = 5;
cout << "배열의 값 : " << a[0] << " " << a[1] << " " << a[2] << " " << a[3] << " " << a[4] << endl;
return 0;
}
출력 결과
코드 예시 2 (배열의 연산)
#include <iostream>
using namespace std;
int main() {
int a[5];
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
a[4] = 5;
int result = a[0] + a[2];
cout << result << endl;
result = a[0] - a[2];
cout << result << endl;
result = a[4] * a[1];
cout << result << endl;
result = a[3] / a[1];
cout << result << endl;
return 0;
}
출력 결과
코드 예시 3 (입력 / 출력)
#include <iostream>
using namespace std;
int main() {
int a[5];
cout << "배역 5칸에 들어갈 정수를 차례대로 입력하세요 : ";
cin >> a[0] >> a[1] >> a[2] >> a[3] >> a[4];
cout << "입력된 값 : " << a[0] << " " << a[1] << " " << a[2] << " " << a[3] << " " << a[4] << endl;
return 0;
}
출력 결과
배열의 첨자(범위)를 벗어나는 경우
- 접근은 가능하나, 이상한 값이 나옴
- 오류메시지가 출력되지 않는 경우가 많으니 주의 요함
코드 예시 4 (배열의 첨자 벗어날 경우)
#include <iostream>
using namespace std;
int main() {
int a[5] = { 1,2,3,4,5 };
cout << a[0] << a[1] << a[2] << a[3] << a[4] << endl;
cout << a[5];
return 0;
}
출력 결과
메모리 공간에 배열이 배정되었고,
a[0] ~ a[4]까지는 값을 넣었기 때문에 제대로 출력됨.
a[5]는 초기화 해주거나 값을 넣지 않음
메모리에 원래 남아 있던 쓰레기 값이 출력됨.
배열 초기화
중괄호{ }
중괄호 방법은 초기화 시에만 가능함(처음 선언해 줄 때)
초기값이 배열 요소보다 적다면 왼쪽부터 차례로 초기화하고 남은 배열요소는 0이 됨
코드 예시 1
#include <iostream>
using namespace std;
int main() {
int a[5] = { 1,2,3,4,5 }; // a라는 배열을 처음에 생성할 때만 중괄호{ } 사용
a[0] = 10;
cout << a[0] << a[1] << a[2] << a[3] << a[4] << endl;
return 0;
}
출력 결과
a[0]을 10으로 초기화함.
코드 예시 2
배열의 크기는 5개인데 3개만 선언할 경우
#include <iostream>
using namespace std;
int main() {
int a[5] = { 1,2,3 };
cout << a[0] << a[1] << a[2] << a[3] << a[4] << endl;
return 0;
}
출력 결과
왼쪽부터 차례로 초기화 한 후
나머지는 0으로 초기화함.
코드 예시 3
배열 초기화 : 한 번에 0으로 초기화 할 수도 있음
#include <iostream>
using namespace std;
int main() {
int a[5] = {0};
cout << a[0] << a[1] << a[2] << a[3] << a[4] << endl;
return 0;
}
출력 결과
a[0]에 0으로 초기화한 후
나머지 전부 0으로 초기화함.
배열 접근
배열 요소 개수가 생략된 형태도 있음
--> 이 경우에는 초기값 개수만큼 배열 요소 개수를 정하고 저장공간을 할당함
코드 예시 1
#include <iostream>
using namespace std;
int main() {
int a[] = { 1,2,3 }; // 배열의 크기를 정하지 않은 채로 초기화함. 자동으로 3칸 됨
cout << a[0] << a[1] << a[2];
return 0;
}
출력 결과
실수배열, 문자배열 등 여러 자료형으로 배열을 만들 수 있음
코드 예시 2(실수배열)
#include <iostream>
using namespace std;
int main() {
float a[3] = { 1.2, 4, 3.4 };
cout << a[0] << " " << a[1] << " " << a[2];
return 0;
}
출력 결과
배열에서의 반복문
실습 문제 1
배열을 이용하여 학생 3명의 키를 입력 받고 평균을 구하시오
#include <iostream>
using namespace std;
int main() {
int h[3];
int sum = 0;
float avg = 0;
for (int i = 0; i < 3; i++) {
cout << i + 1 << "번째 학생의 키를 입력하세요 : ";
cin >> h[i];
sum += h[i];
}
avg = sum / 3.0;
cout << "3명 학생의 평균은 " << avg << "입니다";
return 0;
}
출력 결과
sizeof 연산자
sizeof 연산자
sizeof 연산자 => 메모리에서의 크기(byte 단위)
ex) int -> 4byte , int arr[5] -> 20byte
배열 요소의 개수 = sizeof(배열명) / sizeof(배열요소)
여기서 배열명은 arr 처럼 전체 길이를 말함.
배열요소는 arr 전체 길이 중 한 칸 (예: arr[0])을 말함.
코드 예시
#include <iostream>
using namespace std;
int main() {
int h[3];
int sum = 0;
float avg = 0;
for (int i = 0; i < 3; i++) {
cout << i + 1 << "번째 학생의 키를 입력하세요 : ";
cin >> h[i];
sum += h[i];
}
// int 형 3개 --> 3개 X 4 byte = 12 byte
cout << "배열 전체 크기 : " << sizeof(h) << endl;
cout << "배열 요소 1개 크기 : " << sizeof(h[0]) << endl;
cout << "배열 요소 1개 크기 : " << sizeof(h[1]) << endl;
int count = sizeof(h) / sizeof(h[0]);
cout << "이 배열은 " << count << "칸 입니다";
//avg = sum / 3.0;
//cout << "3명 학생의 평균은 " << avg << "입니다";
return 0;
}
출력 결과
2차원 배열
2차원 배열
1차원 배열 줄을 줄 지어 놓은 것
2차원 배열 선언
자료형 배열 이름[크기][크기]
예시 ) int arr[3][5] : 5개 짜리를 세로로 3줄
코드 예시
#include <iostream>
using namespace std;
int main() {
int class1[5];
int class2[5];
int class3[5];
int class_3[3][5]; // 총 3학급이고, 한 학급에는 5명이 있음 (5칸 짜리가 3줄 있음)
return 0;
}
배열 사용
- 배열 이름[첨자][첨자]
- 배열은 0부터 시작
코드 예시
#include <iostream>
using namespace std;
int main() {
int class_3[3][5];
class_3[0][0] = 10;
class_3[1][4];
class_3[2][4];
return 0;
}
class_3[3][5] 이면 첨자에는 [행][열]에서 행에는 0 ~ 2까지, 열에는 0 ~ 4까지 들어갈 수 있음을 인지해야 한다.
실습 문제 1 (연산)
#include <iostream>
using namespace std;
int main() {
int age[3][5];
age[0][0] = 1;
age[0][1] = 2;
age[0][2] = age[0][0] + age[0][1]; // 1 + 2 = 3
cout << age[0][2]<< endl;
age[0][3] = age[0][0] - age[0][1]; // 1 - 2 = -1
cout << age[0][3] << endl;
age[0][4] = age[0][2] * age[0][3]; // 3 * (-1) = -3
cout << age[0][4] << endl;
age[1][0] = age[0][4] / age[0][1]; // -3 / 2 = -1.5 -> -1 출력
cout << age[1][0] << endl;
return 0;
}
출력 결과
실습 문제 2
#include <iostream>
using namespace std;
int main() {
int age[3][5];
age[0][0] = 1;
age[0][1] = 2;
cin >> age[0][2];
cout << age[0][0] << age[0][1] << age[0][2];
return 0;
}
출력 결과
배열의 첨자를 벗어나는 경우
- 접근은 가능하나, 이상한 값이 나옴
- 오류메시지가 출력되지 않는 경우가 많으니 주의 요함
실습 문제
#include <iostream>
using namespace std;
int main() {
int age[3][5];
age[0][0] = 1;
age[0][1] = 2;
cin >> age[0][2];
cout << age[0][0] << age[0][1] << age[0][2];
cout << endl << age[3][5];
return 0;
}
출력 결과
우리가 초기화해주지 않은
옆의 공간의 값을 출력하므로
이상한 값이 나옴.
배열은 첨자를 벗어나지 않도록 하는 것이 매우 중요함!!
2차원 배열 초기화
- 중괄호{{ }}
- 중괄호 방법은 초기화 시에만 가능함(선언 시)
- 초기값이 배열 요소보다 적다면 왼쪽부터 차례로 초기화하고 남은 배열요소는 0이 됨.
- 중괄호를 생략하고 초기화할 수도 있음.(안쪽 중괄호 생략 가능)
--> 이 경우 행 단위로 차례로 지정됨.
실습 문제 1
2차원 배열의 특정 요소 찾기
#include <iostream>
using namespace std;
int main() {
int age[3][5] = { {1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15} };
cout << age[2][3]; // 행: 2 -> {11, 12, 13, 14, 15} 열: 3 -> 14
return 0;
}
출력 결과
실습 문제 2
배열의 크기보다 값이 적게 초기화될 경우 나머지는 0으로 초기화됨
#include <iostream>
using namespace std;
int main() {
int age[3][5] = { {1,2,3}, {6,7,8,9,10}, {11,12,13,14,15} };
cout << age[0][4]; // 행: 0 -> {1, 2, 3} 열: 4 -> 값 없음
return 0;
}
출력 결과
1,2,3 뒤에 2칸이 남음.
이 남은 2칸은 0으로 초기화됨.
실습 문제 3
이중 for문으로 2차원 배열의 전체 값 조회
#include <iostream>
using namespace std;
int main() {
int age[3][5] = { {1,2,3}, {6,7,8,9,10}, {11,12,13,14,15} };
//cout << age[0][4]; // 행: 0 -> {1, 2, 3} 열: 4 -> 값 없음
// 3 행
for (int i = 0; i < 3; i++) {
// 각 행 당 5개의 요소를 가짐
for (int j = 0; j < 5; j++) {
cout << age[i][j] << " ";
} // 한 행을 출력함
cout << endl; // 줄바꿈
}
return 0;
}
출력 결과
실습 문제 4
안쪽 중괄호 생략 가능
#include <iostream>
using namespace std;
int main() {
int age[3][5] = { 1,2,3,6,7,8,9,10,11,12,13,14,15 };
//cout << age[0][4]; // 행: 0 -> {1, 2, 3} 열: 4 -> 값 없음
// 3 행
for (int i = 0; i < 3; i++) {
// 각 행 당 5개의 요소를 가짐
for (int j = 0; j < 5; j++) {
cout << age[i][j] << " ";
} // 한 행을 출력함
cout << endl; // 줄바꿈
}
return 0;
}
출력 결과
안쪽 중괄호를 모두 생략할 경우
앞(왼쪽)에서부터
차례대로 값을 넣고
뒤에 2개 남은 부분은 0으로 초기화한다.
실습 문제 5
중괄호 값을 0으로 초기화할 경우
#include <iostream>
using namespace std;
int main() {
int age[3][5] = {0};
//cout << age[0][4]; // 행: 0 -> {1, 2, 3} 열: 4 -> 값 없음
// 3 행
for (int i = 0; i < 3; i++) {
// 각 행 당 5개의 요소를 가짐
for (int j = 0; j < 5; j++) {
cout << age[i][j] << " ";
} // 한 행을 출력함
cout << endl; // 줄바꿈
}
return 0;
}
출력 결과
age[0][0]을 0으로 초기화한 후
나머지를 0으로 초기화한다.
실습 문제 6
배열을 이용하여 학생 5명의 시험점수를 입력받고 평균을 구하시오.
#include <iostream>
using namespace std;
int main() {
int score[5];
int sum = 0;
float avg = 0.0;
cout << "첫 번째 학생의 시험점수를 입력하세요 : ";
cin >> score[0];
cout << "두 번째 학생의 시험점수를 입력하세요 : ";
cin >> score[1];
cout << "세 번째 학생의 시험점수를 입력하세요 : ";
cin >> score[2];
cout << "네 번째 학생의 시험점수를 입력하세요 : ";
cin >> score[3];
cout << "다섯 번째 학생의 시험점수를 입력하세요 : ";
cin >> score[4];
sum = score[0] + score[1] + score[2] + score[3] + score[4];
avg = sum / 5.0;
cout << "5명 학생의 평균은 " << avg << "입니다" << endl;
return 0;
}
출력 결과
위의 코드를 for문을 사용하여 표현하기
#include <iostream>
using namespace std;
int main() {
int score[5];
int sum = 0;
float avg = 0.0;
/*
cout << "첫 번째 학생의 시험점수를 입력하세요 : ";
cin >> score[0];
cout << "두 번째 학생의 시험점수를 입력하세요 : ";
cin >> score[1];
cout << "세 번째 학생의 시험점수를 입력하세요 : ";
cin >> score[2];
cout << "네 번째 학생의 시험점수를 입력하세요 : ";
cin >> score[3];
cout << "다섯 번째 학생의 시험점수를 입력하세요 : ";
cin >> score[4];
sum = score[0] + score[1] + score[2] + score[3] + score[4];
*/
for (int i = 0; i < 5; i++) {
cout << i + 1 << "번째 학생의 시험점수를 입력하세요 : ";
cin >> score[i];
sum += score[i];
}
avg = sum / 5.0;
cout << "5명 학생의 평균은 " << avg << "입니다" << endl;
return 0;
}
출력 결과
동일한 결과가 나오는 것을 확인할 수 있다.
'C++' 카테고리의 다른 글
배열 실습 문제 모음 (1) | 2024.12.06 |
---|---|
문자열 (0) | 2024.12.06 |
함수의 선언 및 호출 (0) | 2024.12.05 |
반복문(while, do while) (0) | 2024.12.05 |
반복문(for, 이중 for문 - 별찍기) (0) | 2024.10.21 |