1. 배열 선언

C 언어에서 다른 변수와 마찬가지로, 배열도 사용되기 전에 선언되어야 한다. 배열 선언의 일반적인 형식은 다음과 같다.

다음은 배열 선언의 예이다.

    int a[10];

위 선언문은 각 원소의 타입이 int이고, 10개의 원소를 가지고, 배열 이름이 a인 배열을 선언한다. 다음은 이 선언문으로부터 생성된 배열을 보여준다.

배열의 각 원소는 인덱스(index)라 불리는 수치 값으로 식별된다. 이를 위해서, 배열의 각 원소에는 특정 인덱스 값이 부여된다. C에서 배열에 대한 인덱스 번호는 0부터 시작되고, 따라서 마지막 원소는 (배열의 크기 -1)이 된다.

즉, 인덱스 번호가 첫 번째 원소에는 0이 부여되고, 두 번째 원소에는 1이 부여되고, 세 번째 원소에는 2가 부여되고, 이와 같은 방식으로 하여 마지막 번째 원소에는 (배열의 크기 - 1)이 부여된다.

위에서 선언된 배열 a의 경우에, 원소의 개수가 10이기 때문에 인덱스 번호는 순서대로 0, 1, 2, 3, 4, ..., 9로 매겨진다.

다음은 배열 선언의 다른 예이다.

 

배열선언

    의미
 

float score[5];

    배열 이름이 score이고, 원소의 타입은 float이고, 원소의 개수는 5인 배열을 선언한다.
 

char codes[10]

    배열 이름이 codes이고, 원소의 타입은 char이고, 원소의 개수가 10인 배열을 선언한다
 

int amount[100]

    배열 이름이 amount이고, 원소의 타입은 int이고, 원소의 개수가 100이 배열을 선언한다.

여러분이 배열을 선언하면, 변수 선언에서와 마찬가지로 각 원소의 값은 정의되지 않은 임의의 값을 갖는다. 따라서 배열을 사용하기 전에 원소에 값을 배정하는 것이 필요하다.

[문장 단위 입력 실행] 여러분은 다음 실습창에서 프로그램을 한 문장씩 입력하여 실행시켜  볼 수 있다. 아래의 선언문을 포함한 프로그램을 한 문장씩 입력하고 오른쪽 창에서 그 실행 결과를 살펴 보시오.

   

float score[5];
char codes[10];
int amount[20];

사용법

1.아래의 실습창중 < C 문장 입력 > 란을 통하여 C문장 한문장씩 입력하고 Enter 키입력 버튼을 클릭하 면 해당 문장에 대한 시각화가 오른쪽에 나타나게 됩니다. ( 배열 선언문 포함)
2.제어문장(while,for,if~else,do~while)은 아래의 실습창중 < 제어구조 문장 입력 >을 통하여 입력하고 제어구조 입력 버튼을 클릭하게 되면 새로운 창이 생성되어 제어구조문장 내부를 단계별로 실행할수 있습니다.
3.scanf()함수 호출시 조그만 새로운창이 생성되어 입력받게 됩니다.
4.
printf()
함수실행은 오른쪽실습창 하단 < printf 실행 창 >에 나타나게 됩니다.
5.여러분의 실습에 앞서 필히 자세한 사용법을 살핀후에 실습에 임해 주시기 바랍니다.

자세한 사용법은 여기를 클릭하여 주십시요

2. 배열 사용

배열 사용은 배열에 포함된 특정 원소를 참조하는 것을 포함한다. 배열의 특정 원소를 참조하기 위해서, 배열 이름과 그 원소에 부여된 인덱스를 함께 명세하는 것이 필요하다.

배열 원소 참조를 위한 C 언어의 일반 형식은 다음과 같다.

즉, 배열이름 다음에 인덱스가 대괄호에 둘러싸여 표현된다. 이와 같은 표현을 선택 식(selection expression)이라 한다.

프로그램에서, 선택 식은 여러분이 지금까지 사용해온 단순 변수처럼 사용될 수 있다. 즉, 선택 식은 식에 포함될 수 있고, 배정문의 왼쪽에 나타날 수 있다.

위에서 살펴본 다음 배열을 다시 한번 생각해보자

    float score[5];

score 배열의 첫 번째 원소에 값을 배정하기 위해서 다음과 같은 배정문을 작성할 수 있다.

    score[0] = 78.5;

위 배정문의 효과는 다음과 같다.

다음은 score 배열의 나머지 4개 원소에 대한 값 배정문이다.

 

 

score[1] = 93.5;
score[2] = 82.0;
score[3] = 64.5;
score[4] = 87.2;

다음은 위 배정문의 실행 효과를 보여준다.

다음은 선택 식이 식에 포함되는 경우를 보여준다.

    score[0] = score[4];

위의 배정문은 score 배열의 다섯 번째 원소의 값을 가져와서 첫 번째 원소에 배정한다.


다음 배정문은 score 배열의 세 번째와 네 번째 원소의 값을 가져와서, 배정문 오른쪽에 위치한 식을 평가하고, 그 결과를 두 번째 원소에 배정한다.

    score[1] = score[2] + 2 * score[3];

위에서 살펴보았듯이, 배열 선택 식은 단순 변수와 똑같이 사용되는 것을 알 수 있다.

배열을 다룰 때, 배열 원소의 인덱스와 그 원소의 값간의 차이를 이해하는 것이 중요하다. 가령, 위의 score 배열에서 첫 번째 원소의 인덱스는 0이고 그 값은 78.5이다. 원소의 값을 변경하는 것은 가능하나, 그 인덱스를 변경하는 것은 가능하지 않음을 유의하라.

배열 선택 식에서 인덱스는 반드시 상수일 필요는 없다. 인덱스는 정수나 스칼라 타입의 값으로 평가되는 임의 식일 수 있다.

[문장 단위 입력 실행] 여러분은 다음 실습창에서 C 프로그램을 한 문장씩 입력하여 실행시켜  볼 수 있다. 새로운 프로그램을 한 문장씩 입력하고 오른쪽 창에서 그 실행 결과를 살펴 보시오.

사용법

1.아래의 실습창중 < C 문장 입력 > 란을 통하여 C문장 한문장씩 입력하고 Enter 키입력 버튼을 클릭 ( 배열선언문또는 선택식을 입력)
2.제어문장(while,for,if~else,do~while)은 아래의 실습창중 < 제어구조 문장 입력 >을 통하여 입력하고 제어구조 입력 버튼을 클릭하게 되면 새로운 창이 생성되어 제어구조문장 내부를 단계별로 실행할수 있습니다.
3.scanf()함수 호출시 조그만 새로운창이 생성되어 입력받게 됩니다.
4.
printf()
함수실행은 오른쪽실습창 하단 < printf 실행 창 >에 나타나게 됩니다.
5.여러분의 실습에 앞서 필히 자세한 사용법을 살핀후에 실습에 임해 주시기 바랍니다.

자세한 사용법은 여기를 클릭하여 주십시요

다음은 score 배열의 선택 식에서, 인덱스로 변수가 사용된 경우이다.

    score[i] = 0;

이때 인덱스 i의 값은 배열 score의 인덱스의 범위 0 ~ 4에 속하는 것이 중요하다.

[문장 단위 입력 실행] 여러분은 다음 실습창에서 C 프로그램을 한 문장씩 입력하여 실행시켜  볼 수 있다. 새로운 프로그램을 한 문장씩 입력하고 오른쪽 창에서 그 실행 결과를 살펴 보시오. 

사용법

1. < C 문장 입력 > 란을 통하여 C문장 한문장씩 입력하고 Enter 키입력 버튼을 클릭 ( 배열선언문또는 선택식을 입력 )
2.제어문장(while,for,if~else,do~while)은 아래의 실습창중 < 제어구조 문장 입력 >을 통하여 입력하고 제어구조 입력 버튼을 클릭하게 되면 새로운 창이 생성되어 제어구조문장 내부를 단계별로 실행할수 있습니다.
3.scanf()함수 호출시 조그만 새로운창이 생성되어 입력받게 됩니다.
4.
printf()
함수실행은 오른쪽실습창 하단 < printf 실행 창 >에 나타나게 됩니다.
5.readScore3() 함수 내의 문장을 main( ) 내에서 작성하여 실행 결과를 확인하여 주십시요.
6.여러분의 실습에 앞서 필히 자세한 사용법을 살핀후에 실습에 임해 주시기 바랍니다.

자세한 사용법은 여기를 클릭하여 주십시요

배열은 변수와 마찬가지로, 사용되기 전에 원소들을 초기화시키는 것이 중요하다. 배열에 대한 초기화는 원소 단위로 이루어지는데, 배열 선택 식에서 인덱스 변수를 사용하고, for의 반복 구조를 사용하면 효과적으로 수행할 수 있다.

다음은 score 배열을 초기화시키는 문장을 보여준다.

   

for (int i= 0; i < 5; i++)
     score[i] = 0;

 

이제 여러분은 앞에서 다룬 readScore2()를 배열과 for 문을 사용하여 다음과 같이 효과적으로 작성할 수 있음을 알 수 있다.

 

[문장 단위 입력 실행] 여러분은 다음 실습창에서 C 프로그램을 한 문장씩 입력하여 실행시켜  볼 수 있다. 새로운 프로그램을 한 문장씩 입력하고 오른쪽 창에서 그 실행 결과를 살펴 보시오. 

사용법

1. < C 문장 입력 > 란을 통하여 C문장 한문장씩 입력하고 Enter 키입력 버튼을 클릭 ( 배열선언문또는 선택식을 입력 )
2.제어문장(while,for,if~else,do~while)은 아래의 실습창중 < 제어구조 문장 입력 >을 통하여 입력하고 제어구조 입력 버튼을 클릭하게 되면 새로운 창이 생성되어 제어구조문장 내부를 단계별로 실행할수 있습니다.
3.scanf()함수 호출시 조그만 새로운창이 생성되어 입력받게 됩니다.
4.
printf()
함수실행은 오른쪽실습창 하단 < printf 실행 창 >에 나타나게 됩니다.
5.readScore3() 함수 내의 문장을 main( ) 내에서 작성하여 실행 결과를 확인하여 주십시요.
6.여러분의 실습에 앞서 필히 자세한 사용법을 살핀후에 실습에 임해 주시기 바랍니다.

자세한 사용법은 여기를 클릭하여 주십시요

여러분은 readScore3()이 score 배열의 임의 크기에 대해서도 동작할 수 있음을 알 수 있다.

실제로, 배열의 크기를 명시적인 값보다는 기호 상수로 표현하는 것이 더 좋다. 기호 상수는 3주차 강의 3장에서 이미 언급하였듯이, 프로그램의 이해를 높이고, 프로그램의 수정을 용이하게 한다.

readScore3()를 배열 크기를 기호 상수로 표현하여 작성하면 다음과 같다.

readScore4()에서 NStudents의 기호 상수는 학생 수를 나타낸다. 여러분은 이 기호 상수 값을 학생 수에 따라 임의 값으로 변경할 수 있다. 그러면 학생 수만큼의 크기를 갖는 score 배열이 생성되고, for 문에서 이 배열이 적절히 초기화된다.

 

[문장 단위 입력 실행] 여러분은 다음 실습창에서 C 프로그램을 한 문장씩 입력하여 실행시켜  볼 수 있다. 위의 배열을 선언하고, 새로운 프로그램을 한 문장씩 입력하고 오른쪽 창에서 그 실행 결과를 살펴 보시오. 

사용법

1. < C 문장 입력 > 란을 통하여 C문장 한문장씩 입력하고 Enter 키입력 버튼을 클릭 ( 배열선언문또는 선택식을 입력 )
2.제어문장(while,for,if~else,do~while)은 아래의 실습창중 < 제어구조 문장 입력 >을 통하여 입력하고 제어구조 입력 버튼을 클릭하게 되면 새로운 창이 생성되어 제어구조문장 내부를 단계별로 실행할수 있습니다.
3.scanf()함수 호출시 조그만 새로운창이 생성되어 입력받게 됩니다.
4.
printf()
함수실행은 오른쪽실습창 하단 < printf 실행 창 >에 나타나게 됩니다.
5.여러분의 실습에 앞서 필히 자세한 사용법을 살핀후에 실습에 임해 주시기 바랍니다.

자세한 사용법은 여기를 클릭하여 주십시요

 

3. 프로그램 예제

배열을 다루는 다음의 간단한 프로그램 예제를 생각해보자: 먼저, 사용자로부터 학생 점수를 입력받고, 다음에 이들 점수에 대한 평균 값을 계산하여 출력한다. 학생 점수는 0 ~ 100의 범위를 갖는 정수라고 생각한다.

이를 위한 알고리즘을 다음과 같이 간단히 작성할 수 있다.

학생 점수에 대한 평균 값을 계산하기 전에, 학생 점수를 먼저 입력받아 저장해야 하기 때문에, 배열 구조를 생각한다. 그리고 알고리즘 10-1의 단계 1, 2에서 여러 개의 학생 점수가 고려되기 때문에 for 문의 반복 구조를 생각한다. while 문보다는 for 문을 생각하는 것은 반복 회수가 배열의 크기로 이미 결정되어 있기 때문이다.

다음은 알고리즘 10-1을 세분화시키는 과정을 보여준다.

다음은 알고리즘 10-1-1로부터 프로그램을 작성하는 과정을 보여준다.

다음은 프로그램 10-1을 다시 보여준다. for 문을 사용하여 적절히 score 배열을 초기화하고, 또 다른 for 문을 사용하여 score 배열에 속한 원소들의 값을 더하는 것을 알 수 있다.


[프로그램 단위 입력 실행] 다음 실습창을 통해서 프로그램 10-1의 실행과정을 알아본다

(여러분은 실습창의 왼편에 위치한 '새프로그램 입력' 버튼을 클릭하여 새로운 프로그램을 입력하여 실행시켜 볼 수 있다. )

 

 

[문장 단위 입력 실행] 여러분은 다음 실습창에서 C 프로그램을 한 문장씩 입력하여 실행시켜  볼 수 있다. 새로운 배열을 선언하고, 새로운 프로그램을 한 문장씩 입력하고 오른쪽 창에서 그 실행 결과를 살펴 보시오.

사용법

1. < C 문장 입력 > 란을 통하여 C문장 한문장씩 입력하고 Enter 키입력 버튼을 클릭 ( 배열선언문또는 선택식을 입력 )
2.제어문장(while,for,if~else,do~while)은 아래의 실습창중 < 제어구조 문장 입력 >을 통하여 입력하고 제어구조 입력 버튼을 클릭하게 되면 새로운 창이 생성되어 제어구조문장 내부를 단계별로 실행할수 있습니다.
3.scanf()함수 호출시 조그만 새로운창이 생성되어 입력받게 됩니다.
4.
printf()
함수실행은 오른쪽실습창 하단 < printf 실행 창 >에 나타나게 됩니다.
5.여러분의 실습에 앞서 필히 자세한 사용법을 살핀후에 실습에 임해 주시기 바랍니다.

자세한 사용법은 여기를 클릭하여 주십시요
<

top으로... 다음페이지로.. 이전페이지로.. home으로..