ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 배열
    C언어/C언어 2020. 7. 12. 06:02

    1. 배열이란?

    파이썬의 리스트와 비슷한 개념. 많은 수의 데이터를 관리하기 쉽게 만든 일종의 데이터 모음이다.

     

    배열을 만들기 전엔 배열을 선언해줘야 하는데 선언 형식은 다음과 같다.

     

    저장하고자 하는 자료의 자료형을 입력하고 변수명과 해당 변수를 저장할 갯수(길이)를 입력해주면 된다.

     

    int scores[100]
    // 자료형 + 변수명 + [배열의 길이]
    
    char name[100]
    // 자료형 + 변수명 + [배열의 길이]

     

    그렇다면 배열값을 지정하고 불러오는 것은 어떻게 해야할까?

     

    배열의 선언을 바탕으로 "변수명 + [변수의 위치]"형식으로 값을 써주고 변수값을 지정해준다.

     

    혹은 배열을 선언한 뒤 중괄호를 써주고  = { 요소1, 요소2, 요소3} 식으로 중괄호 안에

     

    변수값을 넣어주는 방식이다.

     

    불러올 때는 "변수명 + [변수의 위치]"형식으로 인쇄를 해야한다.

     

    "변수명"처럼 변수만으로 부르거나 "변수명[ ]"과 같은 형식으로 위치 지정을 하지 않으면 오류가 난다.

     

    이때 배열에 저장되는 변수의 위치는 0부터 시작해서 우리가 입력한 길이의 -1을 한 값까지이다.

     

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    
    int main(void){
      int scores[5]; // 자료형 + 변수명 + 자료길이 형태를 입력하여 배열 선언
      scores[0] = 90; // 변수명 + [변수의 위치] 형태로 배열 위치에 맞는 값을 지정
      scores[1] = 80; // 배열에 값을 지정할 때는 [0]부터 시작한다.
      scores[2] = 75;
      scores[3] = 100;
      scores[4] = 80;
      
      printf("%d\n", scores[0]); // 인쇄시 배열의 1개값만 한 개의 %d에 대응해서 인쇄가 가능하다.
      printf("%d\n", scores[1]); // %d를 하나만 해놓고 scores[] 또는 scores만 입력하면 오류가 난다.
      printf("%d\n", scores[2]);
      printf("%d\n", scores[3]);
      printf("%d\n", scores[4]);
    }

     

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    
    int main(void){
      int scores[5] = {90, 80, 75, 100, 80}; 
      // { 중괄호 안에 배열값을 넣는 방식으로도 배열을 만드는 것이 가능하다.}
      
      printf("%d\n", scores[0]); // 인쇄시 배열의 1개값만 한 개의 %d에 대응해서 인쇄가 가능하다.
      printf("%d\n", scores[1]); // %d를 하나만 해놓고 scores[] 또는 scores만 입력하면 오류가 난다.
      printf("%d\n", scores[2]);
      printf("%d\n", scores[3]);
      printf("%d\n", scores[4]);
    }

     

    2. 숫자 배열과 문자 배열

    숫자 배열은 우리가 익히 아는 것처럼 하면되지만 문자 배열의 경우 조금 까다로운 부분이 있다.

     

    숫자배열은 다음과 같다.

     

    "int + 변수명 + [자료 길이]"를 선언.

     

    "변수명 + [변수의 위치]"로 배열값 지정.

     

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    
    int main(void){
      int scores[5]; // 자료형 + 변수명 + 자료길이 형태를 입력하여 배열 선언
      scores[0] = 90; // 변수명 + [변수의 위치] 형태로 배열 위치에 맞는 값을 지정
      scores[1] = 80; // 배열에 값을 지정할 때는 [0]부터 시작한다.
      scores[2] = 75;
      scores[3] = 100;
      scores[4] = 80;
      
      printf("%d\n", scores[0]); // 인쇄시 배열의 1개값만 한 개의 %d에 대응해서 인쇄가 가능하다.
      printf("%d\n", scores[1]); // %d를 하나만 해놓고 scores[] 또는 scores만 입력하면 오류가 난다.
      printf("%d\n", scores[2]);
      printf("%d\n", scores[3]);
      printf("%d\n", scores[4]);
    }

     

    문자 배열은 다음과 같다.

     

    "char + 변수명 + [자료 길이]"를 선언.

     

    "변수명 + [자료길이]"으로 배열값 지정.

     

    ※ 단, char 자료형으로 배열을 만들어 경우 지정값으로 문자 단 한개만 넣어야 한다.

     

       그리고 작은 따옴표 ( ' )를 쓴다.

     

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    
    int main(void){
      char name[5]; // char 문자 자료형 + 변수명 + [배열 길이] 선언
      name[0] = 'A'; // 변수명 + [변수의 위치] = '문자 1개'
      name[1] = 'B'; // char은 문자 1개만 저장할 수 있는 자료형이므로
      name[2] = 'C'; // 작은 따옴표 ''안에 문자 1개만 넣어서 값을 지정할 수 있다.
      name[3] = 'D';
      name[4] = 'E';
      
      printf("%c\n", name[0]);
      printf("%c\n", name[1]);
      printf("%c\n", name[2]);
      printf("%c\n", name[3]);
      printf("%c\n", name[4]);
    }

     

    3. 배열의 지정값으로 문자열을 넣는 방법

    "char + *변수명 + [자료길이]"를 선언. (변수명 앞에 별표 ( * )를 넣어줘야 한다.)

     

    "변수명 + [변수의 위치]"로 배열값 지정.

     

    ※ 문자열을 배열값으로 지정할 땐 큰 따옴표( " )를 써서 지정해줘야 한다.

    (단 한글자를 쓰더라도 큰 따옴표)

     

    ※ 출력시에는 문자열인 %s형으로 출력해주어야 한다.

     

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    
    int main(void){
      char *name[5]; // char + * + 변수명 + [변수 길이]
      name[0] = "AAA";  // 변수명 + [변수의 위치] 형태로 배열을 지정한다.
      name[1] = "BBB";  // 배열값은 큰 따옴표 ( " ) 안에 들어간 상태로 지정해야 한다.
      name[2] = "C";
      name[3] = "D";
      name[4] = "E";
      
      printf("%s\n", name[0]); // 인쇄를 할 때는 string 자료형인 %s으로 인쇄를 해줘야 한다.
      printf("%s\n", name[1]);
      printf("%s\n", name[2]);
      printf("%s\n", name[3]);
      printf("%s\n", name[4]);
    }

     

    4. 배열 초기화 하기

    배열의 변수를 모두 초기화 하고 싶다면 다음과 같다.

     

    중괄호 안에 { } "0,"을 넣어서 {0, }식으로 만들어 주면된다.

     

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    
    int main(void){
      int scores[5] = {90, 80, 75, 100, 80}; 
      // { 중괄호 안에 배열값을 넣는 방식으로도 배열을 만드는 것이 가능하다.}
      
      printf("%d\n", scores[0]); // 인쇄시 배열의 1개값만 한 개의 %d에 대응해서 인쇄가 가능하다.
      printf("%d\n", scores[1]); // %d를 하나만 해놓고 scores[] 또는 scores만 입력하면 오류가 난다.
      printf("%d\n", scores[2]);
      printf("%d\n", scores[3]);
      printf("%d\n", scores[4]);
    }

     

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    
    int main(void){
      int scores[5] = {0, }; 
      // { 중괄호 안에 배열값을 넣는 방식으로도 배열을 만드는 것이 가능하다.}
      
      printf("%d\n", scores[0]); // 인쇄시 배열의 1개값만 한 개의 %d에 대응해서 인쇄가 가능하다.
      printf("%d\n", scores[1]); // %d를 하나만 해놓고 scores[] 또는 scores만 입력하면 오류가 난다.
      printf("%d\n", scores[2]);
      printf("%d\n", scores[3]);
      printf("%d\n", scores[4]);
    }

     

    5. 반복문으로 배열의 요소를 모두 출력하기

    앞서  방식으로 인쇄할 경우 배열의 개별값만 인쇄할 수 있었다면

     

    for문을 이용하면 모든 요소를 출력할 수 있다.

     

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    
    int main(void){
      int scores[5] = {60, 70, 80, 70, 75}; // 배열 선언 및 배열값 지정
      
      for (int i = 0; i < sizeof(scores)/sizeof(int); i++){
      // i는 0부터 시작해서(배열의 첫번째 값도 0이니까 i도 0에서 시작해야 한다.)
      // 배열의 길이가 바뀔 경우를 대비해서 "배열의 크기 / 배열에서 자료형의 갯수"로
      // 배열의 범위를 제한했다. int가 아닌 경우 char로 배열의 크기를 나눠야 한다.
        printf("%d\n", scores[i]);
      }
    }

     

    6. 배열의 요소의 합

    배열의 요소를 모두 출력하는 방식처럼 모든 요소를 합해줄 수도 있다.

     

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    
    int main(void){
      int sum = 0;
      int scores[5] = {60, 70, 80, 70, 75};
      
      for (int i = 0; i < sizeof(scores)/sizeof(int); i++){
        sum += scores[i];
      }
      printf("%d\n", sum);
    
      return 0;
    }

     

    7. 배열을 이용한 평균 구하기 함수

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <string.h>
    
    float average(int students, int scores[]);
    
    int main(void){
      int students = 0;
      printf("학생 수를 입력해주세요 : ");
      int n = scanf("%d", &students);
      n = students;
    
      int score[n];
      int num = 0;
      for (int i = 0; i < n; i++){
        printf("평균 점수를 입력해주세요 : ");
        scanf("%d", &num);
        score[i] = num;
      }
      printf("%f\n", average(n, score));
    }
    
    float average(int students, int scores[]){
      int sum = 0;
      for (int i = 0; i < students; i++){
        sum += scores[i];
      }
      return (float)sum / (float) students;
    }

     

Designed by Tistory.