[c언어 기초]

우리가 아는 C언어

배열

배열 기초

배열

배열은 종류가 같은 여러개의 데이터를 처리하기 쉽게 나열한 것을 말합니다. 배열은 정수형, 문자형등 같은 자료형에 배열 이름을 지정하여 선언할 수 있죠.
 
배열의 선언
 
배열을 이용하면 배열 이름과 참조 번호(index)를 사용해 편리하게 값을 읽거나 쓸 수 있습니다.
아래의 코드를 직접 작성하고 실행해 봅시다.
 
#include <stdio.h>
main()
{
int score[10]={100, 95, 85, 77, 66, 55, 67, 78, 89, 100};
int a;
for(a=0;a<10;a++)
printf(” %d”,score[a]);
}
 
실행결과
위 프로그램을 실행하면 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[10]에는 문자열형 변수와 같이 값의 끝을 의미하는 종료(null)문자 ‘\0’이 포함되어 score[0]부터 score[9]까지 사용되며 종료 문자를 널(null)문자라고 불르기도 합니다.

배열의 구조

 
score는  배열의 이름, [ ]속의 숫자들은 참조 번호(index)로서, [ ]안의 숫자에 따라 각각 다른 크기를 가지고 있습니다.  
예시   
int         score[10];            // [ ] 안의 숫자의 개수만큼 변수가 지정됩니다.
↑자료형  ↑배열 이름[크기];
 
의 구조로 되어 있으며 자료형, 이름, 크기를 이용하여 선언합니다,
 
기본 구조
 
int score [3] = {4, 2, 1};
 
만약 배열([ ])을 사용하지 않는다면int score1, score2, score3;과 같이 3개의 변수를 각각 선언 해야하고 3개의 변수에 각각 저장되어있는 내용을 출력하려면 3개의 printf() 함수를 사용해야 합니다.
int score[0] = 4, score[1] = 2, score[2] = 1;
또는
int score[3] = {4, 2, 1}; 

출력할 경우
printf("%d %d &d", score[0], score[1], score[2] );
 
 
배열의 활용
 
배열을 선언한 후 참조번호를 변수로 하여 반복문으로 활용할 수도 있습니다.
위의 내용을 참조하여 아래의 코드를 직접 작성하고 출력해 봅시다.
#include <stdio.h>
int main()
{
    int score[6];
    int i, a,
     sum = 0;

    for (i = 0; i < 6; i++) {
        printf("학생 %d 성적을 입력입력하세요 : ", i + 1);
        scanf("%d", &score[i]);
    }

    for (i = 0; i < 6; i++)
        sum += score[i];

        printf("합계 : %d\n", sum);
        printf("평균 : %.2lf\n", (double)sum/6);
        printf("\n score[6]에 저장되어있는 숫자:\n");

    for(a=0;a<6;a++)
        printf(" %d",score[a]);

    return 0;
}

실행결과

위 코드를 실행하면 6명의 성적을 입력받아 배열에 저장한 후, 합과 평균을 계산하고 출력하고 score배열에 저장된 내용을 순서대로 출력합니다. 

 
  • 8~11행에서 배열과 반복문을 사용하여 하나의 scanf() 함수로 입력받습니다.
  • 8행에서 사용한 printf() 함수가 i+1을 사용한 이유는 위에서 처럼 C언어 배열의 참조번호는 0부터 시작되고, 학생의 번호는 1부터 시작되기 때문입니다.
  • 13~14행에서 배열과 반복문을 활용하여 6명의 학생들의 성적의 합을 sum에 저장해 줍니다.
  • 17행에서 평균이 실수형으로 계산될 수 있도록 double(실수)형으로 형 변환으로 하고, .2lf로 소수점 이하 둘째 자리까지 실수로 출력합니다.
  • 20~21행에서 score에 저장된 내용을 순서대로 출력합니다.

배열의 활용2

배열을 이용하면 조금더 다양하게 문자열을 입력받고 출력할 수 있습니다. 아래의 코드를 직접 작성하고 실행해 봅시다.

#include <stdio.h>
main()
{
    char string1[6] = {'H', 'e', 'l', 'l', 'o' '\0'};
    char string2[6] = "world";
    char string3[10];

    printf("이름을 입력하세요: ");
    scanf("%s", &string3);

    printf("%s\n", string1);
    printf("%s\n", string2);
    printf("%s %s %s님 안녕하세요 \n", string1, string2, string3);

    return 0;
}

실행결과

 

  • 4행에서 문자형 배열을 이용하여 문자열을 저장하는 방법입니다. 배열로 문자열을 저장하고 처리하기 위해서는 마지막에 문자열의 마지막임을 나타내는 문자인 '\0'을 반드시 넣어 주어야 합니다. '\0'은 널(null)문자라고 하며 C언어에서 문자열의 끝을 나타내는 기호로 사용됩니다.
  • 5행에서 큰따옴표(" ")를 이용하여 문자 배열을 초기화하며, 마지막에 자동으로 널(null)문자를 추가합니다.
  • 11행에서 printf( )함수는 %s 형태로 출력하는데 이때 %s는 널(null)문자가 나올때까지 문자를 계속 출력합니다. 
  • 13행에서 string1, string2 그리고 scanf로 직접 입력받은 string3가 출력됩니다.

널(unll)문자

널 문자는 문자열의 끝을 표시하는 용도로 배열에서 문자열을 저장할 때에는 마지막 널문자를 써주어야 하며 저장하기 위한 공간 1byte를 더 준비해야합니다. 만약 널문자가 저장되지 않으면 아래의 결과처럼 널문자가 나올 때까지 쓰레기 값을 출력하게 됩니다.

 

 

다음 토픽에서는 배열을 활용한 2차원 배열에 대해서 알아봅시다.

댓글

댓글 본문
  1. Sansol Park
    i++는 프로그래밍에서 흔히 사용되는 증감 연산자 중 하나로, 변수 i의 값을 1 증가시키는 역할을 합니다. for 루프 내에서 자주 사용되며, 루프가 각 반복을 수행할 때마다 i의 값을 증가시켜 루프 제어 변수를 업데이트합니다. 아래는 for 루프에서 i++가 어떻게 사용되는지 설명합니다.

    for 루프와 i++의 역할
    for 루프는 일반적으로 세 부분으로 구성됩니다:

    초기화 부분: 루프 제어 변수를 초기화합니다.
    조건 부분: 루프가 실행될 조건을 지정합니다.
    증감 부분: 루프 제어 변수를 업데이트합니다.
    대화보기
    • 앗싸
      for문에서 i++의 의미가 무엇인가요?