C 언어: 출력문부터 함수까지 복습하기

  • 17 minutes to read

안녕하세요. 컴퓨터 교육과, 컴퓨터 공학과 등 프로그래밍 계열 학과에서 C 언어를 처음 접하시는 학생 여러분, 반갑습니다.

C 언어 난이도는 고등학교 시절 수포자(수학 포기자) 이야기처럼, 처음에는 약간 어려울 수 있습니다.
하지만 중간고사를 준비하는 지금, 이번 아티클이 여러분께 조금이나마 도움이 될 수 있기를 바라며, 학교마다 약간씩 다를 수 있지만 지금까지 배운 범위에 맞춰 정리한 복습용 장을 준비했습니다.

특히 이 장을 공부하실 때는 C 언어 소스 코드 부분을 컴퓨터로 타이핑하기보다는 수기로 코드를 적어 보시기를 권장드립니다.
아직은 학교 수업과 시험이 수기로 치러지는 경우가 많기 때문인데요, 살면서 한 번쯤은 if문과 for문을 손으로 써보는 것도 재미있는 경험이 될 것입니다. (ㅎㅎ)

이번 아티클은 길지 않고, 따라 하는 데도 많은 시간이 걸리지 않습니다.
중간고사를 앞두고 한 번쯤 정리하고 넘어가신다면 시험 준비에 조금이라도 도움이 될 수 있을 것입니다.

물론, 지금까지 C 언어 수업을 잘 따라오신 분들이라면 다소 쉬운 내용일 수 있겠지만, 그래도 VisualAcademy Docs의 흐름을 따라 여기까지 오셨다면 이번 장을 마무리하고 다음으로 넘어가시면 더 좋겠습니다.

소개

프로그래밍 학습의 기본은 코드를 직접 작성하고 실행하며 동작을 이해하는 것입니다.
C 언어 역시 하나의 프로젝트를 생성하고, 그 안에 소스 코드를 작성하여 프로그램을 실행하는 과정을 통해 배우게 됩니다.
이번 시간에는 C 언어의 기본 문법과 주요 요소들을 정리하며 복습하는 시간을 갖겠습니다. 출력문부터 함수까지, 핵심적인 부분을 다시 짚어보며 탄탄한 기초를 다져봅니다.

1. C 언어의 기본 구조

C 언어는 대표적인 절차지향 프로그래밍 언어입니다.
즉, 프로그램의 흐름을 순차적으로 기술하며, 논리적이고 단계적인 실행을 중시합니다.
C 프로그램은 여러 개의 함수들로 구성되며, 이 중 main 함수가 프로그램의 시작점이자 진입점이 됩니다.

다음은 C 언어의 가장 기본적인 프로그램 구조입니다.

파일명: review_basic_structure.c

#include <stdio.h>  // 표준 입출력 라이브러리 포함

int main(void)  // 프로그램의 시작점
{
    printf("Hello, World!\n");  // 문자열 출력
    return 0;  // 프로그램 종료, 운영체제에 0 반환
}
Hello, World!

1.1. #include 지시어

#include는 컴파일러에게 외부에 정의된 함수나 매크로, 상수 등을 포함하도록 지시하는 역할을 합니다.
위 코드에서는 표준 입출력 함수를 사용하기 위해 <stdio.h> 라이브러리를 포함했습니다.
stdio.hprintf, scanf 등 입출력 관련 기능들을 사용할 수 있도록 지원합니다.

1.2. main 함수

C 프로그램은 반드시 하나의 main 함수를 포함해야 하며, 프로그램은 이 함수의 첫 줄부터 실행됩니다.
main 함수의 반환형은 int이며, 프로그램이 종료될 때 운영체제에 반환할 값을 의미합니다.
대개 정상 종료를 의미하는 0을 반환합니다.

1.3. 출력문

printf 함수는 콘솔에 메시지를 출력할 때 사용합니다.
문자열을 출력할 뿐 아니라, 이후에 배울 변수와 연산자의 결과 등 다양한 값을 출력하는 데 활용됩니다.

2. 출력문

C 언어에서는 printf 함수를 사용하여 화면에 다양한 형식의 데이터를 출력할 수 있습니다.
출력 시에는 포맷 문자열(format string) 을 사용하여 데이터를 원하는 형식으로 표현할 수 있습니다.

파일명: review_print_statements.c

#include <stdio.h>

int main(void)
{
    printf("Hello, World!\n");  // 문자열 출력
    printf("정수: %d\n", 123);  // 정수 출력
    printf("실수: %.2f\n", 3.14);  // 실수 출력 (소수점 둘째 자리까지)
    printf("문자열: %s\n", "C Programming");  // 문자열 출력
    return 0;
}
Hello, World!
정수: 123
실수: 3.14
문자열: C Programming

2.1. printf 포맷 문자열

  • %d: 정수 출력
  • %f: 실수 출력 (소수점 아래 자리수를 지정할 수 있음, 예: %.2f는 소수점 이하 둘째 자리까지 출력)
  • %s: 문자열 출력
  • \n: 줄 바꿈 (New line)

printf를 적절히 활용하면 프로그램의 흐름을 추적하거나, 변수의 값을 확인하는 데 매우 유용합니다.

3. 변수

변수는 프로그램이 데이터를 저장하고 처리하는 데 사용하는 메모리 공간입니다.
C 언어에서 변수는 사용 전에 반드시 선언해야 하며, 선언 시 변수의 데이터 형식(자료형, 데이터 타입)을 명확히 지정해야 합니다.

파일명: review_variables.c

#include <stdio.h>

int main(void)
{
    int number = 123;  // 정수형 변수 선언 및 초기화
    float pi = 3.14;  // 실수형 변수 선언 및 초기화
    char letter = 'A';  // 문자형 변수 선언 및 초기화
    char string[] = "Hello";  // 문자열 변수 선언 및 초기화

    printf("정수: %d\n", number);
    printf("실수: %.2f\n", pi);
    printf("문자: %c\n", letter);
    printf("문자열: %s\n", string);

    return 0;
}
정수: 123
실수: 3.14
문자: A
문자열: Hello

3.1. 변수 타입

  • int: 정수형 데이터를 저장합니다.
  • float: 실수형 데이터를 저장합니다.
  • char: 한 개의 문자를 저장합니다. (문자는 ' 작은 따옴표로 감쌉니다.)
  • char[]: 문자열을 저장하는 배열입니다. 문자열은 큰따옴표 " 를 사용합니다.

변수를 잘 활용하면 프로그램에서 데이터를 효율적으로 관리하고, 다양한 연산을 수행할 수 있습니다.

4. 연산자

연산자는 변수나 값에 대해 산술적, 논리적, 비교 연산을 수행할 때 사용합니다.
C 언어는 기본적인 산술 연산자뿐 아니라, 복합 대입 연산자와 논리 연산자, 비교 연산자 등 다양한 연산자를 제공합니다.

파일명: review_operators.c

#include <stdio.h>

int main(void)
{
    int a = 5;  // 첫 번째 정수 변수
    int b = 3;  // 두 번째 정수 변수

    int sum = a + b;  // 덧셈
    int diff = a - b;  // 뺄셈
    int product = a * b;  // 곱셈
    int quotient = a / b;  // 나눗셈
    int remainder = a % b;  // 나머지 연산

    printf("합: %d\n", sum);
    printf("차: %d\n", diff);
    printf("곱: %d\n", product);
    printf("몫: %d\n", quotient);
    printf("나머지: %d\n", remainder);

    return 0;
}
합: 8
차: 2
곱: 15
몫: 1
나머지: 2

4.1. 주요 연산자

  • +: 덧셈
  • -: 뺄셈
  • *: 곱셈
  • /: 나눗셈 (정수형 나눗셈은 소수점 이하는 버려집니다.)
  • %: 나머지 연산

연산자를 활용하여 변수들의 값을 계산하고, 다양한 조건 판단이나 반복문에서도 사용할 수 있습니다.

5. 제어문

제어문은 프로그램의 흐름을 조건에 따라 제어하거나, 특정 코드를 반복 수행하는 기능을 합니다.
조건문과 반복문은 프로그램의 유연성을 높이는 핵심 도구입니다.

5.1. 조건문

조건문은 주어진 조건에 따라 서로 다른 명령을 수행하도록 만듭니다.

파일명: review_conditional_statements.c

#include <stdio.h>

int main(void)
{
    int num = 10;  // 검사할 숫자 변수

    if (num > 0)  // 양수인지 검사
    {
        printf("양수입니다.\n");
    }
    else if (num < 0)  // 음수인지 검사
    {
        printf("음수입니다.\n");
    }
    else  // 0인 경우
    {
        printf("0입니다.\n");
    }

    return 0;
}
양수입니다.

위 예제에서는 변수 num의 값에 따라 양수, 음수, 또는 0인지 판단하여 서로 다른 메시지를 출력합니다.

5.2. 반복문

반복문은 특정 조건을 만족하는 동안 동일한 코드를 반복 실행합니다.

파일명: review_loops.c

#include <stdio.h>

int main(void)
{
    // i를 0부터 4까지 증가시키면서 출력
    for (int i = 0; i < 5; i++)
    {
        printf("%d\n", i);
    }

    return 0;
}
0
1
2
3
4

위 예제는 for 반복문을 사용하여 변수 i의 값을 0부터 4까지 출력합니다.
반복문을 사용하면 동일한 작업을 반복해서 처리할 수 있어 프로그램의 효율성을 높일 수 있습니다.

6. 배열

배열은 같은 타입의 데이터 여러 개를 하나의 이름으로 묶어 관리할 수 있는 자료구조입니다.
특히 다수의 데이터를 다룰 때 코드가 깔끔해지고, 반복문과 함께 사용하면 효율적으로 데이터를 처리할 수 있습니다.

파일명: review_arrays.c

#include <stdio.h>

int main(void)
{
    int numbers[] = {10, 20, 30, 40, 50};  // 정수형 배열 선언 및 초기화

    // 배열 요소를 하나씩 출력
    for (int i = 0; i < 5; i++)
    {
        printf("numbers[%d] = %d\n", i, numbers[i]);
    }

    return 0;
}
numbers[0] = 10
numbers[1] = 20
numbers[2] = 30
numbers[3] = 40
numbers[4] = 50

6.1. 배열 선언 및 초기화

  • int numbers[5];: 크기가 5인 정수형 배열 선언
  • int numbers[] = {10, 20, 30, 40, 50};: 선언과 동시에 초기화 (크기는 초기화하는 값의 개수로 자동 설정)

배열을 사용하면 대량의 데이터를 체계적으로 저장하고, 반복문과 결합하여 쉽게 접근하거나 처리할 수 있습니다.

7. 함수

함수는 특정 기능을 수행하는 코드 블록으로, 프로그램의 재사용성을 높이고 가독성을 향상시키는 중요한 요소입니다.
함수를 사용하면 프로그램을 더 구조적으로 작성할 수 있으며, 복잡한 문제를 단순화할 수 있습니다.

7.1. 기본 함수 (매개변수 없음)

파일명: review_functions_basic.c

#include <stdio.h>

// 함수 선언: 반환형 void, 매개변수 없음
void hello(void);

int main(void)
{
    hello();  // 함수 호출
    return 0;
}

// 함수 정의: "Hello, World!" 출력
void hello(void)
{
    printf("Hello, World!\n");
}
Hello, World!

hello 함수는 입력값 없이 호출되며 "Hello, World!"라는 메시지를 출력하는 가장 기본적인 형태의 함수입니다.

7.2. 매개변수가 있는 함수

파일명: review_functions_with_parameter.c

#include <stdio.h>

// 함수 선언: 정수를 매개변수로 받음
void print_number(int num);

// 함수 선언: 두 개의 정수를 매개변수로 받아 합을 출력
void print_sum(int a, int b);

int main(void)
{
    print_number(5);  // 숫자 5를 전달하여 함수 호출
    print_number(10);  // 숫자 10을 전달하여 함수 호출

    print_sum(3, 7);  // 숫자 3과 7을 전달하여 합을 출력
    print_sum(10, 20);  // 숫자 10과 20을 전달하여 합을 출력

    return 0;
}

// 함수 정의: 전달받은 정수를 출력
void print_number(int num)
{
    printf("전달받은 숫자: %d\n", num);
}

// 함수 정의: 전달받은 두 정수의 합을 출력
void print_sum(int a, int b)
{
    int sum = a + b;
    printf("두 수의 합: %d\n", sum);
}
전달받은 숫자: 5
전달받은 숫자: 10
두 수의 합: 10
두 수의 합: 30

print_number 함수는 호출할 때마다 전달받은 숫자를 출력하며, 매개변수를 사용하여 하나의 함수로 다양한 값을 처리할 수 있습니다.
print_sum 함수는 두 개의 정수를 전달받아 합계를 출력하며, 복수의 매개변수를 사용하여 더 복잡한 작업을 수행할 수 있습니다.

7.3. 반환값이 있는 함수

파일명: review_functions_with_return.c

#include <stdio.h>

// 함수 선언: 정수를 매개변수로 받아 제곱값을 반환
int square(int num);

int main(void)
{
    int result = square(4);  // 숫자 4의 제곱값을 함수로부터 반환받음
    printf("4의 제곱: %d\n", result);

    printf("7의 제곱: %d\n", square(7));  // 반환값을 바로 출력
    return 0;
}

// 함수 정의: 전달받은 정수의 제곱값 반환
int square(int num)
{
    return num * num;
}
4의 제곱: 16
7의 제곱: 49

square 함수는 숫자를 입력받아 제곱한 결과를 반환하며, 반환값을 사용하여 변수에 저장하거나 바로 출력하는 등 다양하게 활용할 수 있습니다.

8. 마무리

이번 강의를 통해 C 언어의 기본적인 문법과 핵심 개념들을 정리하며 복습했습니다.
간단한 출력문부터 함수까지, C 언어의 기초를 한 번 더 확실히 다지셨을 것입니다.

학습은 반복할수록 깊어집니다.
앞으로도 다양한 실습과 프로젝트를 통해 응용력을 기르고, 복잡한 프로그램도 자신 있게 작성할 수 있도록 꾸준히 연습해 보세요.
특히 배열, 함수, 제어문을 자유자재로 활용할 수 있게 되면 C 언어의 본격적인 활용이 가능해집니다.
다음 단계에서는 포인터, 구조체, 파일 입출력 등 더 심화된 내용으로 발전해 나갈 수 있습니다.

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com