프로그래밍 언어/C

C 제어문 총정리 (조건문, 반복문, 기타 제어문)

순정법사 2023.08.17

A. 제어문

1. 제어문

a. 제어문이란?

C 프로그램은 절차적 프로그램(procedural program) 또는 명령형 프로그램(Imperative program)

따라서 C 프로그램은 수많은 명령문이 처음부터 끝까지 순서대로 실행되는데

 

🌟 이때 원하는 결과를 얻기 위해서는 순차적 흐름을 제어하는 명령문을 제어문이라고 함

 

b. 제어문의 특징

중괄호{} 에 둘러싸있음 (블록(block)이라고 칭함)

 

c. 제어문의 종류

1) 조건문

2) 반복문

 

 

2. 조건문

🌟 주어진 조건식의 결과에 따라 별도의 명령을 수행하도록 제어하는 명령문

 

if ( / else if / else) 문, 삼항 연산자에 의한 조건문, switch문이 있음

 

a. if ( / else if / else) 문

🌟 if(else if) 문은 조건식의 결과가 참이면 명령문을 실행하고 else 문은 거짓이면 실행함. (else문이 없다면 실행 X)

 

📘 문법

if (조건식1) 
{
    조건식1의 결과가 참일 때 실행하고자 하는 명령문;
} 
else if (조건식2) 
{
    조건식2의 결과가 참일 때 실행하고자 하는 명령문;
} 
else 
{
    조건식1의 결과도 거짓이고, 조건식2의 결과도 거짓일 때 실행하고자 하는 명령문;
}

 

👉 실행될 명령문이 한 줄뿐이라면 중괄호 생략 가능

 

b. 삼항 연산자에 의한 조건문

위에서 공부한 if 문과 목적은 동일함

 

👉 간단한 식을 단순하게 사용할 수 있음

 

📘 문법

조건식 ? 반환값1 : 반환값2

 

c. switch 문

🌟 주어진 조건 값의 결과에 따라 프로그램이 다른 명령을 수행하도록 하는 조건문

 

📘 문법

switch (조건 값) 
{
    case 값1:
        조건 값이 값1일 때 실행하고자 하는 명령문;
        break;
    case 값2:
        조건 값이 값2일 때 실행하고자 하는 명령문;
        break;
    ...
    default:
        조건 값이 어떠한 case 절에도 해당하지 않을 때 실행하고자 하는 명령문;
        break;
}

 

🤍 문법설명

 

✔ default 절 : 조건 값이 위에 나열된 어떤 case 절에도 해당되지 않을때 실행, (선택사항)

     + 위치가 항상 마지막일 필요는 없음

✔ 절을 빠져나가기 위해서는 break 키워드를 포함하고 있어야 함 (없다면, default까지 쭉 실행)

 

👍 장점

 

if / else 문보다 가독성이 좋음

컴파일러가 최적화를 쉽게 해 속도가 빠름

 

👎 단점

 

조건 값으로 int 형으로 승격할 수 있는 값만 사용 가능해 사용가능한 상황이 적음

ex) char, short, int, 리터럴, 열거체까지만 사용 가능

 

 

3. 반복문

🌟 프로그램 내에서 똑같은 명령을 일정 횟수만큼 반복하여 수행하도록 제어하는 명령문

 

while, do/while, for 문이 있음

 

a. while 문

🌟 특정 조건을 만족할 때까지 계속해서 주어진 명령문을 반복 실행

 

📘 문법

while (조건식)
{

    조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;
    조건식의 결과를 변경하는 명령문;

}

 

 

🤍 문법설명

 

✔  (1) 조건식이 참(true)인지를 판단하여, 참이면 내부의 명령문을 실행

✔  (2) (3) 내부 명령문 전부 실행 후

✔  (4) 조건식의 결과를 변경하는 명령문을 실행하고 다시 조건식 판단 (이 과정을 루프라고 함)

 

👉 내부 명령문을 제대로 작성하지 않으면 무한루프에 걸리기 때문에 while 문을 작성할 때는 조건식의 결과가 어느 순간 거짓(false)을 갖도록 조건식의 결과를 변경하는 명령문 (4)을 반드시 포함

 

👉 실행될 명령문이 한 줄뿐이라면 중괄호 생략 가능

 

🤓 예제

int i = 0;
int num = 5;  

while (i < num)
{
    printf("while 문이 %d 번째 반복 수행중입니다.\n", i + 1);
    i++; // 이 부분을 삭제하면 무한 루프에 빠지게 됨
}

printf("while 문이 종료된 후 변수 i의 값은 %d입니다.\n", i);

✨ 실행결과

while 문이 1 번째 반복 수행중입니다.
while 문이 2 번째 반복 수행중입니다.
while 문이 3 번째 반복 수행중입니다.
while 문이 4 번째 반복 수행중입니다.
while 문이 5 번째 반복 수행중입니다.

while 문이 종료된 후 변수 i의 값은 5입니다.

 

b. do / while 문

🌟 while문과 다르게 먼저 루프를 무조건 한 번 실행한 후 조건식을 검사

 

📘 문법

do {
    조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;
    조건식의 결과를 변경하는 명령문;
} while (조건식);

 

 

c. for 문

🌟 초기식, 조건식, 증감식을 모두 포함하고 있는 반복문

 

while 문보다는 좀 더 간결하게 반복문을 표현함

 

📘 문법

for (초기식; 조건식; 증감식) 
{
    조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;
}

 

 

🤍 문법 설명

 

✔ 초기식, 조건식, 증감식은 각각 생략될 수 있음

👉 실행될 명령문이 한 줄뿐이라면 중괄호 생략 가능

 

 

 

4. 기타 제어문

🧡 루프의 제어

 

일반적으로 조건식의 검사를 통해 루프로 진입하면, 루프 안에 있는 모든 명령문을 실행하는데

continue, break 문을 사용하면 루프의 흐름을 제어할 수 있음

 

a. continue 문

🌟 루프 내에서 사용하여 해당 루프의 나머지 부분을 건너뛰고, 바로 다음 조건식의 판단으로 넘어감

 

보통 반복문 내에서 특정 조건에 대한 예외처리를 하고자 할 때 사용

 

🤓 예제 : 1부터 100까지의 정수 중에서 3의 배수를 제외하고 출력

int i;
int except_num = 3;  

for (i = 1; i <= 100; i++)

{
    if (i % except_num == 0)
    {
        continue; //3의 배수인 경우에는 아래 printf를 건너뜀
    }
    printf("%d ", i);
}

✨ 실행결과

1
2
4
5
7

...

97
98
100

 

b. break 문

🌟 루프 내에서 사용하여 해당 반복문을 완전히 종료시킨 뒤, 반복문 바로 다음에 위치한 명령문을 실행

 

즉 루프 내에서 조건식의 판단 결과에 상관없이 현재 반복문을 완전히 빠져나가고 싶을 때 사용

 

👉 현재 반복문이라서 다음에 위치한 명령문이 루프라면 루프를 다시 실행함 (예제 2 참조)

 

🤓 예제 : 1부터 10까지의 합을 구하기

int start_num = 1;
int end_num = 10;
int sum = 0;  

while (1)
{
    sum += start_num;
    if (start_num == end_num)
    {
        break;
    }
    start_num++;
}

✨ 실행결과

1부터 10까지 더한 값은 55입니다.

 

🤓 예제 : 구구단에서 5단까지 각 단의 수만큼만 출력하기

int i, j;  

for (i = 2; i <= 5; i++)
{
    for (j = 1; j <= 9; j++)
    {
        printf("%d * %d = %d\n", i, j, i * j);
        if (i == j)
        {
            printf("\n");
            break;
        }
    }
}

✨ 실행결과

2 * 1 = 2
2 * 2 = 4

3 * 1 = 3
3 * 2 = 6
3 * 3 = 9

4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16

5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25

 

c. goto문

🌟 프로그램의 흐름을 지정된 레이블(label)로 무조건 변경시키는 명령문

 

다른 제어문과는 달리 아무런 조건 없이 프로그램의 흐름을 옮김

그래서 가장 손쉽게 사용할 수 있지만, 그래서 더 흐름을 복잡하게 만들기 때문에 디버깅 이외에 사용 ❌

 

 

 


출처 : http://www.tcpschool.com/c/c_control_condition

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com