else-if 사다리(else-if ladder)는 여러 조건 중 하나를 선택해야 하는 다중 분기(multi-way decision) 상황을 처리하는 가장 일반적인 방법입니다. 위에서부터 조건을 차례대로 검사하다가 처음으로 참이 되는 블록만 실행한 뒤 전체 구문을 빠져나가는 방식으로 동작합니다.
구문(Syntax)
else-if 사다리의 기본 구문은 다음과 같습니다.
if (condition1) stmt1; else if (condition2) stmt2; - - - - - - - - - - else if (condition n) stmtn; else stmt x;
먼저 condition1을 검사하여 참이면 stmt1을 실행하고 사다리 전체를 종료합니다. 거짓이라면 다음 condition2를 검사하며, 이 과정을 반복합니다. 모든 조건이 거짓일 경우 마지막 else 블록(stmt x)이 실행됩니다.
알고리즘
네 개의 정수 중 최댓값을 찾는 알고리즘을 통해 동작 흐름을 살펴보겠습니다.
START
1단계: int형 변수를 선언한다.
2단계: 실행 시점에 a, b, c, d 값을 입력받는다.
3단계: i. if(a>b && a>c && a>d)
a가 최댓값임을 출력한다.
ii. else if(b>c && b>a && b>d)
b가 최댓값임을 출력한다.
iii. else if(c>d && c>a && c>b)
c가 최댓값임을 출력한다.
iv. else
d가 최댓값임을 출력한다.
STOP
예제 1: 네 수 중 최댓값 구하기
다음은 else-if 사다리 조건문을 사용해 네 개의 정수 중 가장 큰 값을 출력하는 C 프로그램입니다.
#include<stdio.h>
void main (){
int a,b,c,d;
printf("a, b, c, d 값을 입력하세요: ");
scanf("%d%d%d%d",&a,&b,&c,&d);
if(a>b && a>c && a>d){
printf("최댓값은 %d입니다",a);
}else if(b>c && b>a && b>d){
printf("최댓값은 %d입니다",b);
}else if(c>d && c>a && c>b){
printf("최댓값은 %d입니다",c);
}else{
printf("최댓값은 %d입니다",d);
}
}
실행 결과
실행 1: a, b, c, d 값 입력: 2 4 6 8 최댓값은 8입니다 실행 2: a, b, c, d 값 입력: 23 12 56 23 최댓값은 56입니다
예제 2: 학생 성적 등급 판정하기
이번에는 else-if 사다리를 활용해 입력된 점수에 따라 학생의 등급을 판정하여 출력하는 프로그램입니다.
#include<stdio.h>
int main(){
int marks;
printf("학생의 점수를 입력하세요:\n");
scanf("%d",&marks);
if(marks <=100 && marks >= 90)
printf("등급=A");
else if(marks < 90 && marks>= 80)
printf("등급=B");
else if(marks < 80 && marks >= 70)
printf("등급=C");
else if(marks < 70 && marks >= 60)
printf("등급=D");
else if(marks < 60 && marks > 50)
printf("등급=E");
else if(marks == 50)
printf("등급=F");
else if(marks < 50 && marks >= 0)
printf("낙제(Fail)");
else
printf("0에서 100 사이의 유효한 점수를 입력하세요");
return 0;
}
실행 결과
실행 1: 학생의 점수를 입력하세요:78 등급=C 실행 2: 학생의 점수를 입력하세요:98 등급=A
핵심 정리
- else-if 사다리는 조건을 위에서 아래로 순차적으로 검사하며, 처음 참이 되는 블록만 실행한 후 전체 구문을 벗어납니다.
- 모든 조건이 거짓일 때 실행할 코드는 마지막
else블록에 작성합니다. - 독립된 여러 개의
if문과 달리, 조건이 상호 배타적일 때 불필요한 검사를 생략할 수 있어 실행 효율이 좋습니다. - 성적 판정처럼 값의 범위에 따라 결과가 달라지는 로직을 구현할 때 특히 유용합니다.