티스토리 뷰

C++

배열의 선언과 접근 및 반복문

yoooon1212 2024. 12. 5. 14:56

 

배열

변수 여러 개를 이어 놓은 것

- 메모리에 연속적으로 할당함

- 여러 개의 이름을 짓거나, 초기화하지 않아도 됨(한 번만 이름 지으면 됨)

- 숫자 첨자(인덱스)로 정보에 접근함

 

코드 예시

#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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함