프로그래밍/C

C언어 조건문(if, switch, 3항 연산자)

swedu 2023. 1. 3. 19:59
728x90
반응형

20231.3  최초 작성

 

 

어떤 조건(상황)에 따라 선택을 다르게 해야 할 때가 있다. C언어에서는 세 가지 조건문을 활용할 수 있다.

 

첫 번째는 연산자에서 다루었던 3항 연산자이다.

 

조건식 ? 참일 경우 선택 : 거짓일 경우 선택

 

물음표(?)를 기준으로 조건식판단을 구분하고 판단은 콜론(:)을 기준으로 참일 경우거짓일 경우의 선택으로 구분한다.

 

조건식에 무엇이 올 수 있는지는 명확하다. 한 가지 유일한 기준만 생각하면 된다.

결과가 참 또는 거짓이어야 한다. C언어에서는 숫자 0을 거짓으로 그 외의 모든 숫자는 참으로 인식한다. 그리고 널 문자(‘\0’, NUL, NULL)는 거짓으로 그 외의 모든 문자는 참으로 인식한다.

 
#include <stdio.h>
void main() {
	int a = -10;
	int b = a > 0 ? a : 0;
	printf("%d", b);
}

위 코드는 a의 값이 0보다 크면 a를 선택하고 0보다 작으면 0을 선택하여 b에 대입한다. ab에 대입하면서 b에 최소한 0 이상의 값을 넣고자 할 때 3항 연산자를 이용한 예제이다.

 

 

두 번째 조건문은 if이다.

if 조건문에서 괄호 안에 조건식은 3항 연산자의 조건식과 같은데 한 가지 유일한 기준인 조건식의 결과가 참 또는 거짓이면 된다.

 

시작은 if로 시작하고 필수로 1개 사용이다.

else if는 선택 사항으로 0개 이상 사용 가능하고, 위의 조건식이 거짓 일 경우만 아래 조건식이 실행된다.

마지막으로 위의 모든 조건식이 거짓일 때 else를 실행하는데 선택 사항으로 안 쓰거나 1개만 쓸 수 있다.

 

[그림1] if 조건문

 

#include <stdio.h>
void main() {
	int a = 3;
	if (a > 0) {
		printf("a는 0보다 크다\n");
	}else if(a > 1){
		printf("a는 1보다 크다\n");
	}else if (a > 2) {
		printf("a는 2보다 크다\n");
	}
	puts("--------------------------");
	if (a > 0) {
		printf("a는 0보다 크다\n");
	}
	if (a > 1) {
		printf("a는 1보다 크다\n");
	}
	if (a > 2) {
		printf("a는 2보다 크다\n");
	}
}

위 코드에서 if 문은 총4이다.

 
 
 

세 번째 조건문은 switch이다.

 

아래 코드는 월을 입력받아 계절을 출력하는 예제이다.

#include <stdio.h>
void main() {
	int month;
	printf("몇월 인가요?");
	scanf("%d", &month);
	switch (month) {
	default:   // 선택 사항
		printf("잘못입력하였습니다. 1~12월을 입력하세요.");
		break; // break를 만나면 멈춘다.
	case 12:
		printf("12월 입니다.\n");
		// break를 만나지 않으면 아래로 내려간다.
	case 1:
		printf("1월 입니다.\n");
		// break를 만나지 않으면 아래로 내려간다.
	case 2:
		printf("2월 입니다.\n");
		printf("겨울입니다.\n");
		break; // break를 만나면 멈춘다.
	case 3: printf("3월 입니다.\n");
	case 4: printf("4월 입니다.\n");
	case 5: printf("5월 입니다.\n");
		printf("봄입니다.\n");
		break;  // break를 만나면 멈춘다.
	case 6: printf("6월 입니다.\n");
	case 7: printf("7월 입니다.\n");
	case 8: printf("8월 입니다.\n");
		printf("여름입니다.\n");
		break; // break를 만나면 멈춘다.
	case 9: printf("9월 입니다.\n");
	case 10: printf("10월 입니다.\n");
	case 11: printf("11월 입니다.\n");
		printf("가을입니다.\n");
		break; // break를 만나면 멈춘다.
	}
}
 

 

switch의 괄호 안에는 조건식이 들어가는데 if문과 다른 것은 결과가 무조건 정수이다. switch 문은 조건식과 일치하는 case를 찾는 것인데 case by case로 해야 할 일을 정의하는 것이다.

 

switch 문의 조건식에 정수만 들어가면 된다. C언어에서는 참과 거짓도 10으로 표현하므로 if문에서 사용한 조건식은 다 되고 문자도 가능하다. C언어에서 문자는 아스키코드를 사용하기 때문이다.

 

만약 switch 안의 정수 month1이면 case 1: 에 가서 break를 만날 때까지 아래로 쭉 내용을 실행한다. 그래서 switch문에서 break의 역할이 중요하다.

 

default는 해당하는 case가 없을 때 적용할 내용을 정의하는데 선택 사항이다. if문의 마지막에 있는 else와 같은 의미이지만 다른 점은 꼭 마지막에 있을 필요는 없다.

 

대부분의 프로그래밍 교재에서는 default를 맨 마지막에 넣고 있는데 위치에 대한 별다른 설명이 없다면 아무 의심 없이 if문의 else처럼 마지막에 있어야 한다고 생각하는 경우가 있다. 하지만 문제를 해결하는 능력과 창의력을 키우고 싶다면 배운 내용을 고민 없이 사용하는 것보다는 분석하고 실험하는 자세가 중요하다.

 

 

 
728x90
반응형

 

728x90
반응형