본문 바로가기
프로그래밍/C

7. C언어(배열_1)

by Choraengyi 2017. 1. 26.
728x90

 C언어의 배열을 알아보겠습니다. 배열은 알아야 할게 많으므로 일단 기본적인 내용만 알아보겠습니다.


배열의 유용한 기능중 하나는 편리함입니다. 한가지 예를 들어 설명하겠습니다.


 만약 변수 10개를 선언하여 정수를 할당한다고 가정할때,


int a,b,c,d,e,f,g,h,i,j;

a=1;

b=2;

c=3;

d=4;

.

.

.


 이런식으로 해주어야 하고, 변수가 많아서 관리하기도 힘들게 됩니다. 배열은 이를 간편하게 할 수 있습니다.


int a[10];

for(i=0; i<10; i++)

a[i]=i+1;


 배열의 선언은 


타입 변수이름[배열크기];


로 되는데, 여기서 배열크기를 만약 10으로 잡았다면, 배열주소는 0부터 시작하여 0, 1, 2 ... , 9 까지 10개로 잡힙니다.


 배열은 0 부터 시작한다. 명심해야되는 사항입니다. 이러한 배열을 선언하게 되면, 위의 경우에는 int크기의 변수가 10개 연속으로 잡힌것처럼 int형 방이 10개 생긴다고 보시면 됩니다.


해당 주소값에 값을 집어넣어 배열을 사용하게 되는것 입니다.


 저번 getchar() 함수와 연동하여, 각 숫자가 몇개 사용되었는지 배열에 카운트하여 출력하는 프로그램을 해보겠습니다.



 소스 분석을 해보겠습니다. 


입력받은 숫자의 각 숫자 개수를 세는 counter 배열을 선언하였습니다. 숫자는 0~9 니까 10개로 선언하였습니다.


getchar로 읽어들인 문자를 넣을 변수 a, 숫자가 아닌값을 넣어줄 other 변수를 선언하였습니다.


 선언을 하였으면, other와 counter[] 변수를 0으로  각 초기화 해줍니다.


counter 배열 변수는 간단하게 for 문으로 0부터 9의 주소값을 반복하면서 넣어주시면 됩니다.


다음은 입력받은 값을 카운트하는 핵심 부분입니다.


while ((a = getchar()) != EOF)            //EOF 를 만나기 전까지 해당 조건문을 반복

    if (a >= '0' && a <= '9')               //a(입력받은 문자)가 0~9사이의 숫자이면,

   ++counter[a-'0'];                //해당 숫자의 주소값을 +1해줍니다.

else if (a=='~')                        //'~' 입력시

break;                            //조건문 강제 종료

else                                    //그 외에

++other;                         //other = other + 1


 많이 어렵지 않은 코드이나 여기서 짚고 넘어갈 부분은 a-'0' 입니다. 전에도 설명하였듯이 문자로 입력받게 되면, 숫자로 넘어가더라도 ascii 코드에 있는 값으로 인식해버리게 됩니다. a-'0' 이 과정은 순수히 정수로 인식되도록 하는 과정입니다. 그래서 getchar로 입력받게 되더라도 a-'0'을 거치면 숫자로 인식되어 해당 주소값에 매칭되는 숫자가 +1 되는 것입니다.


그 밑은 출력문이니 어렵지 않습니다.


 숫자를 입력받았을때 해당 주소값과 숫자를 똑같이 매칭하였기 때문에, 해당 배열 주소값에 있는 배열이 +1 되게 됩니다. 0을 입력하면 counter[0] 의 값이 1증가,


4, 6, 9 를 입력하면 각 counter[4], counter[6], counter[9] 의 값이 1씩 증가하는 것입니다.


 그 외에 특수 문자, 문자, 공백 등은 모두 other의 값에 카운터 하여서 줄바꿈이나 문자열 등을 입력받으면 other가 증가하게 됩니다.


 배열에 대한 깊이있는 설명보다는 예시를 들면서 좀 친해지는 것을 먼저 진행하면서 해보겠습니다.


728x90
반응형

'프로그래밍 > C' 카테고리의 다른 글

6. C언어 (사용자 정의 함수)  (0) 2017.01.19
5. C언어 (데이터)  (0) 2017.01.14
4. C언어 (문자/문자열 입출력)  (0) 2017.01.13
3. C언어 (상수)  (0) 2017.01.11
2. C언어 (변수)  (0) 2017.01.10

댓글