본문 바로가기
C

선택 제어문과 반복 제어문

by curious week 2025. 11. 11.

 

1. C 언어의 기본적인 흐름 제어

1.1 문장(Statement)

  • C 프로그램의 기본 실행 단위
    • 선언문: 변수, 자료형 등을 선언 → 예: int a;
    • 실행문: 실제 동작 수행 → 예: a += 10;
  • 실행문은 함수 안에서만 작성 가능
  • 세미콜론(;) 으로 끝나야 함
  • 기본 실행 순서는 순차적이지만, 흐름 제어문으로 변경 가능

1.2 흐름 제어 구조의 3가지 형태

  1. 순차 제어: 위에서 아래로 순서대로 실행
  2. 선택 제어: 조건에 따라 분기
  3. 반복 제어: 일정 조건 동안 반복

2. 선택 제어문 (Selection Statements)

2.1 종류

  • if 문
  • switch 문

2.2 if문

(1) 단순 if문

if (조건식)
    실행문;
  • 조건식이 참(true) 이면 실행, 거짓이면 건너뜀
  • 여러 문장을 하나로 묶으려면 블록 { ... } 사용
if (a < b) {
    int tmp = a;
    a = b;
    b = tmp;
}
printf("max = %d, min = %d\n", a, b);

(2) if ~ else 문

if (조건식)
    참일 때 실행문;
else
    거짓일 때 실행문;

예시:

int a, b, max;
scanf("%d %d", &a, &b);

if (a >= b)
    max = a;
else
    max = b;

printf("max = %d\n", max);

(3) 다중 if문 (Nested if)

if (조건1)
    if (조건2)
        문장1;
    else
        문장2;
else
    문장3;

예시:

int a;
scanf("%d", &a);

if (a >= 0)
    if (a == 0)
        printf("입력된 값은 0\n");
    else
        printf("입력된 값은 양수\n");
else
    printf("입력된 값은 음수\n");

주의: else는 항상 “가장 가까운 if”와 짝을 이룸.


(4) 다중 if ~ else if ~ else 문

if (조건1)
    문장1;
else if (조건2)
    문장2;
else if (조건3)
    문장3;
else
    문장4;

예시:

int score;
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");

2.3 switch문

(1) 기본 구조

switch (식) {
    case 상수1:
        문장1;
        break;
    case 상수2:
        문장2;
        break;
    ...
    default:
        기본문장;
}
  • 식은 정수형 (int, char, enum 등) 이어야 함
  • case는 반드시 상수값만 사용 가능
  • break가 없으면 다음 case로 계속 실행됨 (fall-through)

(2) 예시

int score;
scanf("%d", &score);

switch (score / 10) {
    case 10:
    case 9:
        printf("학점은 A\n");
        break;
    case 8:
        printf("학점은 B\n");
        break;
    case 7:
        printf("학점은 C\n");
        break;
    case 6:
        printf("학점은 D\n");
        break;
    default:
        printf("학점은 F\n");
}

3. 반복 제어문 (Loop Statements)

3.1 반복문의 종류

  • for 문: 반복 횟수가 명확할 때
  • while 문: 조건이 참인 동안 반복
  • do ~ while 문: 한 번은 실행 후 조건 검사

3.2 for문

(1) 형식

for (초기식; 조건식; 증감식)
    실행문;
  • 초기식: 반복 제어 변수 초기화
  • 조건식: 참이면 반복, 거짓이면 종료
  • 증감식: 제어 변수 변화

(2) 예시

int i, sum = 0;
for (i = 1; i <= 10; ++i)
    sum = sum + i;

printf("1부터 %d까지의 합 = %d\n", i - 1, sum);

(3) 중첩 for문

for (a = 1; a <= 3; ++a) {
    printf("a=%d\n", a);
    for (b = 0; b < 4; b++)
        printf("b=%d ", b);
    putchar('\n');
}

3.3 while문

(1) 형식

while (조건식)
    실행문;
  • 조건이 참이면 계속 반복, 거짓이면 종료
  • 반복 전 조건 검사

(2) 예시

int i = 1, sum = 0;
while (i <= 10) {
    sum = sum + i;
    i++;
}
printf("1부터 %d까지의 합 = %d\n", i - 1, sum);

3.4 do ~ while문

(1) 형식

do {
    실행문;
} while (조건식);
  • 최소 한 번은 반드시 실행됨 (조건 검사 전에 실행)

(2) 예시

int i = 1, n, sum = 0;
printf("n = ");
scanf("%d", &n);

do {
    sum = sum + i;
    i++;
} while (i <= n);

printf("1부터 %d까지의 합 = %d\n", i - 1, sum);

4. 기타 제어문

4.1 break문

  • switch반복문을 강제로 종료
  • 가장 가까운 블록만 빠져나옴
int num, sum = 0;
while (1) {
    printf("num(끝이면 0 입력): ");
    scanf("%d", &num);
    if (num == 0)
        break;
    sum += num;
}
printf("sum = %d\n", sum);

4.2 continue문

  • 반복문 내에서 아래 부분을 건너뛰고 조건 검사로 복귀
int num;
do {
    printf("num = ");
    scanf("%d", &num);

    if (num < 0) {
        printf("음수의 제곱근은 계산 불가\n");
        continue;
    }

    printf("%d의 제곱근 = %f\n", num, sqrt(num));
} while (num != 0);

4.3 goto문

  • 지정된 label로 무조건 이동 (비권장)
  • 가독성과 유지보수성 저하 위험
goto skip;

printf("이 문장은 건너뜁니다.\n");

skip:
printf("goto로 점프했습니다.\n");

함수 밖이나 블록 밖으로는 이동 불가.

'C' 카테고리의 다른 글

배열과 포인터  (1) 2025.11.11
함수와 기억 클래스  (0) 2025.11.11
입.출력 함수와 연산자  (0) 2025.10.22
자료형과 선행처리기  (0) 2025.10.13
C 언어의 개요  (1) 2025.08.27