13. 제어문 소개 및 if 문의 이해

  • 49 minutes to read

우리의 일상에서, 우리는 끊임없이 선택을 하고 반복적인 행동을 수행합니다. 프로그래밍에서도 이와 같이, 여러 선택지 중 하나를 선택하기 위해 조건문을 사용하며, 반복적으로 수행되어야 하는 작업은 반복문을 통해 처리할 수 있습니다. 이번 장에서는 바로 이런 선택과 반복을 다루는 프로그래밍 구문들, 즉 제어문에 대해 알아보겠습니다. 제어문은 프로그램의 흐름을 선택적으로 변경하거나 반복시키는 역할을 합니다.

// 제어문의 예: if, else, for, while, do, break, continue

13.1. 제어문 개요

제어문은 프로그램의 실행 흐름을 변경하거나 코드를 반복 실행하는 등의 작업을 수행할 때 사용되는 구문입니다. 크게 조건문과 반복문으로 나눌 수 있으며, 각각의 사용법에 대해 살펴보기 전에 제어문의 개념을 간략히 정리하고 넘어가겠습니다. 여기서 언급하는 내용은 나중에 자세히 배우게 됩니다.

  • 순차문: 프로그램은 기본적으로 위에서 아래로 순차적으로 실행됩니다.
  • 조건문: 조건의 참(true) 또는 거짓(false)에 따라 다른 명령을 실행할 수 있게 해주는 구문입니다. 조건문에는 if 문과 switch 문이 있습니다.
  • 반복문: 특정 조건이 만족할 때까지 또는 지정된 횟수만큼 명령을 반복 실행하게 해주는 구문입니다. for 문, while 문, do 문이 여기에 해당합니다.
  • 기타: 반복문을 제어하는 break 문과 continue 문 등이 있습니다.

13.2. 순차문: 순서대로 실행하기

프로그래밍에서는 코드가 순차적으로 실행됩니다. 예를 들어, 아래 코드는 국어점수와 영어점수를 합산하여 총점과 평균을 구하는 예시입니다. 이처럼 프로그램은 시작부터 종료까지 순차적으로 실행되며, 이는 기본적인 실행 흐름입니다. 제어문을 통해 이러한 순차적 실행 흐름을 변경할 수 있습니다.

코드: sequence_demo.c

// 순차문 예제
#include <stdio.h>

int main(void)
{
    int kor = 100;
    int eng = 90;

    int tot = kor + eng; // 총점 구하기
    double avg = tot / 2.0; // 평균 구하기

    printf("총점: %d\n", tot);
    printf("평균: %.2f\n", avg);

    return 0;
}

13.3. 조건문: if 문을 통한 분기 처리

프로그램의 실행 흐름을 다양한 경로로 분기 처리할 수 있을 때, 주로 if 문을 사용합니다. if 문은 조건을 평가하여 그 결과에 따라 다른 코드 블록을 실행합니다. 기본적인 형태는 아래와 같습니다.

if (조건식) 
{
    // 조건식이 참일 때 실행할 코드...
}

단일 실행문의 경우 중괄호를 생략할 수 있으며, 이를 단문이라고 합니다.

if (조건식)
    실행문; // 단문
NOTE

C 언어에서 if 문을 사용할 때, 실행할 코드가 단 한 줄만 있는 경우 중괄호 {}를 생략할 수 있습니다. 그러나 이런 생략은 코드의 가독성을 저하시킬 수 있고, 유지 보수 과정에서 실수를 일으킬 가능성을 높일 수 있으므로, 특히 여러 개발자가 협업하는 환경에서는 중괄호를 사용하여 명확하게 코드 블록을 정의하는 것이 권장됩니다. 또한, 나중에 추가 코드를 입력할 때 실수를 방지할 수 있으므로, 가독성과 안정성을 위해 중괄호를 생략하지 않는 것이 좋은 습관입니다.

제어문의 흐름을 그림으로 표시하면 다음과 같습니다. 이러한 그림을 순서도(FlowChart)라고 합니다.

그림: if 문 순서도

if 문 순서도

13.4 if 문을 사용한 단일 조건 처리

이제 if 문을 사용한 기본적인 예제를 살펴보겠습니다.

코드: if.c, if_example.c

// if 문을 사용한 단일 조건 처리
#include <stdio.h>

int main(void)
{
    int score = 60;

    // score가 60 이상일 경우 "합격" 출력
    if (score >= 60)
    {
        printf("\"합격\"\n");
    }

    return 0;
}
"합격"

if 문 안의 조건식 (score >= 60)의 결과가 참일 경우, "합격"이라는 문장을 출력합니다. 조건식이 거짓인 경우, 프로그램은 if 문 내의 명령을 무시하고 넘어갑니다. 이처럼 if 문은 주어진 조건식이 참일 때에만 특정 명령을 실행하는 구조를 가지고 있습니다.

13.5 단문과 복문의 사용

다음으로는 if 문을 사용할 때 단문과 복문의 형태를 살펴보겠습니다.

코드: single_multiple.c, simple_complex.c

#include <stdio.h>

int main(void)
{
    // [1] 단문 사용법: 3가지 스타일
    if (1 == 1) printf("단문 1\n");
    if (1 == 1)
        printf("단문 2\n");
    if (1 == 1)
    {
        printf("단문 3\n");
    }

    // [2] 복문 사용법: 중괄호를 사용하여 여러 문장을 포함
    if (1 == 1)
    {
        printf("복문 A\n");
        printf("복문 B\n");
    }

    return 0;
}
단문 1
단문 2
단문 3
복문 A
복문 B

이 예제에서 볼 수 있듯이, if 문 다음에 오는 조건식이 참일 경우 실행할 코드가 단 하나의 문장이라면, 중괄호를 생략할 수 있습니다. 이를 단문(single statement)이라고 합니다. 그러나 코드의 가독성과 명확성을 위해, 특히 여러 문장을 포함해야 할 때는 반드시 중괄호({})를 사용하는 복문(complex statement) 형태를 권장합니다. 중괄호는 if 문의 시작과 끝을 명확하게 구분하여 코드의 이해를 돕고, 실수로 인한 오류를 줄일 수 있습니다.

C 언어에서 코드 블록, 단문, 복문 사용하기

C 언어에서 코드 블록과 단문, 복문은 매우 중요한 개념입니다. 이번 강좌에서는 이러한 개념을 자세히 살펴보고, 예제를 통해 실제로 어떻게 사용되는지 알아보겠습니다.

코드 블록이란?

C 언어에서 코드 블록은 중괄호 {}로 감싸인 코드의 묶음입니다. 코드 블록은 하나의 단위로 처리되며, 해당 블록 안에 있는 모든 코드는 같은 범위(scope)에 속하게 됩니다. 이는 변수의 유효 범위, 함수의 범위 등을 결정하는 데 중요한 역할을 합니다.

다음은 코드 블록의 예시입니다.

int main(void) {
    int x = 5;
    {
        int y = 10;
        printf("x = %d, y = %d\n", x, y);
    }
    // y는 블록 밖에서 유효하지 않음
    printf("x = %d\n", x);
    return 0;
}

위 코드에서는 main 함수 안에 중괄호로 감싸인 코드 블록이 있습니다. 이 블록 안에는 y라는 변수가 선언되어 있습니다. 이 블록 밖에서는 y 변수가 유효하지 않기 때문에, 마지막 printf 함수에서는 x 변수만 사용됩니다.

단문과 복문이란?

C 언어에서 단문(SingleLine)은 중괄호 없이 한 줄의 코드를 의미합니다. 일반적으로 if, for, while 등의 제어문에서 많이 사용됩니다. 예를 들어, 다음과 같은 코드에서 printf 함수는 단문입니다.

if (x > 0) printf("양수입니다.\n");

반면 복문(MultiLine)은 중괄호로 감싸여 있는 여러 줄의 코드를 의미합니다. 이는 일반적으로 함수나 제어문에서 많이 사용됩니다. 예를 들어, 다음은 if 제어문 안에 여러 줄의 코드를 넣은 복문입니다.

if (x > 0) {
    printf("양수입니다.\n");
    printf("입력한 수는 %d입니다.\n", x);
}

예제

위에서 설명한 개념들을 예제를 통해 더 자세히 살펴보겠습니다. 다음은 코드 블록, 단문, 복문을 사용한 예제입니다.

#include <stdio.h>

int main(void) {
    int i = 3;
    //[1] 공문(Empty) : {}안에 아무런 구문이 없는 문장
    if (i % 2 == 0) {
        // Empty : 실행 안됨.
    }

    //[2] 단문(SingleLine) : {}안에 단일 문장(실행문)
    if (i % 3 == 0) {
        printf("3의 배수"); // 실행
    }

    if (i % 3 == 0) // 단문일 경우만 {} 생략 가능
        printf("3의 배수"); 

    //[3] 복문(MultiLine) : {}안에 다중 문장
    if (i % 3 == 0) {
        printf("\n"); 
        printf("\n");
        // ; 불필요
    }

    return 0; // main 함수는 반드시 0을 반환해야 함
}

위 코드에서 첫 번째 if 문은 i 변수가 짝수인 경우에 아무 것도 하지 않습니다. 이 경우 if 문 내부에 아무 코드도 없기 때문에 이는 공문(Empty)입니다.

두 번째 if 문에서는 i 변수가 3의 배수인 경우 "3의 배수"라는 문자열을 출력합니다. 이 경우, printf 함수가 하나의 문장이므로, 단문(SingleLine)입니다.

세 번째 if 문도 i 변수가 3의 배수인 경우에 실행되는데, 이 경우 중괄호를 생략하고 한 줄로 표현했습니다. 이렇게 중괄호를 생략하여 표현한 코드 블록은 단문(SingleLine)과 같은 동작을 수행합니다.

마지막으로, 네 번째 if 문에서는 i 변수가 3의 배수인 경우, 두 개의 줄바꿈 문자열을 출력하는 복문(MultiLine)을 사용합니다.

결론

C 언어에서 코드 블록, 단문, 복문은 매우 중요한 개념입니다. 코드 블록은 중괄호로 감싸인 코드의 묶음으로, 변수의 유효 범위 등을 결정합니다. 단문은 중괄호 없이 한 줄의 코드를 의미하며, 주로 제어문에서 많이 사용됩니다. 복문은 중괄호로 감싸여 있는 여러 줄의 코드를 의미하며, 주로 함수나 제어문에서 많이 사용됩니다. 이러한 개념들을 제대로 이해하고 활용하면, 더욱 효율적이고 정확한 코드를 작성할 수 있습니다.

13.6 코드 스니펫을 이용한 if 문 작성 참고

Visual Studio에서 C 언어 코드를 작성 시, if를 입력한 뒤 탭 키를 두 번 누르면 자동으로 if 문의 코드 스니펫이 생성됩니다. 이는 if, else, for, do, while 등 주요 제어문에 대한 코드 조각(Code Snippets)을 빠르게 삽입할 수 있게 해줍니다. 이러한 기능은 효율적인 코딩을 지원하며, 코드 작성 시간을 단축시킵니다.

13.7 비교 연산자를 사용한 if 문

if 문은 조건 판단에 있어 비교 연산자와 함께 자주 사용됩니다. 이를 통해 특정 조건이 참인 경우에만 원하는 동작을 수행할 수 있습니다.

코드: if_demo.c

// 비교 연산자를 사용한 if 문 예시
#include <stdio.h>

int main(void)
{
    int x = 10; // x 초기화

    if (x == 10) // x가 10일 경우
    {
        printf("x는 %d입니다.\n", x);
    }

    if (x != 20) // x가 20이 아닐 경우
    {
        printf("x는 20이 아닙니다.\n");
    }

    return 0;
}
x는 10입니다.
x는 20이 아닙니다.

비교 연산자와 if 문을 사용하여 특정 조건이 만족될 때의 행동을 정의할 수 있습니다. 이는 프로그램의 흐름을 조건에 따라 유연하게 제어할 수 있게 합니다.

if 문 사용 두 수의 크기 비교

다음 예제는 두 수를 비교하여 결과를 출력하는 간단한 프로그램입니다.

https://youtu.be/QITh4y5w2Oo

코드: compare_two_numbers.c

https://github.com/VisualAcademy/Challenge/blob/main/Challenge/compare_two_numbers.c

// 두 수 비교 예제
#include <stdio.h>

int main(void)
{
    int num1 = 0;
    int num2 = 0; 

    printf("첫 번째 수: "); scanf("%d", &num1);
    printf("두 번째 수: "); scanf("%d", &num2);

    if (num1 > num2)
    {
        printf("%d이(가) %d보다 큽니다.\n", num1, num2);
    }
    else if (num1 < num2)
    {
        printf("%d이(가) %d보다 작습니다.\n", num1, num2);
    }
    else // num1 == num2
    {
        printf("%d이(가) %d와 같습니다.\n", num1, num2);
    }

    return 0;
}
첫 번째 수: 5
두 번째 수: 3
5이(가) 3보다 큽니다.
첫 번째 수: 3
두 번째 수: 5
3이(가) 5보다 작습니다.
첫 번째 수: 1234
두 번째 수: 1234
1234이(가) 1234와 같습니다.

이 예제는 두 수의 관계(크기)를 비교하여 상대적인 크기를 출력합니다. 비교 연산자와 조건문을 사용해 다양한 상황에 따른 출력을 구현할 수 있습니다.

13.9 !(NOT) 연산자의 if 문 조건식 활용

if 문에서 조건식의 결과가 참일 때만 특정 코드를 실행하도록 설정할 수 있습니다. 여기서 !(NOT) 연산자를 활용해 조건식의 결과를 반전시키는 방법을 알아보겠습니다.

코드: if_not.c

// !(NOT) 연산자 활용 예
#include <stdio.h>

int main(void)
{
    int bln = 0; // 0은 거짓을 의미

    if (!bln) // bln이 거짓(0)이 아닐 때, 즉 참일 때
    {
        printf("bln: false(0) -> ! -> true(1)\n");
    }

    return 0;
}
bln: false(0) -> ! -> true(1)

!(NOT) 연산자는 조건식의 결과를 반전시키는 데 사용되며, "조건이 아니라면"이라는 논리적 구조를 구현할 때 유용합니다.

13.10 중첩된 if 문의 사용

if 문 안에 다른 if 문을 넣어 두 개 이상의 조건을 연속으로 검사할 수 있습니다. 이를 중첩된 if 문이라고 합니다. 특정 조건 아래 또 다른 조건을 만족해야 할 때 중첩된 if 문을 사용하면 유용합니다.

코드: if_nested.c

// 중첩된 if 문 예시
#include <stdio.h>

int main(void)
{
    char name = 'C';
    int version = 22;

    if (name == 'C') // 첫 번째 조건 검사
    {
        if (version == 22) // 두 번째 조건 검사
        {
            printf("%c %d\n", name, version); // 두 조건 모두 만족 시 실행
        }
    }

    return 0;
}
C 22

본 예제에서 nameversion이 주어진 조건을 모두 만족할 때, "C 22"를 출력합니다. 복수의 조건을 순차적으로 검증해야 할 때 중첩된 if 문을 활용하면 프로그램의 로직을 효과적으로 구성할 수 있습니다.

여러 조건을 동시에 처리하는 if 문

논리 연산자와 결합된 if 문을 통해 여러 조건을 한 번에 처리할 수 있습니다.

코드: if_and.c

#include <stdio.h>

int main(void)
{
    int number = 1234;

    // [A] 두 조건이 모두 만족하는 경우
    if (number == 1234 && number >= 1000)
    {
        printf("맞습니다.\n"); // 조건이 모두 참일 때 실행
    }

    // [B] 두 조건 중 하나라도 만족하는 경우
    if (number == 1234 || number <= 1000)
    {
        printf("하나라도 참이면 참\n"); // 하나라도 참일 때 실행
    }

    return 0;
}
맞습니다.
하나라도 참이면 참

이 예제에서 &&|| 논리 연산자를 사용하여 복수의 조건을 효과적으로 검사하는 방법을 확인할 수 있습니다.

else 문과의 조합으로 분기 처리

if 문과 함께 else 문을 사용하면 조건에 따라 두 가지 경로로 분기할 수 있습니다.

// if ~ else 문: 조건이 참이면 if 블록을, 그렇지 않으면 else 블록을 실행

13.13 else 문의 활용

else 문은 if 문의 조건이 거짓일 때 실행할 명령을 지정할 때 사용됩니다. else 문은 항상 if 문과 함께 사용되며, if 문의 조건이 거짓인 경우에 실행됩니다.

if 문은 else 문과 함께 사용되고 모양은 다음과 같습니다.

> if (조건식)
. {
.     // 조건식이 참일 때 실행할 실행문1;
. }
. else
. {
.     // 조건식이 거짓일 때 실행할 실행문2;
. }
>

조건식이 참이면 실행문1을 실행하고, 조건식이 거짓이면 실행문2를 실행합니다.

이번에는 코드로 else 문의 사용 모양을 살펴보겠습니다.

코드: else_note.c

// else 문의 기본 사용 예시
#include <stdio.h>

int main(void)
{
    if (1 != 1) // 거짓 조건
    {
        // 조건이 참일 경우 실행될 코드
    }
    else // 조건이 거짓일 때 실행될 코드
    {
        printf("조건식이 거짓이기에 현재 문장이 실행됩니다.\n");
    }

    return 0;
}
조건식이 거짓이기에 현재 문장이 실행됩니다.

위 코드 예시처럼, 조건식이 참인 경우와 거짓인 경우에 실행될 명령을 분리하여 지정할 수 있습니다.

if~else문을 순서도로 표현해 보면 다음과 같습니다.

그림: 순서도로 표현해 본 if~else 문

순서도로 표현해 본 if~else 문

IMPORTANT

else에는 조건식을 쓸 수 없습니다!

두 조건을 else 문으로 처리하기

else 문을 활용해 두 가지 상황 중 하나를 처리하는 방법을 알아보겠습니다. Visual Studio 같은 편집기에서는 else를 입력하고 탭 키를 두 번 누르면 자동으로 else 문의 코드 블록을 생성해주는 편리한 기능이 있습니다. 이를 활용하면 보다 빠르고 효율적으로 코드를 작성할 수 있습니다.

코드: else.c

// else 문을 사용한 두 조건 처리 예시
#include <stdio.h>

int main(void)
{
    int score = 59; // 점수 초기화

    if (score >= 60)
    {
        printf("합격\n"); // 점수가 60 이상일 때 실행
    }
    else
    {
        printf("불합격\n"); // 점수가 60 미만일 때 실행
    }

    return 0;
}
불합격

여기서는 score 변수의 값이 59로 설정되어 있으므로 (score >= 60)의 조건이 거짓이 되어 "불합격"이 출력됩니다.

조건의 동등성 확인하기

if 문과 else 문을 사용하여 특정 조건이 같은지 다른지를 확인할 수 있습니다.

코드: if_else.c

// 조건의 동등성을 확인하는 예제
#include <stdio.h>

int main(void)
{
    const double PI = 3.14; // PI 값 초기화

    if (PI == 3.14) // PI가 3.14와 같은지 확인
    {
        printf("PI는 3.14입니다.\n"); // 조건이 참일 때 실행
    }
    else
    {
        printf("PI는 3.14가 아닙니다.\n"); // 조건이 거짓일 때 실행
    }

    return 0;
}
PI는 3.14입니다.

이 코드는 PI가 3.14인지를 확인하고 그 결과에 따라 적절한 메시지를 출력합니다. 조건이 참이므로 "PI는 3.14입니다."가 출력됩니다.

두 수 중 큰 수 찾기 프로그램

다음 프로그램은 사용자로부터 두 개의 정수를 입력받아 더 큰 수를 출력합니다.

코드: greater_than_equal.c

// 사용자로부터 두 개의 정수를 입력받아 더 큰 수 출력
#define _CRT_SECURE_NO_WARNINGS // scanf() 보안 경고 방지
#include <stdio.h>

int main(void)
{
    int first = 0, second = 0;
    printf("2개의 정수를 입력하세요. (예: 3 5) => ");
    scanf("%d %d", &first, &second);

    if (first >= second)
    {
        printf("큰 값: %d\n", first);
    }
    else
    {
        printf("큰 값: %d\n", second);
    }

    return 0;
}
2개의 정수를 입력하세요. (예: 3 5) => 3 5
큰 값: 5

여기서 (first >= second) 조건을 만족할 경우 first의 값이 큰 것으로 간주하며, 그렇지 않을 경우 second가 더 큰 값으로 출력됩니다.

두 수의 차이를 양수로 표현하기

두 수의 차이를 양의 정수로 나타내는 방법을 배워봅시다.

코드: num_difference.c

// 두 수의 차이를 양의 정수로 계산
#include <stdio.h>

int main(void)
{
    int first = 3;
    int second = 5;
    int diff = 0; // 차이값을 저장할 변수

    if (first > second)
    {
        diff = first - second; // 첫 번째 수가 더 큰 경우
    }
    else
    {
        diff = second - first; // 두 번째 수가 더 큰 경우
    }

    printf("%d와 %d의 차이: %d\n", first, second, diff); // 결과 출력

    return 0;
}
3와 5의 차이: 2

이 프로그램은 두 수 중 큰 수에서 작은 수를 빼서 항상 양의 정수 형태로 차이를 계산합니다. 이로써, 두 값의 절대적인 차이를 양수로 정확히 표현할 수 있습니다.

입력된 문자의 대소문자 판별하기

다음 프로그램은 사용자로부터 문자를 입력받아 대문자인지 소문자인지를 판별합니다.

코드: char_test.c

#define _CRT_SECURE_NO_WARNINGS // scanf() 보안 경고 방지
#include <stdio.h>

int main(void)
{
    char c;

    printf("영문 대문자 또는 소문자 하나를 입력하세요.\n");
    scanf("%c", &c);

    if (c >= 'A' && c <= 'Z')
    {
        printf("%c는 대문자입니다.\n", c);
    }
    else if (c >= 'a' && c <= 'z')
    {
        printf("%c는 소문자입니다.\n", c);
    }
    else
    {
        printf("%c는 알파벳이 아닙니다.\n", c);
    }

    return 0;
}
영문 대문자 또는 소문자 하나를 입력하세요.
a
a는 소문자입니다.

이 코드는 입력된 문자가 영문 대문자 범위에 속하는지, 소문자 범위에 속하는지를 검사하여 해당하는 메시지를 출력합니다. 알파벳이 아닌 다른 문자가 입력될 경우, 이를 알려주는 조건을 추가했습니다.

중첩된 else 문을 활용한 입력 처리

다음 예제는 사용자로부터 문자 하나를 입력받아, 그 문자가 'y', 'n', 또는 그 외의 문자인지에 따라 다른 메시지를 출력합니다.

코드: else_nested.c

// 중첩된 else 문을 활용한 입력 처리 예제
#include <stdio.h>

int main(void)
{
    char input;
    printf("문자를 입력하세요. (y/n/c): ");
    input = getchar();

    if (input == 'y')
    {
        printf("Yes");
    }
    else if (input == 'n')
    {
        printf("No");
    }
    else
    {
        printf("Cancel");
    }

    return 0;
}
문자를 입력하세요. (y/n/c): c
Cancel

이 프로그램은 중첩된 else 문 대신 else if 구문을 사용하여 보다 명확하게 각 조건을 분기처리하고 있습니다.

상장 수여 프로그램

점수에 따라 상장을 수여하는 프로그램입니다. 사용자가 입력하는 점수에 따라 금메달, 은메달, 동메달, 또는 상장 없음을 결정합니다.

코드: if_else_score_grade.c

#define _CRT_SECURE_NO_WARNINGS // scanf() 보안 경고 방지
#include <stdio.h>

int main(void)
{
    int score;
    printf("점수: ");
    scanf("%d", &score);

    if (score >= 90)
    {
        printf("금메달");
    }
    else if (score >= 80)
    {
        printf("은메달");
    }
    else if (score >= 70)
    {
        printf("동메달");
    }
    else
    {
        printf("노메달");
    }

    printf("을 수상하였습니다.\n");

    return 0;
}
점수: 100
금메달을 수상하였습니다.

이 프로그램은 중첩된 if~else 문을 사용하여 사용자의 점수에 따라 상장을 수여합니다. 조건에 따라 금메달, 은메달, 동메달 또는 상장 없음을 결정하여 출력합니다.

else if 문으로 다중 조건 처리하기

다중 조건을 처리할 때는 else if 문을 사용하여 코드의 중첩을 줄이고 가독성을 높일 수 있습니다. else if 문을 활용하면 여러 조건을 효과적으로 처리할 수 있습니다.

if (조건식1)
{
    실행문1;
}
else if (조건식2)
{
    실행문2;
}
// 추가 조건들
else
{
    실행문n;
}

첫 번째 조건식이 참이면 해당 실행문을 실행하고, 그렇지 않으면 두 번째 조건식을 평가하여 참이면 실행문2를 실행합니다. 이 과정을 원하는 만큼 반복한 후, 모든 조건이 거짓일 경우 else 블록의 실행문n을 실행합니다. 이 구조는 여러 조건을 효율적으로 처리할 수 있게 해줍니다.

다중 if 문의 순서도 모양은 다음과 같습니다.

그림: 다중 if 문을 순서도로 표현

다중 if 문을 순서도로 표현

else if 문 활용 예제

else if 문을 사용하여 여러 조건을 순차적으로 평가하고 처리하는 방법을 알아보겠습니다.

코드: if_else_if_else.c

#include <stdio.h>

int main(void)
{
    int number1 = 10;
    int number2 = 20;

    if (number1 > number2) // 첫 번째 조건 평가
    {
        printf("number1이 더 큽니다.\n");
    }
    else if (number1 < number2) // 두 번째 조건 평가
    {
        printf("number2가 더 큽니다.\n");
    }
    else // 위의 조건들이 모두 거짓일 때
    {
        printf("둘 다 같습니다.\n");
    }

    return 0;
}
number2가 더 큽니다.

이 예제는 number1과 number2의 크기를 비교하여 number1이 큰 경우, number2가 큰 경우, 그리고 두 수가 같은 경우를 구분하여 출력합니다. 첫 번째 조건과 두 번째 조건이 거짓일 때 else 블록을 실행하는 구조를 가집니다.

양수, 음수, 0 판별 프로그램

정수가 양수인지, 음수인지, 아니면 0인지 판별하는 프로그램은 다음과 같습니다.

코드: positive_negative_zero.c

#include <stdio.h>

int main(void)
{
    int number = -1234; // 변수 초기화

    if (number > 0) // 양수 판별
    {
        printf("%d는 양수입니다.\n", number);
    }
    else if (number < 0) // 음수 판별
    {
        printf("%d는 음수입니다.\n", number);
    }
    else // 0 판별
    {
        printf("%d는 0입니다.\n", number);
    }

    return 0;
}
-1234는 음수입니다.

이 프로그램은 입력된 number의 값이 0보다 큰 경우, 0보다 작은 경우, 그리고 0과 같은 경우를 구분하여 각각에 적합한 메시지를 출력합니다. 이를 통해 정수의 부호를 명확히 구별할 수 있습니다.

성적에 따른 등급 출력 프로그램

이 프로그램은 사용자의 성적에 따라 등급(A, B, C, D, F)을 출력합니다. 여러 개의 조건을 순차적으로 평가하여 해당하는 등급을 결정합니다.

코드: else_if.c

#include <stdio.h>

int main(void)
{
    int score = 59; // 성적 초기화

    if (score >= 90)
    {
        printf("A\n"); // 90점 이상인 경우 A 등급
    }
    else if (score >= 80)
    {
        printf("B\n"); // 80점 이상 90점 미만인 경우 B 등급
    }
    else if (score >= 70)
    {
        printf("C\n"); // 70점 이상 80점 미만인 경우 C 등급
    }
    else if (score >= 60)
    {
        printf("D\n"); // 60점 이상 70점 미만인 경우 D 등급
    }
    else
    {
        printf("F\n"); // 60점 미만인 경우 F 등급
    }

    return 0;
}
F

여러 개의 else if 문을 통해 점수 범위에 따라 다른 등급을 출력하는 구조로 설계되었습니다.

점수에 따른 학점 계산 프로그램

사용자로부터 정수 형태의 점수를 입력받아 해당하는 학점을 계산하여 출력하는 프로그램입니다.

코드: score_grade.c

// 점수에 따른 학점 계산 프로그램
#include <stdio.h>

int main(void)
{
    int score;
    char grade;

    printf("당신의 점수는? ");
    scanf("%d", &score); // scanf_s는 특정 환경에서 사용

    if (score >= 90)
    {
        grade = 'A';
    }
    else if (score >= 80)
    {
        grade = 'B';
    }
    else if (score >= 70)
    {
        grade = 'C';
    }
    else if (score >= 60)
    {
        grade = 'D';
    }
    else
    {
        grade = 'F';
    }

    printf("학점: %c학점\n", grade);

    return 0;
}
당신의 점수는? 100

점수: 100점
학점: A학점

이 프로그램은 사용자가 입력한 점수를 바탕으로 if-else 구조를 사용하여 A부터 F까지의 학점을 부여합니다.

조건문(if 문)을 사용한 다양한 조건 처리 전체 정리

13.26 조건문을 이용한 다양한 조건 처리 방법

C 언어의 조건 처리를 위한 주요 구문인 if 문, else 문, 그리고 else if 문을 활용한 예제를 통해 다양한 조건 처리 방법을 알아보겠습니다.

코드: if_else_all.c

#include <stdio.h>

int main(void)
{
    int a = 0;

    printf("정수 입력: ");
    scanf("%d", &a);

    // [1] 단일 if문 사용: 짝수 판별
    if (a % 2 == 0)
    {
        printf("짝수\n");
    }

    // [2] if-else문 사용: 짝수, 홀수 판별
    if (a % 2 != 0)
    {
        printf("홀수\n");
    }
    else
    {
        printf("짝수\n");
    }

    // [3] else if문 사용: 3, 5, 7의 배수 판별
    if (a % 3 == 0)
    {
        printf("3의 배수\n");
    }
    else if (a % 5 == 0)
    {
        printf("5의 배수\n");
    }
    else if (a % 7 == 0)
    {
        printf("7의 배수\n");
    }
    else
    {
        printf("3, 5, 7의 배수가 아닌 수\n");
    }

    return 0;
}
정수 입력: 4
짝수
짝수
3, 5, 7의 배수가 아닌 수
정수 입력: 13
홀수
3, 5, 7의 배수가 아닌 수

이 예제는 다음과 같은 3가지 조건 처리 방식을 보여줍니다:

  1. 단일 if문은 특정 조건이 참일 때만 실행할 명령을 정의합니다. 여기서는 짝수일 때 "짝수"라고 출력합니다.
  2. if-else문은 두 가지 상황 중 하나를 선택하여 실행합니다. 조건이 참이면 "홀수", 거짓이면 "짝수"를 출력합니다.
  3. else if문은 여러 조건 중 하나를 만족하는 경우에 해당하는 명령을 실행합니다. 3의 배수, 5의 배수, 7의 배수 각각에 대해 다른 출력을 수행하며, 어떤 조건도 만족하지 않으면 "3, 5, 7의 배수가 아닌 수"를 출력합니다.

이러한 조건문은 데이터를 필터링하거나, 특정 조건에 따른 다양한 작업을 수행할 때 유용하게 사용됩니다.

if 문 정리 연습 문제

https://youtu.be/mgGG4Ix2g44

음수 판별하기 연습문제

음수를 판별하는 간단한 조건문 예제를 통해 if 문의 사용법을 연습해보겠습니다.

코드: if_practice.c

// 음수 판별 프로그램
#include <stdio.h>

int main(void)
{
    int number = -1234;
    if (number < 0)
    {
        printf("%d은(는) 음수입니다.\n", number);
    }
    return 0;
}
-1234은(는) 음수입니다.

이 예제에서는 변수 number가 음수인 경우, 즉 number < 0이 참일 때 해당하는 메시지를 출력합니다. -1234는 음수 조건을 만족하기 때문에 "음수입니다."라는 문구가 출력됩니다.

만 14세 미만 동의 필요성 체크

사용자의 나이를 입력받아 만 14세 미만일 경우 부모님의 동의가 필요하다는 안내 메시지를 출력하는 코드입니다.

코드: if_exam.c

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
    int age;
    printf("나이를 입력해주세요: ");
    scanf("%d", &age);
    if (age < 14)
    {
        printf("만 14세 미만 어린이는 부모님의 동의가 필요합니다.\n");
    }
    return 0;
}
13
만 14세 미만 어린이는 부모님의 동의가 필요합니다.

이 코드는 사용자로부터 나이를 입력 받아 그 값이 14보다 작을 경우, 즉 만 14세 미만일 때 "부모님의 동의가 필요합니다."라는 안내 메시지를 출력합니다. 이를 통해 조건문을 활용하여 특정 조건을 만족하는 입력값에 대한 처리를 수행하는 방법을 확인할 수 있습니다.

if 문을 이용한 절댓값 계산 예제

절댓값을 구하는 간단한 예제를 통해 if 문의 활용법을 살펴보겠습니다.

https://youtu.be/8lUh_Ka3S3A

코드: if_absolute_value.c

// 절댓값 계산을 위한 if 문 예제
#define _CRT_SECURE_NO_WARNINGS // scanf 보안 경고 방지
#include <stdio.h>

int main(void)
{
    int num; // 사용자 입력값
    int abs; // 계산된 절댓값
    int _; // 버림(Discards) 

    printf("정수 하나를 입력하세요: ");
    _ = scanf("%d", &num);

    // 절댓값 계산
    if (num < 0)
    {
        abs = -num; // 음수인 경우 부호 변경
    }
    else
    {
        abs = num; // 양수 또는 0인 경우 그대로 사용
    }

    // 결과 출력
    printf("%d의 절댓값: %d\n", num, abs);

    return 0;
}
정수 하나를 입력하세요: -21
-21의 절댓값: 21

이 프로그램은 사용자로부터 정수를 입력받아 if 문을 사용하여 그 절댓값을 계산하고, 결과를 출력합니다. 음수일 경우 부호를 바꿔 양수로 만들고, 양수나 0일 경우 그대로 값을 사용하여 절댓값을 구합니다.

장 요약

프로그래밍은 기본적으로 순차적 처리를 기반으로 시작합니다. 하지만, 특정 조건에 따라 다른 행동을 취해야 할 때가 있으며, 이러한 필요성에 의해 if 문과 같은 조건문이 개발되었습니다. C 언어에서 제공하는 if 문과 else 문은 프로그래밍에서 매우 중요하고 자주 사용되는 제어문입니다. 이번 장에서는 다양한 형태로 조건문 사용법을 소개했습니다. 이 지식을 바탕으로 다른 제어문도 학습해 나갈 수 있습니다.

퀴즈

다음 코드 조각 중 if 조건문을 올바르게 사용한 예는?

if (int x = 10) { printf("x는 10입니다.\n"); }
if (x == 10) printf("x는 10입니다.\n");
if x == 10 printf("x는 10입니다.\n");
if (x = 10) printf("x는 10입니다.\n");

정답: 2

해설:

  • 1번은 조건문 내에서 변수를 선언하려고 하고 있습니다. 이것은 C 언어에서 허용되지 않는 문법입니다.
  • 2번은 올바른 if 조건문의 형식을 가지고 있습니다. x == 10은 x가 10과 같은지 비교하는 조건입니다.
  • 3번은 조건을 괄호로 묶지 않았기 때문에 올바르지 않습니다.
  • 4번은 x = 10이라는 할당 연산을 사용하였습니다. if 조건문에서는 비교 연산 ==을 사용해야 합니다.

C 언어 if 조건문 퀴즈


퀴즈 1

int a = 10;
if (a == 10)
    printf("Hello");
    printf("World");

출력 결과는 무엇인가?
a. Hello
b. World
c. HelloWorld
d. 출력되는 결과가 없다

정답: c. HelloWorld


퀴즈 2

int num = 5;
if (num > 3)
    if (num < 10)
        printf("A");
else
    printf("B");

출력 결과는 무엇인가?
a. A
b. B
c. AB
d. 출력되는 결과가 없다

정답: a. A


퀴즈 3

int value = 0;
if (!value)
    printf("True");
else
    printf("False");

출력 결과는 무엇인가?
a. True
b. False

정답: a. True


퀴즈 4

int x = 10, y = 20;
if (x && y > x)
    printf("Yes");
else
    printf("No");

출력 결과는 무엇인가?
a. Yes
b. No

정답: a. Yes


퀴즈 5

char ch = 'A';
if (ch = 'B')
    printf("Equal");
else
    printf("Not Equal");

출력 결과는 무엇인가?
a. Equal
b. Not Equal

정답: a. Equal


퀴즈 6

int val = 5;
if (val == 5)
    ;
else
    printf("Five");

출력 결과는 무엇인가?
a. Five
b. 출력되는 결과가 없다

정답: b. 출력되는 결과가 없다


퀴즈 7

int i = 10, j = 5;
if (i > 7 && j == 5)
    printf("Condition met");

출력 결과는 무엇인가?
a. Condition met
b. 출력되는 결과가 없다

정답: a. Condition met


퀴즈 8

int num = 3;
if (num == 3)
    printf("Three");
else if (num == 4)
    printf("Four");
else
    printf("Unknown");

출력 결과는 무엇인가?
a. Three
b. Four
c. Unknown

정답: a. Three


퀴즈 9

int a = 5, b = 10;
if (a = b)
    printf("Equal");
else
    printf("Not Equal");

출력 결과는 무엇인가?
a. Equal
b. Not Equal

정답: a. Equal


퀴즈 10

if (1)
    printf("One");
if (0)
    printf("Zero");
if (-1)
    printf("Minus One");

출력 결과는 무엇인가?
a. OneZeroMinus One
b. OneMinus One
c. ZeroMinus One
d. One

정답: b. OneMinus One

문제

정보처리기능사 실기 문제: 조건문을 활용한 산술 연산 및 16진수 출력

이 문제에서는 C 언어를 사용하여 if 조건문을 활용해 주어진 조건에 따라 산술 연산을 수행하고, 그 결과를 16진수 형태로 출력하는 프로그램을 작성하는 것이 목표입니다. 이 과정에서 if-else 구문의 사용법과 %x 형식 지정자를 사용한 16진수 출력 방법에 대해 이해해야 합니다.

문제: 변수 ab가 주어졌을 때, b가 5보다 큰 경우 ab의 합을, 그렇지 않은 경우 b에서 a를 뺀 결과를 16진수 형태로 출력하는 C 프로그램을 작성하시오.

#include <stdio.h>

main() {
    int a = 3, b = 10;
    if (b > 5)
        printf("%x\n", a + b);
    else
        printf("%x\n", b - a);
}

해결 방법:

  1. #include <stdio.h>를 사용하여 표준 입출력 라이브러리를 포함합니다.
  2. main 함수를 정의하여 프로그램의 시작점을 만듭니다.
  3. 정수형 변수 ab를 선언하고, 각각 3과 10의 값을 할당합니다.
  4. if 조건문을 사용하여 b의 값이 5보다 큰지 검사합니다. 조건이 참인 경우, ab의 합을 계산하고 이를 16진수 형태로 출력합니다. 조건이 거짓인 경우, b에서 a를 뺀 결과를 16진수 형태로 출력합니다.
  5. %x 형식 지정자를 사용하여 계산된 결과값을 16진수 형태로 printf 함수를 통해 출력합니다.

이 문제는 조건에 따라 다른 연산을 수행하고 결과를 특정 형식으로 출력하는 기본적인 프로그래밍 능력을 평가합니다. %x 형식 지정자를 사용하는 방법을 이해하고 적용할 수 있는지가 중점적으로 다뤄집니다.

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