|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
프로그램에서 세 가지 이상의 여러 가지 경우 중에서 한 가지를 선택해야 하는 상황이 발생할 수 있다. 4주차 강의에서 살펴본 if 문은 한 가지 경우를 선택하는 구조를 제공하고, if-else 문은 두 가지 경우 중에서 선택하는 구조를 제공한다. 그렇다면 세 가지 이상의 경우 중에서 선택해야 하는 상황을 어떻게 표현할 수 있는가? 가령, 상태 값을 포함하는 status 변수를 생각해보자. status는 1이나 2의 값을 가질 수 있고, status가 포함하는 값에 따라서 취할 행동이 각각 다르다고 가정한다. 이와 같은 상황을 다음과 같이 다이어그램으로 표현할 수 있다.
즉, status의 값이 1이면 행동 A를 수행하고, 2이면 행동 B를 수행하고, 그렇지 않으면 행동 C를 수행한다. 위의 상황을 C 문장으로 어떻게 표현할 수 있겠는가? 문제를 단계별로 생각해보자. 먼저, status의 값이 1인지를 판단하는 if-else 문을 다음과 같이 생각한다.
status의 값이 1인 경우에 수행할 행동 A를 then-부분에 명세할 수 있다. 다음에, else-부분에 무엇을 명세할 것인가? 우리가 할 일은 다시 status의 값이 2인지를 판단하는 것이다. 이것은 또 다른 if-else 문을 요구한다. 그렇다면, else-부분에 다른 if 문이 올 수 있는가? 그렇다. if 문의 then-부분이나 else-부분에는 C 문장들이 올 수 있는데, if 문이 C 문장에 속하기 때문이다. 즉, if 문의 then-부분이나 else-부분에 또 다른 if 문이 올 수 있는데, 이러한 if 문을 중첩 if 문(nested if statements)이라 한다. C의 문장은 다양한 구조일 수 있다. 지금까지 배운 C 문장은 선언문, 배정문, if-else 문, if 문일 것이다. 그러나
이 외에도 많은 C 문장이 존재하며, 앞으로 이들을 계속해서 배울 것이다. 따라서 위의 문제에서 else-부분을 또 다른 if-else 문으로 다음과 같이 명세할 수 있다.
else-부분에 표현된 if-else 문의 then-부분에 행동 B가 명세되고, else-부분에 행동 C가 명세되는 것을 알 수 있다. 문제를 좀더 구체화시켜보자. 즉, status의 값이 1이면 "Excellent"를 출력하고, 2이면, "Good"을
출력하고, 1이나 2의 값이 아니면 "Normal"을 출력한다고 생각한다. 이를 C의 중첩 if 문을 사용하여
표현하면 다음과 같다.
C 프로그램에서 들여쓰기나 공백은 무시되므로, 위의
중첩 if 문은 다음과 같이 표현할 수 있다.
위의 구조는 else if가 반복해서 계속 나올 수 있기 때문에 if-else 체인이라 한다. if-else 체인 구조는 세 개 이상 중에서 한 가지의 선택을 표현하는데 매우 유용하게 사용된다. 따라서 C 언어는 if-else 체인을 다음과 같이 일반적인 형식으로 제공한다.
위의 if-else 체인 구조는 선택의 가지 수가
n+1개 존재하는 경우를 나타내며, 다음과 같이 순서도로 보여줄 수 있다.
위에서 각 문장 수행 후에는 if-else 체인 구조를 빠져나온다. 다음은 if-else 체인 구조에 대한 알고리즘 문장을 보여준다. 이 알고리즘은 if-else 체인 구조에 대한 의미를 형식화시킨 것일 뿐임을 알 수 있다.
if-else 체인 구조의 예로서, 다음 문제를 생각해보자. 다음은 위 문제에 대한 알고리즘을 보여준다. status의 값에 따라서 선택할 수 있는 경우의 수가 4가지이므로 if-else 체인 구조의 알고리즘 문장을 사용하여 효과적으로 기술하였음을 알 수 있다.
다음은 위 알고리즘에 대한 순서도를 보여준다. 여러분은 앞서 if-else 체인 구조에 대한 순서도를 다루었기 때문에, 아래의
순서도를 잘 이해할 수 있겠다.
다음은 위 문제에 대한 C 프로그램을 보여준다. 다시
한번 문제에 대한 알고리즘으로부터 C 프로그램의 작성과정을 상세히 보여준다.
![]()
|
|
|