오버헤드프레스 2023. 3. 21. 22:40

배열의 선언

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

기존 int형 변수를 하나씩 선언하지 않고, 하나의 이름으로 한꺼번에 확보한다.

 

int형요소가 5개인 배열을 선언하는 예는 다음과 같다.

int ary[5];

int : 자료형

ary : 배열명

5 : 요소 개수

 

예제를 통해 알아보자.

 

#include<stdio.h>

int main()
{
	int ary[5];   //int형 요소 5개의 배열 선언  
	
	ary[0] = 10;  //첫 번째 배열 요소에 10 대입 
	ary[1] = 20;  //두 번째 배열 요소에 20 대입 
	ary[2] = ary[0] + ary[1];  //첫 번째와 두 번째 요소를 더해 세 번째 요소에 저장 
	scanf("%d", &ary[3]);   //키보드로 입력받아 네 번째 요소에 저장 
	
	printf("%d\n", ary[2]);  //세 번째 배열 요소 출력 
	printf("%d\n", ary[3]);
	printf("%d\n", ary[4]);  //마지막 배열 요소는 쓰레기 값 
	
	return 0;
}

scanf를 통해 50을 입력받았으며 ary[2]는 ary[0]+ary[1]이므로 30, 마지막으로  입력받은 50을 출력한다.

 

 

배열의 사용

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

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

이 값이 첨자이며, 배열의 첨자는 0부터 시작하므로 '최대 배열 요소 개수 - 1'까지만 사용한다.

 

int ary[5]  --> 선언할 때 (배열의 개수 5개)
ary[0] = 10;  -->배열 요소를 사용할 때(배열에서의 위치 : 첫 번째 배열 요소)

 

배열 초기화

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

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

 

초기화 방법들은 다음과 같다.

초기화 1. 기본적인 초기화 방법

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

초기화 2. 초깃값이 배열 요소의 개수보다 적은 경우

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

초기화 3. 자동 초기화 기능을 사용하면 배열 요소가 아무리 많아도 모든 요소를 쉽게 0으로 초기화할 수 있다.

int ary2[1000] = {0};

초기화 4. 배열 요소 개수가 생략된 형태도 있다.

int ary3[] = {1, 2, 3};

초기화 5. double형 배열과 char형 배열을 선언하고 초기화한다.

각각의 자료형에 맞게 double형 배열은 실수 값으로 초기화, char형 배열은 문자로 초기화한다.

double ary4[5] = {1.0, 2.1, 3.2, 4.3, 5.4};
char ary5[5] = {'a', 'p', 'p', 'l', 'e'};

 

배열 초기화는 선언 시 최초 한 번만 가능하다. 그 이후에는 배열 요소에 일일이 값을 대입해야 한다.

 

 

배열과 반복문

반복문을 사용해서 성적 처리 프로그램을 작성해 보자.

 

#include<stdio.h>

int main()
{
	int score[5];                //다섯 과목의 성적을 입력할 int형 배열 선언 
	int i;                       //반복 제어 변수 
	int total = 0;               //총점을 누적할 변수 
	double avg;                //평균을 누적할 변수 
	
	for(i = 0; i < 5; i++)      //i가 0부터 4까지 5번 반복 
	{
		scanf("%d", &score[i]); //각 배열 요소에 성적 입력 
	 } 
	 
	 for(i = 0; i < 5; i++)    
	 {
	 	total += score[i];      //성적을 누적하여 총점 계산 
     }
     avg = total / 5.0;         //평균 계산 
     
     for(i = 0; i < 5; i++)
     {
     	printf("%5d", score[i]);  //성적 출력 
	 }
	 printf("\n");
	 
	 printf("평균 : %.1lf\n", avg);  //평균 출력 
	
	return 0;
}

 

 

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

배열은 보통 많은 양의 데이터를 처리하므로 반복문 사용이 필수다.

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

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

배열 요소의 개수는 다음과 같이 구한다.

예제를 통해 자세히 알아보자.

 

#include<stdio.h>

int main()
{
	int score[5];                 
	int i;                       
	int total = 0;                
	double avg;                
	int count;         //배열요소의 개수를 저장할 변수 
	
	count = sizeof(score) / sizeof(score[0]);   //배열 요소의 개수 계산 
	
	for(i = 0; i < count; i++)      //11행에서 계산한 count만큼 반복 
	{
		scanf("%d", &score[i]); 
	 } 
	 
	 for(i = 0; i < count; i++)    //11행에서 계산한 count만큼 반복   
	 {
	 	total += score[i];      
     }
     avg = total / (double)count;         //총합을 count로 나누어 평균 계산 
     
     for(i = 0; i < count; i++)          //11행에서 계산한 count만큼 반복 
     {
     	printf("%5d", score[i]);  
	 }
	 printf("\n");
	 
	 printf("평균 : %.1lf\n", avg);  
	
	return 0;
}

11행에서 배열 요소의 개수를 계산한다. sizeof 연산자를 배열명에 사용하면 배열 전체의 크기를 바이트 단위로 계산합니다.

 

count = sizeof(score) / sizeof(score[0]);
       ㄴ배열 전체 크기(20바이트)  ㄴ배열 요소 하나의 크기(4바이트)
ㄴ배열 요소의 개수(5)

 

다음은 문자를 저장하는 배열을 정리하겠다.