프로그래밍 언어/C언어

C언어 6. 조건문

닉네임못짓는사람 2020. 7. 11. 15:10
반응형

이번 글에서는 C언어에서 사용하는 조건문에 대해서 알아보겠습니다.

조건문이란?


조건문은 프래그래머가 조건을 정해서 그에 맞게 코드를 실행시킬 수 있도록 해줍니다.

조건문은 프로그래밍에 있어서 절대로 빠지면 안 되는 요소인데,

왜냐면 조건문이 없다면 프로그램은 언제나 같은 결과만을 반복하게 되기 때문에

사용자의 조작에 따라 능동적으로 동작하는 프로그램을 만들 수 없기 때문이죠.

 

그러면 이런 중요한 조건문을 사용하는 방법에는 어떤 것들이 있을까요?

C언어에서는 if문과 switch문 두 가지를 사용합니다.

if문


먼저 if문부터 소개하겠습니다. if문의 기본적인 문법은 다음과 같습니다.

if (조건) {
	실행할 코드
}
else {
	실행할 코드
}

위에서 보시면 if뒤의 소괄호 안의 조건이 True이면 그 뒤의 중괄호 안의 코드를 실행하고,

그 외의 모든 경우에는 else뒤에 있는 중괄호 안의 코드를 실행합니다.

여기서 조건은 저번 글에서 알아보았던 비교 연산자 등을 사용해서 True, False값을 사용합니다.

 

예를 들어 변수 a에 대해서 a >= 5, a == 50, a <= 10 라면 이는 결과적으로

값이 순서대로 1, 1, 0으로 계산되서 사용됩니다.

1을 써놓으면 무조건 True, 0은 무조건 False라는 건 이미 설명했으니 충분히 아실 거라 생각됩니다.

 

간단하게 코드로 예시를 들어보겠습니다.

#include<stdio.h>

int main() {
	int a = 5;
	if (a == 5) {
		printf("a = 5입니다.");
	}
	else {
		printf("a = 5가 아닙니다.");
	}
}

기본적인 사용법은 위와 같습니다.

a의 값을 바꿔보시면 5이외의 모든 숫자일 때 else뒤의 중괄호 안의 코드가 실행되는 걸 알 수 있을 겁니다.

또한 else는 생략 가능하며, 실행할 코드가 한 줄이면 중괄호를 생략할 수 있습니다.

 

AND, OR, NOT


그런데 조건을 지정할 때 조건이 꼭 하나라고는 할 수 없을 것입니다.

예를 들어 변수 a에 대해서 50 이하인 짝수일 때만 지정한 코드를 실행하고 싶을 때라거나

혹은 50이하이거나 짝수일 때, 또는 위의 조건이 True가 아닐 때 코드를 실행하려면 어떻게 해야 할까요?

 

그 방법은 바로 논리 연산자 AND(&&), OR(||), NOT(!)을 사용하는 것입니다.

두 조건에 대해서 둘 다 True일 때 실행하고 싶다면 AND, 둘 중 하나라도 Ture일 때 실행하고 싶다면 OR,

또는 조건이 True가 아닐 때, 즉 False일 때 실행하고싶다면 Not을 사용하면 됩니다.

 

코드로 예시를 들어보겠습니다.

#include<stdio.h>

int main() {
	int a = 41;
	if (a <= 50 && (a % 2) == 0) {
		printf("50 이하이면서 짝수\n");
	}

	if (a <= 50 || (a % 2) == 0) {
		printf("50이하이거나 짝수\n");
	}

	if (!((a % 2) == 0)) {
		printf("a는 짝수가 아닙니다.\n");
	}
}

위의 코드는 3개의 if문을 사용해서 a가 50보다작고 짝수이면 첫 번째 if문 내의 코드를 실행하고

a가 50보다 작거나 짝수 둘 중 하나만 True이면 두 번째 if문의 코드를 실행합니다.

세 번째 if문은 a가 짝수가 아니면 중괄호 내의 코드를 실행합니다.

그리고 if문의 소괄호 안에서 수식을 사용하고 싶을 땐 그 안에서 다시 소괄호로 묶어주시면 됩니다.

 

else if


또한 if문에는 else if라는 것이 존재하는데, 한 if문 안에서 여러 개의 상황을 검사하고 싶을 때 사용합니다.

 

기본적 구조는 다음과 같습니다.

if (조건1) {
	실행할 코드
}
else if (조건2) {
	실행할 코드
}
else if (조건3) {
	실행할 코드
}
else {
	실행할 코드
}

이것이 위에서 사용한 if문을 여러 개 쓰는것과 다른 게 뭐냐고 생각하실 수도 있는데, 큰 차이가 있습니다.

if문을 여러개 사용하는 경우에는 모든 if문을 검사하지만 else if문을 사용할 시에는

첫 번째 if문을 검사하고 조건이 True이면 뒤의 else if의 조건은 보지도 않고 넘어가게 됩니다.

또는 첫 번째 조건이 False이고 두 번째 조건이 True라면,

마찬가지로 뒤의 else if조건은 검사하지도 않습니다. 당연히 코드도 실행하지 않겠죠.

 

많이 사용되는 예시는 점수에 따라 성적을 A, B, C, D로 구해주는 프로그램을 구현하는 것입니다.

코드를 통해서 사용법을 확인해보도록 하겠습니다.

#include<stdio.h>

int main() {
	int grade;
	scanf("%d", &grade);

	if (grade >= 90) {
		printf("성적은 A입니다.");
	}
	else if (grade >= 80) {
		printf("성적은 B입니다.");
	}
	else if (grade >= 70) {
		printf("성적은 C입니다.");
	}
	else if (grade >= 60) {
		printf("성적은 D입니다.");
	}
	else {
		printf("성적은 F입니다.");
	}
}

위의 코드는 grade변수에 사용자로부터 점수를 입력받아 90점 이상이면 A,

90미만 80이상은 B, 80미만 70이상은 C, 70미만 60이상이면 D, 그 외는 F를 출력하는 프로그램입니다.

성적이 A이면 뒤의 else if와 else는 모두 무시하는 것을 직관적으로 알 수 있을 것입니다.

 

중첩 if문


또한 if문 안에 또 if문을 사용할 수도 있는데, 이것을 중첩 if문이라고 이야기합니다.

위의 코드를 변경해서 성적이 A이고, 점수가 95이상이면 A+를 출력하도록 해보겠습니다.

#include<stdio.h>

int main() {
	int grade;
	scanf("%d", &grade);

	if (grade >= 90) {
		if (grade >= 95) {
			printf("성적은 A+입니다.");
		}
		else {
			printf("성적은 A입니다.");
		}
	}
	else if (grade >= 80) {
		if (grade >= 85) {
			printf("성적은 B+입니다.");
		}
		else {
			printf("성적은 B입니다.");
		}
	}
	else if (grade >= 70) {
		if (grade >= 75) {
			printf("성적은 C+입니다.");
		}
		else {
			printf("성적은 C입니다.");
		}
	}
	else if (grade >= 60) {
		if (grade >= 65) {
			printf("성적은 D+입니다.");
		}
		else {
			printf("성적은 D입니다.");
		}
	}
	else {
		printf("성적은 F입니다.");
	}
}

코드를 변경하면서 사용법을 숙지해두시길 바랍니다.

 

switch~case


그럼 다음은 switch조건문에 대해서 알아보도록 하겠습니다.

이는 주로 switch case문이라고 이야기하는데, 위의 if문과는 사용법이 조금 다릅니다.

switch문은 기본적으로 if문으로 대체가 가능하기 때문에 저도 많이 사용하진 않지만

특정한 조건에서는 더 편하게 사용할 수 있기 때문에 사용법을 잘 알아두면 유용할 거라고 생각됩니다.

switch (정수형변수) {
	case 값1:
		실행1;
		break;
	case 값2:
		실행2;
		break;
	case 값3:
		실행3;
		break;
	default:
		실행_그외;
		break;
}

기본 구조는 switch뒤의 소괄호 안에 정수형 변수명을 입력하고 그 값에 따라서 코드를 실행합니다.

주의할 점은 case뒤에 쓰는 값은 정수, case줄을 끝마칠 때 쓰는 것은 세미콜론(;)이 아닌 콜론(:)입니다.

또한 else if문과 동일하게 하나의 case가 일치하면 뒤의 코드를 실행하고 뒤의 case는 검사하지 않습니다.

이는 case블록 안에 있는 break때문인데요,

이 break을 만나게 되면 switch문은 뒤에 어떤 코드가 있던 바로 switch문을 종료합니다.

 

코드를 통해서 어떻게 사용하는지 알아보도록 하겠습니다.

#include<stdio.h>

int main() {
	int a = 5;
	
	switch (a) {
		case 0:
			printf("a = 0입니다.");
			break;
		case 1:
			printf("a = 1입니다.");
			break;
		case 2:
			printf("a = 2입니다.");
			break;
		case 3:
			printf("a = 3입니다.");
			break;
		case 4:
			printf("a = 4입니다.");
			break;
		default:
			printf("a는 0,1,2,3,4가 아닙니다.");
			break;
	}
}

지금까지 C언어에서 사용하는 조건문에 대해서 알아보았는데요,

조건문은 프로그래밍 내에서 정말 정말 중요한 역할을 하기 때문에 사용법을 꼭 잘 숙지해두시길 바랍니다.

다음 글에선 반복문에 대해서 알아보도록 하겠습니다.

반응형

'프로그래밍 언어 > C언어' 카테고리의 다른 글

C언어 8. 계산기 프로그램  (0) 2020.07.12
C언어 7. 반복문  (0) 2020.07.11
C언어 5. 입출력  (0) 2020.07.10
C언어 4. 연산자  (0) 2020.07.10
C언어 3. 자료형  (0) 2020.07.09