728x90

<배열>

1. 배열 개요

1) 배열이란?
같은 자료형의 변수 여러개를 하나로 묶은 자료형
- 배열을 이용하여 많은 변수를 한번에 선언하고, 저장된 데이터를 처리할 수 있음

2. 배열 선언과 사용

1) 배열의 선언
자료형 변수명[배열 크기];
- 자료형 뒤에 변수 이름 뒤에 필요한 변수의 개수 명시
- 예시) 

 int x[10];



2) 배열의 원소
- 배열의 각 원소는 하나의 일반 변수와 동일하게 취급

3) 배열의 인덱스(첨자)
- 배열의 각 원소의 위치를 나타내는 대괄호 안의 번호: x[0], x[1], ...
0부터 시작

4) 배열 입력받기
- 각각의 요소에 대해 scanf와 자료형에 맞는 서식 지정자를 사용하여 입럭

>> 문자열 입력받기
(1) 반복문과 %c를 사용하여 하나씩 입력받기
- 문자 하나하나 엔터로 입력받는 방법

for(int i = 0; i<n; i++){
	scanf("%c", &x[i]);
}



(2) %s를 사용하여 한번에 입력받기
- 문자열을 한번에 입력하는 방법

- 문자열의 끝에 '\0' (NULL) 문자가 자동으로 저장됨

scanf("%s", x);



(3) getchar()를 이용하여 \n(줄바꿈)까지 문자열의 하나로 입력받는 방법
- 문자열을 한번에 입력 받을 수 있음
- 엔터를 친다고 입력이 끝나지 않음
- 줄바꿈도 배열의 요소로 저장된다.

for(int i = 0; i<n; i++){
	x[i] = getchar();
}



>> 숫자(정수) 입력받기
(1) 반복문과 서식지정자 %d를 사용하여 하나씩 입력받기
- 숫자 하나하나 엔터, 스페이스 바로 입력받는 방법

for(int i = 0; i<n; i++){
	scanf("%d", &x[i]);
}



5) 배열 초기화
- 배열 선언과 동시에 초기화: 중괄호{} 안에 배열의 초기화 값을 쉼표로 구분하여 나열

int x[5] = {1, 2, 3, 4, 5};



- 배열의 크기보다 초기값의 개수가 작으면: 앞원소부터 차례로 채워지고, 나머지는 0으로 채워짐
- 배열의 크기보다 초기값의 개수가 크면: 컴파일 오류
- 배열의 크기를 지정하지 않으면: 배열의 크기가 초기화에 사용된 원소 수로 결정됨

sizeof(배열): 배열의 크기(길이) 반환
sizeof(배열의요소): 배열 요소 하나의 크기(바이트) 반환

3. 다차원 배열

1) 다차원 배열
첨자가 두개 이상인 배열
- 배열을 여러 개 묶어 배열의 배열을 만들면 된다.

2) 2차원 배열의 선언
- 자료형 변수명[크기][크기]
ex)

int x[3][5];



3) 2차원 배열의 원소
- 두개의 첨자를 이용하여 표현
- 각 차원의 첨자는 0부터 시작
x[0][0] x[0][1] x[0][2]
  x[1][0] x[1][1] x[1][2]
  x[2][0] x[2][1] x[2][2]
- 각각의 원소는 하나의 일반 변수와 동일하게 취급

4) 2차원 배열과 반복문
- 예시) 모든 학생의 점수 출력

for(int i = 0; i < 3; i++){
	for(int j = 0; j < 5; j++){
		printf("%d ", x[i][j]);
	}
	printf("\n");
}



5) 2차원 배열 초기화

 

(1) 중첩 중괄호를 사용하여 행별로 초깃값 설정
- 값이 지정되지 않은 원소는 0으로 초기화

ex)

int x[3][5] = { {10, 20, 30}, {40, 50, 60, 70} };



(2) 하나의 중괄호를 사용하는 형태도 가능
- [0][0]부터 차례대로 채워짐

ex)

int x[3][5] = {10, 20, 30, 40, 50, 60, 70}



6) 배열 전체를 0으로 초기화 하기
- 단일 중괄호, 중첩 중괄호 둘다 사용가능

int x[3][5] = { {0} };

 

int x[3][5] = {0};



7) 배열 크기를 초깃값 개수로 정하기
- 첫번째 첨자만 생략가능, 두번째 첨자는 생략 불가능

ex)

int x[ ][2] = { {0,1}, {0}, {0} };


8) 3차원 이상의 배열
- 2차원 배열과 비슷한 방법으로 확장
- 2개의 반의 학생 3명의 국어와 영어 성적 처리

int score[2][3][2] = { { {20, 90}, {70,36}, {30, 50} }, { {30, 90}, {80, 40}, {40, 60} } };



4. 함수에 배열 전달

1) 함수에 1차원 배열 전달하기
- 배열 크기 명시해도 의미없음 >> 보통 생략
- 배열의 크기가 필요한 경우 별도의 함수 인자로 전달

ex)

void print_arr(int x[], int n);



2) 함수에 다차원 배열 전달하기
- 첫번째 첨자의 크기는 의미없음 >> 보통 생략
두번째 이후 첨자는 명시 필요

ex)

void print_arr( int x[][5], int n);






728x90

+ Recent posts