본문 바로가기

C언어

C 언어 코딩 도장 5

if 조건문으로 특정 조건일 때 코드 실행하기

조건문은 특정 조건일 때 코드를 실행한다.

그래서 조건문을 사용하면 프로그램에서 여러 가지 상황에 대처할 수 있다.

조건문을 사용하면 조건에 따라 다른 코드를 실행할 수 있다.

if 조건문 사용하기

if 조건문은 괄호 안에 조건식을 지정하고, 중괄호 안에는 조건식이 만족할 때 실행할 코드를 넣는다.

#include <stdio.h>

int main()
{
    int num1 = 10;

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

    return 0;
}

if 조건문으로 num1이 10인지 확인한 뒤, num1이 10이 맞기 때문에, if 조건문 괄호 내에 조건식이 만족하기 때문에, 중괄호 안에 있는 printf 함수가 실행된다.

더보기

값을 할당할 때 =을 사용하기 때문에, 값을 비교할 때는 ==을 사용한다.

if 조건문과 세미콜론(;)

if 조건문을 사용할 때는 세미콜론을 항상 주의해야 한다.

#include <stdio.h>

int main()
{
    int num1 = 5;

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

    return 0;
}

if 조건문 끝에 세미콜론이 붙으면 if 조건문이 제대로 동작하지 않고, 뒤에 오는 코드가 무조건 실행된다.

 

if 조건문 끝에 세미콜론이 붙으면 if와 printf가 전혀 관계 없이 떨어져있다고 볼 수 있다.

더보기

여기서 왜 컴파일 에러가 발생하지 않는걸까?

C 언어에서는 코드를 중괄호로 감쌀 수 있기 때문이다.

if 조건문에서 중괄호 생략하기

if 조건문에서 실행할 코드가 한 줄이라면 중괄호를 생략할 수 있다.

#include <stdio.h>

int main()
{
    int num1 = 10;

    if (num1 == 10)
        printf("10입니다.\n");

    return 0;
}

 

if 조건문에서 실행할 코드가 두 줄 이상일 때에는 중괄호 사용에 주의해야 한다.

#include <stdio.h>

int main()
{
    int num1 = 5;

    if (num1 == 10)
        printf("if 조건문\n");
    	printf("10입니다.\n");

    return 0;
}

if로 실행할 printf가 두 개라도 중괄호가 생략된다면 첫 번째 printf만 실행된다.

if로 실행할 코드가 두 줄 이상이라면 반드시 중괄호로 묶어줘야 한다.

if 조건문에서 실수와 문자 비교하기

#include <stdio.h>

int main()
{
    float num1 = 0.1f;
    char c1 = 'a';

    if (num1 == 0.1f)
        printf("0.1입니다.\n");

    if (c1 == 'a')
        printf("a입니다.\n");

    if (c1 == 97)
        printf("a입니다.\n");	//문자를 ASCII 코드로 비교

    return 0;
}

if 조건문으로 비교할 때는 비교할 변수와 값, 변수와 변수는 자료형을 맞춰주어야 한다.

여기서 실수는 연산한 후 오차가 발생할 수 있어 반올림 오차를 감안해야 한다.

문자 자료형은 문자로 비교하거나 ASCII 코드로 비교할 수 있다.

사용자가 입력한 값에 if 조건문 사용하기

scanf 함수를 사용하여 사용자가 입력한 값을 변수에 저장하고, if 저장문으로 값을 비교해보기

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    int num1;

    scanf("%d", &num1);

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

    if (num1 == 20)
    {
        printf("20입니다.\n");
    }

    return 0;
}

num1이 30일 때 비교하는 if 조건문은 없기 때문에, 그 값에 관련된 출력은 아무것도 되지 않는다.

17.6 Quiz 완료

#include <stdio.h>

int main()
{
    char c1 = 'k';

    if (c1 == 'k')
    {
        printf("k입니다.\n");
    }

    return 0;
}

17.8 심사문제 완료

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    int age;

    scanf("%d", &age);

    if (age < 18)
    {
        printf("청소년 관람 불가");
    }

    return 0;
}

▲ 정답으로 제출한 코드

 

else를 사용하여 두 방향으로 분기하기

if 조건문은 분기(branch, 둘 이상으로 갈라지다)를 위한 문법이다.

프로그램의 흐름을 둘 이상으로 나눈다.

if와 else는 조건식이 만족할 때와 만족하지 않을 때 각각 다른 코드를 실행한다.

if는 조건식이 만족할 때, else는 조건식이 만족하지 않을 때 코드를 실행한다.

else 사용하기

else는 if 조건문 뒤에 오며 단독으로 사용할 수 없다.

if (조건식)
{
	코드1
}
else (조건식)
{
	코드2
}
#include <stdio.h>

int main()
{
    int num1 = 5;

    if (num1 == 10)
    {
        printf("10입니다.\n");
    }
    else
    {
        printf("10이 아닙니다.\n");
    }

    return 0;
}

else는 if의 조건식이 만족하지 않을 때 코드를 실행한다.

보통 if의 조건식이 만족하면 참이라고 하고, 만족하지 않으면 거짓이라고 한다. 그래서 조건식이 참이면 if의 코드가 실행되고, 거짓이면 else의 코드가 실행된다.

else와 세미콜론

if와 마찬가지로 else도 세미콜론을 붙이지 않도록 주의해야 한다.

#include <stdio.h>

int main()
{
    int num1 = 10;

    if (num1 == 10)
    {
        printf("10입니다.\n");
    }
    else;
    {
        printf("10이 아닙니다.\n");
    }

    return 0;
}

else에 세미콜론이 붙어버리면 그 뒤에 오는 코드와 관계가 없어져버리기 때문에 조건식의 결과와는 상관 없이 항상 실행이 된다.

else에서 중괄호 생략하기

else도 if와 마찬가지로 실행할 코드가 한 줄이면 중괄호를 생략할 수 있다.

#include <stdio.h>

int main()
{
    int num1 = 10;

    if (num1 == 10)
        printf("10입니다.\n");

    else
        printf("10이 아닙니다.\n");

    return 0;
}

if, else로 실행할 코드가 두 줄 이상일 때 중괄호를 생략하면 컴파일 에러가 발생한다.

#include <stdio.h>

int main()
{
    int num1 = 10;

    if (num1 == 10)
        printf("if 조건문\n");
        printf("10입니다.\n");

    else
        printf("else\n");
        printf("10이 아닙니다.\n");

    return 0;
}

컴파일 결과 : if_else_omit_race_two_lines_error.c(11,5): error C2181: if와 짝을 이루지 않는 잘못된 else문입니다.

 

if, else로 실행할 코드가 두 줄 이상이라면 반드시 중괄호로 묶어주어야 한다.

#include <stdio.h>

int main()
{
    int num1 = 10;

    if (num1 == 10)
    {
        printf("if 조건문\n");
        printf("10입니다.\n");
    }
    else
    {
        printf("else\n");
        printf("10이 아닙니다.\n");
    }

    return 0;
}

따라서 if, else를 사용할 때는 중괄호 사용에 주의해야 한다.

 

if 조건문의 동작 방식 알아보기

C 언어에서는 if는 0일 때 거짓, 0이 아닐 때 참으로 동작한다.

#include <stdio.h>

int main()
{
    if (2)
        printf("참\n");

    else
        printf("거짓\n");

    return 0;
}

0이 아닌 음수, 양수를 넣으면 무조건 참이다. 실수도 마찬가지로 0.0f는 거짓이고, 0.0f가 아닌 나머지 값들은 참이다.

#include <stdio.h>

int main()
{
    if (0)
    {
        printf("참\n");
    }
    else
    {
        printf("거짓\n");
    }

    return 0;
}

다른 숫자는 모두 참인데 0은 거짓이므로 거짓이 출력된다.

최근에 나온 언어는 True 또는 False같은 참, 거짓 전용 자료형이 존재하지만, C 언어에서는 0을 거짓으로 사용하고, 나머지는 참으로 사용한다.

 

C 언어를 처음 배우고 나면 if 조건식 안에서 할당 연산자(=)를 사용하는 실수를 하게 된다.

#include <stdio.h>

int main()
{
    int num1 = 5;

    if (num1 = 10) //num1에 10을 할당, 0 이외의 숫자는 참이므로 10은 참
        printf("10입니다.\n");

    return 0;
}

if의 조건식에 num1=10처럼 지정하면 num1에 10이 할당되고 if는 num1에 들어있는 값대로 조건을 판단하게 된다. 그래서 10은 0 이외의 값이기 때문에 참으로 구분되고, 그래서 "10입니다"가 출력된다.

1. num1에 10 할당(저장)

2. 조건식에는 num1만 있기 때문에, if는 num1에 들어있는 값으로 조건을 판단

3. 10은 0 이외의 값이므로 참

 

조건식에 == 대신 =를 사용하는 실수는 보통 컴파일 에러가 나지 않기 때문에 잡아내기가 힘들고, 코드가 복잡해지면 눈에 잘 띄지 않는다. 조건식을 사용할 때 주의해야 한다.

 

조건식을 여러 개 지정하기

조건이 복잡할 때는 논리 연산자를 사용하여 조건식을 여러 개 지정할 수 있다.

#include <stdio.h>

int main()
{
    int num1 = 10;
    int num2 = 20;

    if (num1 == 10 && num2 == 20)
        printf("참\n");
    else
        printf("거짓\n");

    return 0;
}

논리 연산자에 대해서는 https://dojang.io/course/view.php?id=2&section=26 Unit 21에서 더 자세히 설명할 예정이다.

논리 연산자 &&는 두 식이 모두 만족할 때를 뜻한다.

더보기

if 조건문 안에 다시 if 조건문이 들어갈 수 있을까?

if 조건문 안에 다시 if 조건문을 넣어서 여러 번 판단할 수 있다.

#include <stdio.h>

int main()
{
    int num1 = 10;
    int num2 = 20;

    if (num1 == 10)
    {
        if (num2 == 20)
        {
            printf("참\n");
        }
        else
        {
            printf("거짓\n");
        }
    }
    else
        printf("거짓\n");

    return 0;
}

18.6 Quiz 완료

#include <stdio.h>

int main()
{
    unsigned long long num1 = 0;

    if (num1)
        printf("참\n");
    else
        printf("거짓\n");

    return 0;
}

#include <stdio.h>

int main()
{
    int writtenTest = 78;
    int toeic = 870;

    if (writtenTest >= 80 && toeic >= 850)
        printf("합격\n");
    else
        printf("불합격\n");

    return 0;
}

18.9 심사문제 완료

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    char c1;

    scanf("%c", &c1);

    if (c1 == 'a')
        printf("a입니다.\n");
    else
        printf("a가 아닙니다. \n");

    return 0;
}

▲ 정답으로 제출한 코드

18.10 심사문제 완료

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    int korean, english, math, science;

    scanf("%d %d %d %d", &korean, &english, &math, &science);

    int total = korean + english + math + science;
    int average = total / 4;

    if (korean >= 0 && korean <= 100 && english >= 0 && english <= 100 && math >= 0 && math <= 100 && science >= 0 && science <= 100)
    {
        if (average >= 85)
            printf("합격\n");
        else
            printf("불합격");
    }
    else
        printf("잘못된 점수\n");

    return 0;
}

▲ 정답으로 제출한 코드

else if를 사용하여 여러 방향으로 분기하기

프로그램을 만들 때 참, 거짓으로는 한계가 있다. 실제로는 두 가지 이상의 다양한 상황이 발생한다.

 

else if는 조건식을 여러 개 지정하여 각 조건마다 다른 코드를 실행할 수 있다.

 

else if 사용하기

if (조건식)
{
	코드1
}
else if (조건식)
{
	코드2
}

else if는 else인 상태에서 조건식을 지정할 때 사용한다. 단, else if는 단독으로 사용할 수 없고, if와 함께 사용해야 한다.

#include <stdio.h>

int main()
{
    int num1 = 20;

    if (num1 == 10)
        printf("10입니다.\n");
    else if (num1 == 20)
        printf("20입니다.\n");

    return 0;
}

if와 else를 이렇게 만들면 처음 if에서 num1이 10인지 검사하고, 그것이 거짓이라면 else if에서 num1이 20인지 검사하고, 20이라면 '20입니다.'를 출력한다.

만약, else if에 조건식을 지정하지 않으면 컴파일 에러가 발생하니 주의해야 한다. 따라서 else if에는 반드시 조건식을 지정해주어야 한다.

+) else if 끝에도 세미콜론(;)을 붙이면 안 된다.

if, else if, else를 모두 사용하기

else if는 else와 함께 사용할 수 있다.

if (조건식)
{
	코드1
}
else if (조건식)
{	
	코드2
}
else
{
	코드3
}
#include <stdio.h>

int main()
{
    int num1 = 30;

    if (num1 == 10)
        printf("10입니다.\n");
    else if (num1 == 20)
        printf("20입니다.\n");
    else
        printf("10도 20도 아닙니다.\n");

    return 0;
}

if, else if의 조건식이 모두 거짓일 때만 else의 코드가 실행된다.

if와 else는 한 번만 사용할 수 있지만, else if는 여러 번 사용할 수 있다.

else if 앞에 else가 오면 컴파일 에러가 발생한다.

19.3 Quiz 완료

#include <stdio.h>

int main()
{
    char c1 = 'c';

    if (c1 == 'a')
        printf("a\n");
    else if (c1 == 'b')
        printf("b\n");
    else if (c1 == 'c')
        printf("c\n");
    else if (c1 == 'd')
        printf("d\n");
    else
        printf("x\n");

    return 0;
}

19.5 심사문제 완료

if (age >= 7 && age <= 12)
    balance -= 450;
else if (age >= 13 && age <= 18)
    balance -= 720;
else
    balance -= 1200;

▲ 정답으로 제출한 코드

'C언어' 카테고리의 다른 글

C 언어 코딩 도장 7  (0) 2025.01.13
C 언어 코딩 도장 6  (0) 2025.01.13
C 언어 코딩 도장 4  (1) 2025.01.10
C 언어 코딩 도장 3  (0) 2025.01.09
C 언어 코딩 도장 2  (0) 2024.09.02