중첩 if문
선택지가 많아지거나 아주 복잡한 조건을 처리해야 하는 경우, if문을 여러 번 중첩해서 사용할 수 있습니다.
아래의 코드를 직접 작성하고 실행해 봅시다.
#include<stdio.h> int main() { int score1, score2; printf("수학 점수를 입력하세요 :"); scanf("%d", &score1); printf("영어 점수를 입력하세요 :"); scanf("%d", &score2); if (score1>=70) { if (score2>=70) printf("축하합니다. 합격입니다."); else printf("불합격입니다."); } else printf("불합격입니다."); }
실행결과
위 프로그램을 실행하면 두 과목의 점수를 입력하고 비교하여 모두 70점 이상이면 합격, 한 과목이라도 70점 미만이면 불합격을 출력합니다.
if안의 또다른 if는 조건 상황에 따라 필용한 만큼 만들어서 사용할수 있으며, else 안에서도 if의 사용이 가능합니다.
조건 처리순서
9행의 if조건인 수학의 점수가 60점 이상이면 11행의 if를 실행하고 수학의 점수가 60점 미만이면 16행의 else를 실행하게 됩니다. 왜냐하면, 수학이 60미만이면 영어가 60점 이상이든 아니든 상관 없기 때문이죠.
9행의 if 조건이 만족되면 수학의 점수가 60점 이상이라는 의미이므로 11~14행에서 나머지 과목의 점수를 확인합니다.
11행에서 if 조건에 따라 영어의 점수가 60점 이상이면 두 과목 모두 60점 이상이므로 합격을 출력하고 조건을 만족하지 못하면 영어의 점수가 60점 미만이므로 13행이 실행되어 불합격이 출력됩니다.
위의 코드는 논리 연산자나 다른 연산자 조건을 활용해 더 간단하게 만들수도 있습니다.
예시
if (score1 >= 60 && score2 >= 60) // &&, 양쪽의 값이 서로 참일경우 합격 출력 printf("축하합니다. 합격입니다."); else printf("불합격");
- 우리가 배운것을 어떠한 방식으로 쓰냐에 따라서 코드의 길이와 진행방식에 차이가 나게 됩니다.
if ~ else if ~ else
if ~ else는 하나의 조건만 참인지 거짓인지를 구별하는 2가지 결과를 나타내지만, if ~ else는 조건에 다른 결과가 3가지 이상 나타내는 경우에 사용하게 됩니다.
아래의 코드를 직접 작성하고 실행해 봅시다.
#include <stdio.h> main() { int score; printf("수학 점수를 입력하세요 :"); scanf("%d", &score); if (score >= 90) printf("A"); else if (score >= 80) printf("B"); else if (score >= 70) printf("C"); else if (score >= 60) printf("D"); else if (score >= 50) printf("E"); else printf("F"); }
실행결과
위 프로그램을 실행하면 과목의 점수에 따라 결과를 출력합니다.
- 4행에서 score 이라는 변수를 선언했습니다.
-
5~6행에서 입력에 대한 안내 문구를 출력하고, score에 점수를 입력 받았습니다.
-
7~11행은 if ~ else if ~ else문 으로 if 다음에 else if로 입력됩니다.
if ~ else는 첫 번째 조건에서 파생된 여러 개의 조건을 가지고 3가지 이상의 결과를 나타낼 수 있게 도와줍니다.
if ~ else if ~ else의 형식
if (조건 1){
조건 1이 참일 경우 실행되는 명령
}
else if (조건 2){
조건 2가 참일경우 실행되는 명령
}
:: ``(반복)
else{
위의 모든 조건이 맞지 않을 경우 실행되는 명령
}
조건 처리순서
7행에서 입력된 점수가 70점이라면 if 조건에 거짓이므로 8행의 else if 조건을 확인하고 8행의 조건도 거짓이면 9행의 조건을 확인하는 식으로 순차적으로 내려갑니다.
9행의 조건에서는 참이 되므로 해당 printf문을 실행하고 그아래의 else if는 실행하지 않고 전체 if문을 종료합니다.
다음 토픽에서는 반복문의 한종류인 switch에 대해 알아봅시다.