C언어 If조건문3 (중첩 if 조건문)

지환·2021년 12월 29일
0

C언어

목록 보기
6/37
post-thumbnail

중첩 IF 조건문

  • if 조건문을 사용하다 보면, 조건 수식이 만족되어 실행하는 명령문안에 또 조건문이 포함되는 경우가 있다. 이런 상황을 조건문이 중첩되었다고 한다.
  • 중첩의 개수는 제한이 없다. 하지만 많이 중첩되면 프로그램의 수행 능력이 떨어지고 프로그래머가 이해하기도 어렵다.

중첩된 if문

다음 예제를 보자,

  • 이 에제는 2015년 12월 31일에서 1을 증가시켰을 때, 연도와 월이 조건에 따라 함꼐 변경되는 예제다.
  • 31일에서 1일을 증가 시키면, 32일이 없기 때문에, 월을 증가시켜야 하고, 32일은 1로 변경해야된다.
  • 12월에서 한 달을 증가시키면, 13월이 되는데 13월은 존재하지 않기 때문에 연도를 1년 증가시키고 13월을 1월로 변경하는 과정을 중첩 if문으로 표현해보자.
int main()
{
	int year = 2015, month = 12, day = 31;
	day++;
	if (day > 31)
	{
		month++;
		day = 1;
		if (month > 12)
		{
			year++;
			month = 1;
		}
	}
	printf("Date : %d년 %d월 %d일 \n", year, month, day);


}

<결과>

<코드 설명>

  • day 값이 31로 지정되었고, day값이 1증가하여 32가 됐다.
  • 조건 수식 day > 31을 비교 연산하면 결과 값이 참이 된다.
  • month 값이 1증가하여 12에서 13으로 변경되고, 조건 수식 month > 12를 비교 연산하면 값이 참이 된다.
  • year 값은 2015에서 1증가하여 2016이 된다.

중첩된 if~else~문

다음 예제를 보자.

#include <stdio.h>


int main()
{

	int score = 95;
	char grade;
	if (score >= 90)
	{
		grade = 'A';
	}
	else {
	
		if (score >= 80)
		{
			grade = 'B';

		}
		else
		{
			if (score >= 70)
			{
				grade = 'C';

			}
			else {
				if (score >= 60)
				{
					grade = 'D';
				}
				else {
					grade = 'F';
				
				}
			}
		}
		}
	printf("당신의 점수는 %d점이고 등급은 %c입니다.", score, grade);
	}

<결과>

<코드 분석>

  • score 값을 95로 지정했기 때문에, score >= 90을 비교 연산하면 참이되어 출력된다.이와 같은 코드를 짧게 만들 순 없을까? -> 할수있다.
  • 복합 문장을 -> 단일 문장으로

<코드>

int main()
{

	int score = 63;
	char grade;
	if (score >= 90) grade = 'A';
	else {
		if (score >= 80) grade = 'B';
		else {
			if (score >= 70) grade = 'C';
			else {
				if (score >= 60) grade = 'D';
				else grade = 'F';
			}
		}
	}
	printf("당신의 점수는 %d이고, 등급은 %c입니다.", score, grade);
}

<결과>

<코드분석>

  • 단일 문장으로 변경한 후 소스 코드를 파악하기 더 편해졌다.
  • if ~ else문은 하나의 문법이기 떄문에 한 개의 문장으로 처리 할 수 있다.
			if (score >= 70) grade = 'C';
			else {<- 중괄호 생략가능
				if (score >= 60) grade = 'D';
				else grade = 'F';
			}<- 중괄호 생략가능
           
  • if~else~문은 단일 문장이기 때문에 이 중괄호의 {}는 생략가능하다.
  • 중괄호 {}를 생략하고 else문에 중첩되어 있던 if~else~문을 정리가능하다.
#include <stdio.h>

int main()
{

	int score = 63;
	char grade;
	if (score >= 90) grade = 'A'; //90점이상
	else 
	if (score >= 80) grade = 'B'; //80점이상
	else 
	if (score >= 70) grade = 'C';//70점이상
	else 
	if (score >= 60) grade = 'D';//60점이상
	else grade = 'F';
	printf("당신의 점수는 %d이고, 등급은 %c입니다.", score, grade);
}

이와 같은 순서를 순서도로 표현하면 이렇다.

if~else if~else 구조에서는 위쪽에서 아래쪽으로 수식의 참 거짓 여부를 판단하고 수행하기 때문에 사용 빈도가 높은 조건 수식을 위쪽에 사용하는 것이 좋다.

<출처 : DO IT C언어 - 김성엽>

profile
아는만큼보인다.

0개의 댓글