본문 바로가기
프로그래밍 언어/C언어

[혼자 공부하는 C언어] - Chapter 05 정리 및 문제 해결

by amobu0 2024. 6. 19.
혼자 공부하는 C언어 책 정리 및 발생하는 트러블 슈팅 해결

Chapter 05 선택문

학습목표 

  • 조건에 따라 실행 문장을 선택해야할 때 사용하는 선택문에 관해 알아보자
  • 가장 기본적인 선택문 IF문에 관해 알아보자
  • 상황에 따라 실행할 문장을 결정하는 switch ~ case문에 관해 알아보자

5-1 if문

프로그램은 연산 결과나 입력값에 따라 처리 방법을 바꿔야 할 때가 많으므로 조건에 따라 실행 문장을 선택할 수 있는 구문이 필요하다. 4장까지는 항상 차례대로 실행되는 프로그램을 다루었다. 그런데 조건에 따라 실행되거나 실행되지 않아아 할 때는 제어문이 필요하다. 

제어문의 종류

제어문 구분 종류
선택문 if, switch ~ case
반복문 while, for, do ~ while
분기문 break, continue, goto, return

 

기본 if문은 조건식을 만족하면 실행문을 실행하고, 만족하지 않으면 실행하지 않고 지나간다. 그렇다면 조건을 만족하지 못할 때 수행되는 실행문을 작성하려면 if ~ else문을 쓴다. if ~ else문은 둘 중 하나를 반드시 선택하는 경우에 사용한다.

 

기본 if문을 두번 사용해도 조건이 서로 겹치지 않으면 하나만 참이 되므로 결국 한 문장만 실행된다. 그러나 조건식을 정확히 사용하지 않으면 두 조건식이 모두 참이 되어 둘 다 실행되거나 모두 거짓이 되어 하나도 실행되지 않을 수 있다. 또한 항상 조건식을 두 번 검사하므로 한 번 검사할 때보다 실행 속도가 느려질 수 있다. 따라서 2개의 실행문 중 하나를 선택하는 경우에는 if ~ else 문을 쓰도록 한다. 3개 이상일 때는 if ~ else if ~ else문을 사용한다.

핵심포인트

  1. 조건에 따라 실행 문장을 선택해야 할 때 선택문을 사용한다.
  2. if문은 1가지의 선택을 고민할 때 사용한다.
  3. if ~ else문은 2가지 중 하나를 고를 때 사용한다.
  4. if ~ else if ~ else문은 3가지 이상에서 하나를 고를 때 사용한다.

if문의 형식

구분 형식 실행 방식
if (조건식)
    실행문;
조건식이 참이면 실행문 실행
거짓이면 아무것도 실행하지 않는다.
if (조건식)
   실행문1;
else
   실행문2;
조건식이 참이면 실행문1 실행

거짓이면 실행문2 실행
if (조건식1)
   실행문1;
else if (조건식2)
   실행문2;
else
   실행문3;
조건식1이 참이면 실행문1만 실행

조건식1이 거짓이고 조건식2가 참이면 실행문2만 실행

모든 조건식이 거짓이면 실행문3 실행

5-2 if문 활용과 switch ~ case문

어떤 조건을 검사하기 전에 선행조건이 있다면 if문 안에 if문을 넣어 사용한다. if ~ else문을 실행문이 많고 ㅎㅇ태가 복잡하더라도 전체를 한 문장으로 취급한다. 실행문의 범위를 구분할 수 있도록 가능한 한 중괄호를 사용하는 것이 좋다.

 

선행조건 없이도 실행 효율을 위해 의도적으로 중첩해 사용할 수 있다. 예시로 1~6 중 어떤 값인지 판단하는 경우 1부터 하나씩 차례로 검사하는 방법보다 중간값인 3과 먼저 비교해 두범위로 나누고 그 범위에서 다시 비교하는 방식을 쓰면 평균 조건 검사 횟수를 줄일 수 있다. 분할 정복 기법(divide and conquer)이라고 한다.

 

댕글링 else 문제(Dangling else Problem) if ~ else문이 참일 때 실행문으로 기본 if문이 쓰이면 반드시 중괄호가 필요하다. 중괄호를 생략할 경우 컴파일러는 else를 가장 가까운 if문과 짝을지어 결합하기 때문에 전혀 다른 프로그램이 되므로 중괄호를 써서 다른 구문으로 해석되지 않도록 주의해야 한다.

 

여러 개의 상수 중 조건에 해당하는 하나를 골라 실행하는 것이 switch ~ case문이다. 2가지 규칙을 꼭 지켜야한다.

1. 조건식으로 정수식만 사용해야 한다.
2. 기본적으로 case는 break를 포함한다.

switch ~ case문은 조건에 따라 case의 상수를 모두 비교한 후 일치하는 상수가 없는 경우 마지막에 default로 간다. 따라서 default는 switch의 블록 안 어디에 있어도 결과는 같다. 보통 모든 case문을 적은 다음 마지막에 넣어 예외 상황을 처리할 때 사용한다.

핵심포인트

  1. if문 중첩은 if문 안에 실행문으로 if문을 사용한 것을 말한다.
  2. switch ~ case문은 정수 값으로 실행할 문장을 결정한다.
  3. break는 자세한 설명과 함께 제한적으로 생략해야 한다.
  4. default는 블록 안 어디에 위치해도 상관 없으나 보통 블록 마지막에 두어 예외 상황을 처리한다.

if문이 중첩된 예

구분 if문에 if ~else문 중첩 if ~ else문에 if문 중첩
사용 예 if (조건식1)
{
    if (조건식2)
    {
        실행문1;
    }
    else
    {
        실행문2;
    }
}
if (조건식1)
{
    if (조건식2)
    {
        실행문1;
    }
}
else

    실행문2;
}
실행 과정 조건식1이 거짓이면 아무것도 실행되지 않음 조건식1이 참이어도,
조건식2가 거짓이면 아무것도 실행하지 않음

어제보다 더 익숙하다. 하루하루 성장하는 느낌을 받으니 더 잘하고 싶다.

 

https://m.hanbit.co.kr/store/books/book_view.html?p_code=B3773573071

 

혼자 공부하는 C 언어(개정판)

혼자 해도 충분하다! 1:1 과외하듯 배우는 C 프로그래밍 자습서

m.hanbit.co.kr