' [C/C++] 9강 - 제어문, 조건 관리하기 (if의 사용법)

Programming/C & C++

[C/C++] 9강 - 제어문, 조건 관리하기 (if의 사용법)

mdisprgm 2021. 7. 11. 23:05
728x90

(1) 제어문이란

제어문이란, 프로그램의 흐름을 특정 조건과 함께 관리하는 도구를 말한다.

 

 

입출력과 동시에 프로그램의 기본이 되는 것이 제어문이다.

 

사실 모든 프로그램은 입출력, 조건을 다루는 제어문으로만 이루어진다고 해도 과언이 아니다.

 

다만 그 형태가 조금씩 다를 뿐이다.

 

그만큼 제어문을 잘 다룰 수 있어야하고 제어문을 잘 다룬다면 더 좋은 알고리즘을 따를 수 있을 것이고, 이는 곧 프로그램의 성능과도 직결되는 문제이다.

 

대충 제어문이 중요한 이유를 주절댔으니 이제 본격적으로 알아보자

 

(2) 제어문의 종류

기본적으로 제어문은 크게 두 종류로 나뉜다.

 

1. 조건에 따라 코드를 실행함, 조건문

2. 조건에 따라 코드를 반복 실행함, 반복문

 

이중 이번 강좌에서 다룰 것은 1번, 조건에 따라 코드를 실행하는 조건문 if이다.

(2번에 해당하는 while과 for에도 조건은 포함되지만 반복문이라고 불린다)

 

if의 사용법은 다음과 같다.

if(조건1) {
	//조건 1이 참일 경우 실행할 코드
}
else if (조건1이 거짓일 경우 다시 비교할 조건2) {
	//조건2가 참일 경우(조건1은 거짓이면서) 실행할 코드
}
else {
	//조건1과 조건2가 모두 거짓일 경우 최후의 수단으로 실행할 코드
}

 

 

저 조건들은 관계 연산자로 생성할 수 있고, 그 종류는 아래와 같다. 반환값은 모두 참/거짓이다.

연산자 용도
== 왼쪽 값과 오른쪽 값이 같은가
!= 왼쪽 값과 오른쪽 값이 같지 않은가
> 왼쪽 값이 오른쪽 값보다 큰가
< 왼쪽 값이 오른쪽 값보다 작은가
>= 왼쪽 값이 오른쪽 값보다 크거나 같은가
<= 왼쪽 값이 오른쪽 값보다 작거나 같은가

== 연산자 대신 = 를 사용하는 것은 흔히들 하는 실수인데

 

두 연산자는 완전 다른 연산자이므로 헷갈리지 않도록 주의하자. 

 

이걸 활용하면 이렇게 할 수 있다.

#include <stdio.h>

int main() {
	int a, b;
	a = 10;
	b = 20;

	if (a > b) {
		printf("a는 b보다 크다\n");
	}
	else if(a < b) {
		printf("a는 b보다 작다\n");
	}
	else {//작지도 않고 크지도 않다면 같을 것이므로 else
		printf("a와 b는 같다\n");
	}
	//즉 이런 식으로도 할 수는 있다
	/*
	else if (a==b) {
		printf("a와 b는 같다");
	}
	*/
}

 

여기서 a = 10, b = 20 이므로 출력은 "a는 b보다 작다"가 나올 것이다.

 

printf말고 다른 코드를 넣어봐도 좋다. 강좌에서는 불필요하다고 판단하여 생략한다.

 

 

물론 if를 제외한 else와 else if는 생략할 수도 있고, 그중에서 else if는 여러 번 쓸 수 있으며

 

else는 단 한 번만 가능하다. 

#include <stdio.h>

int main() {
	int a = 2;

	if (a == 1) {
		printf("a는 1입니다\n");
	}
	else if (a == 2) {
		printf("a는 2입니다\n");
	}
	else if (a == 3) {
		printf("a는 3입니다\n");
	}
	else {
		printf("a의 값을 알 수 없습니다\n");
	}
}
▼ 여담

이게 공식적으로 맞는 내용인지는 모르겠으나

C에서는 if와 else만 지원한다고 필자는 생각한다 (else if는 없음)

그저 else 가 또 다른 if를 실행하는 것이다.

 

반면 파이썬 언어에서는 elif 라는 별도의 키워드가 존재한다.

 

또한 if 안에서 또 if를 사용하는 것도 가능하다.

 

a, b 수에 따라 다른 연산을 거친 결과를 산출하는 코드이다.

#include <stdio.h>

int main() {
	int a = 4, b = 7;
	int result = 0;

	if (a % 2 == 1)/*2로 나눈 나머지가 1, 즉 홀수라면 */ {
		if (b % 2 == 1) {//b가 홀수라면
			result = a + b;//더하기
			printf("a + b = %d\n", result);
		}
		else {//b가 홀수 아니면 무조건 짝수
			result = a - b;//빼기
			printf("a - b = %d\n", result);
		}
	}
	else {//a가 짝수이면서
		if (b % 2 == 1) {//b가 홀수면
			result = a * b;//곱하기
			printf("a * b = %d\n", result);
		}
		else {//b가 짝수면
			result = a * b * 2;//곱의 두 배
			printf("a * b * 2= %d\n", result);
		}
	}
}

이 코드에선 a = 4, b = 7로 짝수 + 홀수 조합이므로 두 수의 곱이 나올 것이다.

 

여러 줄의 코드도 가능하다는 것을 보이기 위해 result 변수를 추가하였는데

 

만약 if-else로 실행되는 코드가 한 줄이라면? { } 가 생략이 가능하다.

#include <stdio.h>

int main() {
	int a = 10;
	if (a == 10) printf("a는 10입니다\n");//실행할 코드가 printf 하나이므로
	else printf("a는 10이 아닙니다\n");//중괄호 삭제 가능
	//else if(a != 10) printf("a는 10이 아닙니다\n");
}

 

 

다음 강좌에서는 제어문에서 사용되는 또 다른 연산자인 논리 연산자에 대해서 알아볼 것이다.

728x90

'