1. 조건문이란?
프로그램은 기본적으로 위에서 아래로 순차적으로 실행됩니다. 하지만 특정 조건에 따라 실행 흐름을 바꾸고 싶을 때가 있습니다. 이때 사용하는 것이 조건문입니다.
조건문 = 실행 흐름을 제어하는 문장
조건이 참(True)이면 실행하고, 거짓(False)이면 건너뜁니다.
조건이 참(True)이면 실행하고, 거짓(False)이면 건너뜁니다.
조건문의 종류:
if문: 조건이 참일 때만 실행if-else문: 조건에 따라 두 갈래로 분기if-else if-else문: 여러 조건을 순차적으로 검사switch문: 값에 따라 여러 갈래로 분기
2. if문
if문은 가장 기본적인 조건문으로, 조건이 참일 때만 코드를 실행합니다.
기본 형태
if (조건)
{
// 조건이 참일 때 실행할 코드
}
조건이 참(1)이면 중괄호 안의 코드를 실행하고, 거짓(0)이면 건너뜁니다.
실습 1
#include <stdio.h>
int main() {
int age = 20;
if (age >= 18) {
printf("성인입니다.\n");
}
if (age < 18) {
printf("미성년자입니다.\n");
}
return 0;
}
실행 결과 보기
성인입니다.
- 06행: age >= 18이 참이므로 실행됩니다.
- 10행: age < 18이 거짓이므로 실행되지 않습니다.
중괄호 생략
실행할 문장이 하나뿐이면 중괄호를 생략할 수 있습니다.
if (score >= 60)
printf("합격\n"); // 한 줄이면 중괄호 생략 가능
💡 권장사항
중괄호를 생략할 수 있지만, 가독성과 유지보수를 위해 항상 중괄호를 사용하는 것이 좋습니다.
중괄호를 생략할 수 있지만, 가독성과 유지보수를 위해 항상 중괄호를 사용하는 것이 좋습니다.
3. if-else문
if-else문은 조건이 참일 때와 거짓일 때 각각 다른 코드를 실행합니다.
기본 형태
if (조건)
{
// 조건이 참일 때 실행
}
else
{
// 조건이 거짓일 때 실행
}
실습 2
#include <stdio.h>
int main() {
int number = 7;
if (number % 2 == 0) {
printf("%d는 짝수입니다.\n", number);
}
else {
printf("%d는 홀수입니다.\n", number);
}
return 0;
}
실행 결과 보기
7는 홀수입니다.
7을 2로 나눈 나머지는 1이므로 조건이 거짓입니다. 따라서 else 블록이 실행됩니다.
4. if-else if-else문
여러 조건을 순차적으로 검사할 때 사용합니다.
기본 형태
if (조건1)
{
// 조건1이 참일 때 실행
}
else if (조건2)
{
// 조건1은 거짓, 조건2가 참일 때 실행
}
else if (조건3)
{
// 조건1, 2는 거짓, 조건3이 참일 때 실행
}
else
{
// 모든 조건이 거짓일 때 실행
}
⚠️ 중요
조건을 위에서부터 순차적으로 검사하며, 첫 번째로 참인 조건만 실행됩니다. 나머지 조건은 검사하지 않습니다.
조건을 위에서부터 순차적으로 검사하며, 첫 번째로 참인 조건만 실행됩니다. 나머지 조건은 검사하지 않습니다.
실습 3
#include <stdio.h>
int main() {
int score = 85;
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;
}
실행 결과 보기
학점: B
- score >= 90 → 거짓 → 다음 조건으로
- score >= 80 → 참 → "학점: B" 출력 후 조건문 종료
- 나머지 조건은 검사하지 않음
else 생략 가능
모든 조건이 거짓일 때 아무것도 실행하지 않으려면 else를 생략할 수 있습니다.
if (num == 1)
printf("일\n");
else if (num == 2)
printf("이\n");
else if (num == 3)
printf("삼\n");
// else 생략: 1, 2, 3이 아니면 아무것도 출력 안 함
5. 중첩 if문
if문 안에 또 다른 if문을 포함할 수 있습니다. 이를 중첩 if문이라고 합니다.
기본 형태
if (조건1)
{
if (조건2)
{
// 조건1과 조건2가 모두 참일 때 실행
}
}
실습 4
#include <stdio.h>
int main() {
int age = 25;
int hasLicense = 1; // 1: 면허 있음, 0: 면허 없음
if (age >= 18) {
printf("성인입니다.\n");
if (hasLicense == 1) {
printf("운전 가능합니다.\n");
}
else {
printf("면허가 필요합니다.\n");
}
}
else {
printf("미성년자는 운전할 수 없습니다.\n");
}
return 0;
}
실행 결과 보기
성인입니다. 운전 가능합니다.
- 첫 번째 if: age >= 18 → 참
- 중첩된 if: hasLicense == 1 → 참
- 두 조건을 모두 만족하므로 "운전 가능합니다." 출력
💡 팁
중첩이 깊어질수록 코드가 복잡해집니다. 가능하면 논리 연산자(
중첩이 깊어질수록 코드가 복잡해집니다. 가능하면 논리 연산자(
&&, ||)로 조건을 합치는 것이 좋습니다.
논리 연산자로 개선:
// 중첩 if문
if (age >= 18) {
if (hasLicense == 1) {
printf("운전 가능\n");
}
}
// 논리 연산자 사용 (더 간결)
if (age >= 18 && hasLicense == 1) {
printf("운전 가능\n");
}
6. switch문
switch문은 하나의 변수나 식의 값에 따라 여러 갈래로 분기할 때 사용합니다.
기본 형태
switch (변수 또는 식)
{
case 값1:
// 변수가 값1과 같을 때 실행
break;
case 값2:
// 변수가 값2와 같을 때 실행
break;
case 값3:
// 변수가 값3과 같을 때 실행
break;
default:
// 어떤 case에도 해당하지 않을 때 실행
break;
}
switch문의 특징
• 정수형 값(int, char 등)만 사용 가능
• 각 case는 break로 구분
• default는 생략 가능 (선택사항)
• 정수형 값(int, char 등)만 사용 가능
• 각 case는 break로 구분
• default는 생략 가능 (선택사항)
실습 5
#include <stdio.h>
int main() {
int menu;
printf("메뉴를 선택하세요 (1-3): ");
scanf("%d", &menu);
switch (menu) {
case 1:
printf("아메리카노를 주문하셨습니다.\n");
break;
case 2:
printf("카페라떼를 주문하셨습니다.\n");
break;
case 3:
printf("카푸치노를 주문하셨습니다.\n");
break;
default:
printf("잘못된 선택입니다.\n");
break;
}
return 0;
}
실행 결과 보기
메뉴를 선택하세요 (1-3): 2 카페라떼를 주문하셨습니다.
7. break의 역할
break는 switch문을 즉시 종료합니다. break가 없으면 다음 case도 계속 실행됩니다.
break가 있을 때
int num = 2;
switch (num) {
case 1:
printf("일\n");
break; // switch 종료
case 2:
printf("이\n");
break; // switch 종료
case 3:
printf("삼\n");
break; // switch 종료
}
// 출력: 이
break가 없을 때 (Fall-through)
int num = 2;
switch (num) {
case 1:
printf("일\n");
// break 없음
case 2:
printf("이\n");
// break 없음
case 3:
printf("삼\n");
// break 없음
}
// 출력: 이
// 삼
⚠️ 주의
break를 빼먹으면 의도하지 않은 동작이 발생합니다. 각 case 끝에 break를 잊지 마세요!
break를 빼먹으면 의도하지 않은 동작이 발생합니다. 각 case 끝에 break를 잊지 마세요!
break 생략을 활용하기
때로는 의도적으로 break를 생략하여 여러 case를 묶을 수 있습니다.
#include <stdio.h>
int main() {
int day;
printf("요일을 숫자로 입력 (1-7): ");
scanf("%d", &day);
switch (day) {
case 1:
case 2:
case 3:
case 4:
case 5:
printf("평일입니다.\n");
break;
case 6:
case 7:
printf("주말입니다.\n");
break;
default:
printf("잘못된 입력입니다.\n");
break;
}
return 0;
}
8. if문 vs switch문
언제 if문을 사용하나요?
- 범위 조건을 검사할 때 (
score >= 90) - 비교 연산자가 필요할 때 (
age < 18) - 복잡한 조건식이 필요할 때 (
age >= 18 && hasLicense) - 실수형 값을 비교할 때
언제 switch문을 사용하나요?
- 하나의 변수가 여러 고정된 값과 비교될 때
- 정수형 또는 문자형 값만 다룰 때
- 메뉴 선택, 요일 구분 등 명확한 경우의 수가 있을 때
비교 예시:
// if문으로 메뉴 선택
if (menu == 1)
printf("아메리카노\n");
else if (menu == 2)
printf("카페라떼\n");
else if (menu == 3)
printf("카푸치노\n");
// switch문으로 메뉴 선택 (더 깔끔)
switch (menu) {
case 1: printf("아메리카노\n"); break;
case 2: printf("카페라떼\n"); break;
case 3: printf("카푸치노\n"); break;
}
9. 종합 실습
문제 1 - 절댓값 구하기 (기초)
문제 1
다음 코드의 실행 결과는?
조건문
num이 음수이므로 부호를 반전시킵니다.
#include <stdio.h>
int main() {
int num = -15;
if (num < 0) {
num = -num;
}
printf("%d", num);
return 0;
}
문제 2 - 학점 계산 (기초)
문제 2
점수가 75일 때 출력되는 학점은?
조건문
75는 70 이상이므로 세 번째 조건에 해당합니다.
#include <stdio.h>
int main() {
int score = 75;
if (score >= 90)
printf("A");
else if (score >= 80)
printf("B");
else if (score >= 70)
printf("C");
else
printf("D");
return 0;
}
문제 3 - switch문 (중급)
문제 3
다음 코드에서 num이 2일 때 출력 결과는?
조건문
case 2에 break가 없으므로 case 3도 실행됩니다.
#include <stdio.h>
int main() {
int num = 2;
switch (num) {
case 1:
printf("A");
case 2:
printf("B");
case 3:
printf("C");
break;
default:
printf("D");
}
return 0;
}
문제 4 - 중첩 if문 (중급)
문제 4
다음 코드의 실행 결과는?
조건문
x > 5는 참, y > 15도 참입니다.
#include <stdio.h>
int main() {
int x = 10, y = 20;
if (x > 5) {
if (y > 15) {
printf("A");
}
else {
printf("B");
}
}
else {
printf("C");
}
return 0;
}
문제 5 - 윤년 판별 (고급)
문제 5
2024년은 윤년인가요? (1: 윤년, 0: 평년)
// 윤년 조건:
// 1. 4로 나누어떨어지고
// 2. 100으로 나누어떨어지지 않거나
// 3. 400으로 나누어떨어지면 윤년
int year = 2024;
int isLeap;
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
isLeap = 1;
else
isLeap = 0;
조건문
2024는 4로 나누어떨어지고, 100으로 나누어떨어지지 않습니다.
핵심 요약
1. if문
• 조건이 참일 때만 실행
• 형태:
2. if-else문
• 참/거짓에 따라 두 갈래 분기
• 형태:
3. if-else if-else문
• 여러 조건을 순차 검사
• 첫 번째로 참인 조건만 실행
4. 중첩 if문
• if문 안에 if문 포함
• 논리 연산자로 대체 가능
5. switch문
• 값에 따라 여러 갈래 분기
• 정수형/문자형만 사용 가능
• 각 case 끝에 break 필요
6. break
• switch문 즉시 종료
• 빼먹으면 다음 case도 실행됨
7. if vs switch
• 범위 비교 → if문
• 고정된 값 비교 → switch문
• 조건이 참일 때만 실행
• 형태:
if (조건) { 실행문 }2. if-else문
• 참/거짓에 따라 두 갈래 분기
• 형태:
if (조건) { ... } else { ... }3. if-else if-else문
• 여러 조건을 순차 검사
• 첫 번째로 참인 조건만 실행
4. 중첩 if문
• if문 안에 if문 포함
• 논리 연산자로 대체 가능
5. switch문
• 값에 따라 여러 갈래 분기
• 정수형/문자형만 사용 가능
• 각 case 끝에 break 필요
6. break
• switch문 즉시 종료
• 빼먹으면 다음 case도 실행됨
7. if vs switch
• 범위 비교 → if문
• 고정된 값 비교 → switch문