배열(2)

 

배열은 사용자가 의미상의 연관이 있는 동일한 자료형에 속한 여러개의 자료들을 묶어 하나의 이름으로 정의한 자료형이다.

예를 들어 50명으로 구성된 한 학급의 시험 성적을 관리하는 프로그램을 보자. 각 학생의 시험 성적을 50개의 독립된 정수형 변수로 나타내었을 때 평균값을 구하고 성적을 등수대로 출력하는 프로그램을 보자

 

 

 int score1. score2, ...... score50;

scanf (%d %d ......%d",score1,score2....... score50);

sum = score1 + score2 + ....... score50;

average = sum /50

 

50개의 int형 변수를 이용하면 변수선언이 길어지고 프로그램이 복잡해진다.

만약 학생이 10000명이면 더욱 복잡해지고 코딩 하기가 어려워 진다.

이럴 경우 배열을 사용하여 프로그램을 작성하면, 간단하면서 변수의 연관성을 나타낼 수 있다.

위의 변수 선언은 다음과 같이 할 수 있다

 

int score[50];

 

 

array02.png

 

배열의 각 원소는 대괄호의 색인으로 나타낸다. 첫 번째 원소는 score[0], 두 번째 원소는 score[1]이 된다. 여기서 벼열은 크기가 [50]으로 선언되었다. C언어에서는 배열의 색인은 항상 0부터 시작이므로 배열의 마지막 원소의 색인은 49가 된다.

배열의 각 원소는 int 형 자료를 담을 수 있는 4바이트의 크기를 가진다.

사용은

 

score[0] = 100;
score[4] = score[0] -10;

 

다음 예제로 배열을 사용하여 성적의 평균을 구하는 것을 보자

 

 

#include <stdio.h>

int main()
{
        int score[10], i, sum = 0;
        float average;

       for(i = 0; i < 10; i++)
       {
           printf(" enter a score [%d]: " ,i);
           scanf("%d", &score[i]);
       }
       for (i = 0; i < 10; i ++)
       {
             sum += score[i];
        }
        average = float( sum / 10);
        printf("average score is : %f\n", average);

        return0;
}

 

array01.png

 

 

score[i]

배열의 색인으로 정수형 변수를 사용할 수 있다. 그리고

score[i +2]로도 나타낼 수 있다.

위의 예제에서 배열의 크기가 10이었다. 만약 score[12] 는 배열 크기의 범위를 벗어나는데 C언어에서는 배열 색인의 경계를 검사하지 않으므로 프로그램을 그냥 실행하므로 범위를 벗어난 메모리 영역에 접근을 하게 되므로 위험한 결과를 초래할 수 있다.

scanf("%d", &score[i]);

배열의 원소를 키보드를 통하여 읽을 때 다른 변수들처럼 배열의 원소 앞에 주소 연산자 &를 붙인다.

배열을 사용한 변수를 for 문을 사용하여 일괄적으로 처리 한 위의 예제는 배열의 장점을 잘 나타낸다.