언어/C

[C언어] 다차원 배열

SOo • 2023. 2. 19. 00:16

💕 2차원 배열 

 

int arr1[3][4]; // 세로가 3, 가로가 4인 int형 2차원 배열  
int arr2[2][6]; // 세로가 2, 가로가 6인 int형 2차원 배열

 

정리하면 배열의 이름이 arr이고 배열요소의 자료형이 TYPE이라고 할때, 2차원 배열의 선언형태는 다음과 같다. 

TYPE arr[세로길이][가로길이];

 

프로그램 사용자로부터 층별로 두 기구가 사는 4층짜리 빌라의 가구별 거주인원 수를 입력 받는 예제를 작성해보자. 

#include <stdio.h>

int main()
{
	int villa[4][2]; //세로가 4, 가로가 2인 배열 생성 
	int popu, i, j;

	//가구별 거주인원 입력 받기
	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 2; j++)
		{
			printf("%d층 %d호 인구수: ", i + 1, j + 1);
			scanf("%d", &villa[i][j]);
		}
	}
	//빌라의 층별 인구수 출력하기 
	for (i = 0; i < 4; i++)
	{
		popu = 0;
		popu = popu + villa[i][0];
		popu = popu + villa[i][1];
		printf("%d층 인구수: %d \n", i + 1, popu);
	}
	return 0;
}

 

RESULT:

인구수 임의로 설정

 

한 층에 2호가 있는 4층짜리 빌라가 있다고 생각하면 쉽다. 1차원 배열을 이용하여 묻는 것보다 훨씬 효율적으로 코드를 작성함을 알 수 있다. 

 

🤦‍♀ 과정

1.  반복문을 활용하여 1층 ~ 4층, 1호 ~ 2호까지를 반복되게끔 한다. ( 인구수 물어볼 목적 ) 

2. 빌라의 층별 인구수를 출력하기 위해 가로는 고정된 채로 층별로 반복문을 돌린다. 

 

💕 2차원 배열 선언과 동시에 초기화하기

 

#include <stdio.h>

int main()
{
	int i, j;

	// 2차원 배열 초기화의 예 1
	int arr1[3][3] = {
		{1,2,3},
	{4,5,6},
	{7,8,9}
	};

	// 2차원 배열 초기화의 예 2
	int arr2[3][3] = {
		{1},
	{4,5},
	{7,8,9}
	};

	int arr3[3][3] = { 1,2,3,4,5,6,7, };

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

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

	return 0;
}

 

RESULT:

 

 


[2차원 배열의 활용]

 

🙌 예제 1)

가로의 길이가 9, 세로의 길이가 3인 int형 2차원 배열을 선언하여 구구단 중 2단, 3단, 4단을 저장하자. 그리고 제대로 저장이 되었는지 확인하기 위한 출력을 진행하기 위한 예제를 작성하자. 

 

 

🤦‍♀ 생각 과정

1. 먼저 세로의 길이 3, 가로의 길이 9인 arr[3][9]를 선언해준다. 

2. 행 (단)을 의미하는 변수 i, 열을 의미하는 변수 j를 만들어 반복문을 만들어준다. 

 

 

답안: 

#include <stdio.h>

int main()
{
	int arr[3][9]; // 가로가 9, 세로가 3인 int형 2차원 배열 생성
	int i, j; // 행과 열의 반복 변수 생성

	for (i = 0; i < 3; i++)
		for (j = 0; j < 9; j++)
			arr[i][j] = (i + 2) * (j + 1); //구구단 저장

	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 9; j++)
			printf("%4d", arr[i][j]); // 구구단 출력
		printf("\n");
	}

	return 0;
			
}

 

 

RESULT:

 

✔ 보충할 부분 

1. 구구단을 저장하는 부분과 출력하는 부분을 같이 하려다 보니 원하는 답안이 나오지 않았다. 생각을 분리하는 과정이 중요할 것 같다. 예를 들어 이 문제의 경우 구구단을 하는 과정이 1) 반복문을 통해 배열에 구구단의 결과값을 저장 2) 반복문을 통해 저장한 결과값을 출력 이다.