본문 바로가기
C언어 공부

06. 조건문, 논리연산자, 관계연산자

by 나노다 2024. 10. 14.

조건문

[전체 코드]

#include <stdio.h>
int main() {
	int num;
    
    printf("숫자 입력 : ");
    scanf("%d", &num);
    
    if (num == 7) {
    	printf("행운의 숫자! \n");
    } else if (num == 7) {
    	printf("럭키 세븐 \n");
    } else if (num == 4) {
    	printf("죽음의 숫자... \n");
    } else {
    	printf("그냥 숫자. \n");
    }   
    return 0;
}

 

[if문]

if (/* 조건 */) {
	/* 명령; */
}
  • 조건이 참일 때(조건 값 = 1), 명령을 실행함. 거짓이면(조건 값 = 0) 아무 일도 안 하고 중괄호 다음으로 넘어감.

[else if문]

if (/* 조건1 */) {
	/* 명령1; */
} else if (/* 조건2 */) {
	/* 명령2; */
}
  • 조건1이 거짓이라 if문을 지나친 후에, 조건2가 참이라면 명령2를 실행함.
  • 만약 조건1이 참이라면 명령1을 실행한 후 else if문은 무시.

[else문]

if (/* 조건1 */) {
	/* 명령1; */
} else if (/* 조건2 */) {
	/* 명령2; */
} else if (/* 조건3 */) {
	/* 명령3; */
} else {
	/* 명령4; */
}
  • else문 이전의 조건이 모두 거짓인 경우, 명령4를 실행함.
  • 도중에 조건이 하나라도 참이면 그 조건문의 명령을 실행하고 이후의 else if문들이나 else문은 무시.

 

관계 연산자

  • 좌변과 우변의 두 값 간의 관계를 연산하고, 참이면 1을, 거짓이면 0을 출력.
  • ==, !=, >=, <=, >, <

 

논리 연산자

[&& 논리 곱]

if (a >= 10 && a < 20) {
	printf("correct!")
}
  • && : 두 조건이 모두 참이면(두 조건의 값이 모두 1이면) True(1을 출력). 하나라도 거짓이면 False(0을 출력)

[|| 논리 합]

if (a < 10 || b < 20) {
	printf("correct!")
}
  • || : 두 조건 중 하나라도 참이면(적어도 한 조건의 값이 1이면) True(1을 출력). 둘 다 거짓이어야 False(0을 출력)

[! 반전]

if (!(a < 10)) {
	printf("correct!")
}
  • ! : 감싼 조건의 값을 참이면 거짓으로, 거짓이면 참으로 반전시킴(0이면 1로, 1이면 0으로)
if (!a) { // a == 0 과 같은 의미
}
  • 0이 아닌 값을 0으로 변환해주는 특성을 활용해, 어떤 변수의 값이 0인지 아닌지 판별하는 조건에 활용하기도 함.

 

생각해보기

  • 컴퓨터 연산에선 어떤 수든 그것을 0으로 나누는 행위가 금지돼있음.

[SCE, Short Circuit Evaluation]

if (a >= 10 && a < 20) {
	/* 명령; */
}
  • 한 조건식만 확인했는데 이미 전체 결과가 정해진 경우, 컴퓨터는 불필요한 연산을 줄이기 위해 굳이 다음 조건식을 확인하지 않음.
  • 위 코드의 경우 만약 변수 a가 10보다 작다면 첫 조건이 거짓이 되고, 모든 조건이 참이어야하는 &&연산 결과가 이미 0이 되므로, 다음 조건인 a < 20은 확인하지 않게 됨.