조건문 — 판단하는 프로그램
지금까지는 정해진 순서대로만 계산을 수행했습니다. 이제 if문과 switch문을 통해 프로그램이 사용자 입력 값에 따라 스스로 판단하고 다른 행동을 할 수 있도록 만들어 봅니다.
학습 목표
이번 단계를 완료하면 다음 능력을 갖추게 됩니다.
if문과 if ~ else문을 사용할 수 있다.else if를 이용하여 여러 조건을 처리할 수 있다.switch ~ case문을 사용하여 메뉴 선택 구조를 만든다.조건문이란?
조건문은 쉽게 말하면 "만약 ~라면"을 프로그램으로 표현하는 것입니다.
질문: 시험 점수가 60점 이상인가?
- YES → 합격
- NO → 불합격
↓
합격
↓
불합격
조건문은 이후 게임, 로그인, 회원관리, 결제, IoT 제어 등 거의 모든 프로그램의 핵심이 됩니다.
if문과 if ~ else문
1. 기본 if문
조건이 참(True)일 때만 실행됩니다.
#include <stdio.h> int main() { int age = 25; if (age >= 20) { printf("성인입니다.\n"); } return 0; }
2. if ~ else문
조건이 참일 때와 거짓일 때를 모두 처리합니다.
#include <stdio.h> int main() { int age; printf("나이를 입력하세요 : "); scanf("%d", &age); if (age >= 20) { printf("성인입니다.\n"); } else { printf("미성년자입니다.\n"); } return 0; }
비교 연산자와 = 주의사항
| 연산자 | 의미 | 예제 |
|---|---|---|
== | 같다 | a == b |
!= | 같지 않다 | a != b |
> | 크다 | a > b |
< | 작다 | a < b |
>= | 크거나 같다 | a >= b |
<= | 작거나 같다 | a <= b |
- = 대입 :
score = 100;(score에 100을 저장해라) - == 비교 :
if (score == 100)(score가 100과 같은가?)
if (score = 100) 처럼 쓰면 에러가 나거나 항상 참(True)으로 처리되는 심각한 논리 오류가 발생합니다!
else if 다중 조건문
조건이 3개 이상일 때는 else if를 사용합니다. (예: 점수에 따른 학점 부여)
if (score >= 90) { printf("A등급\n"); } else if (score >= 80) { printf("B등급\n"); } else if (score >= 70) { printf("C등급\n"); } else { printf("F등급\n"); }
만약 if (score >= 60) 을 맨 위에 적어버리면, 90점을 받아도 첫 조건에서 참이 되어버려 D등급(또는 통과) 처리가 되고 빠져나가버립니다. 큰 범위부터 좁은 범위로 순서대로 작성해야 합니다.
논리 연산자와 조건문 결합
여러 조건을 동시에 판단할 때 && (AND)와 || (OR)를 활용합니다.
AND (&&) - 모두 참이어야 실행
if (age >= 20 && age <= 60) { printf("청장년층입니다.\n"); }
OR (||) - 하나라도 참이면 실행
if (age < 13 || age >= 65) { printf("무료 입장 대상입니다.\n"); }
중첩 조건문 (Nested if)
조건문 안에 또 다른 조건문을 넣을 수 있습니다. 로그인을 떠올려 보세요.
↓
로그인 성공
↓
비밀번호 오류
if (input_id == id) { // 아이디가 맞을 때만 비번 물어보기 printf("비밀번호 : "); scanf("%d", &input_password); if (input_password == password) { printf("로그인 성공!\n"); } else { printf("비밀번호 오류\n"); } } else { printf("존재하지 않는 아이디입니다.\n"); }
switch ~ case 문
특정 정확한 값으로 메뉴를 나눌 때는 switch문이 가독성이 좋습니다.
int menu; printf("메뉴 선택(1~3): "); scanf("%d", &menu); switch (menu) { case 1: printf("학생관리 선택\n"); break; // 여기서 switch문을 빠져나감 case 2: printf("성적관리 선택\n"); break; case 3: printf("회원관리 선택\n"); break; default: // 아무 case에도 해당하지 않을 때 printf("잘못된 메뉴 번호입니다.\n"); }
break;가 없으면 조건에 맞는 코드를 실행한 후, 그 아래에 있는 다른 case의 코드들까지 멈추지 않고 쭈욱 모두 실행해 버립니다. 반드시 case 마지막에 break를 잊지 마세요!
실습 문제
#include <stdio.h> int main() { int number; printf("숫자를 입력하세요 : "); scanf("%d", &number); if (number % 2 == 0) { printf("짝수입니다.\n"); } else { printf("홀수입니다.\n"); } return 0; }
#include <stdio.h> int main() { int a, b, c, max; printf("세 숫자를 입력하세요 : "); scanf("%d %d %d", &a, &b, &c); max = a; // 처음엔 무조건 첫 번째가 크다고 가정 if (b > max) { max = b; } if (c > max) { max = c; } printf("가장 큰 수 : %d\n", max); return 0; }
switch (menu) { case 1: printf("덧셈 결과: %d\n", a + b); break; case 4: // 나눗셈 (0으로 나누기 방지 조건문 추가) if (b != 0) { printf("나눗셈 몫: %d\n", a / b); } else { printf("0으로 나눌 수 없습니다!\n"); } break; }
STEP 05 최종 프로젝트
나만의 생활 판단 프로그램
사용자로부터 나이, 점수, 숫자를 입력받아 각각 성인/미성년자, 성적 등급(A~F), 홀수/짝수를 모두 한 번에 판단해서 출력하는 종합 프로그램을 작성하세요.
[도전 과제] 윤년 판별기 만들기
- 4로 나누어 떨어지면 윤년
- 단, 100으로 나누어 떨어지면 평년 (예외)
- 단, 400으로 나누어 떨어지면 다시 윤년 (예외)
(논리 연산자 && 와 || 를 한 줄에 조합해 보세요!)
STEP 05 완료 체크리스트
입력, 연산 처리에 이어 프로그램의 핵심 기능인 "판단과 분기"까지 배웠습니다. 이제부터 여러분의 코드는 스스로 생각하고 결정하는 지능을 갖추게 되었습니다.