C언어에서, 어떠한 조건문을 만족하면, 특정한 문장을 수행하게 할 수 없을까요? if, else if, else 공식으로 하실 수 있어요. 먼저, 이런 경우 먼저 생각해 봅시다.

 

 


 패턴 1은 다음과 같습니다. if(조건문) 명령1; 명령2; 이 경우 조건문이 참이라면 명령1, 명령2 순서대로 실행이 되고, 그렇지 않다면 명령 1만 수행되는 패턴입니다.

 

 

 if(x>=0)이 하나 있어요. x가 0보다 크다면 work() 함수가 수행이 될 거에요. 그렇지 않다면, 바로 7번째 줄로 갈 겁니다. 이것을 흐름도로 그려보면 아래와 같습니다.

 

 

 만약에 x>=0이라면 work를 수행합니다. 그렇지 않다면, work를 수행하지 않고, 그냥 건너 뛴다는 것을 알 수 있어요. 만약에, 조건을 만족하지 않으면, 다른 문장이나 블록을 수행하게 할 수 없을까요?

 

 


 패턴 2는 다음과 같습니다. if(조건문) 문장1; else 문장2; 이는 조건문을 만족하면 문장 1이 수행되고, 만족하지 않으면 else에 걸려서 문장 2가 수행이 됩니다. 역시 예제 프로그램을 보는 것이 빠르겠네요.

 

 

 정보 처리기사 같은 기사 시험은 보통 60점 이상이면 합격을 합니다. 만약에 합격을 하지 못하면 불합격을 출력하고 싶습니다. 그러면 어떻게 해야 할까요? if문에는 score가 60이상이라는 조건을 걸어 놓습니다. score>=60이죠. 그렇지 않다면? 불합격이라고 출력하는 것을 else문에 걸어주면 됩니다.

 

 

 이를 순서도로 그리면 다음과 같아요. 사실, 이건 조건문이 매우 간단해서 블록 없이 했는데요. if문 다음에 중괄호로 감싸주는 것은 좋은 습관이에요. 어느 조건에 걸리면, 어떠한 문장들이 수행되는지를 쉽게 알 수 있기 때문이에요. 수식 작성하실 때, 괄호 쳐주면 알아보기 쉬운 것 처럼 말입니다.

 

 


 이번에는 학점 계산입니다. 90점 이상이면 A, 80점 이상 90점 미만이면 B, 그렇지 않다면 C를 출력해야 합니다. 지금 조건이 2개 이상 걸려있어요. ~이 참이라면이라는 것이요. 그러면, if, else if, else로 걸어버릴 수 있어요. if 절과 else if 절에는 조건문이 들어갑니다. 그러면 else if 절은 언제 수행이 될까요? if문의 조건이 만족하지 않았지만, else if문의 조건이 참인 경우에 수행이 됩니다.

 

 

 보시면, 6번째 줄에 score>=90이 걸려 있어요. 만약에 점수가 90 이상이라면 A가 출력이 됩니다. 80 이상 90 미만이라면요? 80이상 90미만의 어떠한 정수는, 90 이상이 아닙니다. 따라서, else if문에 score>=80 이라는 조건을 걸어주면, 90이상은 아니지만, 80이상인 경우, 그 조건에 걸린 문장이 수행이 될 거에요. 예를 들어, score가 85인 경우, 6번째 조건은 false이지만, 8번째 줄에서 참이기 때문에 B가 출력됩니다. 그리고, 빠져 나와요.

 

 왜냐면, 10번째 줄은 80 이상이 아닌 경우에 수행이 될 건데요, 85는 80 이상이므로 10번째 줄이 수행이 될 일은 없어요. 그러니까 "B"만 출력되고 끝납니다.

 

 

 예제 3번 프로그램을 순서도로 나타내면 아래와 같습니다. 보통, 이런 다중 조건은 if else if ... 이런 식으로 코딩하지는 않아요. 개인적으로 그렇게 코딩하면 잘 안 보이더라고요. 그래서, 따로 함수를 빼고 조건을 만족하면 바로 특정한 상태값을 리턴하는 식으로 코딩합니다.

 

 이것은 함수 편에서 다시 이야기 해 보도록 하겠습니다.

 

 


 윤년은 400으로 나누어 떨어지거나, 100의 배수가 아니면서 4의 배수이면 됩니다.

 

 

 그러면, 일단 year가 400으로 떨어지면, leaf year를 출력해야 할 겁니다. 이건 요렇게 작성하면 될 거에요.

 

 

 그러면 순서도는 다음과 같아요. 자. 그러면 일단 400의 배수인 경우는 처리를 했어요. 남은 경우는 100의 배수인 경우. 그리고 4의 배수인 경우입니다. 일단, 100의 배수이면 4의 배수이기 때문에, 100의 배수인 경우를 먼저 처리해 봅시다.

 

 

 8번째 줄에 걸리는 경우는 어떤 경우인가요? 400 배수가 아니지만, 100의 배수인 경우 걸리는데요. 이 때는 leaf year가 아닙니다. 따라서, 윤년이 아니라고 출력을 해 주면 됩니다. 왜 8번째 줄에 else를 쓰지 않았을까요? 만약에 else를 썼다면 2004년도 윤년이 아니라고 할 수 있거든요. 2004는 400의 배수가 아니기 때문이에요.

 

 

 그러면 대충 이런 상황이에요. 다음에는 어떻게 해야 할까요? 여기까지 왔다면, 100배수, 400배수인 경우는 모두 고려를 해 줬습니다. 그러면 4의 배수인 경우만 고려해 주면 되겠네요.

 

 

 10 ~ 13번째 줄만 추가해 주시면 됩니다. 그러면 윤년인지 아닌지를 판별할 수 있어요.

 

 

 사실, 이것을 그냥 if((year%400 == 0)||(year%4 == 0 && year%100 != 0)) 이렇게 하나의 조건문으로 판단할 수 있긴 합니다. 그렇지만 조건을 여러개 걸어서 판단할 수도 있어요. 이것은 많이 짜 보시면 자연스레 익숙해지실 듯 싶네요.