/C
- 프로그램의 순차적인 흐름을 제어할 필요가 생길 때가 있다. 그럴 때는 제어문을 활용한다. 제어문에는 조건문과 반복문이 있으며, 명령문들은 중괄호{} 안에 표기한다. 중괄호 영역을 블록이라고 부른다.
📌 조건문
- if문의 기본 형태는 아래와 같다.
if(조건식)
{
참일 때 실행할 명령문;
}
명령문의 경우 들여 쓰기를 하는 것이 일반적인데, 이러한 들여 쓰기를 인덴트indent라고 부른다. 또한 명령문이 한 줄 뿐이라면 중괄호 생략이 가능하다.
조건의 개수에 따라 if/else문, if/else if/else문 또한 사용 가능하다. 또한 삼항연산자로 간결한 조건문 표현이 가능한데, 그 형식은 아래와 같다.
조건식 ? 반환값1 : 반환값2;
if/else if/else문의 예제 코드는 아래와 같다.
#include <stdio.h>
int main(void)
{
int num = 7;
if (num < 5)
{
printf("입력하신 수는 5보다 작습니다.\n");
}
else if (num == 5)
{
printf("입력하신 수는 5입니다.\n");
}
else
{
printf("입력하신 수는 5보다 큽니다.\n");
}
return 0;
}
//입력하신 수는 5보다 큽니다.
- switch문은 if/else와 마찬가지로 조건문이라고 보면 된다. 가독성이 좀 더 좋고, 컴파일러의 최적화가 쉬워서 속도가 빠르다는 장점이 있다. 다만 조건값으로 int로 승격할 수 있는 값(integer promotion)만 사용이 가능하다. case/default문 전부 break;를 포함해야 한다. 그렇지 않으면 뒤에 남아있는 모든 case문을 실행하게 된다.
switch (조건 값)
{
case 값1:
조건 값이 값1일 때 실행하고자 하는 명령문;
break;
case 값2:
조건 값이 값2일 때 실행하고자 하는 명령문;
break;
...
default:
조건 값이 어떠한 case 절에도 해당하지 않을 때 실행하고자 하는 명령문;
break;
}
switch문의 기본적인 코드는 위와 같다.
(여담이지만 swift 공식 문서를 공부하면서도 이 switch문이 등장하였다. 나에게는 생소한 문법이라 엥... 이게 뭐지? 하고 제대로 이해하지 못한 채로 그냥 넘어갔는데 이런 의미였군!)
switch문의 예시 코드를 살펴보자.
#include <stdio.h>
int main(void)
{
char ch = 'a';
switch (ch)
{
case 'a':
case 'A':
printf("이 학생의 학점은 A입니다.\n");
break;
case 'b':
case 'B':
printf("이 학생의 학점은 B입니다.\n");
break;
case 'c':
case 'C':
printf("이 학생의 학점은 C입니다.\n");
break;
case 'd':
case 'D':
printf("이 학생의 학점은 D입니다.\n");
break;
case 'f':
case 'F':
printf("이 학생의 학점은 F입니다.\n");
break;
default:
printf("학점을 정확히 입력해 주세요!(A, B, C, D, F)");
break;
}
return 0;
}
//이 학생의 학점은 A입니다.
조건 값이 어떤 case에 해당하는지 살펴보고, 출력 함수 속의 문장을 출력한 후 break문을 통해 반복을 빠져나온다.
📌 반복문
- while문은 조건식 검사 후 조건에 맞는 경우 작성한 명령문을 조건이 맞지 않을 때까지 반복 실행한다. 기본 형태는 아래와 같다.
while(조건식)
{
반복실행할 명령문;
}
반복문에서의 명령문 또한 마찬가지로 한 줄인 경우 중괄호 생략이 가능하다. while문에서는 끝도 없이 명령문이 반복되는 무한루프에 빠지지 않도록 주의해야 한다.
- do/while문은 일반 while문과는 다르게 먼저 루프를 실행하고, 명령문 1회 실행 후 조건식을 검사한다. 즉, 조건식의 참/거짓 여부와는 관계없이 작성한 명령문 1회는 무조건 실행하게 되는 것이다. 기본 형태는 아래와 같다.
do {
반복실행할 명령문;
} while(조건식);
do/while문의 예시 코드를 살펴보자.
#include <stdio.h>
int main(void)
{
int i = 0;
int num = 3;
do
{
printf("do / while 문이 %d 번째 반복 수행중입니다.\n", i + 1);
i++;
} while (i > num);
printf("do / while 문이 종료된 후 변수 i의 값은 %d입니다.\n", i);
return 0;
}
//do/while문이 1번째 반복 수행중입니다.
//do/while문이 종료된 후 변수 i의 값은 1입니다.
위의 예시 코드가 do/while문이 아니라 while문이었다면 한 번의 명령문 실행도 없었을 것이다.
- for문은 while보다 간결한 반복문이다. 기본적인 형태는 아래와 같다.
for(초기식; 조건식; 증감식)
{
반복실행할 명령문;
}
for문은 위와 같이 실행되며, 초기식, 조건식, 증감식 각각은 생략 가능하다.
#include <stdio.h>
int main(void)
{
int i;
int num = 7;
for (i = 0; i < num; i++)
{
printf("for 문이 %d 번째 반복 수행중입니다.\n", i + 1);
}
printf("for 문이 종료된 후 변수 i의 값은 %d입니다.\n", i);
return 0;
}
📌 기타 제어문
- continue: 루프의 마지막 부분은 건너뛰고 조건식 판단으로 넘어가게 한다. 특정 조건에 대한 예외 처리를 가능하게 한다.
- break: 반복문을 빠져나가도록 한다.
- goto