Post

C 언어(7) 조건문, 반복문과 제어문

C 언어(7) 조건문, 반복문과 제어문

조건문

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

조건문의 종류

C언어에서 사용하는 대표적인 조건문의 종류는 다음과 같습니다.

  1. if문
  2. if / else 문
  3. if / else if / else 문
  4. switch 문

if 문

if 문은 조건식의 결과가 참이면 주어진 명령문을 실행하며, 거짓이면 아무것도 실행하지 않습니다.

C 언어에서 if 문의 문법은 다음과 같습니다

1
2
3
4
if(조건문)
{
    //실행할 명령
}

위의 코드에서 블록에 속한 명령문은 중괄호 { }를 기준으로
오른쪽으로 들여쓰기가 되어 있는 것을 볼 수 있습니다.
이처럼 들여쓰기를 통해 코드의 가독성을 높이는 것인덴트(indent)라고 합니다.

1
2
3
4
5
6
int num = 10;
if(num > 0)
    printf("양수");

if(num < 0)
    printf("음수");

if / else / else if 문에서 실행될 명령문이 한 줄 뿐이라면 중괄호 {}를 생략할 수 있습니다.

위의 코드를 실행하면 다음과 같은 결과가 나타납니다.

양수

if / else 문

if 문과 함께 사용하는 else 문은 if 문과는 반대로
주어진 조건식의 결과가 거짓이면 주어진 명령문을 실행합니다.

C언어에서 else 문의 문법은 다음과 같습니다.

1
2
3
4
5
6
7
8
if(조건문)
{
    //실행할 명령
}
else
{
    // 실행할 명령
}

else 문은 반드시 if와 함께 사용되어야 합니다.

1
2
3
4
5
6
7
8
9
int num = -10;
if(num > 0)
{
    printf("양수");
}
else
{
    printf("음수");
}

위의 코드를 실행하면 다음과 같은 결과가 나타납니다.

음수

if / else if / else 문

else if 문은 if 문처럼 조건식을 가질 수 있기 때문에
중첩된 if 문을 좀 더 간결하게 표현할 수 있도록 해줍니다.

C언어에서 else if 문의 문법은 다음과 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
if(조건문)
{
    //실행할 명령
}
else if(조건문)
{
    //실행할 명령
}
else
{
    // 실행할 명령
}

else if 문은 반드시 if와 함께 사용되어야 합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
int num = 0;
if(num > 0)
{
    printf("양수");
}
else if(num == 0)
{
    printf("Zero");
}
else if(num < 0)
{
    printf("음수");
}

else if 문에 else 문이 없어도 됩니다.

위의 코드를 실행하면 다음과 같은 결과가 나타납니다.

Zero

switch 문

switch 문은 if / else 문과 마찬가지로 주어진 조건 값의 결과에 따라 프로그램이 다른 명령을 수행하도록 하는 조건문입니다.

C언어에서 switch 문의 문법은 다음과 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
switch (조건 값) 
{
    case 값1:
        조건 값이 값1일 때 실행하고자 하는 명령문;
        break;
    case 값2:
        조건 값이 값2일 때 실행하고자 하는 명령문;
        break;
    default:
        조건 값이 어떠한 case 절에도 해당하지 않을 때 실행하고자 하는 명령문;
        break;
}

각 case 절 및 default 절은 반드시 break 키워드를 포함하고 있어야 합니다.

break 키워드는 조건 값에 해당하는 case 절이나 default 절이
실행된 뒤에 전체 switch 문을 빠져나가게 해줍니다.
만약에 break 키워드가 없다면, 조건에 해당하는
switch 문의 case 절 이후의 모든 case 절이 전부 실행될 것입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int num = 2;  
switch (num)
{
    case 1:
        printf("입력하신 수는 1입니다.\n");
    case 2:
        printf("입력하신 수는 2입니다.\n");
    case 3:
        printf("입력하신 수는 3입니다.\n");
    case 4:
        printf("입력하신 수는 4입니다.\n");
    case 5:
        printf("입력하신 수는 5입니다.\n");
    default:
        printf("1부터 5까지의 수만 입력해 주세요!");
}  

위의 코드를 실행하면 다음과 같은 결과가 나타납니다.

입력하신 수는 2입니다.
입력하신 수는 3입니다.
입력하신 수는 4입니다.
입력하신 수는 5입니다.
1부터 5까지의 수만 입력해 주세요!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int num = 2;  
switch (num)
{
    case 1:
        printf("입력하신 수는 1입니다.\n");
        break;
    case 2:
        printf("입력하신 수는 2입니다.\n");
        break;
    case 3:
        printf("입력하신 수는 3입니다.\n");
        break;
    case 4:
        printf("입력하신 수는 4입니다.\n");
        break;
    case 5:
        printf("입력하신 수는 5입니다.\n");
        break;
    default:
        printf("1부터 5까지의 수만 입력해 주세요!");
        break;
}  

위의 코드를 실행하면 다음과 같은 결과가 나타납니다.

입력하신 수는 2입니다.

반복문

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

반복문의 종류

C언어에서 사용하는 대표적인 반복문의 종류는 다음과 같습니다.

  1. while문
  2. do / while 문
  3. for 문

while 문

while 문은 특정 조건을 만족할 때까지 계속해서 주어진 명령문을 반복 실행합니다.

C언어에서 while 문의 문법은 다음과 같습니다.

1
2
3
4
while (조건식)
{
    조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;
}

while 문은 우선 조건식이 참인지를 판단하여, 참이면 내부의 명령문을 실행합니다.
이렇게 내부의 명령문을 전부 실행하고 나면,
다시 조건식으로 돌아와 또 한 번 참인지를 판단하게 됩니다.
이렇게 표현식의 검사를 통해 반복해서 실행되는 반복문을 루프(loop)라고 합니다.

또한 while 문 내부에 조건식의 결과를 변경하는 명령문이 존재하지 않을 때는
프로그램이 영원히 반복되게 됩니다.
이것을 무한 루프(infinite loop)에 빠졌다고 합니다.

1
2
3
4
while (1)
{
    printf("loop\n");
}

위의 코드를 실행하면 다음과 같이 반복문이 끝없이 반복됩니다.

loop
loop
loop
loop
loop

1
2
3
4
5
6
int i = 0;
while (i < 5)
{
    printf("%d\n", i);
    i++; 
}

위의 코드를 실행하면 다음과 같은 결과가 나타납니다.

0
1
2
3
4

do / while 문

while 문은 루프에 진입하기 전에 먼저 조건식부터 검사합니다.
하지만 do / while 문은 먼저 루프를 한 번 실행한 후에 조건식을 검사합니다.
즉, do / while 문은 조건식의 결과와 상관없이 무조건 한 번은 루프를 실행합니다.

C언어에서 do / while 문의 문법은 다음과 같습니다.

1
2
3
do {
    조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;
} while (조건식);
1
2
3
do{
    printf("Hello World");
} while(0);

위의 코드를 실행하면 다음과 같은 결과가 나타납니다.

Hello World

위의 예제가 while 문이었다면 단 한 번의 출력도 없었을 것입니다.

for 문

for 문은 while 문과는 달리 자체적으로 초기식, 조건식, 증감식을 모두 포함하고 있는 반복문입니다.

C언어에서 for 문의 문법은 다음과 같습니다.

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

이때 for 문을 구성하는 초기식, 조건식, 증감식은 각각 생략될 수 있습니다.

for문의 구조는

  1. for문을 처음 시작할 때 초기식을 실행하고
  2. 조건식을 검사하고
  3. 참일 경우 명령문을 실행하고
  4. 증감식을 실행하고 2번을 반복합니다.
1
2
3
4
for(int i = 0; i < 5; i++)
{
    printf("%d\n", i);
}

위의 코드를 실행하면 다음과 같은 결과가 나타납니다.

0
1
2
3
4

제어문

제어문은 루프의 흐름을 사용자가 제어할 수 있도록 해줍니다.

제어문의 종류

C언어에서 사용하는 대표적인 제어문의 종류는 다음과 같습니다.

  1. continue 문
  2. break 문
  3. goto 문

continue 문

continue 문은 루프 내에서 사용하여 해당 루프의 나머지 부분을 건너뛰고,
바로 다음 조건식의 판단으로 넘어가게 합니다.

1
2
3
4
5
6
7
for (int i = 0; i <= 10; i++)
{
	if(i % 2 == 0) // 짝수일 경우 스킵
		continue;
    
	printf("%d\n", i);
}

위의 코드를 실행하면 다음과 같은 결과가 나타납니다.

1
3
5
7
9

break 문

break 문은 루프 내에서 사용하여 해당 반복문을 완전히 종료시킵니다.

1
2
3
4
5
6
7
8
int i = 0;
while (1)
{
	if (i == 5) // i가 5일 경우 반복문 종료
		break;
	printf("%d\n", i);
	i++;
}

위의 코드를 실행하면 다음과 같은 결과가 나타납니다.

0
1
2
3
4

goto 문

goto 문은 프로그램의 흐름지정된 레이블(label)로 변경시키는 명령문입니다.

C언어에서 goto 문의 문법은 다음과 같습니다.

1
2
3
레이블 이름:

goto 이동할 레이블 이름;
1
2
3
4
5
6
7
8
9
int i = 0;

here: // here 레이블 선언

printf("%d\n", i);
i++;

if (i < 5) // i가 5보다 작으면 here 레이블로 이동
	goto here;

위의 코드를 실행하면 다음과 같은 결과가 나타납니다.

0
1
2
3
4

This post is licensed under CC BY 4.0 by the author.