본문 바로가기
C, C++/문법 정리

[C언어]조건문을 사용해보자 1 - if문과 else문(+ 관계 연산자와 논리 연산자)

by hseoy 2020. 4. 24.
반응형

[조건문을 사용해보자 -  if문과 else문(+ 관계 연산자와 논리 연산자)]

여기서는 if문과 else문을 이용하여 조건에 따라 프로그램의 흐름을 바꾸는 방법에 대해서 살펴본다. 먼저 조건문이 필요한 이유에 대해서 이해하고 본격적으로 조건문에 대해 설명하고자 한다.

만약 우리가 선생님이고 학생들의 점수를 입력받으면 자동으로 등급을 채점해주는 프로그램을 만들고자 한다고 하자. 그러면 입력값은 학생들의 점수일테고, 출력은 학생들의 점수에 따른 등급일 터이다. 여기서 고민을 해볼 것이 어떤 기준에 따라 등급을 판별할 것이냐인데 여기서는 간단하게 위에서부터 70점 이상까지는 10점단위로 A,B,C 그리고 그 미만은 모두 F로 매긴다고 하겠다. 그러면 아래와 같이 96점은 A, 80점은 B, 64점은 F라는 결과를 얻는 것이 이 프로그램을 실행했을 때 예상한 결과가 될 것이다. 

이 기준이라는 것은 C에서 어떻게 세울 수 있느냐 하면, 그것을 가능하게 하는 것이 조건문이다. 90점 이상인지, 80점 이상인지, 70점 이상인지, 70점 미만인지 어떠한 기준, 조건에 따라 프로그램의 흐름을 바꾸고 결과를 바꿀 수 있도록 제공되고 있는 C 문법이 조건문이다. 우리는 프로그램이 조건에 따라 다른 결과를 가져오도록, 어떠한 기준에 따라 프로그램의 흐름이 바뀌도록 하기 위해서 조건문을 필요로 하고 있고 C는 이것을 제공하고 있다.

그러면 이제 조건문의 형태에 대해서 살펴보자. 조건문의 종류는 몇 가지 있으나 여기서는 if문과 else문을 사용한 조건문에 대해서 알아보고자 한다.

기본적인 if문과 else문의 형태는 이와 같다.

if(기준이나 조건) {
    // 조건을 만족했을 때 실행하고자 하는 부분
} else {
    // 조건을 만족하지 않았을 때 실행하고자 하는 부분
}

if문의 소괄호 안에는 조건이나 기준을 명시하고 if문의 중괄호 안에는 조건을 만족했을 때 실행시키고자 하는 코드를 작성해준다. 그리고 else문의 중괄호에는 해당 조건을 만족하지 않았을 때 실행시키고자 하는 코드를 작성함으로써 조건분기를 구현할 수 있다.

여기서 else문은 사용할 수도 사용하지 않을 수도 있다. 예를 들어서 아래와 같이 if문만 사용하는 것도 가능하다는 말이다.

if(x > 0) {
    // 조건 만족 시 실행시키고자 하는 코드
}

그리고 else문에 if문을 다시 사용하는 것도 가능하다. 이 경우 여러개의 조건을 연속적으로 확인할 수 있도록 한다.

if(A) {
    // 조건 A를 만족할 때 실행시키고자 하는 코드
} else if(B) {
    // 조건 A를 만족하지 않으면서 조건 B를 만족할 때 실행시키고자 하는 코드
} else if(C) {
    // 조건 A,B를 만족하지 않으면서 조건 C를 만족할 때 실행시키고자 하는 코드
} else {
    // 모든 조건을 만족하지 않을 때 실행시키고자 하는 코드
}

위의 경우 조건 A,B,C를 만족할 때 각각 어떤 코드를 실행시킬 건지, 모두 만족시키지 않을 때 어떤 코드를 실행시킬 건지를 지정할 수 있기 때문에 매우 유용하다. 

그러면 이제 본격적으로 등급을 채점하는 예시 프로그램을 작성해보기 전에 조건문에서 조건을 어떻게 작성하는지에 대해서 이야기 해보려 한다. 조건문에서 조건은 위 코드들에서 작성한 것처럼 한글로 작성하지 않는다. 조건이라고 말하고 있지만 이조차도 참과 거짓이라는 값을 표현하는 C언어의 요소 중 하나이며 이를 표현하기 위해서 관계 연산자와 논리 연산자라는 것을 사용하게 된다.

관계 연산자

 논리 연산자

 ==

같다 

&& 

 둘 다 참일 경우에만 참 (AND)

 !-

다르다 

|| 

 둘 중 하나 이상이 참일 경우 참 (OR)

 >,<,>=,<=

크기 비교 

참 -> 거짓 / 거짓 -> 참 (NOT) 

관계 연산자와 논리 연산자의 종류는 위 표에서 확인할 수 있다. 관계 연산자는 말 그대로 어떤 두 값이 어떤 관계에 있는 지를 설명할 때 사용된다. 예를 들어 a라는 변수와 b라는 변수를 선언해서 각각 2와 3이라는 값을 대입했다고 하자. 그러면 a라는 값은 b라는 값보다 작다는 것과 a라는 값과 b라는 값이 다르다는 참, 진실일 테고 그외의 말은 모두 거짓이 될 것이다. 이를 C언어로 표현해보자면 a<b와 a!=b는 참(1)이지만 a==b, a>b 등의 연산 결과는 거짓이다. 추가적으로 여기서 말하는 참과 거짓은 조건문을 실행할 때 조건을 만족하는지에 대한 여부를 의미하며 일반적으로 0이 아닌 모든 값은 참으로, 0은 거짓으로 인식한다. 

논리 연산자는 관계연산자를 통해 연산한 결과인 참(1), 거짓(0)이라는 논리값을 가지고 연산을 하는 연산자이다. 예를 들어 &&의 경우 a<b&&a!=b와 같이 사용하며 a<b가 참이고 a!=b가 참이면 a<b&&a!=b도 참이 되고 만약 둘 중 하나라도 거짓이 된다면 최종적인 결과값도 거짓이 도니다. !연산자는 두개의 값에 대해 연산을 수행하는 것이 아니라 하나의 값에 대해 연산을 수행한다. !a와 같이 어떠한 값 앞에 붙혀 사용하며 이 값이 원래 참이라면 거짓을, 거짓이라면 참으로 값을 계산한다. 

이제 조건문을 사용하여 프로그램을 작성해보도록 하자. 위에서 이야기 했던 등급 채점 프로그램의 코드는 아래와 같이 작성할 수 있다.

// printf 등의 함수를 사용하기 위해 stdio.h를 포함시키는 전처리문
#include <stdio.h>

int main()
{
    int score = 0; // 입력받은 점수를 저장할 변수
    scanf("%d", &score); // 점수 입력 받음
    
    // 기준에 따라 등급을 매기고 출력함
    if(score >= 90) printf("A\n");
    else if(score >= 80) printf("B\n");
    else if(score >= 70) printf("C\n");
    else printf("F\n");
    
    // 프로그램을 종료함
    return 0;
}

프로그램의 동작은 주석만으로 충분히 이해할 수 있을 것이라 생각된다. 점수를 입력받고 그 점수가 어떤 조건을 만족하는 지에 따라 각각 다른 등급을 출력하게 된다. 여기서 한 가지 의아하게 생각할 수 있는 점은 if문의 소괄호 다음에 중괄호가 없다는 것인데 이는 생략된 것이다. 조건문이나 이후에 배울 반복문 등에서는 한 줄만을 실행할 경우에 중괄호를 생략할 수 있다. 

조건문의 기본적인 요소인 if문과 else문, 그리고 관계연산자와 논리연산자에 대해서 살펴보았다. 다만 조건문에는 if문과 else문 외에 switch문이라는 것이 있는데 이것에 대해서는 다른 글에서 자세하게 이야기 해보려고 한다. 

반응형

댓글