본문 바로가기

C

7. C 조건문

7. C 조건문

- 지난 시간까지 연산자에 대해 알아보았다. 이번 시간에는 선택 구조 알고리즘을 프로그래밍할 수 있게 만들어주는 조건문에 대해 알아보자.


(1) 선택 구조와 조건문

- 조건문은 선택 구조 알고리즘을 프로그래밍할 때 사용하는 것으로 특정 조건의 참/거짓에 따라 수행할 작업을 나누어 놓은 것이다.  C언어에서 조건문은 if문과 switch문이 있으며 각각의 쓰임새는 확연히 다르다.


 - 선택 구조는 우리 일상생활 속에서도 깊숙히 자리잡고 있는 알고리즘 중 하나이다. 우리는 항상 아침에 집을 나서기 전에 일기예보를 보고 비가 올 지 말 지를 확인하다. 확인한 후 비가 온다는 소식이 있다면 우산을 챙기며 비가 올 확률이 희박하다고 하면 우산을 챙기지 않고 나간다.

(일상 생활 속에서 볼 수 있는 선택 구조)

   이처럼 특정 조건에 따라 할 일이 정해지는 구조를 선택 구조라 말하며 선택 구조는 중첩으로도 구성할 수 있다.


(2) if문

- if문은 선택 구조 프로그래밍 시 가장 많이 사용되는 함수이다. if문은 조건과 대괄호를 통해 조건에 맞을 때 대괄호 안의 내용을 모두 실행하는 구조를 가지고 있다. if문은 C언어 뿐만 아니라 다른 언어에서도 정말 많이 사용되는 형태이다.

- if문의 형식은 영어에서 if를 사용하는 형식과 비슷하다.

if문 형식

if(조건) {

   /// 실행할 작업1

   /// 실행할 작업2

   /// ....

}

조건을 밝힌 다음, 해당한 조건에 맞은 경우에만 중괄호 속 작업들을 진행한다. 보다 쉽게 외우기 위해서는 "만약 ~~라면"을 기억하자. 또는 "만약 (조건)이라면 (실행할 작업)을 한다." 이런 해석도 외운다면 훨씬 if문를 사용하기 쉬울 것이다.


 - if문은 단순히 2가지 경우 뿐만 아니라 3가지 혹은 그 이상의 경우의 수도 나눌 수 있다. 바로 else ifelse를 사용하는 것이다. else if는 위의 if 조건을 만족하지 않은 경우 다시 조건을 확인하며 else는 위에서 제시된 모든 조건에 만족하지 못할 때 도달한다.


else if를 사용할 때에는 비교할 또다른 조건을 사용해야 하지만 else에서는 조건을 제시하지 않는다. else문 자체가 나머지 경우에 대해 모두를 포함하고 있기 때문에 조건을 사용하지 않는다. else는 "~~아니라면" 이라고 해석하는게 익숙해지기 가장 쉽다고 생각한다.


 - if문에서 사용하는 조건은 대부분 비교 연산을 사용한다. 비교 연산을 활용하여 참과 거짓을 가려낸 다음 각각의 경우 할 일을 제공하는 것이다. 위의 순서도에서 "0보다 큰가?"는 "변수>0", "0보다 작은가?"는 "변수<0"으로 바꿔서 if문의 조건으로 사용할 수 있다. 여기서 조심해야할게 "같다"를 표현할 때 ==이 아닌 =을 사용하는 것이다. =은 저장의 의미를 가지고 있기 때문에 같다라는 조건을 사용할 때에는 ==을 사용해야 한다......(많은 사람들이 어려워하니 너무 상심하지 말자)


if문에 대한 간략한 설명을 읽어 보았다면 이제는 직접 연습해보자. 다음 소스코드는 위의 순서도를 직접 프로그래밍 한 예시이다. 


소스코드에서 확인할 수 있듯이 if와 else if에는 조건이 필요하며 else에는 조건이 필요하지 않음을 볼 수 있다. 이렇듯 if문을 사용하여 선택구조 알고리즘을 프로그래밍할 때에는 조건에 따른 경우의 수를 명확하게 생각하는 것이 중요하다. 조건을 명확하게 생각하지 않으면 if~else if~else를 사용할 때 구멍이 발생할 수 있으며 이로 인해 논리적 오류가 발생할 수 있기 때문이다. 

조건문에 대해 조금 감이 잡혔다면 이번에는 연습문제를 풀어보자.

아래 소스코드는 점수가 입력되며 입력된 점수가 90점 이상이라면 A를, 80점 이상이라면 B를, 그외 나머지의 경우 C를 출력하는 알고리즘을 일부 프로그래밍한 모습이다. 밑줄 (ㄱ), (ㄴ), (ㄷ)을 채워 완성된 소스코드를 만들어보자.


- if의 조건은 하나만 사용할 수도 있지만 여러 조건을 동시에 비교할 수 있으며 이 때에는 논리연산자인 AND와 OR을 사용할 수 있다. AND와 OR가 기억나지 않는다면 지난 시간(6. C 연산자) 내용을 다시 확인하고 돌아오자. 논리연산자인 ANDOR는 각각 and / or 혹은 && / || 기호를 사용하여 조건들을 연결해준다. 다음 예시를 한번 살펴보자.



위의 코드는 수학과 영어 점수를 입력받은 후 S/A/B 등급을 나누는 소스코드이다. 위의 코드를 살펴보면 math>=90과 english>=90을 "and"로 연결한 것을 볼 수 있다. 이는 수학점수가 90점 이상이라는 조건과 영어점수가 90점 이상이라는 조건 모두 AND 연산자로 연결하여 두 과목 모두 90점 이상인 경우를 의미한다. 바로 아래에는 math>=90과 english>=90을 "or"로 연결한 것을 볼 수 있으며 이는 수학과 영어 점수 둘 중 한 과목이 90점 이상을 의미한다. 

이처럼 여러 조건을 한번에 사용할 때에는 논리 연산자를 사용하여 한번에 표현할 수 있다.


 - 조건문 안에 조건문을 사용할 수도 있다. 전문용어로 중첩 조건문이라고 하며 조건문 속에 조건문을 사용하는 방식이다. 중첩 조건문을 사용하면 좀 더 정교하고 구체적으로 경우를 나눌 수 있다.  아래 예시 코드를 확인해보자.


위의 소소코드를 한번 해석해보자. 차근차근 조건을 나누어보면 입력받은 3개의 수 중 무엇을 출력하는 소스코드인지 알 수 있을 것이다. 중첩 반복문너무 많이 사용하면 가독성이 떨어진다는 단점도 있지만 알고리즘을 좀 더 세분화시키고 정교화시킨다는 큰 장점이 있기 때문에 많이 쓰인다.


지금까지 조건문에 대해 알아보았다. 조건문은 앞으로 자주 사용될 기능이기 때문에 꼭 기억하고 있자. 다음 시간에는 반복 구조 알고리즘을 설계할 수 있는 반복문에 대해 알아보자.




'C' 카테고리의 다른 글

6. C 연산자  (0) 2018.08.21
5. C 입력  (0) 2018.05.23
4. C 변수  (0) 2018.05.16
3. C 출력하기  (0) 2018.05.14
2. C 기본구조  (0) 2018.05.14