학습 기록/C

(4) 제어문

romi__ 2024. 11. 8. 20:32

/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

'학습 기록 > C' 카테고리의 다른 글

(6) 배열  (0) 2024.11.10
(5) 함수  (0) 2024.11.09
(3) 연산자  (0) 2024.11.07
(2) 타입  (1) 2024.11.06
C (1) 개요와 기초  (1) 2024.11.05