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)로 무조건 변경시키는 명령문
다른 제어문과는 달리 아무런 조건 없이 프로그램의 흐름을 옮김
그래서 가장 손쉽게 사용할 수 있지만, 그래서 더 흐름을 복잡하게 만들기 때문에 디버깅 이외에 사용 ❌
'프로그래밍 언어 > C' 카테고리의 다른 글
[자료형(data type)] C 파생형 배열 총정리 (0) | 2023.08.17 |
---|---|
[자료형(data type)] C 파생형 함수 총정리 (0) | 2023.08.17 |
C 연산자 총정리 -2 (비교, 논리, 비트, 기타 등) (0) | 2023.08.16 |
C 연산자 총정리 -1 (산술, 대입, 증감) (0) | 2023.08.16 |
[자료형(data type)] 기본형 총정리 (0) | 2023.08.16 |