"/>

프로그래밍 기초-C언어 배우기(배열).10

-처음부터 배우기-

배열

배열은 종류가 같은 여러개의 데이터를 처리하기 쉽게 나열한 것을 말한다. 배열은 정수형, 문자형등 같은 자료형에 배열 이름을 지정하여 선언할 수 있다.

배열의 선언

배열을 이용하면 배열 이름과 참조 번호(index)를 사용해 편리하게 값을 읽거나 쓸 수 있다.
아래의 코드를 직접 작성하고 실행해 보자.

1  #include <stdio.h>
2  main()
3  {
4  int score[10]={100, 95, 85, 77, 66, 55, 67, 78, 89, 100};
5  int a;
6  for(a=0;a<10;a++)
7  printf(” %d”,score[a]);
8  }

위 프로그램을 실행하면 score라는 이름의 공간에 10개의 정수를 순서대로 저장하고, 저장되어 있는 내용을 순서대로 참조하여 출력한다.

  • 4행에서 정수형 배열을 선언하고 초깃값을 입력하는 배열의 초기화를 실행한다. score[10]으로 선언하면 score라는 이름으로 10개의 변수를 사용할 수 있으며, 0부터 9까지 10개의 변수 score[0], score[1], score[3], … , score[8], score[10]등으로 선언되며 지정한 값으로 초기화된다.
  • score[0]-100이 저장되고 score[1]-95, score[2]-85, … , score[8]-89, score[9]-100 의 순서로 배열에 저장된 값을 순서대로 출력한다.

배열의 구조

score는  배열의 이름, [ ]속의 숫자들은 참조 번호(index)로서, [ ]안의 숫자에 따라 각각 다른 크기를 가지고 있다.

int         score[10];
↑자료형 ↑배열 이름[크기];

의 구조로 되어 있으며 자료형, 이름, 크기를 이용하여 선언한다,

기본 구조

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

만약 배열([ ])을 사용하지 않는다면int score1, score2, score3, score4, score5;와 같이 5개의 변수를 각각 선언 해야하고 5개의 변수에 각각 저장되어있는 내용을 출력하려면 5개의 printf() 함수를 사용해야 한다.

배열을 선언한 후 참조 번호를 변수로 하여 반복문으로 활용할 수도 있다.
아래의 코드를 직접 작성하고 실행해 보자.

1  #include <stdio.h>
2  main()
3  {
4  int score[5];
5  int a, b = 0;
6  for (a=0;a<5;a++)
7  {
8  printf(“%d번 학생의 수학 성적을 입력하세요. :”, a+1);
9  scanf(“%d”, &score[a]);
10 }
11 for (a=0;a<5;a++)
12 b += score[a];
13 printf(“합계 : %d\n”, b);
14 printf(“평균 : %.2lf\n”, (double)b/5);
15 }

실행결과

위 프로그램을 실행하면 5명의 성적을 차례로 입력받아 배열에 저장한 후, 저장된 값들을 순서대로 읽어서 합과 평균을 계산하고 출력한다.

  • 6 ~ 10행에서 5회의 입력을 배열과 반복문을 사용하여 하나의 scanf() 함수로 입력받는다.
  • 8행에서 사용한 printf() 함수에서 a가 아닌 a+1을 사용한 이유는 c언어 배열의 참조 번호는 0부터 시작되고, 학생의 번호는 1부터 시작되기 때문이다.
  • 11~12행 에서 배열과 반복문을 활용하여 5명의 학생들의 성적의 합을 구한다.
  • 14행에서 평균이 실수형으로 계산될 수 있도록 double형으로 형 변환을 하고, 소수점 이하 둘째 자리까지 실수로 출력한다.

배열의 선언1

문자열은 char형 배열, 널 문자, 서식 지정자등을 이용하여 다룰 수 있다.
아래의 코드를 직접 작성하고 실행해 보자.

1  #include<stdio.h>
2  main()
3  {
4  char max1[6]={‘H’,’e’,’l’,’l’,’o’,’\0′};
5  char max2[6]=”world”;
6  printf(“%s\n”, max1);
7  printf(“%s\n”, max2);
8  printf(“%s %s\n”, max1, max2);
9  }

실행결과

위 프로그램을 실행하면 배열을 이용하여 문자열을 저장하고 출력한다.

  • 4행에서는 문자형 배열을 이용하여 문자열을 저장하는 방법을 보여준다. 배열로 문자열을 저장하고 처리하기 위해서는 마지막에 문자열의 마지막 즉 종료를 나타내는 문자’\0’을 반드시 넣어 주어야 하는데, ‘\0’을 널(null)문자라고 하며 C언어에서는 문자열의 끝을 나타내는 기호로 사용된다.
  • 5행에서 큰따옴표(” “)를 이용하여 문자 배열을 초기화하며, 마지막에 자동으로 널(null) 문자를 추가한다.
  • 6행에서의 printf() 함수는 %s형태로 계속 출력하는데, 이때 %s는 널 문자가 나올 때까지 문자를 계속 출력한다. 널문자는 ‘\0’, 0, NULL 등으로 표현하며 같은 의미를 가진다. 즉 4행의 ‘\0’을 char max1[6]={‘H’,’e’,’l’,’l’,’o’,’NULL’};으로 바꿔 사용 가능하다. 
  • 6 ~ 8행에서 문자형 배열 max1, max2에 저장되어 있는 문자열을 서식 지정자 %s를 이용하여 출력한다. 문자 1개을 나타내는 서식 지정자 %c를 이용하여 출력하는 방법도 가능하다. 따라서 for(i=0; max1[i]!=NULL;i++), printf(“%c”, max1[i])와 같이 표현할 수도 있다.

 배열의 선언2

배열을 이용하면 문자열을 전체적으로 입력받고 출력할 수 있으므로 편리하다.
아래의 코드를 직접 작성하고 실행해 보자.

1  #include<stdio.h>
2  main()
3  {
4  char max[10];
5  printf(“닉네임을 적어주세요. :”);
6  scanf(“%s”, max);
7  printf(“안녕하세요 %s님\n”, max);
8  }

실행결과

위 프로그램을 실행하면 scanf( )함수를 이용하여 char형 배열에 문자열을 입력받고, 서식 지정자 %s를 이용하여 출력한다.
 

배열의 활용

배열을 이용하면 같은 형태의 테이터 집합을 손쉽게 다룰 수 있으며 개수만큼 주소와 공간을 할당하므로 많은 양의 데이터를 읽거나 저장하는 작업들을 손쉽게 할 수 있다.또한 데이터가 저장되어 있을 경우 가장 큰 값이나 작은 값 등을 구할 때 배열과 반복문을 활용하면 더욱 편리하다.

아래의 코드를 직접 작성하고 실행해보자

1  #include<stdio.h>
2  main()
3  {
4  int score[5];
5  int i, max=0;
6  for(i=0;i<5;i++)
7  {8  printf(“%d번 학생의 시험 성적을 입력하세요. :”, i+1);
9  scanf(“%d”, &score[i]);
10 }
11 for(i=0;i<5;i++)
12 if(max<score[i])
13 max=score[i];
14 printf(“최고 점수:%d\n”,max);
15 }

실행결과

위 프로그램을 실행하면 5명의 성적을 처례로 입력받아 배열에 저장하고, 저장된 점수들 중에서 가장 높은 점수를 출력한다.

  • 11 ~ 13행에서 배열에 저장된 값들 중 최댓값을 구하는 방법으로 반복문이 사용된다. max는 처음에 0으로 초기화 되어 max값보다 큰 score[i] 값이 있으면 max값을 score[i]값으로 바꾼다.
  • score[ ]배열에 저장되어 있는 값들을 순서대로 모두 비교하고 나면 max에는 score[0]부터 score[4]까지의 값중 가장 큰 값이 저장된다.

배열의 활용 (2차원배열)

2차원 배열은 1차원 배열안에서 다시 1차원 배열을 넣은 것과 비슷하다. 2차원 배열은 표 형태로 값을 처리하기 위해 주로 사용된다.

아래의 코드를 직접 작성하고 실행해보자.

1  #include<stdio.h>
2  main()
3  {
4  int a[3][2]={{100, 100}, {90, 86}, {89, 98}};
5  int f, e;
6  for(f=0;f<3;f++)
7  {
8  for(e=0;e<2;e++)
9  printf(“%d “,a[f][e]);
10 printf(“\n”);
11 }
12 }

실행결과

위 프로그램을 실행하면 처음에 2차원으로 배열을 선언한 후 배열의 내용이 주어진 값으로 초기화되고, 배열의 모든 내용을 출력한다.

  • 4행에서 2차원 배열 선언하고 주어진 값으로 배열을 채운다.
  • 6 ~ 11행에서 2차원 배열의 내용을 2중 반복 구조를 이용하여 행과 열을 맞추어 출력한다. f는 행, e는 열을 의미한다.

2차원 배열의 기본 형식

자료형 배열 이름[행 크기][열 크기] {
{원소들},
{2번째 원소들},

};

int a[3][2]={100, 100, 90, 86, 89, 98}; 또는 { {100, 100}, {90, 86}, {89, 98} };

2차 배열의 이해

기본적으로 2차배열은 

  • 자료형 배열이름[세로크기][가로크기];
  • 자료형 배열이름[세로크기][가로크기] = { { 값, 값, 값 }, {값, 값, 값} };

의 형식으로 되어있다.

아래의 코드를 직접 작성하고 실행해 보자.

#include <stdio.h>
int main()
{
int A[3][4] = { // 세로 크기 3, 가로 크기 4인 int형 2차원 배열 선언
{ 11, 22, 33, 44 },
{ 55, 66, 77, 88 },
{ 99, 110, 121, 132 }
};
printf(“%d\n”, A[0][0]); // 11 : 세로 0, 가로 0인 요소 출력
printf(“%d\n”, A[1][2]); // 77 : 세로 1, 가로 2인 요소 출력
printf(“%d\n”, A[2][0]); // 99 : 세로 2, 가로 0인 요소 출력
printf(“%d\n”, A[2][3]); // 132: 세로 2, 가로 2인 요소 출력
return 0;
}

실행결과

위 프로그램을 실행하면 각각 11, 77, 99, 132가 출력된다.

-이어서 공부하기-

 

 

댓글 남기기

Scroll Up