학이시습

[혼공C] 5주차_배열 알아보기 본문

혼공학습단/혼공C

[혼공C] 5주차_배열 알아보기

dbswndud 2024. 2. 4. 17:10

혼공C 커리큘럼


Chapter 8

01. 배열의 선언과 사용

배열은 여러 개의 동일한 자료형을 저장할 때 사용됩니다.

 

배열의 선언

배열도 다른 자료형처럼 선언을 통해서 저장 공간을 확보합니다.

배열의 선언은 다음과 같이 합니다.

자료형 배열명[요소 개수]

 

int ary[5] ← 이렇게 배열을 선언하는 것은 int형 변수 5개를 하나씩 선언하는 거소가 크기가 같습니다. 하지만 메모리에 할당되는 방식이 다릅니다. 

int형 변수 5개를 하나씩 선언하면 각 변수는 독립덕인 저장 공간을 갖고 각각의 이름을 사용합니다. 하지만 배열은 저장 공간이 연속으로 할당되며 전체 공간의 이름이 된다는 차이점이 있습니다.

 

배열의 나누어진 조각을 배열 요소라고 합니다.

배열 요소는 배열명에 첨자를 붙여 사용하며 첨자는 0부터 시작합니다.

배열명[첨자]

 

배열의 사용

배열을 사용할 때와 배열 요소를 사용할 때 대괄호([])안의 숫자는 의미가 다릅니다.

선언할 때는 배열 요소의 전체 개수를 표시하며, 사용할 때는 각 요소가 배열에서 몇 번째에 있는지 의미합니다.

 

배열 초기화

배열도 변수와 마찬가지로 최초 할당된 저장 공간에는 쓰레기 값이 저장되어 있습니다.

배열에 원하는 값을 가지려면 선언과 동시에 초기화해야 합니다.

 

기본적인 초기화 방법

자료형 배열명[요소 개수] = {값, 값, ..., 값};
// ex} int ary[5] = {1, 2, 3, 4, 5}

 

초기값이 배열 요소의 개수보다 적으면 0번째부터 차례로 초기화하고 남은 배열 요소는 모두 0으로 채워집니다.

int ary[5] = {1, 2, 3}

 

배열 요소 개수가 생략된 형태도 있는데 이 경우 컴파일러는 초깃값 개수만 크 배열 요소 개수를 정하고 저장 공간을 할당합니다.

int ary[] = {1, 2}			// 요소의 개수는 2개가 됩니다

 

배열과 반복문

배열은 보통 많은 양의 데이터를 처리하므로 하나씩 떼어 사용하지 않고 반복문과 함께 사용합니다.

 

sizeof 연산자를 활용한 배열 처리

많은 양의 데이터 중 배열 요소의 개수가 바뀌면 배열을 처리하는 반복문을 모두 수정해야 하는 부담이 있습니다.

이 경우 배열 요소의 개수를 직접 계산하여 반복문에 사용하는 방법이 있습니다.

배열 요소의 개수를 구하는 방법은 다음과 같습니다.

sizeof(배열명) / sizeof(배열 요소)

 

확인 문제

1. 다음 설명에 따라 배열을 선언해보세요.

① 정수 5개를 저장할 배열 int ary[5];
② 실수 10개를 저장할 배열 double ary[5];
③ 배열 요소 개수가 3개인 int형 배열 int ary[3]
④ 첨자의 최댓값이 4인 char형 배열 char ary[5];

 

 

2. 다음 그림과 일치하도록 배열을 선언하고 초기화해보세요.

int ary[6] = {1, 2, 3}

 

 

3. 다음과 같이 초기화된 A 배열의 값을 복사하여 B 배열을 채운 후 출력하는 프로그램을 작성해 보세요.

#include <stdio.h>

int main(void) {
	int A[3] = { 1, 2, 3 };
	int B[10];
	int i;

	for (i = 0; i < 10; i++) {
		B[i] = A[i % 3];
	}

	for (i = 0; i < 10; i++) {
		printf("%5d", B[i]);
	}

	return 0;
}

 

02. 문자를 저장하는 배열

char형 배열의 선언과 초기화

char형 배열을 선언할 때 반드시 문자열보다 하나 이상 크게 선언해야 합니다.

여분의 공간이 필요한 이유는 널 문자(\0)를 저장하기 위해서입니다.

 

널 문자의 용도

남는 배열 요소에는 자동으로 0이 채워집니다. 이렇게 char형 배열에 저장된 0은 널 문자라고 부릅니다.

널 문자는 문자열의 끝을 표시합니다.

널 문자가 문자열 끝에 없다면 널 문자를 만날 때까지 값을 출력합니다.

 

char형 배열 선언 시 주의점

  • 배열의 크기는 최대한 넉넉하게 선언해야 합니다.
  • 배열 요소의 개수는 최소한 '문자열의 길이+1'이어야 합니다.

문자열 대입

문자열도 다른 변수처럼 얼마든지 새로운 문자열을 저장할 수 있습니다.

하지만 일반 변수처럼 대입 연산자를 사용하는 것은 불가능하므로 strcpy 함수를 사용합니다.

strcpy(첫 번째 인수, 두 번째 인수)

첫 번째 인수에 두 번째 인수를 저장하기 때문에 첫 번째 인수에는 문자열 상수가 올 수 없습니다.

두 번째 인수에는 문자열 또는 char형 배열을 사용할 수 있습니다

 

문자열 전용 입출력 함수 : gets, puts

scanf 함수는 빈칸 전까지만 입력합니다. 따라서 문장을 입력할 때는 빈칸을 포함하여 문자열을 입력하는 gets 함수가 필요합니다. 그리고 gets 함수의 짝인 puts 함수도 필요합니다.

 

빈칸을 포함하여 문자열을 입력하는 gets 함수

gets 함수의 사용법은 간단합니다.

gets(char형 배열명)

gets 함수는 문자열 중간에 빈칸이나 탭 문자를 사용할 수 있으며 Enter를 누르기 전까지 전체를 하나의 문자열로 배열에 저장합니다.

gets 함수는 입력할 배열의 크기를 검사하지 않으므로 배열의 크기를 고려하며 사용해야 합니다.

 

gets 함수와 짝을 이뤄 문자열을 출력하는 puts 함수

puts 함수는 문자열 상수나 char형 배열의 배열명을 주면 문자열을 화면에 출력합니다.

puts(배열명)

printf 함수의 문자열 출력 기능과 같지만 puts 함수는 자동으로 줄 바꿈을 합니다.

 

확인 문제

1. 다음 중 char형 배열이 바르게 초기화된 것은 O, 그렇지 않은 것은 X 하세요.

① char str[80] = { 'p', 'i', 'g' }; O
② char str[] = "elephant"; O
③ char str[5] = "apple"; X
④ char str[2] = { "sun", "moon"}; X

 

 

2. 다음 중 널 문자의 상수 표현법으로 맞는 것을 고르세요 (  )

    ① NULL

    ② /0

    ③ '0'

    ④ \0

 

 

3. 다음 코드는 2개의 문자열을 입력받아 위치를 바꾼 후에 출력합니다. 빈칸을 채워 프로그램을 완성하세요.

#include <stdio.h>
#include <string.h>

int main(void) {
	char str1[80], str[80];
	char temp[80];

	printf("두 문자열 입력 : ");
	scanf("%s %s", str1, str2);
	printf("바꾸기 전 : %s, %s\n", str1, str2);

	strcpy(_____, _____);
	strcpy(_____, _____);
	strcpy(_____, _____);

	return 0
}
temp, str1
str1, str2
str2, temp