배열(Array)

이인혁·2024년 5월 3일

C

목록 보기
6/23

1. 배열이란?

배열은 연관된 데이터를 모아서 관리하기 위해서 사용되는 DataType입니다.

예를 들어서 '좋은 아파트'의 가구별 가족 수를 저장 및 갱신하는 프로그램을 만든다고 가정해보겠습니다. '좋은 아파트'는 10층까지 있고 각층에는 네 가구씩 살고있습니다. 그렇다면 가구별 가족 수의 기록을 위해서는 총 40개의 변수를 선언해야 하는데, 프로그래머에게 있어 너무 끔찍한 일입니다. 40개의 가구를 어찌저찌 다 선언했다고 하더라도 그 40개의 변수를 사용하기도 만만치 않은 일일겁니다. 여기서 배열을 사용하면 그 수에 상관없이 한번에 많은 수의 변수를 선언할 수 있고, 변수를 아주 쉽게 관리할수도 있습니다.

쉽게 말해 동일한 DataType의 저장공간이 여러개 필요할때 쓸 수 있는 편리한 기능을 배열(Array)이라고 합니다. 여기서는 1차원 구조의 배열에 대해서만 살펴보겠습니다.

2. 배열의 특징

배열의 선언

1차원 배열의 선언에 필요한 것은 배열이름, 자료형, 길이정보입니다.
(DataType) 배열명[길이정보]

int numArr[10];

위의 배열 선언문이 의미하는 바는 'int형 변수 10개로 이루어진 arr이라는 이름의 배열을 선언해라' 입니다. 여기서 배열의 위치 정보를 나타내는 숫자를 인덱스라고 합니다. 인덱스는 1부터가 아닌 0부터 시작합니다.

배열명(주소값)

메모리에 변수든 배열이든 공간을 할당받게 되면, 그 메모리의 주소값도 같이 할당받습니다. 배열명은 배열이 할당된 메모리공간의 선두번지 주소값(주소상수)입니다. 배열은 데이터 저장공간을 덩어리로 할당받아서 저장할 DataType사이즈로 나눠서 사용하기 때문에 각 저장공간이 인접해서 만들어지게 됩니다.

예를 들면, int형은 변수의 크기가 4byte이기 때문에 주소값도 4씩 차이가 나게 됩니다.

배열의 요소 저장

일반 변수랑 다르게 배열은 요소저장이 아주 간단합니다. 가볍게 for문을 쓰면 모든 요소에 접근이 용이합니다. 배열에 0부터 99까지 저장하고 짝수만 찾는 코드를 짜보겠습니다.

예시

#include <stdio.h>
int main() {
    int array[100];
    for (int i = 0; i < 100; i++) {
		array[i] = i;
	}
	for (int i = 0; i < 100; i++) {
		if (array[i] % 2 == 0) {
			printf("array[%d] = %d 짝수입니다.\n", i, array[i]);
		}
	}
	return 0;
}

결과

array[0] = 0 짝수입니다.
array[2] = 2 짝수입니다.
array[4] = 4 짝수입니다.
array[6] = 6 짝수입니다.
array[8] = 8 짝수입니다.
array[10] = 10 짝수입니다.
array[12] = 12 짝수입니다.
array[14] = 14 짝수입니다.
array[16] = 16 짝수입니다.
array[18] = 18 짝수입니다.
array[20] = 20 짝수입니다.
array[22] = 22 짝수입니다.
array[24] = 24 짝수입니다.
array[26] = 26 짝수입니다.
array[28] = 28 짝수입니다.
array[30] = 30 짝수입니다.
array[32] = 32 짝수입니다.
array[34] = 34 짝수입니다.
array[36] = 36 짝수입니다.
array[38] = 38 짝수입니다.
array[40] = 40 짝수입니다.
array[42] = 42 짝수입니다.
array[44] = 44 짝수입니다.
array[46] = 46 짝수입니다.
array[48] = 48 짝수입니다.
array[50] = 50 짝수입니다.
array[52] = 52 짝수입니다.
array[54] = 54 짝수입니다.
array[56] = 56 짝수입니다.
array[58] = 58 짝수입니다.
array[60] = 60 짝수입니다.
array[62] = 62 짝수입니다.
array[64] = 64 짝수입니다.
array[66] = 66 짝수입니다.
array[68] = 68 짝수입니다.
array[70] = 70 짝수입니다.
array[72] = 72 짝수입니다.
array[74] = 74 짝수입니다.
array[76] = 76 짝수입니다.
array[78] = 78 짝수입니다.
array[80] = 80 짝수입니다.
array[82] = 82 짝수입니다.
array[84] = 84 짝수입니다.
array[86] = 86 짝수입니다.
array[88] = 88 짝수입니다.
array[90] = 90 짝수입니다.
array[92] = 92 짝수입니다.
array[94] = 94 짝수입니다.
array[96] = 96 짝수입니다.
array[98] = 98 짝수입니다.

이번에는 숫자를 하나 입력 받고 그 숫자부터 100개의 숫자의 짝수를 찾는 조금 응용된 코드를 짜보겠습니다.

예시

#include <stdio.h>
int main() {
	int min = 0;
	printf("min값을 입력하세요: ");
	scanf_s("%d", &min);
	int array[100];
	for (int i = min; i < min + 100; i++) {
		array[i - min] = i;
	}
	for (int i = 0; i < 100; i++) {
		if (array[i] % 2 == 0) {
			printf("%d는 짝수입니다. \n", array[i]);
		}
	}
	return 0;
}

결과

20는 짝수입니다.
22는 짝수입니다.
24는 짝수입니다.
26는 짝수입니다.
28는 짝수입니다.
30는 짝수입니다.
32는 짝수입니다.
34는 짝수입니다.
36는 짝수입니다.
38는 짝수입니다.
40는 짝수입니다.
42는 짝수입니다.
44는 짝수입니다.
46는 짝수입니다.
48는 짝수입니다.
50는 짝수입니다.
52는 짝수입니다.
54는 짝수입니다.
56는 짝수입니다.
58는 짝수입니다.
60는 짝수입니다.
62는 짝수입니다.
64는 짝수입니다.
66는 짝수입니다.
68는 짝수입니다.
70는 짝수입니다.
72는 짝수입니다.
74는 짝수입니다.
76는 짝수입니다.
78는 짝수입니다.
80는 짝수입니다.
82는 짝수입니다.
84는 짝수입니다.
86는 짝수입니다.
88는 짝수입니다.
90는 짝수입니다.
92는 짝수입니다.
94는 짝수입니다.
96는 짝수입니다.
98는 짝수입니다.
100는 짝수입니다.
102는 짝수입니다.
104는 짝수입니다.
106는 짝수입니다.
108는 짝수입니다.
110는 짝수입니다.
112는 짝수입니다.
114는 짝수입니다.
116는 짝수입니다.
118는 짝수입니다.

배열은 생성하면서 초기값을 부여할 수 있습니다. 또 초기값을 부여한 경우에는 배열요소의 개수를 생략할 수 있습니다.
예) double dArray[] = { 3.4,4.5,7.8,1.2,10.0,18.7,2.2 };
배열을 생성하면 항상 그 배열의 길이정보를 변수하나에 저장해놓는것이 좋습니다. 나중에 함수라는 것을 만들 때 용이하게 사용하기 때문입니다.

이번에는 배열의 길이를 저장하고 길이만큼 출력해보겠습니다.

예시

#include <stdio.h>
int main() {
	double dArray[] = { 3.4,4.5,7.8,1.2,10.0,18.7,2.2 };
	//배열요소의 갯수 = 배열의 전체 바이트 수 / 배열 요소의 바이트 수
	int length = sizeof(dArray) / sizeof(dArray[0]);
	for (int i = 0; i < length; i++) {
		printf("dArray[%d] = %lf\n", i, dArray[i]);
	}
	dArray[5] = 123.456;
	for (int i = 0; i < length; i++) {
		printf("dArray[%d] = %lf\n", i, dArray[i]);
	}
	return 0;
}

결과

dArray[0] = 3.400000
dArray[1] = 4.500000
dArray[2] = 7.800000
dArray[3] = 1.200000
dArray[4] = 10.000000
dArray[5] = 18.700000
dArray[6] = 2.200000
dArray[0] = 3.400000
dArray[1] = 4.500000
dArray[2] = 7.800000
dArray[3] = 1.200000
dArray[4] = 10.000000
dArray[5] = 123.456000
dArray[6] = 2.200000

3. 배열 문제

대표적인 구구단 문제를 간단하게 4문제 정도 풀겠습니다.

1. 이중 for문을 이용해서 구구단(2단 ~ 9단) 출력해보세요.

예시

#include <stdio.h>
int main() {
	printf("1번문제\n");
	for (int i = 2; i < 10; i++) {
		printf("----%d단----\n", i);
		for (int j = 1; j < 10; j++) {
			printf("%d X %d = %d\n", i, j, i * j);
		}
	}
    return 0;
}

결과

1번문제
----2단----
2 X 1 = 2
2 X 2 = 4
2 X 3 = 6
2 X 4 = 8
2 X 5 = 10
2 X 6 = 12
2 X 7 = 14
2 X 8 = 16
2 X 9 = 18
----3단----
3 X 1 = 3
3 X 2 = 6
3 X 3 = 9
3 X 4 = 12
3 X 5 = 15
3 X 6 = 18
3 X 7 = 21
3 X 8 = 24
3 X 9 = 27
----4단----
4 X 1 = 4
4 X 2 = 8
4 X 3 = 12
4 X 4 = 16
4 X 5 = 20
4 X 6 = 24
4 X 7 = 28
4 X 8 = 32
4 X 9 = 36
----5단----
5 X 1 = 5
5 X 2 = 10
5 X 3 = 15
5 X 4 = 20
5 X 5 = 25
5 X 6 = 30
5 X 7 = 35
5 X 8 = 40
5 X 9 = 45
----6단----
6 X 1 = 6
6 X 2 = 12
6 X 3 = 18
6 X 4 = 24
6 X 5 = 30
6 X 6 = 36
6 X 7 = 42
6 X 8 = 48
6 X 9 = 54
----7단----
7 X 1 = 7
7 X 2 = 14
7 X 3 = 21
7 X 4 = 28
7 X 5 = 35
7 X 6 = 42
7 X 7 = 49
7 X 8 = 56
7 X 9 = 63
----8단----
8 X 1 = 8
8 X 2 = 16
8 X 3 = 24
8 X 4 = 32
8 X 5 = 40
8 X 6 = 48
8 X 7 = 56
8 X 8 = 64
8 X 9 = 72
----9단----
9 X 1 = 9
9 X 2 = 18
9 X 3 = 27
9 X 4 = 36
9 X 5 = 45
9 X 6 = 54
9 X 7 = 63
9 X 8 = 72
9 X 9 = 81

2. 배열을 만들고 구구단의 9단을 저장하고 배열의 저장된 값을 출력해보세요.

예시

#include <stdio.h>
int main() {
	int arr1[9];
	printf("\n2번문제\n");
	printf("----9단----\n");
	for (int i = 0; i < 9; i++) {
		arr1[i] = 9 * (i + 1);
	}
	for (int i = 0; i < 9; i++) {
		printf("9 X %d = %d\n", i+1, arr1[i]);
	}
	return 0;
}

결과

2번문제
----9단----
9 X 1 = 9
9 X 2 = 18
9 X 3 = 27
9 X 4 = 36
9 X 5 = 45
9 X 6 = 54
9 X 7 = 63
9 X 8 = 72
9 X 9 = 81

3. 구구단을 2단 ~ 9단까지 배열에 저장하고 배열의 저장된 값을 출력해보세요.

예시

#include <stdio.h>
int main() {
	int arr1[72];
    int n = 0;
	printf("\n3번문제\n");
	for (int i = 2; i < 10; i++) {
		for (int j = 0; j < 9; j++) {
			arr1[n] = (j + 1) * i;
			n++;
		}
	}
	n = 0;
	for (int i = 2; i < 10; i++) {
		printf("----%d단----\n", i);
		for (int j = 0; j < 9; j++) {
			printf("%d X %d = %d\n", i, j+1, arr2[n]);
			n++;
		}
	}
	return 0;
}

결과

3번문제
----2단----
2 X 1 = 2
2 X 2 = 4
2 X 3 = 6
2 X 4 = 8
2 X 5 = 10
2 X 6 = 12
2 X 7 = 14
2 X 8 = 16
2 X 9 = 18
----3단----
3 X 1 = 3
3 X 2 = 6
3 X 3 = 9
3 X 4 = 12
3 X 5 = 15
3 X 6 = 18
3 X 7 = 21
3 X 8 = 24
3 X 9 = 27
----4단----
4 X 1 = 4
4 X 2 = 8
4 X 3 = 12
4 X 4 = 16
4 X 5 = 20
4 X 6 = 24
4 X 7 = 28
4 X 8 = 32
4 X 9 = 36
----5단----
5 X 1 = 5
5 X 2 = 10
5 X 3 = 15
5 X 4 = 20
5 X 5 = 25
5 X 6 = 30
5 X 7 = 35
5 X 8 = 40
5 X 9 = 45
----6단----
6 X 1 = 6
6 X 2 = 12
6 X 3 = 18
6 X 4 = 24
6 X 5 = 30
6 X 6 = 36
6 X 7 = 42
6 X 8 = 48
6 X 9 = 54
----7단----
7 X 1 = 7
7 X 2 = 14
7 X 3 = 21
7 X 4 = 28
7 X 5 = 35
7 X 6 = 42
7 X 7 = 49
7 X 8 = 56
7 X 9 = 63
----8단----
8 X 1 = 8
8 X 2 = 16
8 X 3 = 24
8 X 4 = 32
8 X 5 = 40
8 X 6 = 48
8 X 7 = 56
8 X 8 = 64
8 X 9 = 72
----9단----
9 X 1 = 9
9 X 2 = 18
9 X 3 = 27
9 X 4 = 36
9 X 5 = 45
9 X 6 = 54
9 X 7 = 63
9 X 8 = 72
9 X 9 = 81

4. 구구단을 2단부터 9단까지 저장하고 단수를 입력받아서 배열에 저장된 단수를 출력해보세요.

예시

#include <stdio.h>
int main() {
	int arr1[72];
	int n = 0;
    printf("\n4번문제\n");
	for (int i = 2; i < 10; i++) {
		for (int j = 0; j < 9; j++) {
			arr1[n] = (j + 1) * i;
			n++;
		}
	}
	printf("단수를 입력하세요 : ");
	scanf_s("%d", &n);
	if(n >= 2 && n <= 9){
		printf("----%d단----\n", n);
		for (int i = 0; i < 9; i++) {
			printf("%d X %d = %d\n", n, i + 1, arr1[9 * (n - 2) + i]);
		}
	}
	else {
		printf("단수를 잘못입력하셨습니다.");
	}
	return 0;
}

결과

4번문제
단수를 입력하세요 : 4
----4단----
4 X 1 = 4
4 X 2 = 8
4 X 3 = 12
4 X 4 = 16
4 X 5 = 20
4 X 6 = 24
4 X 7 = 28
4 X 8 = 32
4 X 9 = 36
profile
게임개발공부블로그

0개의 댓글