Logo hyuki.dev
Table of Contents

Intro

이 블로그 포스트에서는 C언어의 조건문에 대해 알아보겠습니다.

조건문이란?

조건문은 프로그램 실행 흐름을 제어하는 핵심 요소로, 특정 조건에 따라 코드 실행 여부를 결정합니다.

주어진 조건이 참일때는 true, 1이고 거짓일때는 false, 0입니다.

C언어에서는 0만 거짓이고 0 이외는 전부 true이니 주의해야합니다.

조건문의 종류

C언어에서는 크게 다음과 같은 조건문을 사용합니다.

  • if 문
  • if-else 문
  • if-else if-else 문
  • switch-case 문
  • 삼향 연산자 (조건 연산자)

if 문

if 문은 가장 기본적인 조건문으로, 주어진 조건이 참(true)일 때만 특정 코드 블록을 실행합니다.

기본 문법:

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

예제:

#include <stdio.h>
int main() {
int a = 10;
if (a > 5) {
printf("a는 5보다 큽니다.\n");
}
return 0;
}

실행 결과: “a는 5보다 큽니다.”가 출력됩니다.

참고: 조건식이 참일 때 실행할 명령어가 한 줄뿐이라면 중괄호()를 생략할 수 있습니다.

if (a > 5)
printf("a는 5보다 큽니다.\n");

if-else 문

if-else 문은 조건이 참일 때와 거짓일 때 서로 다른 코드 블록을 실행합니다.

기본 문법:

if (조건식) {
// 조건이 참일 때 실행되는 코드
} else {
// 조건이 거짓일 때 실행되는 코드
}

예제:

#include <stdio.h>
int main() {
int a = 10;
if (a > 5) {
printf("a는 5보다 큽니다.\n");
} else {
printf("a는 5보다 작습니다.\n")
}
return 0;
}

if-else if-else 문 (다중 조건문)

여러 조건을 순차적으로 검사해야 할 때 if-else if-else 구조를 사용합니다.

기본 문법:

if (조건식1) {
// 조건식1이 참일 때 실행되는 코드
} else if (조건식2) {
// 조건식1이 거짓이고 조건식2가 참일 때 실행되는 코드
} else if (조건식3) {
// 조건식1, 조건식2가 거짓이고 조건식3이 참일 때 실행되는 코드
} else {
// 모든 조건식이 거짓일 때 실행되는 코드
}

예제:

#include <stdio.h>
int main() {
int score;
printf("점수를 입력하세요: ");
scanf("%d", &score);
if (score >= 90) {
printf("학점: A\n");
} else if (score >= 80) {
printf("학점: B\n");
} else if (score >= 70) {
printf("학점: C\n");
} else if (score >= 60) {
printf("학점: D\n");
} else {
printf("학점: F\n");
}
return 0;
}

주의할 점:

if-else if-else 구문에서는 위에서부터 순차적으로 조건을 검사하며, 처음으로 참이 되는 조건의 코드 블록만 실행됩니다. 그 이후 조건들은 검사하지 않습니다.

switch-case 문

switch-case 문은 하나의 변수나 표현식의 값에 따라 여러 경로로 분기하는 조건문입니다.

기본 문법:

switch (표현식) {
case 값1:
// 표현식이 값1과 같을 때 실행되는 코드
break;
case 값2:
// 표현식이 값2와 같을 때 실행되는 코드
break;
...
default:
// 표현식이 어떤 case와도 일치하지 않을 때 실행되는 코드
break;
}

예제:

#include <stdio.h>
int main() {
char operation;
float n1, n2;
printf("연산자를 입력하세요 (+, -, *, /): ");
scanf("%c", &operation);
printf("두 숫자를 입력하세요: ");
scanf("%f %f", &n1, &n2);
switch(operation) {
case '+':
printf("%f + %f = %f\n", n1, n2, n1+n2);
break;
case '-':
printf("%f - %f = %f\n", n1, n2, n1-n2);
break;
case '*':
printf("%f * %f = %f\n", n1, n2, n1*n2);
break;
case '/':
printf("%f / %f = %f\n", n1, n2, n1/n2);
break;
default:
printf("잘못된 연산자입니다!\n");
}
return 0;
}

switch문의 특징:

  • switch 표현식은 정수형(int, char 등) 값만 사용할 수 있습니다.
  • break 문이 없으면 다음 case의 코드도 계속 실행됩니다 (fall-through).
  • default 케이스는 선택적이며, 모든 case와 일치하지 않을 때 실행됩니다.

삼향 연산자 (조건 연산자)

기본 문법:

조건식 ? 표현식1 : 표현식2;
  • 조건식이 참(true)이면 표현식1이 실행/반환됩니다
  • 조건식이 거짓(false)이면 표현식2가 실행/반환됩니다

예제:

#include <stdio.h>
int main() {
int age = 20;
// 삼항 연산자를 사용하여 성인 여부 확인
printf("%s\n", (age >= 20) ? "성인입니다" : "미성년자입니다");
// 변수에 결과 할당
int max = (10 > 5) ? 10 : 5; // max에 10이 할당됨
printf("최대값: %d\n", max);
return 0;
}

삼항 연산자의 주요 특징:

  • if-else 구문보다 간결한 코드 작성 가능
  • 표현식으로 값을 반환할 수 있음
  • 변수 초기화에 효과적으로 사용 가능
  • 중첩해서 사용 가능하지만 가독성이 떨어질 수 있음

중첩된 조건문

조건문은 다른 조건문 내부에 중첩해서 사용할 수 있습니다.

#include <stdio.h>
int main() {
int num = 15;
if (num > 0) {
printf("%d는 양수입니다.\n", num);
if (num % 2 == 0) {
printf("%d는 짝수입니다.\n", num);
} else {
printf("%d는 홀수입니다.\n", num);
}
if (num > 10) {
printf("%d는 10보다 큽니다.\n", num);
}
} else if (num < 0) {
printf("%d는 음수입니다.\n", num);
} else {
printf("숫자는 0입니다.\n");
}
return 0;
}

논리 연산자를 활용한 조건문

  • AND 연산자(&&): 모든 조건이 참일 때만 참
  • OR 연산자(||): 하나 이상의 조건이 참이면 참
  • NOT 연산자(!): 조건의 결과를 반전

조건문 유형 비교

특성if 문if-else 문switch-case 문삼항 연산자
구문 복잡성단순중간중간매우 간결
가독성좋음좋음많은 조건에서 우수단순할 때 좋음, 복잡할 때 나쁨
처리 속도조건에 따라 다름조건에 따라 다름많은 조건에서 효율적매우 빠름
조건 유형모든 조건 가능모든 조건 가능정수형 값 비교만 가능모든 조건 가능
중첩 가능성높음높음제한적가능하나 가독성 저하
값 반환불가불가불가가능
SubBlog List