본문 바로가기
  • Eigenspace of Knowledge
CS/C언어

[C언어] 5. 선택문(1) - if문

by eigenarea 2024. 6. 5.
반응형

1. 제어구조

프로그램이 명령을 제어하는 방식은 세가지가 있다.

 

우선, 순차구조가 있는데, 이는 순차적으로 명령문을 실행하는 것이다. 

아마 지금까지의 모든 명령어가 순차구조일 것이다.

 

다음으로, 이번 포스팅에서 다룰 선택구조란 조건을 검사하여 하나의 명령을 선택하여 실행하는 구조이다.

 

마지막으로 다음에 다룰 반복구조란, 조건이 만족되면 동일한 명령어를 반복하면서 실행하는 구조이다.

 

2. if문

if (조건식) 문장; //한 문장일때

 

if (조건식){

    문장;

}

 

조건식이 이면 if문 내부의 문장이 실행되는 구조이다.

 

if (number >=0){
	printf("범자연수입니다.");
}

 

 

- else 

if 내부의 조건식이 거짓이라면 이에 해당하는 결과가 필요한 경우가 있을 것이다. 

이때 else를 사용하여 if문을 보완한다.

 

if (조건식) 문장;  //한 문장일때

else 문장;  //마찬가지로 한 문장일때

 

 

if (조건식){

    문장;

}

else {

    문장;

}

 

if (number >=0){
	printf("범자연수입니다.");
}
else printf("음수입니다.");

 

이쯤에서 혹자는 의문을 제기할 것이다. 

 

조건연산자와 기능이 같지않나? 

옳은 생각이다. 실제로 조건연산자와 if - else문은 같은 기능을 담당하며 조건연산을 if - else문으로 변경할 수 있다.

 

위의 예시를 조건연산으로 바꿔보면 이러하다.

(number >=0) ? printf("범자연수입니다.") : printf("음수입니다.");

 

그러나 조건연산자는 조건의 참-거짓에 대한 결과만 제공하며, 무엇보다 가독성이 if문에 비해 너무 떨어지기 때문에 가급적 if -else문을 쓰는 것을 추천한다.

 

 

 

- else if

마지막으로, if 와 else로만(true와 false로만) 상황을 규정하면 예외가 너무 많이 생길 수 밖에 없다.

이 경우 예외들에 대한 보완이 필요하며, 이때 사용하는 것이 else if이다. (else if의 갯수엔 제한이 없다. 그만큼 많은 조건을 추가할 수도 있다는 의미)

 

if (조건식){

    문장;

}

else if (조건식){

    문장;

}

...

else {

    문장;

}

 

if (조건식) 문장;  //한 문장일때

else if (조건식) 문장; //역시 한 문장일때

...

else 문장;  //마찬가지로 한 문장일때

 

if (number >0){
	printf("자연수입니다.");
}
else if (number == 0) printf("0입니다.");
else printf("음수입니다.");

 

 

 

-중첩 if문

 

중첩 if문 : if문 내에 if문이 포함되는 구조

 

ex) 

if (조건식){

    if (조건식){

        ....

    }

    ....

}

 

if (per > = 70){
    if (per >= 85) printf("A+");
    else printf("A");
}
else{
    if (per >= 50) printf("B or B+");
    else printf(" under the C ");
}

 

-if와 else의 매칭 문제(Dangling else problem)

else절은 가장 가까운 if절과 매치됨.

 

예를 들어,

int score = 75;
if (score >80)
    if (score > 90) printf("학점은 A입니다");
else printf("학점은 B입니다");

결과는 예상과 달리, 공백으로 나오게 된다.

바로 두번째 if문과 else문이 연결되어버렸기 때문이다.

 

 

따라서 중첩 if문을 사용할 때는 중괄호를 이용하여 블록으로 묶는 것이 중요하다.

int score = 75;
if (score >80){
    if (score > 90) printf("학점은 A입니다");
}
else printf("학점은 B입니다");

제대로 작동되는 것을 볼 수 있다.