본문 바로가기

Language/C

<C언어 기초> 06. 배열

* 배열

 - 배열은 같은 자료형의 데이터를 메모리상에 연이어서 저장하고 그것을 하나의 변수로 관리하고 싶을 때 사용한다.

 

 - 72점 73점 33점이라는 점수를 scores라는 변수 하나로 관리하고 싶다고 하자.

 

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    // Scores
    int scores[3];
    scores[0] = 72;
    scores[1] = 73;
    scores[2] = 33;

    // Print average
    printf("Average: %i\n", (scores[0] + scores[1] + scores[2]) / 3);
}

 

 - 위와 같이 배열 안의 자료형과 원소의 갯수를 이용하여 변수를 선언한다.

 

 - 그리고 0부터 차례로 인덱스값을 대괄호[]에 입력하여 점수를 넣어 주었다.

 

 - 위의 원소들을 이용하여 평균도 구할 수 있다.

 

 - 위의 배열을 그림으로 나타내면 다음과 같다.

 

 

 - 위의 코드에는 문제가 크게 두 가지 있다. 첫 번째는 3이라는 숫자가 쓸데없이 재사용 되고 있다는 점이다. scores에도 3을 입력하고 평균에도 3으로 나눈다고 입력하였다. 이렇게 같은 의미를 가진 숫자를 중복해서 사용하는 것은 상당히 나쁜 코드이다. 왜냐하면 나중에 위의 3을 바꾸게 되면 의도치 않은 오류가 날 것이고, 이 3과 같은 의미를 가진 숫자를 일일이 찾아가며 바꿔줘야하기 때문이다.  

 

 - 두 번째 문제는 매우 정적인 프로그램이라는 것이다. 위와 같은 코드는 점수가 추가할 때마다 수정해 줘야하고, 사용자에게 입력을 받지도 못한다.

 

 - 위의 두가지 사항을 수정하여 사용자에게 점수의 갯수와 점수를 입력받고 평균을 출력하는 코드를 작성해보자.

 

#include <cs50.h>
#include <stdio.h>

float average(int length, int array[]);

int main(void)
{
    int n = get_int("과목 수:  ");

    int scores[n];
    for (int i = 0; i < n; i++)
    {
        scores[i] = get_int("%i 번째 점수는 : ", i + 1);
    }

    printf("평균 점수는 : %.1f\n", average(n, scores));
}

//평균을 계산하는 함수
float average(int length, int array[])
{
    int sum = 0;
    for (int i = 0; i < length; i++)
    {
        sum += array[i];
    }
    return (float) sum / (float) length;
}

 

 - 먼저 평균을 구하는 함수를 만들어 주었다. 첫 번째 인자로 배열의 길이 즉 과목의 수를 받고, 두 번째 인자로 배열을 받았다. 합을 for구문으로 구한 후 이를 과목의 수로 나누어 주는데, 인자를 int로 받았기 때문에 int끼리의 셈은 int값이 된다. 따라서 둘 중 하나라도 float여야한다. 자료형의 변환은 앞에 (원하는 자료형) 을 붙여주면 된다.

 

 - 메인 코드를 살펴 보자. n에 과목 수를 사용자에게 입력 받도록 하였다. 그래서 그 숫자로 scores라는 배열을 만들었다. 그리고 for문을 돌며 그 숫자 갯수만큼 점수를 받도록 하였다. for구문이 끝나면 미리 만들었던 평균함수를 이용해서 평균을 소숫점 첫째자리까지 반올림하여 출력한다.

 

 


 

 

 

 

참고

 

 

 이 글은 하버드 대학교 David Malan 교수CS50 강의를 수강 후 정리하며 쓴 글입니다. 코드는 C언어로 작성되었으며, 개발환경은 CS50 IDE에 최적화되어 있습니다. 일부 라이브러리는 다른 환경에서 별도의 설정이 필요할 수 있습니다.

 

 

 

CS50 공식사이트

 

CS50

Introduction to the intellectual enterprises of computer science and the art of programming. This course teaches students how to think algorithmically and solve problems efficiently. Topics include abstraction, algorithms, data structures, encapsulation, r

cs50.harvard.edu

 

부스트코스

 

다 함께 배우고 성장하는 부스트코스

부스트코스(boostcourse)는 모두 함께 배우고 성장하는 비영리 SW 온라인 플랫폼입니다.

www.boostcourse.org

 

CS50 IDE

 

CS50 IDE

integrated development environment for students and teachers

ide.cs50.io

 

 

 

 

'Language > C' 카테고리의 다른 글

<C언어 기초> 07. 문자열  (0) 2021.01.29
<C언어 기초> 05. 사용자 정의 함수  (0) 2021.01.24
<C언어 기초> 04. 자료형과 연산자  (2) 2021.01.23
<C언어 기초> 03. 루프  (0) 2021.01.22
<C언어 기초> 02. 조건문  (0) 2021.01.21